29 julio 2005

NO eres un incompetente

Hay veces en las que tengo que revisitar una y otra vez esta entrada del excelente blog Secret Geek, con el original lema dot nuts about dot net. De verdad, entre tanta gente tan lista como hay suelta por ahí, a veces me hace falta repetírmelo como un mantra...

27 julio 2005

Nini

Bajo tan curioso nombre (que viene de combinar la ubicua N de .NET con la famosa extensión de los antiguos ficheros de configuración) encontramos una librería de configuración para aplicaciones .NET: Nini.

Permite manejar ficheros INI, ficheros XML, ficheros de configuración específicos de .NET (los .config), el registro de Windows y argumentos de línea de comandos. Espero poder probar esto dentro de poco, ya que me viene que ni pintado para una aplicación que estoy desarrollando en el ámbito personal.

[Vía Versión Cero]

26 julio 2005

Estilo sobre substancia

Y ya que hablábamos en el anterior post, echadle un vistazo a Huh Corporation?, una parodia de sitio web corporativo que se descojona de las tonterías habituales en el mundo de la consultoría a alto nivel. Imprescindible.

Programadores de segunda clase

En su post más reciente, Hitting the high notes, Joel Spolsky ha metido la pata. Hasta la misma rabadilla. Y ojo, que hay cosas con las que estoy de acuerdo. Pero hay otras con las que no puedo más que estar furibundamente en desacuerdo. Traduzco lo más chirriante del artículo:


¿Podemos hablar en software acerca de alta calidad artística? "Quizás alguno sí lo sea", dices, "pero yo trabajo en cuentas de interfases de usuario para la industria de residuos médicos." Pues muy bien. Ésta es una conversación acerca de compañías de software, software de venta directa, donde el éxito o el fracaso de la compañía es un resultado directo de la calidad de su código.


Es decir, que si no trabajas haciendo la nueva versión de Office, o el ContaPlus, o el Mcaffe Antivirus; o cualquier otro software que se pueda comprar en el Corte Inglés, por ejemplo, importa mucho menos la calidad de tu código. Y ahí, entre otras cosas, es donde Mr. Spolsky está muy, pero que muy equivocado.

Y sigue:

Por desgracia, esto no se aplica realmente al desarrollo de software interno. El software interno, in-house pocas veces es lo bastante importante como para justificar el contratar a estrellas del rock. Nadie contrata a Dolly Parton para que cante en una boda. Esa es la razón por la cual las carreras más satisfactorias, si eres un desarrollador de software están en las compañías de software reales, no haciendo IT para algún banco.


Repudio absolutamente esta visión del mundo del software. Puede que quede muy bien en las fiestas decir "Soy el tío que programó MS Excel" o "Yo hice el WinZip". Es muy chulo y, quién sabe, en ciertos ambientes puede que sirva hasta para ligar. Pero ésa no debe ser la razón principal por la que uno deba estar en este mundillo. Si uno lo que quiere es ser famoso no se mete los manuales que nos metemos nosotros entre pecho y espalda, neh?

La nuestra, como los policías, debería ser una vocación de servicio. Y nunca, nunca, perder de vista al usuario final. Si el trabajo que hacemos en un banco, o en un ministerio, o en un video-club hace que las personas que trabajan en ese banco o en ese ministerio o en ese video-club hagan su trabajo más rápida o más eficientemente, hemos cumplido. Si logramos que un usuario haga los mismos procesos que hacía antes (o incluso más procesos que antes) con menos cantidad de esfuerzo por su parte, hemos cumplido. Si conseguimos que un usuario llegue a casa a tiempo gracias a nuestro software, hemos cumplido. Ése debería ser nuestro enfoque a la hora de crear software, y no el ser famosos en los foros, blogosferas, listas de correos y demás paridas que sólo importan a los geeks.

Por cierto, que dos de los bloggers a los que tengo sindicados ya han respondido, furibundamente, a Joel. Scott Reynolds y Phil Haaack.

PD.- Claro que Mr Spolsky sigue descalificándose en su artículo, al menos a mis ojos, debido a la desmedida admiración que le merece el iPod. Dice Mr. Spolsky:


O mira el iPod. No se puede cambiar la batería. Así que cuando la batería muere, mala suerte. Cómprate otro iPod. En realidad, Apple te lo cambia si se lo mandas a la fábrica, pero eso cuesta $65.95. Wowza.


¿Por qué no puedes cambiar la batería?

Mi teoría es que Apple no quiere dañar la por otro lado perfectamente suave y sin costuras superficie de su hermoso y sexy iPod con una de esas horribles cubiertas de batería [...] El iPod es [...] hermoso, como un suave canto rodado. Una cubierta de batería estropearía todo el efecto de piedra de río.

Apple hizo una decisión basándose en el estilo, de hecho, el iPod está repleto de decisiones que se basan en el estilo. Y el estilo no es algo que 100 programadores de Microsoft o 200 diseñadores industriales en la mal llamada Creative van a ser capaces de conseguir, porque no tienen a Jonathan Ive, y no hay muchos Jonathan Ives flotando por el aire.


Lo que viene a demostrar que Joel Spolsky es otro integrante del triste ejército de idiotas a los que les preocupa más el estilo que la funcionalidad. Me imagino a Mr. Spolsky comprándose un coche muy, pero que muy bonito pero al que no se le puede repostar gasolina en cuanto se agota el depósito que viene relleno de fábrica; y todo porque un diseñador muy, muy listo ha decidido que una tapa que acceda al depósito de gasolina desde la carrocería quedaría muy feo y estropearía el diseño del coche. Por favor.

25 julio 2005

Gazapo

Existen, existen. Y uno no puede evitarlos. A nada que se junten más de dos letras, existe la posibilidad de cometer un gazapo. Y cuando hablamos de traducciones, la posibilidad de su existencia parece incrementarse exponencialmente. Pero es que a veces uno piensa que no son gazapos, que no son errores, que su origen está más emparentado directamente con la desidia y la poca profesionalidad.

Llevo un tiempo aprovechando los (pocos) ratos de ocio que tengo viciado a un FPS de la Segunda Guerra Mundial que, por otra parte, es mi género favorito dentro de los shoot'em ups de primera persona: el Medal of Honor: Pacific Assault. Y lo estoy jugando offline, siguiendo el modo historia, que es como más me gusta jugar a esta clase de juegos. El modo online lo dejo para cuando me he terminado la historia, si es que llego a jugarlo. Y mi queja principal con esta clase de juegos suelen ser los doblajes y las traducciones.

En este caso, por suerte, el juego no está doblado.Pero si tiene la opción de incluir los subtítulos en castellano. Uno suele entender bastante bien las voces en inglés de los juegos, pero siempre es bueno dejar los subtítulos puestos, por si acaso algo no se entiende. Y en estas, cuando menos lo espera, se caza un gazapo. Tamaño grúa industrial, por cierto.

Estaba en una fase del juego en el que hay que defender un sitio llamado "Cerro Sangriento" del asalto de miles de millones (o, al menos, esa es la impresión que da) de soldados japoneses a bayoneta calada. Cuando ya me dolía el dedo índice de disparar balas virtuales, oigo un ruido de un motor de avión y a uno de los soldados americanos decir algo así como "It's over! The cavalry is here!!". Lo que en castellano viene a decir: "¡Se acabó! ¡Ha llegado la caballería!".

Y leo en los subtítulos: "¡Esto es un calvario!"

Vamos, que ni corto ni perezoso el traductor encontró cavalry y tradujo por calvario. Y se quedó como yo: más ancho que largo.

22 julio 2005

Colaboración

He vuelto a encontrarme con uno de mis miedos ancestrales: Visual SourceSafe. ODIO este programa, me parece anti-intuitivo, inseguro, frágil, difícil de configurar y de mantener y se acerca mucho a la inteligencia artificial: hace lo que le sale de las narices.

Antes de entrar en mi empresa actual, tuve una época feliz en la que desarrollaba proyectos para dispositivos móviles. En medio de un grupo de desarrolladores en Java, la mía era la única máquina con .NET instalado y yo hacía de hombre orquesta: yo me lo guisaba, yo me lo comía. Todos los días antes de irme a mi casa, copiaba las carpetas de proyecto a un servidor como backup y santas y benditas pascuas. Antes de eso, en mi fugaz etapa como desarrollador Java utilizé CVS y a pesar de mi inicial reparo por lo desconocido, llegó a gustarme. En mi casa utilizo habitualmente Vault, de Source Gear que, a pesar de darme algún problema inicial de configuración ahora va como la seda. Cualquier cosa, cualquier cosa, antes que SourceSafe.

El caso es que ahora lo acabo de heredar en un proyecto, y no está la cosa como para ponerse a hacer experimentos con el control de código fuente, así que tendremos que quedarnos con él. Con más miedo que vergüenza, pero habrá que hacerle frente.

En casa, por cierto, utilizo otro control de código fuente: CVS. Instalé y configuré el TortoiseCVS, un excelente front-end para CVS que no tiene interfaz gráfico propio y se instala como extensión del Explorador de Windows, para poder bajarme código fuente de un proyecto de SourceForge que me interesaba (y que me maten ahora si recuerdo cuál era, demonios). Pude hacerlo sin mayores problemas gracias a esta guía de Phil Haack. Por cierto, que si instaláis Tortoise sólo para bajaros código fuente y no para colaborar activamente en un proyecto de SourceForge, no hace falta que instaléis el resto de programas que menciona en su guía para generar claves identificativas únicas.



Y aprovechando que hoy, 22 de julio de 2005, este modesto blog cumple su primer añito, me hago una solemne promesa que no tardaré en ignorar: mirar en qué proyecto de .NET en SourceForge puedo colarme y colaborar. Hay una cosa que me encanta de la comunidad .NET y que creo que ya he mencionado en alguna ocasión: cómo nos hemos puesto las pilas (y me incluyo porque programo en .NET, no porque yo me haya puesto las pilas) y nos hemos lanzado a crear proyectos Open Source para nuestra herramienta de desarrollo favorita, copiando el espíritu Java de crear herramientas Open Source de calidad comercial para los demás programadores. Creo que este tipo de iniciativas son claves para un sano desarrollo de .NET, tanto o más que las iniciativas que la propia Microsoft lance. Y todos, en la medida de lo posible, deberíamos intentar aportar nuestro granito de arena.

18 julio 2005

Chorrada

Un picacódigos sin vacaciones es un picacódigos desgraciado...
En realidad, esta imagen me la han enviado por correo (gracias, Will) bajo el título ¿Necesitas vacaciones?. El cachondo de mi amigo sabe que este año no voy a tener vacaciones, al menos en verano, y éste es su particular modo de animarme. Además, estaba deseando estrenar la capacidad de Blogger para meter imágenes en los blogs sin tener que alojarlas uno mismo. (NOTA.- Esa capacidad tendré que dejarla para más adelante: al subirlo a Blogger el GIF animado se ha corrompido sin remisión)

En todo caso, y viendo como aumentan los comentarios en el blog cada vez que me meto con los pingüinos, creo que voy a renombrar el fichero como "¿Qué, instalando Linux?". Sutil, lo sé.

Y no, en realidad no necesito vacaciones. Yo lo que quiero es jubilarme.

13 julio 2005

Microsoft e-Learning

Cursos de e-learning (también disponibles offline) de Microsoft, en Microsoft eLearning. Algunos de ellos son gratuitos hasta el 8 de noviembre de 2005.

Parad, que me bajo

Estaba tranquilamente repasando mi (creciente) colección de feeds en Bloglines, y he visto el último artículo del siempre acertado Joma. Me disponía a contestarle cuando he visto que la respuesta daba para un artículo aquí, y a ello vamos.

El artículo de Joma, aunque realmente deberíais leerlo, viene a contestar a otro artículo en el que se acusaba a Microsoft de promover Vaporware por publicar recientemente unas pantallas de Windows Longhorn, y se quejaba amargamente de cómo la gente (la estúpida, estúpida gente) no se cambiaría a Linux y preferiría esperar a la enésima versión de Windows que, claro, está copiado de Apple, es malo malísimo y ahora además es vaporware.

Una de las cosas que más me cabrean de las guerras religiosas de este tipo es que muchas, muchas veces nos intentan hacer comulgar con ruedas de molino. Ahondando en el ejemplo expuesto, a Windows se le exige que funcione en todo momento con cualquier combinación de hardware imaginable. En cambio, les parece mejor sistema operativo uno que está específicamente programado para un hardware muy concreto, como el de Apple, y así programo SOs estables hasta yo. Jugando siempre en casa, cuando tu portería mide quince centímetros y la del rival 15 metros, es fácil ganar.

Y también les parece mejor sistema operativo uno que es muy posible que no tenga drivers para tu hardware, y si los tiene es muy posible que los haya creado un chaval independiente, y que como a él y a su primo le funcionan, pues ésos son los drivers oficiales, es decir los que hay. Y si no te gustan, te programas tú otros, ¿no es maravilloso?

Y cuando resulta que Windows les falla cuando se instalan todo el malware que les viene a la cabeza, abren cualquier tipo de correo electrónico sin mirar, dicen que sí a todo en todo momento, tienen un hardware con disco duro X, controladoras Y, tarjeta de vídeo Z, una pastilla de RAM nona y otra de RAM prima, en definitiva el bisnieto bastardo del monstruo de Frankenstein hecho computadora; y les da un pantallazo azul al arrancar un juego que dice claramente en la caja que está diseñado para un hardware superior al suyo, bum!: es que Windows es una mierda de sistema operativo.

Sin ni siquiera mencionar de refilón que con el maravilloso sistema operativo de la manzanita no tienes más cojones que utilizar el maravilloso ordenador de la manzanita, y no hay alternativa. Sin ni siquiera mencionar de refilón que con el maravilloso sistema operativo del pingüino hubieras tenido que recluirte en tu casa en plan monje zen durante seis meses para configurar todo a tu gusto y conseguir que funcione, forrando las paredes de tu cuarto con todas las URLs de todos los foros donde algún otro ha conseguido instalar la configuración que tú tienes después de n intentos.

Luego, como el propio Joma dice, si Microsoft va mostrando pantallas de sus próximos productos está anunciando vaporware. Si Apple, cualquier distro de Linux, Google o cualquier otra compañía de sus entretelas hace lo mismo es publicidad legítima y lógica de mercado. Exactamente igual que si Bill Gates abre la boca son las palabras maléficas de Satán en la Tierra (incluso cuando dona un montón de pasta, lo hace para desgravar impuestos); pero cuando Stallman abre la suya para dictarme lo que tengo que hacer es lógico y coherente y sobre todo muy libre. No ver nada más que pajares en el ojo ajeno e ignorar los Guggenheims en el propio es otro ejemplo más de ceguera selectiva.

A ver cuándo se enteran: el principal problema que tiene Linux para conseguir una base mayor de usuarios no es Windows: es el propio Linux. Su esoterismo, su dificultad, su hermetismo. Jamás he visto un software tan abierto para unos y tan opaco para otros. Y el hecho, impepinable, de que es un Sistema Operativo diseñado teniendo al usuario final en el último, ultimísimo orden de prioridades. Es un sistema operativo diseñado por, pero sobre todo para, informáticos.

No se puede implementar una característica de un sistema operativo en base a su coolness factor, sino en base a su utilidad. No se puede implementar una característica de un sistema operativo pensando en la legión de geeks que admirarán tu elegante código fuente. No se puede implementar una característica de un sistema operativo y dejarla sin interfaz, sin ayuda documentada (no, los comentarios en el código no son ayuda al usuario), sin asistentes, etc.

Bueno, poderse, se puede. Lo que luego no se debería poder hacer es quejarse amargamente de que los usuarios finales (sí, esos que no tienen carrera de informática) no quieren usar mi aplicación o mi sistema operativo porque otro es más sencillo. Qué cabrones son los usuarios. Qué tontos. Qué ciegos a las maniobras de márketing de Redmond.

Así que sintiéndolo mucho, pero si para ser un geek o parte de la l33t hay que tener esta clase de ceguera selectiva, no contéis conmigo. Parad, que me bajo.

--

Aparte del eterno cantar, descubro vía Versión Cero un framework de persistencia independiente de base de datos para .NET, llamado Gentle .NET que parece muy interesante. Como digo siempre, habrá que probarlo. A ver cuándo coño tengo vacaciones para probar el cerro de cosas que tengo que probar.

05 julio 2005

En camisas de once varas

Siempre he sido desarrollador en Windows. Nunca me ha gustado demasiado, nunca me he sentido demasiado cómodo programando para la Web. Y sin embargo poco puedo hacer al respecto: el paradigma Web es algo que nos lleva invadiendo mucho tiempo y del que no se ve una salida cercana, a pesar de la innegable presencia y las numerosas ventajas de los smart clients.

El caso es que ahora mismo estoy metido, cómo no, en un proyecto ASP .NET, en C#. Y, claro, está implementado mediante el sagrado patrón MVC, o Modelo-vista-controlador; más presente en el panorama tecnológico actual que un crucifijo en una iglesia. Y es que en el fondo los programadores somos criaturitas de costumbres, y cuando nos dicen que algo funciona, lo usamos. A piñón, haga o no haga falta, existan o no soluciones mejores.

¿O quizás serán los gerentes, esas personas generalmente sin background técnico pero con capacidad de decisión, los que realmente imponen estas cosas? ¿Será posible que nos dejemos enmarronar en cacaos cada vez más esotéricos sencillamente porque los que mandan han leído algo al respecto y les ha gustado el nombre, como tanto gustan de workflows, know-hows, sinergias y demás giliflauteces? Naaaaahhh...

El caso es que ojo, no estoy despotricando contra el MVC, que es un patrón que me gusta. Pero tendréis que admitir que para según qué proyectos es uno de los mejores ejemplos de la vieja y refinada táctica militar de matar moscas a cañonazos. Y las cosas empeoran cuando los clientes están migrando una antigua aplicación de escritorio y quieren, claro, que su nueva y flamante aplicación Web tenga como mínimo las mismas capacidades y funcione de forma muy similar para que la transición sea menor. Y así pasa lo que pasa, que nos encontramos proyectos J2EE con páginas web diseñadas calcando las botoneras, y las cajas de texto y las reglas de interfaz de una vieja aplicación Visual Basic. Y el aborto resultante, repletito de líneas y más líneas de JavaScript de lado de cliente para emular esa funcionalidad, termina por ser una hidra inmanejable.

Es lo que pasa con las medias tintas: tenemos que hacer una aplicación web para que cualquiera pueda acceder sin instalarse nada, sea fácilmente manejable y se pueda actualizar el código sin que los usuarios tengan que reinstalarse n versiones del aplicativo. Pero es que además queremos que sea tan manejable como nuestra vieja aplicación para escritorio, y que muestre muchos mensajitos, y que cargue documentos del lado del cliente, y si me apuráis hasta que cambie el registro de Windows del lado del cliente. Y no se puede: como dice mi madre, o se está en la misa o se está en la procesión.

Hay que elegir. ¿Queremos una aplicación web con las obvias ventajas que representa? Apechugemos con los inconvenientes que también (e innegablemente) tiene, a pesar de la moda del momento. Y diseñemos una aplicación web como se debe, atendiendo a la usabilidad de un interfaz mucho más limitado hoy por hoy que el de una aplicación de escritorio.

Y si no queremos renunciar a esa usabilidad, deberemos seguir creando aplicaciones de escritorio, pero aprovechando las posibilidades actuales que se nos brindan, como las actualizaciones automáticas del software de escritorio. Que, siempre bajo mi muy subjetivo, prejuiciado y seguramente equivocado punto de vista, era en lo único que las aplicaciones web superaban a las de escritorio: la capacidad de que las actualizaciones de software fueran distribuidas automáticamente y de forma transparente al usuario.

En fin, volviendo al argumento inicial, he estado investigando un poco y he encontrado un par de enlaces interesantes. Ya había trabajado con el MVC en J2EE, con lo cual no me pilla completamente de nuevas, pero nunca había trabajado con MVC en .NET. Y aquí he encontrado un artículo de Microsoft con un ejemplo sencillito al respecto. Curioseando un poco más, encuentro un framework para MVC en .NET: es un port de uno ya existente para Java (otro port más) llamado Maverick .NET. Una de las gracias que tiene, bajo mi punto de vista, es que puedes independizarte completamente de las páginas ASPX y sus controles de servidor y generar las vistas mediante transformaciones XSLT de datos XML generados por el controlador, lo que permite que el navegador cargue sencillamente HTML. Lo mismo que hacía en J2EE.