Geeks.ms caido… (por culpa del huracan Ike)

ike Parece que el proveedor de hosting nos ha dejado sin corriente el servidor, por eso hemos estado sin servicio durante unas cuantas horas.
Horas durante las que he sudado tinta. Por cierto, los del hosting, aun no han dicho nada sobre el incidente.

Parece que ya hemos vuelto a la normalidad, esperemos que dure.

Nota: Ya tengo noticias de la gente de XLHost:

There was an issue in 20% of the datacenter related to hurricane Ike.
It has been recovered.

Thank you,
-Drew
XLHost.com

Saludos!

Chrome: ¿por qué existe?

Google Chrome LogoLo siento, no me he podido resistir… a veces me da por escribir sobre gilipolleces… total a Enrique Dans le va muy bien haciéndolo todo el día…


He estado probando Chrome, lo confieso. Ya está fuera de mi equipo. La capacidad de Google para mover internet es lo que más me ha impresionado de todo el asunto. El día que se lanzó Chrome, el aluvión de comentarios en Geeks.ms fue impresionante, pero más impresionante fue ver como subieron las visitas a Geeks.ms durante esos días y viendo la estadísticas, la subida de visitas se debía a que hubo un montón de consultas a Google preguntando por Chrome y algunas de ellas acabaron en Geeks.ms.


Eso y que los internautas tenga tan buena imagen de lo que viene de Google aunque este lleno de agujeros de seguridad, cumpla solo un tercio de lo que promete y sea escasamente estable. Tengo que decir que a mí Chrome no me ha impresionado en absoluto, en ningún aspecto. Pero claro, ningún navegador me impresiona. Yo no uso Firefox, ni instalé Safari, uso Internet Explorer 8 beta 2, por que viene con el sistema operativo y lo tengo actualizado por solo una caracteristica, la búsqueda en la página me ha permitido deshacerme de la barra de Google. Una cosa menos que instalar. Internet Explorer, me parece suficiente y no soy tan adicto a internet como para que sea vital para mi tener ciento cincuenta y siete addins en mi navegador o que javascript tarde 3 milésimas de segundo menos en una página. Tengo Firefox instalado para asegurar la compatibilidad de algunos desarrollos.


Pero he dicho que hoy toca hablar de gilipolleces, así que no voy a tocar ningún aspecto técnico, ni voy a hablar del aislamiento de procesos, ni de V8, ni de la ausencia de un API de plugins… voy a hablar de porque en mi opinión Google ha sacado un navegador.


Se han escrito muchas idioteces sobre Chrome muchas… que si el sistema operativo del futuro, que si el sistema operativo de la computación en la nube, que si una plataforma para suites ofimáticas en la nube, bla, bla, bla… Pero lo que me intriga es por qué Google, que financia en gran parte, de manera directa o indirecta, el desarrollo de Firefox, saca su propio navegador. Y creo que tengo la respuesta: es porque las aplicaciones Ajax son una autentica mierda, comparadas con las aplicaciones de escritorio claro está. ¿De verdad alguien cree que se puede usar Google Docs de manera productiva?.


Cada vez se habla más de la web 2.0, pero la web 2.0 no es HTML, es Ajax… Pero Ajax es una mierda, frente al escritorio, todo lo sabemos… Por eso cada vez hay más Flash en la web, por eso existe Silverligth… y ese es el problema de Google. Google esta metido en muchos fregados… pero solo hay uno que le da dinero: los anuncios inyectados en HTML, el resto son muy divertidos pero no dan un clavel. Por mucho que sea suficiente que Google especule con que alguna vez rentabilizará el resto de sus proyectos para que su acción reaccione, esto tiene un fin. Youtube no da un duro a parte de los anuncios de texto, que ya estaban ahí antes de que Google gastase un pastón en comprar Youtube… Google gana ingentes cantidades de dinero con los anuncios en la web, pero solo con eso, todos los huevos están en la misma cesta… por eso necesita que la web 2.0 siga siendo amigable con sus anuncios.


Aquí es donde Chrome es la clave. Chrome no compite con Firefox o con Internet Explorer, Chrome compite con Flash y con Silverlight. Chrome nace para que las aplicaciones Ajax en la web sean productivas. El modelo de negocio de Google esta construido sobre un pilar: la web es de texto (HTML) no binaria. Si la web se convierte en binaria, Google no puede ganar dinero con ella. Esa es la clave del asunto Chrome.


De todos modos, en mi opinión la apuesta de Google es muy arriesgada. No se trata de que todos usemos Chrome, Chrome no es el fin, es el medio. Es el medio de decirles a los otros navegadores tenéis un competidor que quiere hacer que la web sea rápida y productiva así que vosotros también debéis hacer que la web sea rápida y productiva… ¿Alguien cree casual que Firefox, financiado por Google, haya elegido cambiar su motor de Javascript justo en el momento en que Google lanza Chrome?. Para Google es absolutamente vital que la web, tal y como la conocemos hoy, basada en texto y con sus omnipresentes anuncios siga así. Todo lo demás que hace Google son inversiones de dudoso resultado y humo. Además  de almacenar datos sobre nosotros, claro… pero eso es harina de otro costal.


La pega para Google es que la productividad de la web no solo depende de lo bueno que sea el navegador, que también. El otro factor relevante es la velocidad de acceso. Con Ajax además ya no solo importa la velocidad de bajada, la de subida y la latencia son factores relevantes. ¿Alguien sabe en que está gastando ingentes cantidades de dinero Google, mucha más que en Chrome?: en mejorar la infraestructura básica de internet. Enviando satélites de comunicaciones, proyectando más y pensando en cómo añadir capacidad a Internet allí donde haga falta mediante, por ejemplo, centros de datos flotantes. Un síntoma más de que el músculo de Google, pese a lo que nos quieren hacer creer está solo en una cosa: hacer que la web tal y como es hoy en día, la web que les a hecho ricos, no cambie hacia un modelo de web binario en el que ellos no puedan inyectar sus anuncios de texto. Fijaros lo que dice Brad Neuberg, miembro del equipo de Google Gears en su artículo titulado ¿Qué es la web abierta y por qué es importante?… vital para Google añadiría yo. Una prueba más de que Google teme Flash y Silverligth.


No deja de ser paradojico otro tema. ¿Sabéis cúal es el complemento de Firefox (recuerdo que es un proyecto pagado por Google) más popular? AdBlock. Un bloqueador de anuncios, que entre otros bloquea los de Google. ¡Firefox, pagado por Google, bloquea los anuncios de Google!, la fuente del 95% del dinero que entra en la empresa… eso es morder la mano que te da de comer. De hecho, en Chrome no hay soporte para addins, ni se le espera en un futuro cercano, según la gente que ha mirado el código. Pero claro, el buenrollismo Googleliano les impide dejar de dar pasta a Firefox… eso, y que necesitan que Firefox colabore a hacer la web cada vez más productiva también. Unamos a esto que Microsoft declara que para ellos no es la mayor prioridad que Internet Explorer sea rápido, se van a centrar en la usabilidad… la película completa. Para Microsoft el navegador no es vital, tiene Silverligth para aplicaciones RIA y Explorer para navegar razonablemente y de manera cómoda la web, pero para Google Silverligth y Flash son una amenaza. Resumiendo, Chrome solo es una maniobra más de ‘vendor lock-in’, de las que todos los proveedores de software nos intentan colar de vez en cuando. No lo crítico, ojo, es lógico que los fabricantes nos quieran atar a sus productos sean software, servicios o anuncios en la web.


Joder… después de leer esto, me dan ganas de hacerme una foto en blanco y negro con cara de gilipollas prepotente y dedicarme a escribir idioteces, con el único afán de decirle al mundo lo listo que soy y la visión que tengo… no se me da mal ¿eh?…


Nota: que los lectores habituales del blog no se asusten, no voy a cambiar la temática del blog, tras hacerme la foto en blanco y negro no puedo evitar que me salgan brillos del flash en la calva…, así que he descartado la idea. 🙂


Saludos!

Chrome usa código abierto de Microsoft

Que cosas tiene la vida, oye. Va a resultar que el código de los ingenieros de Microsoft no es tan malo como nos quieren hacer creer a veces los partidarios de otros sistemas operativos… Me da por mirar que librerías usa Chrome, y veo que, además de lo ya sabido de que usan Visual Studio como entorno de desarrollo, Chrome usa WTL, Windows Template Library, una librería excelente, basada en metaprogramación mediante templates de C++, que genera ejecutables extremadamentes eficientes y sin dependencias externas, para hacer interfaces de usuario tirando directamente del API de Windows que Microsoft publico con licencia abierta hace tiempo.

Esta librería es la alternativa que elegiamos los desarrolladores de C++ en Windows cuando no queriamos tener que arrastrar el mastodonte, que comparativamente, es MFC. Sin duda los desarrolladores de Chrome saben elegir, WTL es una pieza de código excelente en rendimiento para mí la mejor librería que nunca ha salido de Microsoft. Si estáis intersados en la metaprogramación con templates WTL es una pieza digna de observación.

Quizás su uso en Chrome saque esta librería de un inmerecido olvido y desconocimiento.

Cada vez me gustaría más que Microsoft liberase su código, así podriamos centrar las discusiones en temas meramente técnicos…

Un saludo.

Nota: Tras escribir esta pequeña nota, veo que Scott Hanselman ha escrito sobre el tema, un post muy interesante.

Virtualidad vs. Eventos

El otro día, un amiguete desarrollador, me escribia lo siguiente:

«Estoy discutiendo con Manolo una cosa sobre que es mejor, te cuento nuestro problema:

Tenemos un formulario base, que realiza una serie de acciones, y tengo un método de insertar que para todos los formulario lo hace igual.

El resto de los formularios los heredamos del formulario base, pues bien, queremos poden, en algún caso especial, que después de la inserción en el formulario hijo se hagan una serie de acciones. Yo digo que es mejor crearse en la clase base un método virtual y sobreescribirlo, en una clase hija.  Manolo dice que es mejor tener un evento y un delegado.

¿Puedes aclararnos quien de los 2 tiene razón?»

Esta pregunta suele ser habitual, por eso público esta entrada. Por eso y porque quiero conocer vuestra opinión. Hay una serie de situaciones donde saber si es mejor usar un método virtual o un evento es dificil.

Yo respondí lo siguiente:

«Que cosas tiene la vida…

Los dos tenéis razón y los dos estáis equivocados… interesante paradoja no…

¿Por qué los dos tenéis razón?: Los dos mecanismos son muy similares. La diferencia es sutil. Si buscas un mecanismo para modificar el comportamiento de una clase mediante herencia el camino es la virtualidad, si buscas un camino para que otras clases se enteren que esta haciendo tu clase eso es un evento. Lo dicho hasta ahora ya lo sabéis… la clave está en que el evento no permite sobreescribir totalmente el comportamiento, y el método virtual sí, si necesitáis esto yo usaria virtualidad (se trata de algo similar al clásico patrón strategy).

Véis que hay una clara cuestión semantica: si publicas un evento estás diciendo: quiero que mi clase le cuente cosas al mundo, si publicas un método virtual estás diciendo al mundo que puede modificar el comportamiento de tu clase y que ha sido diseñada para soportar esa posibilidad. ¿Qué es lo que queréis comunicar a quien use vuestra clase?.

Otra cuestión relevante es que ambos mecanismos permiten cambiar el comportamiento de la clase base, cambiar que ocurre en ciertas ocasiones… pero la virtualidad exige heredar y por tanto es un mecanismo que solo se resuelve en tiempo de compilación, sin embargo el evento se puede subscribir y desubscribir a voluntad en tiempo de ejecución, quzás necesitéis esa capacidad en algún escenario.

¿Por qué los dos estáis equivocados en cierto modo?: Por qué no sol soluciones excluyentes entre sí. Quizás la mejor solución sea usar un evento. Paradojico ¿no? Os cuento el porqué: el patrón de .net para implementar eventos dice que todo evento debe tener asociado un método protegido virtual que permita sobrescribir en clases derivadas el comportamiento de invocación del evento.

Conclusión: Si tiraís por el evento, tenéis que tener también un método virtual, o sea, lo dos ganáis. Tenéis los dos mecanismos y dáis, con casi nulo esfuerzo, mayor flexibilidad a los que usen vuestra clase.

Lo mejor del caso es que con el evento, además estáis implementando dos patrónes: polimorfismo (mediante virtualidad) y observación (mediante el evento), de tal manera que es quien usa la clase quien elige que mecanismo es el que más se adecua en cada situación.

Otra opción sería usar IoC y un inyector de dependencias, tipo Unitiy, pero creo que eso es, en este caso, harina de otro costal. Un inyector de dependencias os permitiria cambiar el comportamiento mediante configuración, sin tocar el código, pero no creo que esto sea lo necesitáis. Aunque sea la solución de moda.»

¿Compartís mi visión del asunto? ¿Qué soléis preferir en situaciones de este tipo, virtualidad o eventos?. Solo como comentarío añadido decir que mi compañero Unai es más partidario de usar solo virtualidad para el caso que nos ocupa…

Seguridad vs usabilidad: la solución al eterno debate

Seguridad vs usabilidad

En mi pueblo, Belorado, donde he tomado esta foto, el eterno debate entre seguridad y usabilidad tiene un ganador claro… la seguridad. A través de esta ventana no hay posibilidad de intrusión alguna… ni de ver claro.

Al ver esta estampa no pude más que recordar, con cariño, a los administradores de red que ‘sufro en silencio’. Seguro que aprovecharán para aplicar una o dos políticas más… :). Al fin y al cabo nuestros sistemas seguro que no son tan seguros como esta ventana… (lógicamente esto es una broma, se que solo hacen su trabajo con el celo y la profesionalidad que la situación requiere).

Un saludo a los dos Ivanes!!!

Evento: Ask the expert: Scrum y Team System

Banner Team System

En esta ocasión desde Microsoft y con la colaboración de un servidor, en nombrre de Plain Concepts, os ofrecemos un evento en el que consultar libremente todas vuestras dudas sobre la implantación de Scrum utilizando Team System como herramienta de gestión de proyectos. Se trabajarán temas como las dificultades que Scrum presenta, cómo Team System soporta técnicas modernas de ingeniería del software (construcción automatizada, integración continua, pruebas unitarias, etc…) comúnmente usadas en el marco de las metodologías ágiles.

Por si las dudas de los asistentes no son suficientes se plantearan los siguientes asuntos sobre los que comentaré experiencias fruto de numerosas implantaciones de Scrum y Team System:

  • Scrum y sus dificultades.
  • MSF y sus dificultades.
  • Funcionamiento y trucos de la plantilla metodológica de Scrum.
  • Uso sobre construcción automatizada, integración continua y pruebas unitarias en entornos ágiles.
  • Gestión de la configuración en entornos ágiles.
  • Planeamiento y métricas con Team System en entornos ágiles.

Aunque el evento esté orientado a Scrum, cualquiera podrá plantear sus dudas sobre otras metodologías ágiles como MSF Agile.

Si este evento es de vuestro interés, no dudéis en inscribiros.

El evento será en las oficinas de Microsoft en Pozuelo de Alarcón, Madrid.