domingo, 14 de enero de 2007

Tener que seguir lidiando con Bugs me parece el colmo.

La plantilla de blogger que estaba usando por algun motivo resulto "corrupta"... por ende se perdieron algunas cosillas por ahí... mientras me tomo un poco de tiempo para reparar todo a partir de la cache de google (ya tengo una version vieja del asunto) me voy a poner a escribir unas pocas lineas aquí... Aunque pensandolo bien, no debería XDDDD... pero me he dado cuenta que hay un tema que nunca he puesto en este blog... se trata de alguna floritura de mi actual trabajo...

Asi que siendo las 2:48 AM, despues de lidiar con un sabado de los mil demonios en la pega (Si, me tocó turno para trabajar un fin de semana completito, completito) me puse a escribir un poco de código VLISP. Francamente debí haberlo hecho antes....

Para los que no son versados en la materia, LISP (LISt Processing) es un lenguaje de programación muy antiguo, que fue desarrollado con el propósito de ayudar a elaborar software orientado a la programación e investigación de la Inteligencia Artificial. Esto es porque el lenguaje permite que el programa pueda ser modificado "al vuelo" dependiendo de ciertas condiciones y esta estructurado como lenguaje de alto nivel... No tienes que preocuparte de andar declarando variables, de reservar memoria (al menos no desde 1982), tampoco tienes que preocuarte de andar cargando librerías externas ni nada por el estilo... Bueee... excepto las que uno use... Como contrapartida, es lento, ya que no es lenguaje compilado (a lo sumo, se compila como algo similar a JAVA... O sea usa mitad codigo máquina y mitad codigo interpretado como Bytecode, lo que lo hace ser relativamente lento, pero al menos te ahorra hacer declaraciones molestas) y las operaciones deben expresarse en parentesis (por algo tambien se le conoce como el Language In Stoopid Parenthesis (pun intended ;D))

Autolisp fue por años un subconjunto de LISP, tomando ciertos comandos del Lisp original (defun, princ, setq... por ej.) y agregando otros para poder manejar elementos graficos de forma sencilla (polar, getdist, nth, por ej.) creando un lenguaje con el que uno podía personalizar Autocad y adaptarlo a sus propias necesidades... y/o convertirlo en un mostruo completamente diferente...

Hoy en día Autodesk, despues de ser pseudo asimilado por M$, incluye el lenguajeVisual LISP (no les recuerda a algo desagradable???) pero durante un buen tiempo animó a los ingenieros/programadores/operarios a usar Visual Basic como plataforma de personalización.... Desde luego no hay mucha gente trabajando en Visual Basic, por lo que estan forzados a seguir soportando la plataforma LISP. (A diferencia de M$, Autodesk tiene un portafolio de usuarios mas o menos despiertos...) Sin embargo Autodesk ha introducido desde hace un buen tiempo, las extensiones de Visual Lisp... como las extensiones ActiveX... Si no puedes hacerles caer en una trampa, te ponen otra :).

Pero bueee... esa es historia para otra ocasión... el asunto es que en la pega estamos muy atrasados para entregar trabajos, asi que, despues de muchos años sin tocar un teclado para programar absolutamente nada, he vuelto a las andadas... al menos en el departamento del desarrollo LISP... Y que quieren que les diga... estoy bastante oxidado :).

Mientras tanto, echenle un vistazo a esto:

;; Val-flg:
;; Determina el rango en el que se encuentra el radio dado,
;; devuelve una lista con los valores
;; que correspondan por tabla... bueee... en realidad me da flojera programar
;; un parser para un CSV, y no puedo asumir que la vict... errr.. usuario
;; tiene instalado excel, como
;; para conectar una base de datos a una hoja de calculo
;; excel, además, tambien existe OpenOffice y Acad no
;; es precisamente amigable con software no microsoft.
;; uso: (setq variable (val-flg diametro_a_testear))
;; en variable quedara la lista que corresponda.

(defun val-flg (radio_interior / datos loop1 contador lim-bajo lim-alto matriz)

(if (and (>= radio_interior 70.0) (<= radio_interior 3399.50))

(progn
(setq datos (list (list 70.0 9.5 3.5 50.0 50.0 9.5 4 4.8)))

(setq datos (append datos (list (list 100.0 9.5 3.5 50.0 50.0 9.5 4 4.8))))

(setq datos (append datos (list (list 125.0 9.5 3.5 50.0 50.0 9.5 4 4.8))))

(setq datos (append datos (list (list 150.0 9.5 3.5 50.0 50.0 13.0 6 4.8))))

(setq datos (append datos (list (list 175.0 9.5 3.5 50.0 50.0 13.0 6 4.8))))

(setq datos (append datos (list (list 200.0 9.5 3.5 50.0 50.0 13.0 6 4.8))))

(setq datos (append datos (list (list 225.0 9.5 3.5 50.0 50.0 13.0 8 4.8))))

(setq datos (append datos (list (list 250.0 9.5 3.5 50.0 50.0 13.0 8 4.8))))

(setq datos (append datos (list (list 300.0 9.5 3.5 50.0 52.0 13.0 8 4.8))))

(setq datos (append datos (list (list 350.0 9.5 3.5 50.0 52.0 13.0 8 6.4))))

(setq datos (append datos (list (list 400.0 9.5 3.5 71.0 56.0 14.0 8 6.4))))

(setq datos (append datos (list (list 450.0 9.5 3.5 50.0 52.0 13.0 12 6.4))))

(setq datos (append datos (list (list 500.0 9.5 3.5 50.0 52.0 13.0 12 6.4))))

(setq datos (append datos (list (list 550.0 9.5 3.5 50.0 52.0 13.0 16 6.4))))

(setq datos (append datos (list (list 600.0 9.5 3.5 50.0 52.0 14.0 20 6.4))))

(setq datos (append datos (list (list 700.0 9.5 3.5 50.0 52.0 13.0 16 6.4))))

(setq datos (append datos (list (list 800.0 12.7 3.3 50.0 52.0 15.0 24 8.0))))

(setq datos (append datos (list (list 900.0 12.7 3.3 53.0 49.0 15.0 24 8.0))))

(setq datos (append datos (list (list 910.0 12.7 3.3 50.0 52.0 15.0 24 8.0))))

(setq datos (append datos (list (list 950.0 12.7 3.3 88.0 64.0 18.0 24 9.5))))

(setq datos (append datos (list (list 1000.0 12.7 3.3 50.0 52.0 15.0 24 8.0))))

(setq datos (append datos (list (list 1200.0 12.7 3.3 90.0 62.0 18.0 36 9.5))))

(setq datos (append datos (list (list 1300.0 12.7 3.3 77.0 50.0 18.0 24 9.5))))

(setq datos (append datos (list (list 1400.0 12.7 3.3 50.0 77.0 15.0 24 9.5))))

(setq datos (append datos (list (list 1500.0 12.7 3.3 144.0 59.2 36.0 27 12.5))))

(setq datos (append datos (list (list 1600.0 12.7 3.3 70.0 57.0 15.0 32 9.5))))

(setq datos (append datos (list (list 1700.0 12.7 3.3 114.0 89.0 27.0 40 12.7))))

(setq datos (append datos (list (list 1800.0 12.7 3.3 70.0 57.0 15.0 32 9.5))))

(setq datos (append datos (list (list 1900.0 12.7 3.3 88.0 64.0 18.0 40 9.5))))

(setq datos (append datos (list (list 2000.0 19.0 3.0 70.0 57.0 15.0 32 9.5))))

(setq datos (append datos (list (list 2100.0 19.0 3.0 74.0 78.0 18.0 60 9.5))))

(setq datos (append datos (list (list 2200.0 19.0 3.0 124.0 79.0 27.0 56 12.5))))

(setq datos (append datos (list (list 2400.0 19.0 3.0 118.0 85.0 27.0 60 12.5))))

(setq datos (append datos (list (list 2600.0 19.0 3.0 124.0 79.0 27.0 68 12.5))))

(setq datos (append datos (list (list 2800.0 19.0 3.0 138.0 65.0 27.0 72 16.0))))

(setq datos (append datos (list (list 3000.0 19.0 3.0 124.0 79.0 27.0 76 12.5))))

(setq datos (append datos (list (list 3200.0 19.0 3.0 138.0 65.0 27.0 80 16.0))))

(setq datos (append datos (list (list 3399.0 19.0 3.0 138.0 65.0 27.0 80 16.0))))

;; De todos los valores, solo N perf es entero, el resto debe ser real.
;; Aunque espesor no es usado realmente aquí, lo dejo para
;; posibles futuras referencias... (Ej: posible necesidad futura de dibujar vista perfil)

(setq loop1 T contador 0)

(while loop1

(setq lim-bajo (car (nth contador datos)) lim-alto (car (nth (1+ contador) datos)))

(if (and (>= radio_interior lim-bajo) (< radio_interior lim-alto))

(setq loop1 nil matriz (nth contador datos));; true

(setq loop1 T contador (1+ contador))

);if

);while

); if true

(setq matriz nil)

); if

);defun


Desafortunadamente, Blogger no soporta tabulación, por lo que el código se ve bastante ilegible... tal vez este sea el primer y último post de este estilo... En cualquier caso, como lo hice notar arriba, me salio mas sencillo hacer una tabla con los valores obtenidos en excel, hacer copy paste de ella en el codigo, y olvidarme del resto (de por si, generar la tabla en excel fue todo un cacho), en lugar de hacer algo mas "profesional" como generar esta tabla de medidas en una hoja excel, llamar la hoja excel desde autocad y generar la lista desde ahí... gajes del oficio.

Como está, este código esta muy mal escrito, y definitivamente algún día tendre la motivacion como para escribir algo mejor, despues de todo, Autolisp es bastante flexible en ese sentido, sin embargo, el programa completo sirvio para su objetivo y ahora puedo automatizar un proceso que hasta ayer me tomaba un par de días en completar, y que ahora puedo completar en un par de horas...

La diferencia es harta...

Sin embargo por algún motivo que desconozco, mis dolores de cabeza reaparecieron de nuevo... tal vez despues de estos días, voy a volver a mi "vida sabatica" sin programar... Eso pasa cuando se abusa del cerebro... Mientras tanto, son las 3:41 AM de un lindo día Sábado, no tengo mucho que contar, ni mucho sueño que digamos, pero al menos mañana no tendre que trabajar demasiado... Al menos veremos si vamos a la siguiente reuna del proyecto Tythalos.

Lo unico que me queda por hacer es seguir abusando de mi cerebro XD.

Saludos

J.

1 comentario:

Leonard "Nik" Petit-Breuilh dijo...

De echo estoy pensando cambiarme a otro BLOG por el tema de las tabulaciones en el código... ¿Como voy a poner ejemplos de código C# o Java si no hay tabs...? (con puros espacios... no gracias).