29 junio 2010

flores de tapia

He aquí algunas fotos, tomadas hace pocas semanas, de flores de Tapia de Casariego.





ejem, bueno, esto no es una flor, pero sí una preciosidad.

28 junio 2010

historia del claxing

archivado en: Ficción Ironía

El claxing, como casi todas las modas, surgió de manera un tanto espontánea entre cierto sector de aficionados al tuning.

No hace tantos años que uno de ellos llegó a la conclusión siguiente: que instalar un cláxon de camión en su turismo no era sólo divertido, sino también esencial; ya que servía para atronar a los vecinos aún más que su equipo musical de 2000W. Y eso sin contar con el efecto que estos claxonazos surtían sobre el conductor desprevenido al que, por desgracia, le tocaba parar en el semáforo delante de uno de estos energúm… practicantes del tuning.

La idea no tardo en extenderse entre otros tuneros: costosos equipos de sonido fueron removidos de los maleteros para dejar sitio a bocinas cada vez más potentes. Al poco, las bocinas de 60kg de acero ruso impulsadas por botellas de dióxido de carbono a alta presión se convirtieron en el mínimo deseable, y toda clase de sucesos extraños tuvieron lugar a partir de ese momento.

Cerca de Calatayud, una pareja murió intoxicada por la inhalación de los gases impulsores de su bocina tras celebrar el amanecer con una pitada excesivamente larga. Algo parecido ocurrió en Peñíscola, cuando otra pareja que hizo lo mismo sobre un pequeño acantilado se precipitó al agua, dentro de su vehículo, tras ceder el terreno por la vibración.

En la Primera Berrida Tuning de Mérida, ese mismo año, urgencias fue colapsada por un montón de gente a la que los órganos blandos se les habían roto debido a los subsónicos. La mayoría murió. En ese mismo evento, unos jovenes que hacían botellón a unos quinientos metros de distancia se quedaron sordos tras perder los tímpanos.

Una secta de tuneros evangelistas, los Trompeteros del Último Día, surgió espontáneamente en forocoches.com, proclamándose sus miembros a sí mismos como los ángeles de las trompetas del Día del Fin. En Marsella, delincuentes organizados se dedicaban a desencajar coches en marcha atacándolos con bocinas especialmente graves que desatornillaban las piezas a base de pura vibración.

También hubo curiosos accidentes, en los que estaban implicados camioneros que no se habían molestado en reemplazar sus bocinas por otras más potentes. Los conductores de turismo, acostumbrados a los nuevos barritos de los coches, cuando escuchaban un claxon normal de camión no reaccionaban como antes. Suena como un triciclo, debía ser lo último que pasaba por la mente del desdichado conductor después de ser aplastado por un vehículo de ocho ejes que había intentado, infructuosamente, avisar de que había perdido los frenos.

Hubo un escándalo en el congreso cuando un famoso diputado del PNPSE le intentó quitar importancia al fenómeno, descubriéndose poco después que era accionista mayoritario de una fábrica de cristales, cuya producción se había multiplicado en los últimos meses. Como los casos de sordera.

Aun así el fenómeno se extendía como la pólvora: el sufrido conductor que recibía un ultrabocinazo de 150dB y sobrevivía para contarlo, no tardaba en instalar un cláxon similar o más potente en su coche, para cuando pudiera tomarse la revancha. Tal era así que hasta una conocida marca de coches alemana, especializada en macarrismos diversos, se planteó incorporar de serie una bocina de diez mil watios en todos sus vehículos.

Pero justo en ese momento el claxing se prohibió en toda la Unión Europea.

Al año siguiente el fenómeno, que había estado restringido a centroeuropa, los países del este y los países mediterráneos, aunque no a los escandinavos, se había extendido a todo el planeta… al igual que la prohibición.

Condenados a la clandestinidad, los gigantescos conos montados sobre el capo tuvieron que disimularse bajo lonas y chapas escamoteables. Las autopistas y aparcamientos se forraron de vigilantes equipados con orejeras especiales de varios kilos de peso. Así, el riesgo quedó finalmente reducido a las carreteras terciarias que recorrían parajes especialmente aislados; atravesar una de estas era jugarse la vida, ya que allí acechaban los practicantes del claxing.

Pero hubo un lugar donde no se prohibió: California. Fue relativamente fácil para los juristas, ya que se refugiaron en la Segunda Enmienda. Sí, la que garantiza el derecho a portar armas con fines defensivos o deportivos. Y fue precisamente en California donde se organizó el First Claxing World Contest.

El resto de la historia es conocido por todos: la falla de San Andrés se desplazó diecisiete metros, etc.. etc… El premio Darwin de ese año fue decicido por unanimidad. Quizás es menos conocido el suicidio simultáneo de los Trompeteros del Último Día que tanta alharaca habían montado hasta entonces, ya que ninguno de ellos había asistido al evento en cuestión, al que acusaban de ateo. Su muerte debió ser horrible, ya que introdujeron la cabeza en sus propias bocinas; y cuando les encontraron, chorreaban sangre por todos los orificios del cuerpo.

Poco a poco, la moda decayó. La sociedad, tras la debacle de San Francisco, rechazó definitivamente la tendencia. Y no sólo ella: los cada vez más escasos practicantes del claxing fueron perdiendo el interés a medida que perdían completamente el oído. Ya que gusto e inteligencia nunca habían tenido.

archivado en: Ficción Ironía

25 junio 2010

macros de selection-screen

archivado en: ABAP/IV

Hola sufridos programadores de ABAP:

Es muy frecuente que, en cualquier report un poco sofisticado, haya que modificar la visibilidad o la actividad de los campos que aparecen en la pantalla de selección, con lo que es necesario hacer un LOOP AT SCREEN y modificar las propiedades de visualización de los parámetros o los rangos. El código resultante es bastante horroroso y, además, es típico tener que repasar qué propiedades eran las que había que tocar.

Algo parecido pasa si nos piden meter un desplegable o listbox. Aunque es posible utilizarlo en una pantalla de selección definida puramente en ABAP, es un auténtico rollo programarlo.

Así que he creado unas macros para llevar todo esto a cabo en un plis. Son las siguientes:

GENERACIÓN DE LISTBOX
Asumen que tenemos un parámetro tipo listbox y se deben utilizar en el evento INITIALIZATION.

  • vc_lbini ‘PARAM’. : Prepara el parámetro PARAM tipo LISTBOX para su carga.
  • vc_lbadd ‘A’ ‘UNO’. : Carga el parámetro anterior con el valor ‘A’, mostrando en pantalla ‘UNO’. Se debe utilizar tantas veces como valores queramos cargar.
  • vc_lbexe. : Finaliza la carga del último parámetro definido con vc_lbini.

CONTROL DE VISIBILIDAD Y ACTIVIDAD EN PARÁMETROS
Hay que utilizarlos dentro de un LOOP AT SCREEN.

  • vc_ssblanco ‘PARAM’. : Hace que el campo sea editable.
  • vc_ssgris ‘PARAM’. : Deja el campo como no editable, sólo de visualización.
  • vc_ssvisible ‘PARAM’. : Provoca que el campo sea visible.
  • vc_ssinvisible ‘PARAM’. : Provoca que el campo no se muestre.

A continuación, el código de las macros con ejemplo incluido.

REPORT z_macros_selection_screen.

*          _                  _ _     _   _
* ___  ___| |___  ___ _ __   | |_)___| |_| |__   _____  __
*/ __|/ _ \ | __|/ __| '__|  | | | __| __| '_ \ / _ \ \/ /
*\__ \  __/ |__ \ (__| |     | | |__ \ |_| |_) | (_) |  <
*|___/\___|_|___/\___|_|     |_|_|___/\__|_.__/ \___/_/\_\
* as seen on http://glob.cranf.net
* ascii art made at http://ascii.cranf.net
*
* automatizan la creación de parámetros desplegables en reports:
*
*PARAMETERS param1 AS LISTBOX VISIBLE LENGTH 15.
*PARAMETERS param2 AS LISTBOX VISIBLE LENGTH 15.
*
*INITIALIZATION. "ESENCIAL QUE ESTÉ DENTRO DE ESTE EVENTO
*  vc_lbini 'PARAM1'.
*  vc_lbadd 'A' 'UNO'.
*  vc_lbadd 'B' 'DOS'.
*  vc_lbadd 'C' 'TRES'.
*  vc_lbexe.
*
*  vc_lbini 'PARAM2'.
*  vc_lbadd 'D' 'UNO2'.
*  vc_lbadd 'E' 'DOS2'.
*  vc_lbadd 'F' 'TRES2'.
*  vc_lbexe.
*
*START-OF-SELECTION.
*  WRITE param1.
*  WRITE param2.
*
***********************************************************************
TYPE-POOLS vrm.
DATA vc_vrmtable TYPE vrm_value OCCURS 0.
DATA vc_vrmheader TYPE vrm_value.
DATA vc_id TYPE vrm_id.
***********************************************************************
* VC_LBINI 'PARAMETRO'.
*
* inicializa el parámetro listbox de selection screen.
*
DEFINE vc_lbini.
  refresh vc_vrmtable.
  vc_id = &1.
END-OF-DEFINITION.
***********************************************************************
* VC_LBADD 'valor' 'texto'.
*
* al parámetro marcado por VC_LBINI le añade valor y texto descriptivo.
*
DEFINE vc_lbadd.
  vc_vrmheader-key = &1.
  vc_vrmheader-text = &2.
  append vc_vrmheader to vc_vrmtable.
END-OF-DEFINITION.
***********************************************************************
* VC_LBEXE.
*
* finaliza la carga del parámetro listbox indicado en VC_LBINI.
*
DEFINE vc_lbexe.
  if vc_id is initial.
    message e208(00) with 'falta id'.
  endif.
  if vc_vrmtable is initial.
    message e208(00) with 'faltan valores'.
  endif.
  call function 'VRM_SET_VALUES'
       exporting
            id              = vc_id
            values          = vc_vrmtable
       exceptions
            id_illegal_name = 1
            others          = 2.
  if sy-subrc = 1.
    message e398(00) with 'id' vc_id 'no existe' space.
  endif.
  if sy-subrc = 1.
    message e398(00) with 'para id' vc_id 'no hay valores' space.
  endif.
END-OF-DEFINITION.
***********************************************************************

*          _
* ___  ___| |___  ___ _ __    ___  ___ _ __ ___  ___ _ __
*/ __|/ _ \ | __|/ __| '__|  / __|/ __| '__| _ \/ _ \ '_ \
*\__ \  __/ |__ \ (__| |     \__ \ (__| | |  __/  __/ | | |
*|___/\___|_|___/\___|_|     |___/\___|_|  \___|\___|_| |_|
* as seen on http://glob.cranf.net
* ascii art made at http://ascii.cranf.net
*
* facilitan la muestra o activación de campos en LOOP AT SCREEN.
*
*AT SELECTION-SCREEN OUTPUT."debe estar dentro de este evento en reports
*
*  LOOP AT SCREEN.
*    IF pchecker = 'X'.
*      vc_ssblanco 'PARAM1'.  "deja el campo como editable
*      vc_ssvisible 'PARAM2'. "deja el campo visible
*    ELSE.
*      vc_ssgris 'PARAM1'.      "deja el campo sólo lectura
*      vc_ssinvisible 'PARAM2'. "oculta el campo
*    ENDIF.
*  ENDLOOP
***********************************************************************
* VC_SSBLANCO 'PARAMETRO'.
*
* pone como editable el parámetro.
*
DEFINE vc_ssblanco.
  if screen-name = &1. screen-input = '1'. modify screen. endif.
END-OF-DEFINITION.
***********************************************************************
* VC_SSGRIS 'PARAMETRO'.
*
* pone como solo lectura el parámetro.
*
DEFINE vc_ssgris.
  if screen-name = &1. screen-input = '0'. modify screen. endif.
END-OF-DEFINITION.
***********************************************************************
* VC_SSVISIBLE 'PARAMETRO'.
*
* hace visible el parámetro.
*
DEFINE vc_ssvisible.
  if screen-name = &1. screen-active = '1'. modify screen. endif.
END-OF-DEFINITION.
***********************************************************************
* VC_SSINVISIBLE 'PARAMETRO'.
*
* oculta el parámetro.
*
DEFINE vc_ssinvisible.
  if screen-name = &1. screen-active = '0'. modify screen. endif.
END-OF-DEFINITION.
***********************************************************************

***********************************************************************
***********************************************************************
***********************************************************************
*       _                      _
*  ___ (_) ___ _ __ ___  _ __ | | ___
* / _ \| |/ _ \ '_ ` _ \| '_ \| |/ _ \
*|  __/| |  __/ | | | | | |_) | | (_) |
* \___|/ |\___|_| |_| |_| .__/|_|\___/
*    |__/               |_|

PARAMETERS param1 AS LISTBOX VISIBLE LENGTH 15.
PARAMETERS param2 AS LISTBOX VISIBLE LENGTH 15.
PARAMETERS pchecker AS CHECKBOX USER-COMMAND zin.

INITIALIZATION. "ESENCIAL QUE ESTÉ DENTRO DE ESTE EVENTO
  vc_lbini 'PARAM1'.
  vc_lbadd 'A' 'UNO'.
  vc_lbadd 'B' 'DOS'.
  vc_lbadd 'C' 'TRES'.
  vc_lbexe.

  vc_lbini 'PARAM2'.
  vc_lbadd 'D' 'UNO2'.
  vc_lbadd 'E' 'DOS2'.
  vc_lbadd 'F' 'TRES2'.
  vc_lbexe.

AT SELECTION-SCREEN OUTPUT."debe estar dentro de este evento en reports

  LOOP AT SCREEN.
    IF pchecker = 'X'.
      vc_ssblanco 'PARAM1'.  "deja el campo como editable
      vc_ssvisible 'PARAM2'. "deja el campo visible
    ELSE.
      vc_ssgris 'PARAM1'.      "deja el campo sólo lectura
      vc_ssinvisible 'PARAM2'. "oculta el campo
    ENDIF.
  ENDLOOP.

START-OF-SELECTION.

  WRITE param1.
  WRITE param2.
archivado en: ABAP/IV

21 junio 2010

flores de ponga

Ponga es un pequeño paraíso situado en el occidente de Asturias. Estas son algunas de las fotos que saqué este fin de semana pasado durante mi estancia en Sobrefoz.








12 junio 2010

logos para f.r.

archivado en: Diseño Galería

logos diseñados para el ciclista y corredor de fondo F.R.

archivado en: Diseño Galería
índice   cranf.net   wordnadapress
1