viernes, 28 de diciembre de 2007

Microsoft ficha a Richard Stallman

Aunque hace varias semanas que el rumor saltó a la blogosfera, hoy han confirmado la noticia en una rueda de prensa conjunta: a partir del próximo 1 de enero Stallman formará parte de la plantilla de Microsoft en Redmond.

La nota de prensa publicada por Microsoft recoge, textualmente, los siguientes párrafos:

"Microsoft siempre apuesta por el talento, y Richard Stallman es uno de los más reputados ideólogos del mundo del desarrollo del software."
[...]
"Sin duda, se trata de una de las incorporaciones más importantes a la compañía de los últimos años, por lo que no hemos escatimado en recursos. Las negociaciones las han llevado a cabo directamente Gates y Ballmer, los dos máximos directivos, lo que demuestra la magnitud de la apuesta estratégica que se está llevando a cabo"

Por su parte, Richard Stallman, que nunca ha destacado por su aprecio a la multinacional, justifica la decisión en su blog:

"En realidad nuestras posturas nunca han estado muy alejadas, aunque veíamos las cosas desde perspectivas diferentes. Microsoft, al igual que GNU y el conjunto del movimiento Open Source, pretende hacer llegar el software a todo el mundo y hacer que sea un bien universal."
[...]
"Hay más puntos en común que diferencias, sólo era cuestión de sentarnos y dialogar sobre hacia dónde podíamos caminar juntos"

En principio Stallman encabezará una nueva división en Microsoft destinada al análisis y evaluación de soluciones de software libre para el segmento SOHO (Small Office, Home Office) y grandes corporaciones, así como a dirigir la adaptación de ciertos componentes del microkernel de Linux a Windows Server 2012 (codename "MindBreaker"), que se lanzará al mercado en unos años y del que ya están disponibles vía MSDN algunos whitepapers y documentos muy muy preliminares.

Este movimiento forma parte de la estrategia de acercamiento de Microsoft al mundo del software libre, como se lleva viendo algún tiempo. Los acuerdos entre Microsft y Novell, la publicación del código fuente de .NET Framework y la gran cantidad de líneas de actuación que están promoviendo así lo demuestran.

Y por cierto, se dice que el próximo en la lista de Most Wanted People de Microsoft y con el que hay conversaciones bastante avanzadas (de nuevo, pues ya las hubo hace tiempo) es Miguel de Icaza, líder del proyecto Mono, aunque él todavía no ha declarado nada al respecto. Otros en la lista son el mismísimo Linus Torvalds, creador del primer núcleo de Linux, firme candidato a liderar el área de arquitectura de servidores y servicios, y Vinton Cerf, considerado el padre de internet, para el puesto de Technical Chief Developer de la línea de productos Internet Explorer.

Habrá que esperar para ver a qué conduce esta reorientación en la estrategia que se viene observando desde hace unos meses, y sobre todo en qué se traduce la fiebre por los fichajes de figuras del mundillo. El tiempo lo dirá.

Publicado en: http://www.variablenotfound.com/.

lunes, 19 de noviembre de 2007

Descarga VISUAL STUDIO 2008 YA!

Por fin ha llegado el día. Ya es oficial:

¡Visual Studio 2008 ya está aquí!

Aquellos afortunados que disponen de una cuenta de suscripción, pueden ya descargarse la RTM de VS2008 (por lo visto hay algunos problemas de disponibilidad porque básicamente la gente está masacrando los servidores (si es que somos unos ansias xD).

El común de los mortales podemos conformarnos con las versiones Express (que salvo algunos detalles nos permiten desarrollar prácticamente las mismas aplicaciones que haríamos con la version Professional) o bien evaluar alguna de las versiones de prueba.

Eso sí, si nos descargamos hoy alguno de estos productos, tiene que ser, de momento, en inglés. De todas maneras es una noticia muy esperada por la comunidad de desarrolladores.

Así que como dirian en un conocido programa: ¡¡AL TURRON!!

martes, 16 de octubre de 2007

Código fuente de .NET, disponible!

Pero, como comprenderá el lector, no todo iba a ser la presentación de 'Junior'. Cierto, por sí solo es un acontecimiento muy digno. Pero hay que llenar el blog con 'chicha', que ha pasado muucho tiempo. Pues... érase que se era, hace cosa de dos semanas, en el blog de Scott Guthrie (ScottGu para los amigos), se publicaba una noticia bomba:

¡El código fuente de las librerías de .NET va a ser liberado!

¡Sí, es cierto! ¡Microsoft, la Innombrable, la Encarnación del Mal, la Personificación del Lado Oscuro, dejándonos ver "sus tripas"!

Aunque claro, aquí viene la particularidad (es que si no, no sería Microsoft xD): El código fuente nos lo ceden bajo el precepto "mirar es bueno, tocar es malo". Es decir, NO podemos, en principio, modificar el código fuente, sólo podemos verlo para, por ejemplo, facilitarnos el debugging de nuestro código. No parece probable, de todas maneras, que un fragmento de código te vaya a 'petar' dentro de un método de la propia librería de clases, pero sí puede servir, supongo, para saber por qué realmente nos peta a nosotros ese fragmento de código, para ver qué hace ese método con el parámetro que le hemos pasado y por qué nos lo ha devuelto hecho unos zorros, el muy cabr*.

Esto tiene además una ventaja adicional, que es la misma que tienen los desarrollos basados en código abierto: al haber miles, o millones, de ojos que van a poder ver tu código, va a ser muchísimo más fácil (y rápido) cazar los (pocos) bugs que aún queden en el código de la Librería, así como ayudar a mejorarla proponiendo algún cambio u optimización en apartados concretos.

Ah y no es por ser pesadito, pero con Delphi ya teníamos los fuentes de toda la Librería de Clases (BCL/VCL) a nuestra disposición para consulta. Y modificación (JEJEJE) pero la aventura que representaba recompilar TODA la VCL (y no morir en el intento), daría para un blog entero. ;-)

Re-Reloaded (pero con motivo)

Casi un año. Prácticamente nueve meses, para ser exactos.

El 19 de enero publicaba mi, hasta hoy, último 'post' en este blog. Demasiado tiempo. Las estadísticas de StatCounter indican, no obstante y para mi sorpresa, que se ha mantenido un mínimo número de visitas. Espero que, al menos, esas visitas hayan encontrado lo que buscaban, y que les haya sido de utilidad.

El responsable máximo de esta mi prolongada ausencia, no es otro que este personajillo:




Sí señores, aquí presento "en sociedad" a mi primer vástago (biológico al menos, como buen desarrollador yo casi considero "hijos" a mis programas, jeje), el cual nació exactamente 6 días antes del mencionado último post, es decir, el 13 de enero. Podrán imaginarse mis hipotéticos lectores que dicho personajillo ha mantenido copados los recursos y el tiempo de proceso de este servidor a un 100% casi constantemente (estuve prácticamente a punto de alcanzar el don de la ubicuidad, o dicho en "nuestro" lenguaje, la multitarea real, pero desgraciada o afortunadamente, no lo he llegado a conseguir).

Pero como la parte más dura ya ha pasado y ahora el chiquitin ya casi es "independiente" (en el sentido de que no hay que estar con él las 24 horas, por ejemplo ya es capaz de entretenerse él solo durante un buen rato) puedo arañar tiempo para dedicarme a otros menesteres: Este fin de semana me he echado un par de partidillas a la 'demo' del FIFA 2008 por ejemplo. Vuelvo a saber lo que es el OCIO! :-)

viernes, 19 de enero de 2007

Eficiencia y eficacia en el código

O bien, ¿Qué es más rápido (y eficiente): Te llamo por tu nombre, o busco de qué familia eres?

Tengo un antiguo proyecto que comencé en .NET 1.1 y que tenía abandonado. Ahora que ya sé más cosas de la plataforma, quiero retomarlo y forrarme como un cerdo cuando lo venda. Pero lo voy haciendo con calma y mirando con cariño el código.

Una de las cosas que he mirado es la creación y gestión de ventanas MDI. Yo provengo del mundillo de Delphi y seguramente haga muchas cosas en .NET como las haría o hacía en Delphi (igual de bien o igual de mal xD). El caso es que para la gestión de los MDIChild, una de las formas de controlar que no creas más de una instancia de un form determinado, es recorrerte los forms abiertos comprobando a qué clase pertenecen sus instancias. En .NET se puede hacer así, o se puede hacer comprobando el nombre que se le dió a la instancia cuando se creó (lo cual se me antoja mucho más sencillo y más "lógico").

Veamos dos fragmentos de código:


... código anterior...

// Verificaremos si está creado el formulario.
bool vExist = false;
int i = 0;
// Recorremos la lista de MDIs a ver si alguno es el que buscamos.
while ((i < this.MdiChildren.Length) & (!vExist)) {
if ((Form)this.MdiChildren[i] is AfrmRejillaClientes) {
vExist = true;
((AfrmRejillaClientes)this.MdiChildren[i]).WindowState = FormWindowState.Normal;
}
i++;
}
// Si NO lo hemos encontrado...
if (!vExist) {
AfrmRejillaClientes frmRejClientes = new AfrmRejillaClientes();
frmRejClientes.MdiParent = this;
frmRejClientes.Show();
}

... código posterior...


Como se puede ver, estamos utilizando el comprobador 'is' para verificar que el tipo del formulario que estamos comprobando (nótese el cast al tipo Form sobre el objeto 'this') sea el que hemos indicado. La otra forma de hacerlo es comprobando el nombre de la instancia:


... código anterior...

// Verificaremos si está creado el formulario.
bool vExist = false;
int i = 0;
// Recorremos la lista de MDIs a ver si alguno es el que buscamos.
while ((i < this.MdiChildren.Length) & (!vExist)) {
if (((Form)this.MdiChildren[i]).Name == "AfrmRejillaClientes") {
vExist = true;
((AfrmRejillaClientes)this.MdiChildren[i]).WindowState = FormWindowState.Normal;
}
i++;
}
// Si NO lo hemos encontrado...
if (!vExist) {
AfrmRejillaClientes frmRejClientes = new AfrmRejillaClientes();
frmRejClientes.MdiParent = this;
frmRejClientes.Show();
}

... código posterior...


Una cosa curiosa es que yo pensaba que había que utilizar el método '.ToString()' y no la propiedad '.Name'. Pero bueno la cuestión es otra: ¿Cuál de las dos formas de escribir este código es más eficiente? Mi primer pensamiento fue que la más eficiente es la que comprueba el nombre. ¿Será cierto? Veamos pues...

MSIL correspondiente al primer código:

IL_0000: ldc.i4.0
IL_0001: stloc.0
IL_0002: ldc.i4.0
IL_0003: stloc.1
IL_0004: br.s IL_002e
IL_0006: ldarg.0
IL_0007: call instance class [System.Windows.Forms]System.Windows.Forms.Form[] [System.Windows.Forms]System.Windows.Forms.Form::get_MdiChildren()
IL_000c: ldloc.1
IL_000d: ldelem.ref
IL_000e: isinst ProgramaGestion.Forms.AfrmRejillaClientes
IL_0013: brfalse.s IL_002a


MSIL correspondiente al segundo código:

IL_0000: ldc.i4.0
IL_0001: stloc.0
IL_0002: ldc.i4.0
IL_0003: stloc.1
IL_0004: br.s IL_0038
IL_0006: ldarg.0
IL_0007: call instance class [System.Windows.Forms]System.Windows.Forms.Form[] [System.Windows.Forms]System.Windows.Forms.Form::get_MdiChildren()
IL_000c: ldloc.1
IL_000d: ldelem.ref
IL_000e: callvirt instance string [System.Windows.Forms]System.Windows.Forms.Control::get_Name()
IL_0013: ldstr "AfrmRejillaClientes"
IL_0018: call bool [mscorlib]System.String::op_Equality(string,
string)
IL_001d: brfalse.s IL_0034

Como se puede apreciar, evidentemente me equivocaba. La segunda opción es mucho menos eficiente que la primera. La llamada a la función 'isinst' del MSIL ocupa 4 bytes; y todo el tinglado que se monta en el segundo listado, para hacer una comparación de cadenas, es mucho más pesado (15 bytes). No me he puesto a mirar cuantos ciclos de reloj supondrían, pero seguro que gana en eficiencia y eficacia la comprobación del Tipo. De calle, además.

Que sí, que en estos tiempos de PCs con Gigabytes de memoria, Gigahertzios de frecuencia y cientos de Gigabytes de capacidad de almacenamiento, ahorrarse 15 miserables bytes puede parecer una soberana chorrada, pero mira de 15 en 15 bytes te puedes evitar que un programa te ocupe 100 Megas en memoria al ejecutarse (habéis mirado alguna vez en el administrador de tareas, el proceso 'devenv.exe'? Yo me horrorizo casi siempre). Y además es sana costumbre de buen programador el optimizar tu código hasta donde te sea posible... ¿no?

viernes, 5 de enero de 2007

Novias y esposas, Arquitectos y Programadores...

Estaba leyendo este simpático post del blog de Luis Du Solier en geeks.ms, donde habla de la actualización de Novia 6.0 a Esposa 1.0. El texto tiene sus añitos pero es buenísimo.

Y entonces me he acordado de éste otro:

Parecidos entre el lenguaje de los servidores y las mujeres

100 Continue ==== Sigue intentándolo vas por buen camino
101 Switching Protocols ==== Si no te decides...
303 See Other ==== Pruebalo con otra
400 Bad Request ==== Dímelo con flores
401 Unathorized ==== Estoy casada
402 Payment Required === Son 10.000 y la cama
403 Forbidden/Access Required === ZZZZZZZAS! (bofetón)
404 Not Found === He quedado con las amigas
405 Method Not Allowed === No, por detrás no...
406 Method Not Acceptable === ... y en la boca menos
407 Proxy Auth. Required === Lo hablaré con mi madre
408 Request Timeout === ¿Sabes cuánto hace que no me llamas?
409 Conflict === ¿Quien era ESA?
410 Document Removed === Quiero el D-I-V-O-R-C-I-O
411 Lenght Required === ¿A eso llamas 'pedazo polla'?
412 Precondition Failed === ¿Que no has traido condones?
413 Request Entity Too Large === Eso no me va a caber ahí dentro
414 Request URL Too Large === Eso tampoco me va a caber ahí dentro
415 Unsupported Media Type === A cuatro patas no me gusta
500 Internal Server Error === Tengo la regla
501 Not Implemented === Nunca haría *eso*
502 Bad Gateway === ...y por ahí, menos todavía
503 Service Unavailable === Me duele la cabeza
504 Gateway Timeout === ¿Ya está?

Y no hay que olvidar el raro e infrecuente
200 OK === Chica facilona

lunes, 1 de enero de 2007

¡¡ FELIZ AÑO 2007 !!

Hemos dejado atrás el 2006. Personalmente ha sido un año que recordaré por varios motivos, pero sobretodo por dos muy concretos: Uno, mi pareja y yo decidimos casarnos; y Dos, tuvimos la feliz noticia de que íbamos a ser padres. :)

Estaréis de acuerdo conmigo en que son dos muy buenas razones para recordar el 2006. Sin embargo el 2007 tiene que ser aún mejor, ya que en el año que acaba de comenzar es cuando las dos noticias anteriores se harán realidad.

Así que como véis este año comienza bien... y con cambios en el Blog (he actualizado a la nueva versión de Blogger, no está mal, el diseño del formato del blog se puede hacer ya utilizando "drag & drop" al más puro estilo Web 2.0).

En otro orden de cosas, hablando ya del plano profesional, espero que el 2007 sea, además, el año de mi perseguida certificación MCSD. Evidentemente también aspiro a conseguir las nuevas MCTS... ;)

Espero que para todos los que leéis esta humilde bitácora, seáis asiduos o eventuales, este 2007 sea el MEJOR año de vuestra vida, en todos los sentidos, y podáis compartir todas esas cosas buenas con aquellos que os importan y a quienes importáis.

FELIZ AÑO NUEVO!!