Las Cadenas De Texto En .NET

2 02 2009

En cada buen libro que he leido sobre .NET Framework o sobre los lenguajes de programación de .NET (C#, VB.NET, J#), siempre hay una sección especialmente dedicada a las cadenas de texto o strings ( System.String). La razón para esto es que esta clase tiene un comportamiento un tanto especial.

1. Tipos Por Valor vs. Tipos Por Referencia

Los String son un tipo por referencia ya que hereda de System.Object. Para poder asignar una cadena de texto a un objeto de tipo System.String se puede usar la siguiente sintaxis simplificada:


string miCadena = "¡Hola Mundo!";

Si intentamos hacer algo como: string miCadena = new string ("¡Hola Mundo!"); no funcionará – en realidad, ni siquiera compilará porque el constructor de la clase string no está sobrecargado para aceptar una cadena de texto como parametro. En vez de eso, otra manera de crear un objeto de tipo string es:


char[] caracteres = {'a','b','c'};
string miCadena = new string(caracteres);
// Creará un objeto de tipo string conteniendo "abc"

Así, si consideramos como es asignado el valor al objeto, system.String podría ser considerado con un tipo por valor.

Otra situación distinta es cuando System.String es un parametro para algún metodo. Los tipos por valor en .NET pueden ser pasados por valor o por referencia (usando la palabra clave ref). En cambio, los tipos por referencia son siempre pasados por referencia. En el código de abajo, el parametro del metodo “ActualizarValor” es un entero (un tipo por valor).


static void Main(string[] args)
{
int miValor = 10;
ActualizarValor(ref miValor);
Console.WriteLine("Mi valor: {0}", miValor);
}
static void ActualizarValor(ref int valor)
{
valor = 20;
}

Si cambiamos el código reemplazando el tipo por valor con el tipo por referencia System.String, obtendremos el mismo resultado: la variable miValor será diferente – la cadena “Nuevo Valor” será mostrada en pantalla -.


static void Main(string[] args)
{
string miValor = "Valor Actual";
ActualizarString(ref miValor);
Console.WriteLine("Mi valor: {0}", miValor);
}
static void ActualizarString(ref string valor)
{
valor = "Nuevo Valor";
}

Si omitimos la palabra clave “ref” de la llamada al método y también de la definición del parametro del método, entonces la salida será el valor contenido en la variable antes de llamar al método: “Valor Actual”. Así, la pregunta es por qué System.String es un tipo por referencia cuando se comporta como un tipo por valor. Y la respuesta es un poco más compleja. Muchos lenguajes de programación (incluyendo Java, C#) consideran las cadenas de texto como un tipo primitivo, y por lo tanto el compilador lo trata como tal. Nuevamente, por qué es System.String un tipo por referencia? Principalmente porque hereda de System.Object, y por lo tanto en memoria, existe bajo el Heap (el Heap es el área de la memoria donde son almacenados todos los tipos por referencia) y no bajo el Stack(que es donde todos los tipos por valor van a parar).

2. System.Intern

El CLR (Common Language Runtime) internamente crea una tabla de Hash (también llamada “piscina interna” o “intern pool”) donde todos los strings declarados en una aplicación son guardados. El comportamiento de estos strings que son declarados en la aplicación es diferente de una versión a otra del Framework .NET, y por lo tanto no hay que confiar que los strings declarados son automaticamente “internados” (o sea agregados a la tabla de Hash interna). Sin embargo, se puede tener la certeza que todos aquellos para los que el método String.Intertn fue usado están ya agregados a esa tabla.

la clave de la tabla de Hash es el valor del string, y el valor es la referencia al(los) objecto(s) de tipo String. La forma de agregar los strings a la tabla de Hash es mediante una llamada al método System.Intern(string s). Llamando a este método, el CLR revisa si ya hay un string identico en la tabla. Si alguna entrada es encontrada, entonces el método retorna la referencia al string existente. Si ninguna entrada es encontrada, entonces el CLR crea una copia del string la cual es agregada a la tabla de Hash interna y la referencia a la copia es retornada. Otro método relacionado el porceso de internación de los strings es String.IsInterned(string s). Y aunque el nombre del método parece querer decir que el valor de retorno es un valor Booleano, no es así. El tipo que este método retorna es un string, y la lógica es la siguiente: Si el string que está siedo pasado en el método existe en la tabla de Hash interna, entonces el método retorna una referencia a ese objeto. De otro modo, el método retorna null, vale la pena aclarar que el string no es agregado a la tabla de Hash interna si no existe.

También hay una diferencia entre las referencias a objetos de tipo string que existen el Heap y aquellos que están en la tabla de Hash interna de manera que no todos los strings están en la tabla de Hash interna.


string cadena1 = "¡Hola Mundo!";
string cadena2 = "¡Hola Mundo!";
Console.WriteLine("Las refencias son iguales: {0}",
Object.ReferenceEquals(cadena1, cadena2));


string cadena3 = String.Intern("¡Hola Mundo!");
string cadena4 = String.Intern("¡Hola Mundo!");
Console.WriteLine("Las refencias son iguales: {0}",
Object.ReferenceEquals(cadena3, cadena4));

En el primera caso (cadenas 1 y 2), el Framewoek .NET puede agregar los strings a la “piscina interna”. Eso dependerá de la versión del framework y también de la configuración/parametros del compilador. Por lo tanto, el resultado puede ser diferente dependiendo de la plataforma y configuraciones. En el segundo caso, sin embargo, el resultado será siempre el mismo: el método ReferenceEquals retorna ‘true’ porque las cadenas de texto son agregadas a la “piscina interna”. Hasta ahora, hemos visto que el tipo System.String es un tipo por referencia, y en la segunda situación, cadena3 y cadena4 apuntan a la misma referencia(dirección de memoria en el Heap). La pregunta que puede surgir aquí es: ¿qué pasará si cambio el valor de cadena4, cadena3 cambiará también? Y la respuesta es “NO”, para ser más preciso, “No Realmente”.

3. Los Strings son Inmutables

En el mundo de la Programación Orientada a Objetos, un objeto es inmutable es aquel que no puede ser modificado una vez que es creado. Este coportamiento de los strings es lo que hace el proceso de internación posible. Teniendo que los strings son inmutables, una copia de la referencia puede ser creada en vez de copiar todo el objeto. Por lo tanto, multiples objetos pueden apuntar a la misma cadena de texto. Pero, la inmutabilidad no significa que la memoria donde el objeto esta almacenado sea sólo de lectura. Lo que realmente significa es que por abajo el Framework .NET se asegura que no se pueda cambiar el valor de la cadena de texto (o al menos no cuando se trabaja con código manejado/código seguro).


Linea 1: string cadena1 = String.Intern("ABC");
Linea 2: string cadena2 = String.Intern("ABC");
Linea 3: cadena2 = cadena2.ToLower();

En la Linea 1 se agrega la cadena “ABC” a la piscina interna, y retorna la referencia al objeto cadena1. En la Linea 2 se intenta agregar la cadena “ABC” a la piscina interna, pero en este caso, de acuerdo con la documentación de .NET, “ABC” no está agregado ya que existe. A su vez, la misma referencia es retornada al objeto cadena2. Hasta ahora, ambos objetos apuntan a la misma cadena ya que apuntan a la misma referencia. Lo más interesante viene en la linea 3. Aquí, el método “ToLower()” hace lo siguiente: crea una nueva cadena y lo pobla con “abc”. La referencia a la cadena es retornada, y ahora el objeto cadena2 apunta a una nueva posición de memoria. Hay que notar que no significa que la posición de memoría que contiene la cadena “ABC” fuera sobreescrita con el valor “abc”. Por lo tanto, ahora tenemos que cadena1 aun apunta a “ABC” y cadena2 apunta a “abc”. Esta presunción es buena y válida cuando estamos en el contexto de código manejado/código seguro. Si estamos trabajando con código no manejado, necesitareos ser muy cuidadosos al hacer operaciones sobre strings. Como mencioné arriba, la posición de memoria donde está almacenada la cadena no es sólo de lectura, y por lo tanto puede ser sobreescrita si escribimos un código que haga eso. Y con el código no manejado, es posible hacerlo.


static void Main(string[] args)
{
string cadena1 = String.Intern("Esto no puede ser cambiado");
string cadena2 = String.Intern("Esto no puede ser cambiado");
int tamañoBuffer = cadena1.Length;
GetUserName(cadena1, ref tamañoBuffer);
Console.WriteLine("La segunda cadena: {0}",cadena2);
}
[DllImport("Advapi32", CharSet = CharSet.Unicode)]
static extern bool GetUserName(
[MarshalAs(UnmanagedType.LPWStr)] string userName, ref int bufferLength);

Si ejecutamos el código de arriba, el siguiente mensaje desplegado en la consola (NombreUsuario es el nombre de usuario en tu PC): “La segunda cadena : NombreUsuario no puede ser cambiado”.
la esplicación es, Declaramos cadena1 y cadena2, y nos aseguramos que apunten a la misma cadena usando el método String.Intern(string s). A continuación, un trozo de código no manejado/inseguro es llamado: GetUserName desde “Advapi32.dll”. Lo que pasa durante la llamada a este método es la parte interesante: al método se le pasa uno de los strings declarados, y dado que el código no manejado no sigue las reglas del código manejado respetando las reglas de la inmutabilidad de los strings, escribe la respuesta actual a la posición de memoria a la cual apunta cadena1. Pero en el mundo manejado, el objeto cadena2 también apunta a la misma posición, y por lo tanto el contenido de la cadena es cambiado.





UAC en Windows 7

30 01 2009

Una de las nuevas caracteristicas de Windows 7 es la capacidad de finalmente poder configurar la User Account Control (UAC), esa infame y molesta ventanilla introducida en Windows Vista para mejorar la seguridad.

Como Windows no puede diferenciar entre un usuario haciendo click sobre un botón y un programa haciendo click sobre un botón, la UAC fue implementada inicialmente para siempre advertir al usuario via una ventana de dialogo mostrada en un Escritorio Seguro (Secure Destop), similar a la pantalla de inicio de sesión, sobre cualquier cambio en la configuraión del sistema.

Windows 7, sin embargo, ahora incluye la posibilidad de configurar UAC para ocultar estos – molestos a veces – avisos cuando los usuarios cambien configuraciones de Windows. Mientras que este modo aun asegura que las aplicaciones normales no puedan sobreescribir completamente alguna llave del registro, Microsoft ha permitido que los usuarios cambien cualquier configuración de Windows sin ningún aviso advirtiendo de aquello. Sí, incluso se puede cambiar la configuración de UAC – desactivar – de tal modo que Windows no advierta nunca al usuario de estos cambios que se están llevando a cabo en el sistema =O – en realidad en Windows Vista también se puede desactivar, pero nadie lo hace extrañanamente xD -, permitiendo así a las aplicaciones “reinar libremente” en el “modo elevado”.

Pero ¿qué tan dificil es pasar por alto o en otras palabras desactivar la UAC para afectar de alguna forma el normal funcionamiento de Windows?. Windows distingue entre un programa modificando la configuración del sistema y el mismo Windows modificando la configuración mediante un certicado de seguridad. Las aplicaciones que pueden cambiar la configuración del sistema están firmadas con un certificado especial de seguridad. Así, las distintas opciones dentro del panel de control de Windows están, de hecho, firmadas con este certificado y por lo tanto no advierten al usuario si este cambia alguna configuración del sistema.

El talón de Aquiles de todo esto, es que cambiando la configuración del UAC también estamos “cambiando la configuración de Windows”, y de acuerdo al nuevo nivel de seguridad de UAC, Windows no advertirá de tal cambio. Incluso el desactivar por completa la UAC no producirá ninguna advertencia al usuario de tal acción. Así un simple script o programa desarrollado en algún lenguaje puede acceder a desactivar por completo y sin que el usuario sepa la UAC mediante el uso de algunos metódos como SendKeys,Run

El código puede ser visto en withinwindows

Hasta ahora la explicación dada por Microsoft ha sido que esta es una caracteristica hecha “por diseño” y que no será cambiada por ahora. Una solución obvia para esto sería forzar el ajuste de la configuración de la UAC fuera confirmado por el usuario mediante el ingreso de la contraseña de administrador tal como ocurre en Linux o simplemente mantener la configuración del UAC en su valor por defecto o no desactivarla completamente para evitar problemas.

En Windows Vista para desactivar/activar la UAC podemos crear 2 archivos .bat.

Para desactivar la UAC:

Usamos un editor de texto simple como notepad o notepad2, creamos un nuevo archivo de texto y escribimos:


%windir%\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
pause

  • Guardamos el archivo como:
      Tipo : Todos los archivos
      Nombre: DesactivarUAC.bat
      Click derecho sobre el archivo y seleccionamos “ejecutar Como Administrador”
      Reiniciamos Windows
  • Para activar la UAC:

    Creamos un nuevo archivo de texto y escribimos:


    %windir%\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 1 /f
    pause

  • Guardamos el archivo como:
      Tipo : Todos los archivos
      Nombre: ActivarUAC.bat
      Click derecho sobre el archivo y seleccionamos “ejecutar Como Administrador”
      Reiniciamos Windows




  • Why I don’t Like Linux

    28 01 2009

    Drivers:
    Many distros, such as Ubuntu do have good “out of the box” support but driver support still lags behind nevertheless. I don’t want to spend time searching for drivers and then typing in tons of commands to get things up and running properly. Sure you can go buy specific hardware that is known to be Linux compatible but isn’t that like having to live with a MAC??!??!!???!!

    Packages:
    Every distro has a package manager. However I cannot keep count of the number of times I have seen how friends installed a package that does not work. Then when They go and search in the forums, They get answers telling them “download this” and “type these commands”. Wait a minute! Shouldn’t it just work without all the run around???? Does anyone realize how annoying and confusing that is for users? To them it looks like an easy way to install new software but then they get a nasty surprise. Folks the average user hates that.

    Command Terminal:
    Look it’s 2009. The public doesn’t want to type in commands. GUI’s have been around for how long? It’s obvious by the success of Windows that users want an easier experience. However in Linux you just can’t get many things done without typing in commands. It’s time consuming. Users want to use their software and do things, not spend time typing commands. Users need something easier and intuative. If you don’t want to give up the need for a terminal fine but don’t complain when the public still prefers Windows and it’s easy GUI that does nearly everything by point and click. If Windows is so bad why is it so popular? If what makes it so popular is something you do not want to offer then all the complaining and comparing is pointless. At that point you might as well just accept that you’re never going to be more popular than Windows, be quite, and play with your Linux quietly.

    Support:
    There are many forums. Some of them are good. Some of them are full of arrogant jerks that just hate Windows and turn off nearly every new Linux user they run into. Regardless, as a new Linux user you spend more time in a forum begging for help than you do actually enjoying Linux. PLUS! If you have a serious problem that keeps you from getting on the internet…..how do you get to the forums? Take a guess…using another system. Isn’t it embarrassing to need to use a Windows system to go onto a forum to get Linux help? Doesn’t that make a statement about Linux?

    Software:
    There are some great packages that shine. However the vast majority is of the same quality as shareware for Windows. I understand that it’s free and I shouldn’t complain but look it either fills a need or it doesn’t. I’m not going to use something crappy just because it’s free.

    Linux fails miserably for 3D gaming. I’ve said it a thousand times and I’ll say it again. If Linux could get a standardized 3D system like DirectX and attract gamers, it’s popularity would skyrocket. There are a few 3D games out there but most of them are hacked ports to Linux that are full of bugs, not to mention that the games are old news. Even if a user is not a big gamer, they still will play a game every once in awhile, and they want something that blows their mind. Linux doesn’t offer that.

    Standardization:
    Microsoft has Linux beat hands down in this area. There are so many Linux distros and each of them are doing their own thing. Linux software is a hodgepodge of different packages that may or may not work with your distro. Windows users hate the fact that there are a handful of Windows versions that require different drivers. Do you honestly think that they’re going to like something with even more variations? There is a point when too much freedom becomes chaos.

    File System and Naming:
    In DOS and Windows, file extensions indicate a purpose. In Linux anything goes. People need some kind of clearly defined order to lead them in the right direction. Furthermore it saves time to immediately recognize a file for what it is or how it’s used.

    Also some of the names given to software and commands are well…..nuts. It’s looks like someone dropped scrabble blocks on the floor and randonly selected letters to name things. Overall we come back to the chaos issue.

    Excuses:
    I’m pretty fed up with the excuses. I’m often told stuff like “Linux isn’t meant for that” or “Linux isn’t trying to be Windows”. Own up to the truth. Linux has serious problems. While it may not be trying to be 100% like Windows, to the eye, it has the same general appearance and there is an OBVIOUS reason for that – users want it. So stop covering up the problems and making excuses when things fail. Linux wants to be better than Windows. It wants to be the more popular OS. It wants to offer all the features that Windows offers.

    Until linux developers and supporters stop hating Windows enough to get inside the heads of Windows users, Linux will NEVER beat Windows. Consumers use what they like. OBVIOUSLY they like Windows more, no matter what excuses are offered. Why in the world would users turn down a free OS for a commercial one unless there are big things they don’t like? Stop trying to tell consumers why they should hate Windows. Instead concentrate on making Linux something that consumers really want. Not what you think they should want.

    The fact is that most computer users are novices. You must cater that crowd to be successful at overtaking Windows. There is no honor in being able to use a more complex operating system. Nobody is impressed. Nobody cares. An operating system should make things easier NOT harder. If Linux devs would face the truth and cater to the needs of the public they might be more successful.

    Here’s the killer for Linux and if devs and hardcore fans could wipe the hatred away front their eyes long enough to see it, they would. At the current rate of development, Windows is better equipped to steal ideas from Linux and put it into an easy to use package. Linux, on the other hand cannot develop quickly enough. Unless devs band together, standardize, and get serious about winning over the public, Linux may never catch up.

    I know some Linux fan is going to say something about how wrong I am but that type of response is at the heart of the problem. You can’t tell a consumer how they should feel or how they should perceive a product. You must adapt to the consumer. If the consumer doesn’t like what you have, then YOU are wrong and you will never convince them otherwise.

    Greetings!





    De aquellos a quienes mucho se les da, mucho se espera.

    10 01 2009

    La traducción – propia – del discurso de Bill Gates a los graduados de Harvard. La versión original en inglés puede ser encontrada aquí

    Presidente Bok, ex presidente Rudenstine, presidente Faust, miembros de la corporacion Harvard y de la junta de supervisores, miembros de la facultad, padres, y especialmente , los graduados:

    He estado esperando más de 30 años para decir esto: “Papá, siempre te dije que volvería y obtendría mi título”

    Quiero agradecer a Harvard por este oportuno honor. Cambiaré mi trabajo el proximo año… y será bueno tener finalmente un título universitario en mi curriculum.

    Aplaudo a los graduados hoy por tomar una ruta mucho más directa a sus títulos. Por mi parte, soy sólo feliz que Crimson me haya llamado “el más exitoso desertor de Harvard”. Supongo que eso me hace valedictorian de mi propia clase… Hice lo mejor de entre todos los que fracasaron.

    Pero también quiero ser reconocido como el tipo que hizo que Steve Ballmer abandonara la escuela de negocios. Soy una mala influencia. Es por eso que me invitaron para hablar en su graduación. Si hubiera hablado en su orientación, muy pocos de ustedes hubiesen estado aquí hoy.

    Harvard fue una experiencia fenomenal para mi. La vida academica era fascinante. Solia sentarme en muchas clases para las cuales ni siquiera me habia inscrito. Y la vida en el dormitorio era sensacional. Viví en Radclife, en la Casa Currier. Siempre habia mucha gente en mi dormitorio hasta muy tarde en la noche discutiendo cosas, porque todos sabian que no me importaba levantarme en la mañana. Así es como me vonvertí en el lider del grupo antisocial. Nos aferrabamos los unos a los otros como una forma de validar nuestro rechazo de todas las personas sociales.

    Radcliffe fue un gran lugar para vivir. Habia muchas mujeres ahi, y la mayoría de los chicos eran del tipo cientificos-matemáticos. Esa combinación me ofreció las mejores probabilidades, si saben a que me refiero. Aquí es donde aprendí la triste lección de que mejorando sus posibilidades no garantiza el éxito.

    Uno de mis más grandes recuerdo de Harvard vino en Enero de 1975, cuando hice una llamada desde la casa Currier a una compañia en Alburquerque que habia comenzadoa fabricar el primer computador personal del mundo. Les ofrecí venderles software.

    Me preocupaba que ellos se dieran cuenta que yo era sólo un estudiante y me colgaran. En vez de eso ellos dijeron: “No estamso listos aún, ven a vernos dentro de un mes”, lo cual fue algo bueno, porque no habiamos escrito el software aun. Desde ese momento, trabajé día y noche en este pequeño proyecto extra academico que marcó el fin de mi educacion universitaria y el comienzo de un notable viaje con Microsoft.

    Lo que recuerdo, sobre todo, acerca de Harvard es estar en el medio de tanta energía e inteligencia. Podría ser estimulante, intimidante, incluso a veces desalentador, pero siempre desafiante. Fue un privilegio increíble – y aunque me fui temprano, fui transformado por mis años en Harvard, las amistades que hice, y las ideas en que trabajé.

    Pero mirando seriamente hacia atras, … Tengo un gran pesar.

    Dejé Harvard, sin verdadera conciencia de las terribles desigualdades en el mundo – las terribles desigualdades de la salud, y la riqueza, y oportunidades que condenan a millones de personas a vidas de desesperación.

    Aprendí mucho aquí en la Universidad de Harvard acerca de las nuevas ideas en la economía y la política. Tengo una gran exposición a los avances realizados en las ciencias.

    Pero los mayores avances de la humanidad no están en sus descubrimientos -, sino en la forma en que esos descubrimientos se aplican para reducir la inequidad. Ya sea a través de la democracia, la educación pública sólida, una atención sanitaria de calidad, o amplia las oportunidades económicas – reducir la desigualdad es el mayor logro de la humanidad.

    Dejé el campus sabiendo muy poco sobre los millones de jóvenes dejados de lados de las oportunidades de educación aquí en este país. Y yo no sabía nada de los millones de personas que viven en la pobreza extrema y las enfermedades en los países en desarrollo.

    Me tomó décadas para averiguarlo.

    Ustedes graduados vinieron a Harvard en un momento diferente. Ustedes saben más acerca de las desigualdades del mundo que las clases que vinieron antes. En sus años aquí, espero que hayan tenido la oportunidad de pensar acerca de cómo – en esta era de la aceleración de la tecnología – podemos finalmente tomar estas desigualdades, y como podemos resolverlos.

    Imagínense, sólo en aras de la discusión, que tuvieran un par de horas a la semana y unos pocos dólares al mes para donar a una causa – y quiseran gastar ese tiempo y dinero donde tuviera el mayor impacto en el ahorro y la mejora de vida . ¿Dónde lo gastarían?

    Para Melinda y para mí, el reto es el mismo: ¿cómo podemos hacer el mayor bien para el mayor número con los recursos que tenemos?

    Durante nuestras discusiones sobre esta pregunta, Melinda y yo leimos un artículo sobre los millones de niños que mueren cada año en los países pobres a causa de enfermedades que habían sido hechas inofensivas hace mucho tiempo en este país. El sarampión, el paludismo, la neumonía, la hepatitis B, fiebre amarilla. Una enfermedad de la que nunca había siquiera oído hablar, rotovirus, estaba matando a medio millón de niños cada año – ninguno de ellos en los Estados Unidos.

    Nos quedamos conmocionados. Supusimos que si millones de niños estaban muriendo y que podrían salvarse, el mundo sería una prioridad para descubrir y entregar las medicinas para salvarlos. Pero no fue así. Por virtud de un dólar, habian intervenciones que podían salvar vidas que simplemente no se entregaron.

    Si ustedes creen que cada vida tiene igual valor, es repugnante saber que algunas vidas son vistas como un valor de ahorro y otras no. Nos dijimos a nosotros mismos: “Esto no puede ser verdad. Pero si es cierto, merece ser la prioridad de nuestro dar.”

    Así que empezamos nuestro trabajo en la misma forma que cualquiera aquí lo hubiera iniciado. Preguntamos: “¿Cómo puede el mundo permitir que estos niños mueren?”

    La respuesta es simple y dura. El mercado no recompensa salvar las vidas de estos niños, y los gobiernos no los subvencionan. Por lo tanto, los niños murieron debido a que sus madres y sus padres no tenían el poder en el mercado y no tienen voz en el sistema.

    Pero ustedes y yo tenemos ambos.

    Podemos hacer que las fuerzas del mercado funcionan mejor para los pobres si podemos desarrollar un capitalismo más creativo – si podemos ampliar el alcance de las fuerzas del mercado para que más gente pueda obtener un beneficio, o al menos ganarse la vida, al servicio de las personas que sufren de las peores inequidades. También podemos presionar a los gobiernos de todo el mundo para gastar dinero de los contribuyentes de manera que reflejen mejor los valores de las personas que pagan los impuestos.

    Si somos capaces de encontrar fórmulas que satisfagan las necesidades de los pobres en maneras que generan beneficios para las empresas y los votos para los políticos, habremos encontrado una manera sostenible para reducir la desigualdad en el mundo. Esta tarea es trabajo sin terminar. Nunca puede ser terminado. Sin embargo, un esfuerzo consciente para responder a este desafío cambiará el mundo.

    Soy optimista de que podemos hacerlo, pero hablo con los escépticos que dicen no hay esperanza. Ellos dicen: “La desigualdad ha estado con nosotros desde el principio, y estará con nosotros hasta el final – porque a la gente simplemente no le importa” Estoy completamente en desacuerdo.

    Creo que nos preocupa más de lo que creemos pero no sabemos que hacer

    Todos los que estamos aquí en este patio, en un momento u otro, hemos visto tragedias humanas que han roto nuestros corazones y, sin embargo, no hemos hecho nada – no porque no nos importara, sino porque no sabíamos qué hacer. Si hubieramos sabido cómo ayudar, habríamos actuado.

    La barrera para el cambio no es muy simple, es demasiado complejo.

    Para cambiar la preocupación en acción, tenemos que ver un problema, una solución, y ver el impacto. Pero la complejidad bloquea los tres pasos.

    Incluso con la llegada de Internet y las noticias las 24 horas del día, todavía es una compleja empresa que la gente vea realmente los problemas. Cuando se estrella un avión, los funcionarios de inmediato llaman a una conferencia de prensa. Prometen para investigar, determinar la causa y prevenir accidentes similares en el futuro.

    Pero si los funcionarios fueran brutalmente honestos, dirían: “De todas las personas en el mundo de hoy que murieron por causas prevenibles, la mitad del uno por ciento de ellos estaban en este avion. Estamos decididos a hacer todo lo posible para resolver el problema que cobró la vida de la mitad de la mitad del uno por ciento “.

    El mayor problema no es el accidente de avión, sino que los millones de muertes evitables.

    No leemos mucho acerca de estas muertes. Los medios de comunicación se refieren a lo nuevo – y millones de personas que mueren no es nada nuevo. Por lo tanto, permanece en el fondo, donde es más fácil de ignorar. Pero incluso cuando vemos o leemos sobre ella, es difícil mantener nuestros ojos en el problema. Es difícil ver el sufrimiento si la situación es tan compleja que no sabemos cómo ayudar. Por lo que miramos para otro lado.

    Si somos capaces de ver realmente un problema, que es el primer paso, llegamos al segundo paso: el corte a través de la complejidad para encontrar una solución.

    La búsqueda de soluciones es esencial si queremos sacar el máximo provecho de nuestra preocupacion. Si tenemos respuestas claras y probadas en cualquier momento una organización o un individuo pregunta “¿Cómo puedo ayudar?”, Entonces podemos obtener acción – y podemos estar seguros de que ninguno de las preocupaciones en el mundo se desperdicia. Sin embargo, la complejidad hace que sea difícil marcar un camino de acción para todos los que se preocupan – y eso hace que sea difícil que su preocupacion importe.

    Cortar a traves de la complejidad de encontrar una solución se ejecuta a través de cuatro etapas previsibles: determinar un objetivo, encontrar el mejor enfoque, descubrir la tecnología ideal para este enfoque, y mientras tanto, hacer la mejor aplicación de la tecnología que ya tienen – si es algo complejo, como una droga, o algo más sencillo, como un mosquitero.

    La epidemia del SIDA es un ejemplo. El objetivo general es, por supuesto, para poner fin a la enfermedad. El enfoque de mayor influencia es la prevención. La tecnología ideal sería una vacuna que da inmunidad por vida con una dosis única. Por lo tanto, los gobiernos, las compañías farmacéuticas y fundaciones financian la investigación de vacunas. Pero su trabajo es probable que tome más de una década, por lo que en el mientras tanto, tenemos que trabajar con lo que tenemos a la mano – y el mejor enfoque de prevención que tenemos ahora es lograr que la gente evite el comportamiento peligroso.

    La búsqueda de ese objetivo inicia el ciclo de cuatro pasos de nuevo. Este es el patrón. Lo esencial es no dejar nunca de pensar y de trabajar – y nunca hacer lo que hicimos con la malaria y la tuberculosis en el siglo 20 – que consiste en rendirse ante la complejidad y renunciar.

    El paso final – después de ver el problema y la búsqueda de un enfoque – es medir el impacto de su trabajo y compartir sus éxitos y fracasos, para que otros aprendan de sus esfuerzos.

    Tienen que tener las estadísticas, por supuesto. Tienen que ser capaces de demostrar que un programa está vacunando a millones de niños. Tienen que ser capaces de demostrar una reducción en el número de niños que mueren de estas enfermedades. Esto es esencial no sólo para mejorar el programa, sino también para ayudar a atraer más inversiones de las empresas y el gobierno.

    Pero si quieren inspirar a la gente a participar, ustedes tienen que mostrar más que números, lo que tienen que transmitir es el impacto humano en la obra – para que la gente puede sentir lo que significa salvar una vida para las familias afectadas.

    Recuerdo ir a Davos hace algunos años atrás y estar sentado en un panel de la salud mundial que estaba discutiendo la manera de salvar millones de vidas. Millones! Piensen en la emoción de salvar sólo la vida de una persona – que luego se multiplican por millones. … Sin embargo, este era el grupo más aburrido en el que he estado alguna vez . Tan aburrido, incluso yo no podía soportarlo.

    Lo que hizo que esa experiencia fuese especialmente llamativa era que yo acababa de venir de un evento en el que habia presentado la versión 13 de algun software, y había gente saltando y gritando con emoción. Me encanta la gente entusiasmada con el software – pero ¿por qué no podemos generar aún más emoción para salvar vidas?

    No se puede lograr que la gente se emocione a menos que ustedes les puedan ayudar a ver y a sentir el impacto. ¿Y cómo lo hacen – es una pregunta compleja.

    Sin embargo, soy optimista. Sí, la desigualdad ha estado con nosotros siempre, pero las nuevas herramientas que tenemos para cortar a través de la complejidad no han estado con nosotros para siempre. Son nuevas – nos pueden ayudar a sacar el máximo partido de nuestra preocupación – y es por eso que el futuro puede ser diferente del pasado.

    La definición de las innovaciones de esta era – la biotecnología, el compuatador,  Internet – nos dan una oportunidad que nunca habiamos tenido antes de poner fin a la extrema pobreza y poner fin a la muerte por enfermedades prevenibles.

    Hace sesenta años, George Marshall vino a esta ceremonia y anunció un plan para ayudar a las naciones de la Europa de la posguerra. Dijo: “Creo que una dificultad es que el problema es de enorme complejidad tales que la propia masa de hechos presentados al público por la prensa y la radio hacen extremadamente difícil para el hombre de la calle llegar a una clara valoración de la situación . Es prácticamente imposible en esta distancia a entender el verdadero significado de la situación. ”

    Treinta años después de Marshall hizo su discurso, como mi clase graduada sin mí, la tecnología emergente haría al mundo más pequeño, más abierto, más visible, menos distante.

    La aparición de computadores personales a bajo costo dio lugar a una poderosa red que ha transformado las oportunidades de aprendizaje y comunicación.

    Lo magico de esta red no es sólo que derrumba la distancia y hace a todos sus vecinos. Asimismo, aumenta dramáticamente el número de mentes brillantes que pueden trabajar juntos sobre el mismo problema – y eso aumenta la tasa de innovación a un grado asombroso.

    Al mismo tiempo, por cada persona en el mundo que tenga acceso a esta tecnología, cinco personas no lo hacen. Esto significa que muchas mentes creativas quedan fuera de este debate – personas inteligentes con inteligencia práctica y experiencia que no tienen la tecnología para perfeccionar sus talentos o contribuir con sus ideas al mundo.

    Necesitamos que el mayor número posible de personas tengan acceso a esta tecnología, ya que estos avances estan desencadenando una revolución en lo que los seres humanos pueden hacer el uno por el otro. Están haciendo posible no sólo que los gobiernos nacionales, sino las universidades, empresas, organizaciones más pequeñas, e incluso las personas vean los problemas, vean los enfoques, y midan el impacto de sus esfuerzos para abordar el hambre, la pobreza, la desesperación de la que George Marshall habló hace 60 años.

    Miembros de la familia de Harvard: Aquí en el patio esta una de las grandes colecciones de talento intelectual en el mundo.

    ¿Para qué?

    No hay duda de que la facultad, los alumnos, los estudiantes, y los benefactores de Harvard han utilizado su poder para mejorar la vida de las personas aquí y en todo el mundo. Pero podemos hacer más? Puede Harvard dedicar su intelecto a mejorar la vida de personas que nunca escucharan su nombre?

    Permítanme que haga una petición de los decanos y los profesores – los líderes intelectuales aquí en Harvard: Como contratar a nuevos profesores, la adjudicación de tenencia, la revisión de estudios, requisitos y determinar los grados, por favor, preguntense a ustedes mismos:

    Deberias nuestras mejores mentes dedicarse a resolver nuestros problemas más grandes?

    Debería Harvard alentar a sus profesores a asumir las peores inequidades del mundo?

    Deberian los estudiantes de Hardvard aprender acerca de la profundidad de la pobreza en el mundo … la prevalencia del hambre en el mundo … la escasez de agua potable … los niños fuera de la escuela … los niños que mueren de enfermedades que podemos curar?

    Deberian la gente más privilegiada del mundo aprender sobre la vida de los menos privilegiados del mundo?

    Estas no son preguntas retóricas – ustedes las responderan con sus políticas.

    Mi madre, que se llenó de orgullo el día que fue admitido aquí – nunca dejó de presionarme a hacer más por los demás. Unos días antes de mi boda, ella organizó un evento nupcial, en la que leía en voz alta una carta sobre el matrimonio que había escrito a Melinda. Mi madre estaba muy enferma de cáncer en ese momento, pero vio una oportunidad más para entregar su mensaje, y al cierre de la carta dice: “De aquellos a quienes mucho se les da, mucho se espera.”

    Si se tiene en cuenta lo que a nosotros aquí en este patio se no han dado – en talento, privilegio y oportunidad – casi no hay límite a lo que el mundo tiene derecho a esperar de nosotros.

    En consonancia con la promesa de esta era, quiero exhortar a cada uno de los graduados aquí a asumir un problema – un problema complejo, una profunda desigualdad, y convertirse en un especialista en ello. Si ustedes hacen que eso sea el foco de su carrera, sería fenomenal. Pero no tienen que hacer para generar un impacto. Durante unas horas cada semana, pueden utilizar el poder creciente de Internet para informarse, encontrar a otros con los mismos intereses, ver los obstáculos y encontrar la manera de cortar a través de ellos.

    No dejen que la complejidad los detenga. Sean activistas. Asumian las grandes desigualdades. Será una de las grandes experiencias de su vida.

    Ustedes graduados llegan en un tiempo sorprendente. Al salir de Harvard, tienen la tecnología que los miembros de mi clase nunca tuvieron. Ustedes tienen conciencia de la desigualdad mundial, que nosotros no teníamos. Y con la conciencia de que, probablemente también tienen una conciencia informada que los atormentará si abandonan a estas personas cuyas vidas se pueden cambiar con muy poco esfuerzo. Ustedes tienen más de lo que teniamos, ustedes deben comenzar cuanto antes, y no demorarse más.

    Sabiendo lo que saben, ¿cómo no podríam?

    Y espero que usted vuelvan aquí a Harvard 30 años a partir de ahora y reflexionen sobre lo que han hecho con su talento y su energía. Espero que ustedes no sean juzgados sólo en sus logros profesionales, sino también en lo bien que han abordado las inequidades más profundas del mundo … sobre lo bien que han tratado a las personas a un mundo de distancia que no tienen nada en común con ustedes, excepto su humanidad.

    Buena Suerte.





    Sunken Soldiers Ball

    6 03 2008

    I can’t go home I cannot sleep
    I cannot give I cannot keep
    This heart of stone has left me here
    With only rumours of you left
    I guess to see you leaving was for the best

    I dream too much and spend my days
    Like a sailor lost at sea
    And you were like the mermaid in that Danish fairy tale
    I guess the best thing I could do is to sail

    Away from this sunken soldiers ball
    Away do you remember me at all?
    I have no better words than thank you and goodbye
    I wish I didn’t have to see our love die

    At last I’m home my horse will rest
    This tattoed heart this trembling chest
    Must be alone and carry this sorrow back to bed
    I hope there was no innocent blood shed

    Away from this sunken soldiers ball
    Away do you remember me at all?
    I have no better words than thank you and goodbye
    I wish I didn’t have to see our love die

    Anneke van Giersbergen.





    Fidel, otro latero más!

    24 02 2008

    ¿Qué diferencia hay entre una dictadura de derecha y una de izquierda? Al menos Pinochet no dejó a un pariente al mando.

    fidelpinochet.jpg

    Cuando fallece algún acomodado ‘procer comunista’ chileno, hasta la derecha empresarial salta para elogiar al difunto como ejemplo de ‘consecuencia’. Por supuesto, si persistes en el error toda tu vida y pones a tu pais de rehén para seguir equivocandote, entonces el comunismo es perseverante hasta las patas. Hitler también fue super consecuente y a nadie se le ocurriría calificarlo de virtuoso post mortem.

    El otro día lei un afiche de las JJ.CC. que proclamaba: “Chile necesita más democracia, únete a los comunistas”. Cabe la duda si el PC criollo – marzista, leninista y lealestalinista – puede dar lecciones de democracias. no está de más recordar que el consecuente Stalin fue responsable de la muerte de entre 20 y 60 millones de sus compatriotas, lo que lo instala en el podio de los carniceros de la historia humana. El comunismo continua postulando la lucha de clases: como a mi y los que están leyendo esto – pequeños burgueses – nos gusta tener un hogar agradable, comodidades propias del siglo 21, internet, salir de vez en cuando, etc. estaremos en la primera linea del peloton de fusilamiento cuando arribe la dictadura del proletariado.

    Como dijo una vez Marcelo el comunismo chileno es el típico partido ‘hincha w**s histórico’ que ha estado haciendo el loco desde 1988. En la lógica de la insurreción su lucha tenia cierta validez; podía formar grupos paramilitares que combatirían la tiranía y muchos lo podrían evaluar tácitamente. Sin embargo, es extraño que cuando los militares estaban en crisis siempre aparecía un comando frentista para mandarse una cag**a. Lo más curioso es que Pinochet se fue solito a su casa y el PC se quedó dando la hora. ¿Alguien que me diga que pretendía el FPMR asesinando a Jaime Guzman? – ahora convertido en el fantasma gasparin para Longueira xD!! – Desde 1991 la ‘rancia’ ultraizquierda chilena que nunca volverá a La Moneda – a algo más que a una protesta – preferiría un nuevo golpe de estado para no sentirse tan incómoda.

    Estos días Fidel Castro decidió retirarse a su mansión tras 49 años de despotismo y ROBOlución en Cuba; obediente, el comunismo chileno saluda su jubilación como un nuevo paso “en el perfeccionamiento del socialismo”. Analistas de verdad tendrán mucho que decir seguramente sobre la monarquia hereditaria instaurada en Cuba. Yo, en cambio, me pregunto que diferencia a una dictadura militar de izquierda de otra de derecha. Pero sin embargo hay un punto de contención entre Fidel y Pinochet. Fidel como Pinochet derrocó a un gobierno por las armas y se quedó todo lo que quiso en el poder. Organizó elecciones mulas, se construyó palacios e instaló la amistrocracia más vil; exterminó opositores, culpó de cada mal de administración a agentes externos y dio la lata hasta que se cansó. Quizás el mayor drama del pueblo de Cuba es haber escuchado durante medio siglo a un joven idealista latero que terminó como un dinosaurio latero hablando por horas ante una tribuna ya atontada.





    ¿Qué es la Web Semántica?

    16 02 2008

    Esta es una pequeña introducción a la web semántica, en los siguientes minutos hablaré sobre uno de los más duros problemas que enfrenta la web hoy en día, y también explicaré lo que se está haciendo acerca de este problema y como nos afectará.No necesitas ser un desarrollador web o un blogger para entender alguno de los conceptos que se presentan en esta corta introducción.

    Pero antes de ir más lejos es importante saber lo que realmente significa la palabra ‘semántica’. La semántica está relacionada con la sintaxis. En muchos idiomas ‘sintaxis’ es cómo dices algo y ‘semántica’ es el significado detrás de lo que dices. Tomemos a modo de ejemplo la frase: ‘Yo amo la tecnología’ , la sintaxis son las letras, signos de puntuación y acentos en la oración y semántica es lo que realmente significa la oración anterior. En este caso significa que disfrutas aprendiendo sobre las nuevas tecnologías y usandolas.

    Ahora si cambiamos la oración y usamos un simbolo diferente para la palabra ‘amar’ – un corazón – habremos cambiado la sintaxis de la oración aunque la semántica de la oración en si siga siendo la misma. De este modo, si escribimos: ‘Yo la tecnología’ todavía significa que que disfrutas aprendiendo sobre las nuevas tecnologías y usandolas.

    Cuando hablamos de sintaxis y semantica sobre lo que realmente estamos hablando es acerca de comunicación, cuando quieres comunicarte con alguien más lo que usas es tu voz para hacerlo. Internet creo una forma estandar de comunicación entre un computador y otro. En otras palabras le da voz a un computadora para que pueda comunicarse con otro e intercambiar información. Sin embargo aunque le de la capacidad de ‘hablar’ no les da la capacidad de entendimiento y comprensión del significado real la información que están compartiendo.

    La web se convirtió rapidamente en un forma fácil en la que podemos solicitar y ver la información. Podemos imaginar a la web como un gran depósito de documentos, cuando escribimos una dirección web en nuestro navegador este envia una solicitud al sitio web. La solicitud se trata básicamente de decirle al servidor que queremos visualizar el documento que está dirección que le entregamos así el servidor recuperar el documento y lo envia de vuelta a nuestro navegador, este documento está escrito en un lenguaje especial llamado HTML.

    El lenguaje HTML define una sintaxis que el computador puede entender y le dice cómo mostrarnos el documento.Así las 2 cosas que la web hizo es crear una forma de obtener cualquier documento en internet y crear una sintaxis llamada HTML que es usada para mostrarnos el documento. Pero ¿cuál es el problema entonces? Tenemos internet que nos deja comunicarnos unos con otros, tenemos la web que nos permite guardar y obtener cualquier documento en internet y tenemos los motores de busqueda los cuales buscan en los sitios web cualquier cosa que queramos.

    La web parece estar muy bien, así que ¿cómo podremos mejorarla?: ¡Más redes sociales! mmm Creo que no, la respuesta yace en la semántica. Recordemos que actualmente los computadores ciegamente sólo recuperan y muestran información.. bueno ese es el problema porque aun no entienden el significado de las paginas que nos muestran. Y Aunque entienden la sintaxis la semantica es aun algo perdido.

    Ahora, si pudiesemos tener computadores que reconozcan lo que hay en una página web, podrían aprender en lo que estamos interesados y si supieran eso podráin ayudarnos a obtener lo que queremos pasando así de una ayuda pasica a una ayuda activa.Esto es realmente sobre lo que trata la web semántica, ayudar a los computadores a entender el significado de una página web. La web de hoy es sobre documentos, mientras que la web semántica es sobre cosas y cuando digo ‘cosas’ quiero decir ‘cualquier cosa’: personas, lugares, eventos, música, peliculas, organizaciones y cualquier otro concepto sobre el cual puedas pensar.

    Sin embargo, la web semantica no es sólo sobre mostrar estas cosas al computador, sino también dejar que el computador sepa como estas cosas están relacionadas entre si. Esto de la web semántica no es algo que vaya a pasar en el futuro, sino que es sobre algo que está pasando hoy.Las cosas se ponen mucho mejores cuando empezamos explorar las posibilidades que nos brindaría la web semantica. Por ejemplo si una fiesta de cumpleaños ha sido marcada como un evento con una fecha y un lugar entonces podemos decirle al computador que guarde la cita en tu calendario. Otro ejemplo útil ocurre en el mundo de los blogs de música. Los cuales usualmente tienen listas de canciones o albumes en su página de inicio, así si se usará tecnología semántica podríamos decirle a nuestro navegador que muestre todas las canciones del artista en la página o que busque en internet otros albumes del mismo artista.

    Los motores de busqueda también serían más precisos en sus busquedas de lo que son ahora, así cuando buscamos tenemos que decir estamos buscando una persona, un lugar o una canción en especifico. El motor de busqueda podrá referirse a un sitio web de forma mucho más precisa porque ya no sólo dependerá de las ‘keywords’ o palabras claves de busqueda que la suministramos sino tambien de la semantica de la página.

    Así que la web semántica conlleva consigo la gran promesa de hacer nuestra vida más fácil ayudando a los computador para que nos ayuden a nosotros a obtener lo que queremos.