Mostrando las entradas con la etiqueta vba. Mostrar todas las entradas
Mostrando las entradas con la etiqueta vba. Mostrar todas las entradas

26 octubre 2011

Chau McCarthy


Me avisa mi viejo y computin amigo Leus -quien por poco inventa el blog- de la muerte de John McCarthy, creador de LISP, el segundo lenguaje de programación más antiguo después del Fortran (aunque tengo mis dudas con el Cobol, que todavía se usa).

Como no se casi nada de LISP me abstendré de comentarlo, solo diré que me cae bien todo lo que se hizo antes que apareciera la maldita teoría de objetos, el lenguaje C y esa nefasta basura que hace posible que usemos los complejos programas actuales. El Lisp estaba orientado a la inteligencia artificial, pensado como un lenguaje que produjera respuestas que para nosotros son tan triviales como el sentido común o la inferencia de soluciones a problemas sobre los que no tenemos experiencia previa.

MCarthy era matemático de origen, en este link que me mandó Leus aparecen no solo los papers más importantes que escribió sino también sus intereses hacia los temas de sustentabilidad y progreso. Hace varios años y contra las tendencias de la época en favor del catastrofismo ecológico, afirmó que la población tenderá a estabilizarse y que el progreso indefinido en riqueza material y desarrollo no solo es posible sino que muy probable. Parece que -afortunadamente- así se están dando las cosas. Como buen matemático afirmaba "el que se niega a hacer los cálculos está condenado a hablar tonteras", que buena frase.

Hace más de 10 años, irritado por el camino que estaba tomando la computación, escribí el manifiesto del programador hereje. Las ironías de la vida me llevaron después a enseñar la teoría de objetos, los casos de uso y de prueba, el modelamiento y estructura de datos y todas esas cosas que siempre desprecié. Peor todavía, cuando me tocó trabajar supervisando el complicado sistema de la Municipalidad de Tacna, tuve que reconocer que sin un estricto apego a todas esas porquerías la cosa jamás habría funcionado. Y que cada problema que aparecía era porque no se había cumplido con alguna de esas odiosas reglas.

Entonces me di cuenta de lo bajo que había caído el papel del programador, pero siempre conservé la fe en las microaplicaciones. Soluciones pequeñas para problemas muy específicos, desde el año 2007 que no escribía una sola línea de código pero hoy, que estaba tratando de comparar datos en una enorme planilla excel bajada de educacionsuperiorchile.cl, donde tienen disponibles varias bases de datos de las universidades chilenas, pero resultaba una tortura tratar de comparar dos datos.

¿Por que no hacer un pequeño programa? pensé. Y me encomendé al alma del finado McCarthy para que me ayudara, después de un rato de desempolvar mis recuerdos con el entrañable Visual Basic para Aplicaciones, tenía mi planilla programada para comparar datos con un par de clics, todo con una pocas líneas de código. Esta es la aplicación (clic para agrandar):


Y este es el código:
Como no va a ser lindo hacer algo práctico y útil con apenas 22 líneas de código. Ah pero esa clase de programación ya pasó de moda, ahora se usan los estereotipos y los casos, puaj. Hasta mañana.

P.D. si quieren la hoja excel con la aplicación, la pueden bajar de aquí, claro que tienen que bajar el nivel de seguridad del Excel a "medio" y responder "si" cuando les pregunte si quieren ejecutar macros. Para entrar al programa Herramientas, Macro, Editor de Visual Basic y para ejecutarlo la tecla F5.

27 septiembre 2007

El diablo está en los detalles

Heme aquí de nuevo, un poco tarde, después de un día maldito y frustrante. Resulta que ayer decidí hincar el diente en algo que venía dejando para el final en el programa del Rapa Nui: la trasmisión de los archivos desde el bar a la oficina, cosa que por ahora venía haciendo manualmente arrastrando todos los días a una carpeta web.

Claro que esto era una solución de parche porque cuando se manipulan manualmente los archivos hay que hacerlo con cuidado, no cuesta nada borrar o sobreescribir equivocadamente. Lo que necesitaba era un simple botón que desde el Excel hiciera la trasmisión sin posibilidad de equivocaciones. Pensé que sería algo muy sencillo -para eso se inventó Internet- y por eso lo dejé para el final. Efectivamente era sencillo, pero me demoré mucho en encontrar la forma; un día completo dándome de cabeza como mosca contra el vidrio.

Hay muchas formas de mandar archivos por Internet, desde adjuntos en un correo electrónico, arrastrar a carpetas web o usar un programa cliente FTP. Pero lo que yo necesitaba era programar un botón en VBA que hiciera todo. Y me puse alegremente a buscar con Google, ese gran programador que todo lo sabe, donde encontré varias soluciones. Pero todas pasaban por usar controles OCX que hay que registrarlos, no siempre son compatibles con la versión del Office y la programación era enredada y llena de funciones que no necesitaba, ¡diablos, yo solo busco un botón con unas pocas instrucciones!

Entonces pensé que lo más simple sería usar el FTP del DOS, en modo consola, controlado por un archivo bat, llamándolo del programa con una función de shell(), fácil y bonito como me gusta a mi. Pero no había caso, después que encontrar como se hacía manualmente traté de automatizarlo en un bat y solo llegaba hasta el password: al recibir el password me botaba. Toda la tarde probando y tratando de imaginar donde estaba el problema, nada. Y como dice la canción "y nos dieron la una y las dos", pasaban las horas y no avanzaba ni un milímetro.

Se me ocurrió otra cosa ¿por qué no usar un cliente comercial de FTP que funcione con línea de comandos?, al apretar un botón le mandaba un script con lo que tenía que hacer y listo. Pero no encontré ni un solo cliente FTP que pudiera manejar con un script, seguramente no busqué bien ¡como no va a haber uno al menos!: Naranjas, nada. Y me seguía calentando la cabeza, probé con un gestor de backups llamado Cobian que no pude lograr que se conectara, luego con Curl, que de puro ver la cantidad de archivos y documentación que traía me desanimó, algo que necesita tantas explicaciones no puede ser bueno.

Se hizo de noche y seguía sin encontrar como, ¡algo tan sencillo! empecé a leer documentación de Microsoft sobre el FTP y me encontré con que el problema de leer el password desde un archivo bat era com{un y conocido, incluso un gracioso puso que recomendaba strongly no usar archivos bat para automatizar el FTP aunque no daba ninguna solución. De madrugada finalmente pillé la forma, sencillícima como sospeché desde un principio: un archivo ft. bat con una sola línea
ftp -s:f.scr

Y luego un archivo script f.scr con unas pocas líneas
open bradanovic.cl
(mi username)
(mi password)
cd public_html
cd RAPANUI
lcd c:\inventario
put prueba.txt
bye

¿Y el botón en VBA?, eso es lo más fácil, también una sola línea:
Shell ("c:\windows\ft.bat")

¡Eso era todo! algo tan sencillo pero recién lo vine a sacar a las 3:18 AM después de andar todo el día buscando distintas cosas que no funcionaron. El problema con el archivo bat original era que al poner enter en un archivo windows coloca dos caracteres CR+LF, mientras que Unix reconoce solo CR y el LF lo toma como parte del password echándo todo a perder. Usando un archivo de script .scr se soluciona la cosa porque Unix reconoce cada línea como un comando.

En fin, las cosas que parecen más sencillas terminan complicándose "el diablo está en los detalles" pero al fin tengo, al menos en teoría, resuelto el maldito asunto, ahora solo me falta programarlo, hacer la otra parte (bajar los archivos) y todo eso, pero el problema principal ya está resuelto, en un tiempo más no tendré que ir todas las noches al Rapa a pasar los archivos y mi alma inmortal se verá beneficiada, evitando todos los pecados de la carne imaginarios y de pensamiento que he cometido -onda Jimmy Carter- en tan sacrificado trabajo. Hasta pronto.

09 septiembre 2007

Puro pasando rabias

¿Que habrá pasado? temprano leí un comentario de Lilian donde me preguntaba por el programa del Rapa-Nui así es que recordé que tenía varios detalles menores que arreglar, me senté an mi escritorio, abrí el programa y empecé a revisarlo.

Pero algo pasó, parece que hoy andaba especialmente idiota porque no me podía concentrar en el asunto, empecé a trabajar mal dejando parches y escombros, como a las 7 de la tarde ya estaba bastante irritado y traté de dedicarme a otra cosa, pero el programa estaba allí, haciéndome burla, había pasado toda la tarde ensuciándolo y la maldita cosa ya me tenía realmente enojado.

Escribir un programa es parecido a escribir un cuento o redactar lo que sea, uno puede coseguir que funcione de cualquier manera usando la prueba y error, pero eso va dejando basura en el código, variables de prueba que después se nos olvidan, procedimientos que no funcionaron y toda clase de porquerías. Se trata de resolver una serie de problemas, algunos rutinarios porque hay una manera estándar de hacerlo, otros no los ha hecho nadie antes y uno tiene que buscar la mejor manera.

Hay siempre dos formas de resolver un problema nuevo: la elegante e ingeniosa y la de fuerza bruta, cuando empecé a programar siempre buscaba las soluciones elegantes, pero con los años descubrí que a los computadores les encanta la fuerza bruta, se sienten más cómodos con la redundancia de muchas soluciones simples encadenadas y estas son más fáciles de depurar y documentar. Ahora arranco de cualquier procedimiento ingenioso si hay alguno de fuerza bruta a la mano, mal que mal los ingeniosos somos nosotros y los brutos son las máquinas.

Y así estuve hasta hace muy poco rato limpiando todas las estupideces que había escrito en la tarde, ordenando y colocando comentarios ¡que bonito se ve un código bien ordenado! es un festín para la vista y una gran ayuda para detectar errores. Al final descubrí que era lo que no me cuadraba: un mismo trago ingresado en dos partes diferentes, error de consistencia. Habiendo arreglado eso ya quedo listo para ir a instalar el asunto nuevamente. Creo que la próxima semana lo subiré a la web para los que les interese el VBA, está muy simple y bonito.

Pero a quien le interesa eso, solo quería contarles que pasé rabia durante toda la tarde y me fuí por otros lados. Mejor reviso el diario para comentar un poco las noticias, los ariqueños recordarán la histórica trifulca entre el diputado Paredes y el alcalde Valcarse, ahora ambos están inhabilitados y procesados por la justicia ¡que estupidez más grande! esa es la clase de cosas que nunca se vió en los años de la Junta de Adelanto, podían haber discusiones y enamistades, pero nunca al nivel de mala clase y con la ambición desatada de ahora. En fin, parece que es cierto eso de que todo tiempo pasado fue mejor.

Y van quedando damnificados en el camino, mi amiga Aida Lara tuvo que salir en el diario desmintiendo ser socia de mi otro amigo, el guatón Camán, que situación más horrible, un hervidero de chismes y mala leche, es el festín de los audaces. La Aida es -a mi modo de ver- la mejor profesional mujer de la ciudad que yo conozca, ha levantado a pulso su negocio y le llegan todos estos chismes de rebote, para ensuciar a su pareja que es el segundo de la municipalidad, en fin, así de cochina es la política, fuerza muchachos y aguanten bien el chaparrón nomás.

Y a medida que se acercan las elecciones la ciudad se va llenando de vacunas que repentinamente les vino el interés por el servicio público y por Arica, que se vayan al diablo, manganada de parásitos. Desgraciadamente los aiqueños no se caracterizan por su inteligencia a la hora de votar, pero que vamos a hacerle, es lo que hay nomás.

Bueno, bueno, mejor no sigo leyendo el diario porque me da rabia. Una vuelta al Rapa y a la camita, buenas noches los pastores.