Llevo algún tiempo recogiendo información sobre las características más interresantes de Tiburón, la próxima versión de Delphi, especialmente de los genéricos y métodos anónimos. Pero entre las vacaciones offline y la vuelta al trabajo con prisa incorporada, me temo que, en vez de artículo técnico, voy a volver a soltar una batallita. No solemos comprar el diario, pero nos dio por ahí un domingo en Chiclana, durante las vacaciones. Me encontré con un artículo que me hizo acordarme de cuando hacíamos autoestop. Chiclana a estas alturas sigue sin tener tren, por lo que la comunicación con el resto de poblaciones de la zona de la Bahía de Cádiz siempre ha sido bastante incómoda si no tienes coche. Durante bastante tiempo, cada vez que había algo que ver en El Puerto o Jerez, no era raro que recurriésemos a hacer autoestop y dedicar el dinero del transporte a otros fines, normalmente poco edificantes.
Con diecimuchos o veintipocos años nos parecía buena idea. Ahora que están lejos, nos podemos reír de las locuras. Pero pensándolo bien, es para acojonarse retrospectivamente. ¿Que si nos pasó algo curioso alguna vez? Bueno, la pregunta podría ser más bien que cuándo no nos pasó nada reseñable. Me cuesta ubicar en qué excursión nos encontramos con un señor que quería relaciones, otro que iba sin frenos, otro que preguntaba si llevábamos porros y quién me acompañaba cada vez. Pero no me cuesta recordar una vez que Cristóbal Navarro y yo fuimos a ver a Emilio Oliva torear a El Puerto de Santa María. Nos llevaron relativamente rápido hasta Tres Caminos, lugar donde empieza la N-340. Allí había ya una pareja de hippies "haciendo dedo", así que anduvimos unos treinta o cuarenta metros para no ponernos justo al lado. Al cabo de un rato nos cogió alguien que tenía demasiada simpatía por los hippies, que se quedaron allí. De todas formas no nos llevó mucho más allá, soltándonos en el Barrio Jarana.
Al cabo de un rato apareció un taxi que paró en la venta y del que vimos bajar al taxista y los dos hippies. Cristóbal y yo llegamos a la conclusión de que la pareja se había cansado de que no los parase nadie y habían terminado pillando un taxi. Después del tiempo de tomar un café, salieron los tres, subieron al taxi y se pusieron de nuevo en marcha. Al pasar por nuestro lado bajamos el dedo, como de costumbre para no crear confusiones con los taxistas. Pero el taxi se paró y nos animaron a subir. Lo interpretamos como un gesto de solidaridad por parte de los hippies y nos subimos detrás con la chica. Nos dirigieron algunas palabras amables y arrancamos bruscamente.
El taxista preguntaba al hippie sobre a dónde podían ir. No nos enteramos de demasiado, pero parecía que se decidían por Madrid. Lo primero que nos chocó un poco fue la insistencia del taxista sobre lo poco que le gustaban los chivatos y en que les daba un tratamiento especial. ¡A nosotros tampoco nos gustan!-- le aseguramos. Cuando adelantó a otro automóvil por la derecha metiéndose en el arcén, poco antes de entrar en Puerto Real, Cristóbal y yo ya nos mirábamos de reojo sin decir palabra. "¡El coche de papá, el coche de papá!" era su lema. Pasado Puerto Real se metió por la autopista. Afortunadamente nos hizo caso cuando le pedimos que nos dejase allí alegando que íbamos a El Puerto y no nos venía bien.
Al día siguiente nos enteramos de que había robado el taxi amenazando con un cuchillo en la garganta al taxista. El taxi apareció en Morón al día siguiente. Decía que era "el enemigo público número uno", cosa que a mí me sonaba a los tebeos de Vázquez, pero ahora me parecía bastante menos divertido. Éste es el artículo de El País sobre Rafael Bueno Latorre que me ha recordado la presente historia. Parece que efectivamente le gustaban poco los chivatos. Y parece que sigue en paradero desconocido. Así que francamente no recomiendo el autoestop a nadie.
.
Desde que era un chavalín tenía la ilusión de practicar este deporte. Siempre me pareció algo lejano. Primero porque una vela costaba una pasta que no tenía. Después porque me fui a trabajar lejos de mar. A pesar de los 44 que me acaban de caer, me he decidido por fin y he tomado en Sancti Petri una semana de clases, que tengo intención de prorrogar. He sufrido un poco porque estaba en bastante mala forma, ¡ay, la buena vida! Pero ahí me tenéis en la foto, en medio con la vela amarilla limón, con el Castillo de Hércules al fondo. Ahora estoy bastante contento. Me lo he pasado genial y estoy en mejor forma.
Hace unos días, el 15 de julio, estuvimos en la actuación de Loreena McKennit en Madrid, en el patio del Conde Duque. Sólo la conocía por grabaciones, pues cuando encontré su música ella ya no actuaba en directo tras la muerte en accidente de su novio. Hace un par de años sacó un nuevo disco y ha estado dando conciertos, uno de ellos en la Alhambra, que ya me hubiera gustado ver. Disfruté mucho del del otro día, a pesar de que llovió un rato al principio. El sitio no es muy grande, gran parte del público sentado, pero el lleno fue total. Cantó alguna de mis favoritas, como Lady of Shalott, The Old Ways, The Mummers' Dance, The Mystic's Dream y Noche oscura del alma.
Hoy uno de julio se convierte en efectiva la compra de CodeGear, y con ella Delphi, por parte de Embarcadero, del grupo Thoma Cressey Bravo. He hablado por aquí bastante del proceso por el que Borland ha vendido Delphi, desde el anuncio inicial de que querían vender hasta las noticias recientes de que se había llegado a un acuerdo con Embarcadero. A partir de hoy Delphi tiene oficialmente un nuevo dueño. Que sea para bien.
Actualización 23:30: entre las diversas reacciones, veo esta historia de Allen Bauer en que cita al nuevo jefazo, diciendo que Delphi/C++ Builder son parte de los "productos centrales" junto a los de siempre de Embarcadero. También David Intersimone dice que entre los padecimientos para los que tendrán cura está como primer punto "mis profesionales carecen de independencia porque estamos atados a una única plataforma". Delphi en un puesto especial. Única plataforma malo. Suena bien, ¿verdad?
Antonio Castro Snurmacher me avisa de que ha puesto en Ciberdroide su primera novela disponible para descarga gratuita. Xegor es el comienzo de un ambicioso ciclo llamado Éxodo. Conocí a Antonio a finales del 98, cuando coincidimos en Software AG trabajando en el proyecto SIOM para la bolsa de la energía eléctrica española, un proyecto del que guardo buenísimos recuerdos, tanto técnicos como de la gente, de primerísimo nivel. De Antonio puedo atestiguar que tiene sobrada imaginación, una mente analítica, curiosidad inagotable y la palabra fácil necesaria para completar el ciclo.
Hace tres años usaba Linux en casa como sistema habitual. Después, por cosas del trabajo y porque me compré el portátil, lo fui dejando en favor del XP del portátil de forma que sólo he estado usando Linux como servidor y a través de la consola. Ahora estoy cacharreando con algo (ya contaré otro día) que va mejor en Linux y le he metido las nuevas Kubuntus al sobremesa. Digo las nuevas porque hace una semana probé primero la versión "experimental" con KDE 4 y su interfaz "Plasma". Tenía bastantes ganas de ver lo nuevo de KDE. El resultado no pudo ser más decepcionante. Pasé literalmente horas intentando configurar el escritorio a mi gusto. Tengo que aclarar que mis gustos no son muy especiales. No me gusta tener muchos iconos en el escritorio, sólo los imprescindibles: en Windows el de red y Mi PC, en Linux los que corresponden a dispositivos. A veces dejo caer algo en el escritorio, pero lo suelo procesar rápido y llevarlo a otro directorio. Los programas que uso a menudo me gusta que estén en el "inicio rápido" o en un submenú del "menú inicio". Por lo demás me gusta que la barra inferior esté lo más limpia posible. Pues bien, después de buscar en la web, leer documentación e intentar varias cosas, no conseguí que el resultado fuera ni remotamente parecido. Además, el nuevo menú de inicio tuvo la facultad de enfurecerme, hasta cambiarle el nombre a "Plasta" en mi fuero interno. Supongo que se puede hacer todo de otra forma, pero pasadas unas horas, decidí que ya había perdido suficiente tiempo y reinstalé, esta vez la versión "normal" de Kubuntu Hardy, con KDE 3.5.

Hoy he pasado por otro momento de estupor al ver que ha desaparecido el paquete XMMS de Kubuntu 8. Para el que no conozca Linux, XMMS es lo más parecido al WinAmp clásico. Ahí dejo una imagen con la pantalla principal sólo, aunque también tiene ecualizador y lista de reproducción, lo mismito que el WinAmp. XMMS ha sido durante años mi reproductor de MP3 favorito único en Linux. Sé que existe otro programa llamado "Amarok" que también sirve, entre otras cosas, para oír emepetreses. Pero ese programa no me gusta nada. Pero nada nada. Me gusta XMMS. ¿Por qué se ha eliminado el paquete? Parece que en algunas distribuciones piensan que tiene muchos fallos y no está mantenido. En su lugar ofrecen, cómo no, Amarok, o para los cabezotas como yo XMMS2. La única pega de XMMS2 es que es un programa de consola. He estado buscano un frontal gráfico y los que he visto son horrorosos. Otros forks que se hicieron han desaparecido o están en el limbo.
Y sin embargo, sigue existiendo la página de XMMS, el fetén y lo que es más: siguiendo estas instrucciones, se compila XMMS y funciona perfectamente en Kubuntu. El enlace lo encontré como "topic" en el canal de IRC de XMMS en FreeNode. Así que lo de "muchos fallos y no mantenido" como que no.
Es natural que cuando sale una versión nueva de un programa o sistema operativo, junto con las mejoras se cuele alguna que otra peora. Con Windows es incremental. A cada nueva versión tengo que hacer un repaso de opciones tras la instalación para deshacer las peoras introducidas. No todo son peoras, muchas de las molestias que dieron lugar a esta web y su libro correspondiente se fueron arreglando en versiones sucesivas. Pero la sensación subjetiva suele ser la contraria, porque la reacción cuando estropean algo que antes funcionaba es más fuerte y porque la lista de esos ajustes post-instalación crece. A veces es peor que eso. Windows Vista fui directamente incapaz de hacer que funcionase de una forma más o menos decente, así que me volví a XP. Tengo esperanzas de que KDE 4 se arregle. Después de todo, está todavía en las primeras versiones.
Las peoras se pueden clasificar en dos tipos opuestos. Por un lado están las que consisten en añadir elementos a una interfaz sencilla hasta abarrotarla y hacerla impracticable. En esta categoría se podría ubicar la complicación de la interfaz de Delphi después de la versión 7, solucionable con ajustes y las extensiones de Andreas. En el otro grupo estarían las que, quizás por una reacción a una interfaz barroca, eliminan características útiles, quizás llegando al extremo de empezar de nuevo desde cero. Aquí podríamos situar a Plasma. La simplicidad de las interfaces (véase lo que hacen Google o Apple) suele agradecerse, pero no nos dejemos engañar: ¡conseguir la sencillez es complicadísimo!
Paul Graham cuenta hoy que las ciudades lanzan mensajes a las personas ambiciosas que viven en ellas. Lo único que yo he podido oír es el mensaje que Chiclana, la ciudad donde me crié, me dio respecto a mi carrera profesional: "vete". Pero Mr. Graham tiene un oído bastante más fino y nos cuenta que Cambridge (la ciudad americana cerca de Boston y sede de Harvard y el MIT, no la universidad inglesa) le dice "tienes que ser listo", Washington "conoce a gente influyente", el Valle del Silicio "monta una empresa", Nueva York "hazte rico", Los Ángeles "sé famoso" y San Francisco "vive bien". Hay que escoger con cuidado dónde se vive porque aunque Internet es capaz de conectar comunidades dispersas, hay que tener en cuenta que (frase para recordar) "el mundo físico tiene un enorme ancho de banda" :-) y parece que no hay ciudades que te den el mensaje completo de "tienes que ser listo, conocer gente influyente, montar una empresa, hacerte rico y famoso y así vivir mejor", sino que hay que elegir y sobre todo no empezar por el final. Si te vas a San Francisco, te pueden entrar unas ganas terribles de vivir bien y pasar tu vida entre el pub de Zawinski y la playa, haciendo surf o fumando hierba. Así no hay quien se haga rico. Aunque también es verdad que está allí Embarcadero y algo más al sur Scotts Valley, y parece que se las arreglan para trabajar.
El mensaje de fondo viene a ser que el ambiente es muy importante para marcar un estándar de éxito y tener un aliciente para superarse. No creo que en España haya mucho donde elegir para los programadores. Fuera de Madrid, y probablemente Barcelona, es complicado encontrar un trabajo con un sueldo decente, salvo quizás en la administración pública. Y en cualquier caso, creo que no hay excesivo ambiente "físico". He conocido gente bastante buena, pero dispersa. Y lo que dice Graham de ambiente social... pues no parece que nadie piense que te puedes forrar programando, sino más bien siendo jefe. Así que lo más parecido a un "ambiente" sería lo que se encuentra en Internet. Nos quedamos sin ancho de banda.
Desde luego decir "Internet" tampoco es concretar demasiado. El ambiente de las listas especializadas suele ser bastante distinto al de un foro generalista. Se podría decir que los mensajes son opuestos. Las listas suelen girar en torno al trabajo y hay un tono más comercial, mientras que las bitácoras (individuales o colectivas) ofrecen un panorama de aficiones y aspiraciones personales, y hay un ambiente más idealista. A diferencia del mundo exterior, está más conectada la parte personal. Por eso los medios más generales dan la impresión de ser más influyentes. Bueno, supongo que eres más influyente si das la impresión de serlo :-)
Hace un par de días, Carlos García tuvo la amabilidad de incluirme en su blogroll latino de Delphi, que viene a ser una lista de supervivientes con bitácora de la comunidad delfiniana en castellano, con el aliciente de ir sacando una lista de referencias de lo último publicado por cada uno.
La comunidad de Delphi en español se organizó primero (que yo recuerde, tomad esta historia como una aproximación) en el área de Delphi de Fido, en las news es.comp.lenguajes.delphi y en el canal #Delphi de la red de IRC Hispano. Después, de la mano de Emilio Muñoz, vino Club Delphi donde colaboré con la FAQ de Fido y otros artículos traídos de mi página en Geocities, manteniendo los enlaces y sobre todo en la lista de correo, donde había un ambiente familiar y de compañerismo. También hubo un congreso en Valencia donde solté una charla sobre programación web. Con el tiempo la lista de correo se volvió impracticable, con un tráfico inmenso y el ambiente pasó a ser mucho menos hogareño. Me borré, aunque aún colaboré como socio con Emilio, Ian y José Luis Freire en la revista Mundo Delphi, que mantuvimos durante un años con la ayuda de bastantes otros colaboradores.
Después, la comunidad se fragmentó. Club Delphi pasó de lista de correo a foros, lo que solucionó en buena medida el problema del tráfico. Aparecieron varias otras listas de correo como la del Grupo Albor, las de Latium Software y la Delphi Hackers (que mantuve durante unos años) y otras páginas de información se hicieron más conocidas como Trucomanía, las páginas de Ian Marteens y las de Francisco Charte, también autor de libros y asiduo de los foros desde los tiempos de Fido.
Con esa fragmentación vino también un espíritu reivindicativo y descontento de muchos programadores. Se criticaba la comercialización excesiva, sobre todo en comparación con otras herramientas de código abierto. También se habló mucho de la carencia de traducción de Delphi al español.
Pero a fin de cuentas Delphi siempre ha sido una herramienta comercial y ha funcionado sobre todo para Windows. La intentona de Kylix no fue sino una gran decepción. El ambiente de quienes programamos con él es profesional y comercial. Los "mensajes" de la comunidad van en consonancia.
Hacia fuera hay otra consecuencia: Delphi tiene una imagen menos atractiva que las herramientas de código abierto como Java, Python, Ruby o incluso PHP. Como tampoco tiene el respaldo de una gran empresa como Java o .NET, difícilmente vamos a ver subir la fama de Delphi a la altura de otros, ni siquiera en el caso de que la compra por Embarcadero tenga los resultados que nos gustaría. Aunque se repare el daño hecho por la gestión de Borland en los últimos años, me temo que no va a cambiar demasiado esa imagen. A los que lo conozcamos seguirá gustándonos y desde fuera seguirá hablándose del mundo de la programación como si no existiera.
Hoy por hoy Delphi tiene dos desventajas importantes: la falta de una estrategia multiplataforma y la falta de evolución del lenguaje (de esto ya rajaré otro día), y dos ventajas también importantes: el mejor sistema de interfaz gráfica para Windows y una inmensa base de código tanto comercial como de código abierto que se compila nativamente. En la nueva época se podrán arreglar las dos desventajas, que son lo que técnicamente separa a Delphi de Ruby y Python, los lenguajes de moda (en cuanto a que se hable de ellos, aunque no en su uso). Lo que no me atrevo a esperar es que decidan abrir el código del compilador y la VCL, lo que situaría a Delphi en la liga de los grandes y cambiaría por completo los "mensajes" y la comunidad.
Pues eso: hilo en los grupos de noticias y ahí están los enlaces a las notas de prensa. Marco Cantú opina también.
A mí me parece bien. La situación de CodeGear dentro de Borland era insostenible. Embarcadero es una empresa sólida, que gira en torno al desarrollo y que se mueve en un sector muy similar a CodeGear.
Actualización 21 de mayo: añado algunos datos más.
En estos días he estado leyendo algunas reacciones más, la mayoría favorables y todas bastante tranquilas. No es raro porque el proceso desde que se anunció que Borland iba a vender Delphi y compañía ha durado nada menos que dos años. Pondría los enlaces a lo que he escrito, pero no están (de momento) disponibles por los cambios de soft en esta web. El caso es que después de haberse generado ríos de tinta (o de bits) durante tanto tiempo, queda ya un poco fuera de lugar salir con aspavientos.
Si tuviese que destacar un artículo, sería éste de hace algún tiempo, que contiene una curiosa revelación. Parece que Embarcadero ha pasado por una evolución muy parecida a CodeGear. Embarcadero se hizo fuerte vendiendo herramientas para el personal técnico, aunque en su caso eran DBAs en vez de programadores. En cierto momento, ciertos directivos se hicieron con la empresa y la dirigieron a un sector distinto, el de productos caros dirigidos a otros directivos, el equivalente al ALM de Borland. Esto no fue demasiado bien y más tarde fueron comprados por Thoma Cressey Bravo, un conglomerado de capital riesgo que los ha devuelto al rumbo original. Ahora TCB compran también CodeGear a través de Embarcadero y parecen querer hacer lo mismo: devolverla al espíritu original de Borland, que poco se parece a la Borland actual. En fin, que Embarcadero y CodeGear son empresas parecidas, incluso más de lo que inicialmente parecía. Da la impresión de que para empresas fuertemente tecnológicas de tamaño medio es mala cosa cotizar en bolsa. Salen perjudicadas del tipo de organización que imponen los mercados, y el estar pendientes de los resultados trimestrales y los accionistas, en vez de mejorar los productos y escuchar a los clientes.
Pueden resultar una buena pareja además en cuanto a las herramientas para bases de datos. Delphi no es sólo para bases de datos, como algunos piensan. Pero es verdad que destaca en ese campo. Sin embargo, lo que lleva integrado el IDE para gestión de bases de datos es un tanto pobre. No es raro apoyarse en alguna herramienta más completa, como IBExpert, TOAD o el mismo Embarcadero. Está claro que podría apoyarse en la empresa hermana e integrar algo mejor para diseño y administración. Para Embarcadero, Delphi (o JBuilder) también supone un apoyo competitivo frente a herramientas como Oracle Developer.
Una cuestión que continúa siendo una incógnita es la estrategia multiplataforma. Hay muchos que reclaman poder programar para PDAs o teléfonos y cada vez más los que pedimos que se resucite Kylix. En los foros se ha pedido prudencia y paciencia, por lo menos hasta que esté cerrada la operación de compra (dos o tres meses más, por si no hemos esperado bastante) y los nuevos directivos tomen posesión y expresen su visión de futuro.
Se ha hablado mucho también del exiguo precio de compra. Treinta millones de dólares, cuando hace tres años se hablaba de ciento cincuenta. Aquí el problema parece haber sido que Borland pidió demasiado y sobre todo esperó demasiado para la venta. La situación de Borland en Bolsa no ha hecho más que caer y a estas alturas necesitaban desesperadamente el dinero para mantener a flote su negocio actual.
En definitiva, que se confirman las impresiones iniciales: Delphi parece haber ido a parar al mejor sitio dentro de las posibilidades. Pero el tiempo dirá.
En el último petardazo del alojamiento, se perdió todo el contenido de este servidor. Pude recuperar la base de datos de Drupal. Pero no el trabajo manual que había hecho con .htaccess para enlazar con los artículos antiguos, los que escribí con Pebble. Había escrito un programa con Delphi para extraer el contenido del XML de Pebble, pero tengo que hacer otro para meterlos en Drupal y la vagancia me puede. Por lo pronto anteayer estuve restaurando el firewall. Una ventaja de que no me visite nadie es que no tengo que preocuparme demasiado por esas cosas, a pesar por ejemplo del reciente exploit para escalada de privilegios del núcleo. Pero ya era hora. He descubierto que la nueva versión de Virtuozzo ya usa iptables con estado, lo que ha simplificado mucho las cosas. Antes que nada, recuperé el script con estado de mi viejo artículo de iptables:
# Reglas por defecto, salida permitida, entrada o redirección prohibidas. # Para hacer pruebas en remoto casi mejor permitir la entrada hasta estar # seguros, no vayamos a quedarnos sin conexión. iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # Borra las reglas que haya. iptables -F INPUT iptables -F FORWARD iptables -F OUTPUT # iptables -F -t nat # Esta instrucción por ejemplo usa el estado: permite el tráfico en conexiones # ya iniciadas (el inicio se define más abajo). Nota: venet0 es la interfaz # de red que en otra máquina podría ser digamos eth0. iptables -A INPUT -i venet0 -m state --state ESTABLISHED,RELATED -j ACCEPT # Permitimos todo el tráfico interno dentro de la misma máquina. iptables -A INPUT -i lo -s 0/0 -d 0/0 -j ACCEPT # Y finalmente definimos cuándo se permite iniciar una conexión. # Incluimos los protocolos ssh (puerto 22), smtp (25), http (80), # pop3 (110) y https (443) iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp --dport 25 -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp --dport 110 -m state --state NEW -j ACCEPT iptables -A INPUT -p tcp --dport 443 -m state --state NEW -j ACCEPT # La siguiente línea creo que es innecesaria. El panel de Virtuozzo, # que escucha por https en el puerto 4643, creo que está "antes" de # nuestro cortafuegos. iptables -A INPUT -p tcp --dport 4643 -m state --state NEW -j ACCEPT
Esto está muy bien por la brevedad, pero a diferencia del otro script, el que tenía para iptables sin estado, no incluye el envoltorio para meterlo en el arraque con funciones start, stop y restart. Así que estuve buscando cómo funciona ahora en Debian y encontré este artículo. Está casi bien. Vi que después de ejecutarlo, se puede guardar el estado con:
iptables-save > /etc/firewall-rules
De forma que para que se restaure se pueda usar esta línea:
pre-up iptables-restore < /etc/firewall-rules
Pero a diferencia de lo que pone el artículo, la tuve que poner en el fichero template, no en el fichero interfaces de /etc/network. Salvo por esa pequeña diferencia, todo parece funcionar como debe.
Todo esto se describe en unos pocos minutos. Hacerlo me hizo estar hasta tarde el jueves. Ayer viernes fue un día lleno de emociones, así que caí en la cama como un ladrillo. Ahora queda la parte en que subo los viejos artículos... ya veremos.
En los últimos meses he participado en la traducción de un programa hecho con Delphi. Conté por aquí los problemas del Translation Manager incluido con Delphi hasta el punto de recomendar que no se use.
En esa última historia contaba cómo terminé por crear una herramienta propia que usa el parser de DFM de la VCL para filtrar los ficheros DFM y sustituir las cadenas de acuerdo a un diccionario. El resultado final es un juego de ficheros DFM en catalán e inglés.
La primera idea fue hacer un script que copiase los fuentes del proyecto a otro directorio, machacase sus DFM con los traducidos y compilase la versión en catalán o inglés. Pero finalmente se me ocurrió la manera de ponerlo todo junto y controlar el idioma con un fichero incluido y $define.
En principio parece fácil. Todas las units que tienen un DFM asociado llevan la siguiente línea, generada automáticamente por el IDE:
{$R *.dfm}La directriz del compilador R se usa para incluir ficheros de recursos. Los DFM originales eran siempre ficheros de recursos (los que suelen tener la extensión *.RES) con la definición del formulario metida en un bloque binario del tipo RC_DATA. A partir de Delphi 5 (creo) existe la posibilidad de guardar los DFM en disco en formato texto, aunque antes también era posible acceder a ese texto con Alt-F12 o a través del portapapeles. Sea como sea, $R sigue sirviendo para incluir el DFM, aunque sea en formato texto. El asterisco representa el nombre del fichero actual, así que *.dfm en unit1.pas se referiría a unit1.dfm.
Primer intento
Lo más sencillo parece hacer un simple condicional. Por una parte tendríamos la enumeración de idiomas:
{$DEFINE CASTELLANO}
{ DEFINE CATALAN}
{ DEFINE INGLES}
Al faltar el signo del dólar, sólo la primera línea es válida. Pero es fácil cambiar el signo de sitio.
Después podemos usar un condicional. Parece lógico usar lo siguiente:
{$IFDEF CASTELLANO}{$R *.dfm}{$ENDIF}
{$IFDEF CATALAN}{$R *.cat}{$ENDIF}
{$IFDEF INGLES}{$R *.eng}{$ENDIF}
Pero no funciona. Al menos Delphi 6 no se traga como DFM un fichero que tenga extensión .CAT. Creo que el error era algo sobre el formato. En cualquier caso se puede arreglar así:
{$IFDEF CASTELLANO}{$R *.dfm}{$ENDIF}
{$IFDEF CATALAN}{$R *.cat.dfm}{$ENDIF}
{$IFDEF INGLES}{$R *.eng.dfm}{$ENDIF}
Bien, esto funciona. Pero es muy poco práctico tener el define de idioma en cada uno de las units con DFM asociado. Nueva idea: poner todo en un fichero incluido y dejar sólo la directiva de inclusión:
{$I IDIOMA.INC}Donde lógicamente habríamos puesto lo siguiente:
{$DEFINE CASTELLANO}
{ DEFINE CATALAN}
{ DEFINE INGLES}
{$IFDEF CASTELLANO}{$R *.dfm}{$ENDIF}
{$IFDEF CATALAN}{$R *.cat.dfm}{$ENDIF}
{$IFDEF INGLES}{$R *.eng.dfm}{$ENDIF}
La peculiaridad
Esa simple línea no funciona. La peculiaridad de los DFM es que el entorno va a su bola buscando la directriz {$R *.dfm} para saber si tiene que asociar el DFM. El entorno no entra en los ficheros incluidos, así que nos quedaríamos sin poder usar el diseñador de formularios.
Nuevo intento. Pongo no uno, sino dos ficheros incluidos así:
{$DEFINE CASTELLANO}
{ DEFINE CATALAN}
{ DEFINE INGLES}
{$IFDEF CASTELLANO}
Aquí en medio queda el {$R *.dfm}
{$ENDIF}
{$IFDEF CATALAN}{$R *.cat}{$ENDIF}
{$IFDEF INGLES}{$R *.eng}{$ENDIF}
En el principal tendríamos algo así:
{$I IDIOMA.INC}{$R *.dfm}{$I IDIOMAFIN.INC}
Por desgracia a Delphi tampoco le sienta bien que se deje un bloque de compilación condicional abierto entre ficheros.
Lo que sí funciona
Supongo que se puede resolver de varias formas. Lo que he puesto es una línea ligeramente más larga que la anterior.
{$I IDIOMA.INC}{$IFDEF CASTELLANO}{$R *.dfm}{$ELSE}{$IDIOMAFIN.INC}{$ENDIF}El fichero IDIOMA.INC contiene sólo los defines de idiomas:
{$DEFINE CASTELLANO}
{ DEFINE CATALAN}
{ DEFINE INGLES}Mientras que el segundo incluido lleva esto:
{$IFDEF CATALAN}{$R *.cat}{$ENDIF}
{$IFDEF INGLES}{$R *.eng}{$ENDIF}A pesar el condicional el IDE siempre va a pillar el fichero *.dfm, que es lo que veremos siempre en tiempo de diseño, mientras que el compilador escogerá el que se decida en idioma.inc.
Finalmente podemos meter todos los DFM de todos los idiomas en el mismo directorio y controlar el idioma de compilación modificando un solo fichero.