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.

33 comentarios:

  1. "algo que necesita tantas explicaciones no puede ser bueno";


    mmm, ¿entonces el código genético no es bueno?; entiendo que las simplezas son mejores, pero ellas son la culminación de las cosas; el camino a la simpleza está empedrado de complicaciones.

    Las complicaciones SON el camino.

    Comenzar a pensar simplemente implica resolver banalmente.

    ResponderBorrar
  2. (perdón, cambiemos de tema; ¿por Dios qué decadente se ve Marlén Olivarí?; este caballero Dueñas tiene muy mala mano...

    ...¿eso sí es tema y comentario?)

    ResponderBorrar
  3. Sergio, en cosas técnicas siempre la solución trivial es la mejor, "la forma canónica" en matem{aticas, cuando una ecuación es reducida a su esencia sin ninguno de los posibles adornos o variantes. A diferencia de las humanidades donde la sutileza y las variantes tienen mucho valor, en cuestiones de computación especialmente la mejor entre dos soluciones es siempre la más sencilla. Pensar simplemente desde el comienzo, por diseño, es fundamental cuando escribes un programa.

    Lilian ¡y yo que esperaba que me dieras una solución mejor! no hay salud. Bueno, ya me dieron una mejor y te la cuento altiro: usar SSH porque el FTP es de los 80s, sumamente inseguro. Tendré que seguir averiguando.

    ResponderBorrar
  4. En la u usan SFTP con SSH2 super requete seguro.

    ResponderBorrar
  5. Pero Dueñas tiene mala mano, sin dudas; sin perjuicio de que su principio fue muy simple; ...estrujar a la mina hasta que no diera más manteca.

    En relaciones humanas no basta la simpleza entonces.

    ResponderBorrar
  6. Ahora si alguien se hace el amable y me pasa los script para hacer lo mismo en ssh, me evitaría un esfuerzo adicional!

    Sergio, por malena que esté ma Olivari, con mucho menos me conformo ;-9

    ResponderBorrar
  7. Yo te iba a dar la misma solucion Tomas :o) Lo que pasa es que hay dos temas que me aburren mortalmente [lo que no quiere decir que a lo mejor en el futuro ya no sea asi, porque "cambia, todo cambia"]: hablar de mecanica de autos y de programacion al nivel tecnico de tu post. Apenas escucho los temas, mi cerebro automaticamente "shutsdown" como el disco duro de mi laptop jaja
    Cheers!

    ResponderBorrar
  8. Bah! y yo que te quería contar que estuve tratando de instalar una conexión por secure socket layer, primero usando el Putty.exe y como no encontraba modo de usarlo con linea de comandos (y script) as´es que después caí al psftp (putty secure ftp) que está hecho específicamente para trabajar con líneas de comandos y scripts. Pero el maldito problema de los Cr+LF del DOS me persigue y no hay modo de que el servidor lea correctamente el password (toma el LF com primer caracter del password) así es que se pone a negar el acceso como ochurrucientas veces.

    Como mi servidor particular, donde está bradanovic.cl es de bajo presupuesto (US$ 20.- al año por 1 Giga de disco!) y no quiero abusar o que se pongan cachudos los administradores con tanto acceso denegado al ftp, partí por lo sano y sigo con la conexión por el viejo y fiel ftp, sin embargo para evitar males menores creé una cuenta ftp con permisos bastante restringidos, cosa que si un "jaquer" se pone a intrusear no pueda hacer demasiado daño.

    En fin, no sé si tienes algún comentario o idea para solucionar mis muchos problemas existenciales.

    ResponderBorrar
  9. Y no se te ocurra recomendarme que use el Dos2Unix.exe porque también lo probé y no pasa nada...

    Que macana..

    ResponderBorrar
  10. Y por qué mejor no usas el ftps donde se hacen compatibles los sgftre y convergen todos a la banda de "803rfbc3807fb", y así,...teniendo las precauciones del caso eso sí, miren que se han visto muertos cargando adobes.

    La clave de acceso al servidor Gamma de Ohio es "cumbia_que_te_vas_de_ronda", adjuntando una imagen encriptada en tiff de roberto dueñas, escarbando en la chequera de Marlén

    Cualquier problema me avisas y te doy más detalles.

    Atte: SmcArq; Programador Chanta

    ResponderBorrar
  11. Hablando de chantas, somos colegas porque para no complicarme la vida puse un acceso directo a subir.bat en el escritorio, asi me olvido de los posibles problemas del shell, ¡eso si que es chanta! Pero ya solucioné todos mis problemas

    ResponderBorrar
  12. (envialme Laptop, y espílitu del glan dlagon plemialte pol tu don de honolable desplendimiento; ....iiiiiiiiÁ!!!)

    ResponderBorrar
  13. LOL! jajaja Tomas, que conversacion! Bueno, una sola cosa te digo ... charlando con algunos "entretenidisimos" y "chispeantes" programadores [que en realidad son brillantes] de mi empresa algunas veces a la hora de almuerzo, me doy cuenta que lo unico que les importa es que algo funcione, no siguen muchas reglas al parecer. Una amiga mia, ingeniero en computacion, que toca la casualidad es chilena tambien, es la "dominatrix" que los trata de mantener en el protocolo [ese es su trabajo] cosa muy dificil algunas veces, segun mi amiga. Y ese es todo el comentario tecnico con el que aportare a tu "entretenidisimo" post de hoy jaja

    ResponderBorrar
  14. ¡Pero si yo estoy SUPER entretenido! ¡sabes lo que pasa? es que el trabajo del programador ha ido evolucionando desde algo individualista a otro muy cooperativo, antes el programador tenía cierto espacio para la creatividad (todavía lo tiene en las microaplicaciones, cosas tan sencillas que no es necesario trabajarlas en equipo), pero cuando entras a trabajar en equipo el trabajo del programador se transforma completamente en algo complicario y terriblemente rutinario.

    Yo estoy probando un software relativamente grande por ejemplo, donde trabajan unos cuantos programadores y el asunto es terrible de aburrido porque se trata de seguir largos protocolos sin equivocarse. Hay gente muy buena para eso, que tiene gran capacidad de concentración y para seguir cosas enredadas de manera metódica, es un trabajo de hormigas, versus el del elefante cuando un programador individual se pone sus propias reglas y hace las cosas tan metódicas o poco metódicas según estime conveniente.

    Además el interés de las empresas es que no exista por ningún motivo un programador indispensable, que sería muy peligroso y malo para el negocio, así desde los ochentas se viene desarrollando la idea que la programación en detalle debe ser estrictamente apegada a protocolos rutinarios y bien conocidos, mientras que el "estratega" que lidera el proyecto no programa nada sino que solo dice las normas y direcciones en que hay que programar.

    Eso ha permitido hacer software muy complicado pero a la vez ha rebajado mucho la calidad del trabajo de los programadores, incluso los mismos jefes de proyecto al final terminan siendo agentes de compras de tecnología ajena.

    El caso típico es el de Microsoft, la empresa de software más exitosa de la historia que tiene la gracia de ser la menos tecnológica de todas, más dedicada a detectar tecnologías que prometen y comprarlas que a desarrollar tecnología propia. Ni siquiera el Visual Basic -su insignia en muchos sentidos- es propio, se lo compraron a unos tipos de Cooper tecnology cuando no lo conocía nadie, y así.

    A lo que quería llegar es que la única programación que vale la pena ahora es la de los hackers y los locos medio muertos de hambre que escriben shareware y aplicaciones chicas, de ahí es donde salen todas las innovaciones importantes (el mp3, la compresión de video y tantas otras cosas).

    ResponderBorrar
  15. uhmmm... si asi exactamente como describes el asunto del trabajo de equipo de programadores es como se hace en mi companhia y mi amiga es la que les controla los protocolos y tiene que leer los programas completos y ensamblarlos, etc. etc. pero ella no programa directamente, lo hizo si en el pasado. Es un trabajo que no es muy codiciado tengo entendido porque tienes que fustigar a medio mundo. Por otro lado, me imagino que debido a la originalidad de los productos que mi empresa crea, tenemos una tremenda necesidad de programadores en forma constante. No entiendo a que se debe el "turn over" como le llaman aca a la rapidez con la cual alguien abandona el trabajo, pero con cada proyecto grande y nuevo que se vende, empieza la gran-contratacion-gran de programadores.

    ResponderBorrar
  16. Debe ser muy desgastante trabajar en proyectos grandes y críticos, sobre todo debe ser malo para el ego

    ResponderBorrar
  17. Creo que tienes razon en eso tambien ... Veo que conoces el mundo del programador como la palma de tu mano. Por ahi debe estar la causa del gran "turnover" de programadores en la companhia. Se deben sentir como rebanhos...

    ResponderBorrar
  18. especialmente los más viejos, si pueden lo dejan. Los que recién empiezan y están aprendiendo encuentran todo bonito, pero después se dan cuenta que no era gran cosa, solo algo complicado. Los que trabajan en Shareware por su cuenta son mucho más divertidos porque hacen todo: parten con el concepto, lo diseñan, lo prueban y lo implementan ellos mismos. Si el concepto era bueno puede que ganen unas lucas, pero la mayoría no saca plata a pesar de haber inventado cosas geniales: el más genial de todos -en mi opinión- fue el que inventó los programas que sirven de base a las descargas de archivos p2p: emule y cosas así. Es una de los conceptos más inteligentes que se han inventado para aplicar a los computadores en red y el que lo invento casi se va a la carcel por la presión de la industria del entretenimiento

    ResponderBorrar
  19. Oye pelado, has pensado mejor dedicarte a la carpintería?

    ResponderBorrar
  20. Oye jaquer ¿te recuperaste del último numerito que borró TODO en tu equipo?
    Eso te pasa por descargar tanta porno
    jajaja

    ResponderBorrar
  21. Tomas
    Una de las cosas que no me gustan de windows es q las cosas fáciles muchas veces son muy difíciles de hacer.
    Con ssh usando scp y usando clave pública es seguro y mas encima automático (con una crontab), el cygwin es un buen SW para convertir en Unix el win.
    Lo que yo recomeindo desarrollar sobre linux directamente.
    Saludos

    ResponderBorrar
  22. Eduardo, completamente de acuerdo¡mandar un mail en linux-unix es cosa de niños! claro que en este caso en particular el problema es de los distintos formatos que usa el DOS y el Unix para el texto plano: en DOS las líneas terminan con CR+LF y en Unix solo con CR, entonces se produce todo este lío al leer el password desde un script escrito en un editor del DOS. La verdad es que es algo tonto pero toavía no lo resuelvo para el psftp, voy a probar escribiendo con copy con, como se hacía antes, en una de esas resulta.

    En lo del Linux para cuestiones que yo hago no es opción, específicamente tenía que programar una hoja de cálculo Excel que es lo que ellos usan ahora, cero curva de aprendizaje, si les digo "cámbiate a Linux" me matan.

    Por lo demás, sin ánimo de entrar en guerras santas, creo que el vba (visual basic para Office) todavía no tiene equivalente y es muy bueno para inventarios y todas esas cosas administrativas por su integración con el Office.

    ResponderBorrar
  23. prueba con perl
    $ perl -i -npe 's/rn/n/g' fichero.dos
    $ perl -i.bak -npe 's/rn/n/g' fichero.dos

    puedes instalar perl en windows

    http://enrique.barbeito.org/blog/ficheros-de-texto-formato-de-dos-a-unix/
    http://www.forosdelweb.com/f12/tutorial-instalar-perl-windows-442300/

    ojala te sirvan

    saludos

    ResponderBorrar
  24. Por estar leyendo tu lucha con la programación no me di cuenta que había empezado Infieles....que pecado....

    jajaja corro a verlo...

    Por cierto apoyo a Sergio la Marlen Olivari está de capa caída

    ResponderBorrar
  25. Que buenos datos Eduardo, chas gracias!!

    aunque la primera dirección sale recortada (del blog de Barbeito) mandame lo que falta pls

    Igal tengo que aprender algo de Perl, en el servidor remoto tengo el CGWin instalado así es que ahí puedo aprovechar

    ResponderBorrar
  26. Karen bah, yo se la levanto (la capa) ya, a ver la novela nomás...

    ResponderBorrar
  27. http://enrique.barbeito.org/
    blog/ficheros-de-texto-formato-de
    -dos-a-unix/
    ahi esta el enlace lo dividí en tres líneas

    el primer método #perl -i -npe 's/rn/n/g' fichero.dos
    deja los cambios en el mismo archivo.

    saludos

    ResponderBorrar
  28. Tombrad; en castigo por tu inoperancia como programador, te enviaré el "Robot Depredador de Roberto Dueñas".

    ResponderBorrar
  29. Pero tu programa esta matando la gallina de los huevos de oro. De funcionar ya no podras ir a "la oficina" gratis :-(

    ResponderBorrar
  30. que rebuscado si hay maneras mejores de lograr esa conexion... eso pasa cuando un electronico se mete en la pega de un informatico... y pasa viceversa... saludos

    ResponderBorrar
  31. ¿Más fácil que hacer FTP?, no se me ocurre nada, más sencillo, cuenta, cuenta.

    ResponderBorrar

"Send me a postcard, drop me a line
Stating point of view
Indicate precisely what you mean to say
Yours sincerely, wasting away
Give me your answer, fill in a form
Mine for evermore
Will you still need me, will you still feed me
When I'm sixty-four"