Los tres grandes Super Sayanos

En japón ya está a la venta el videojuego basado en la película de Akira Toriyama "Sandai Suupa Saiyajin". Una adaptación para el supercomputador de Sinclair traducida con el esfínter como "Los tres grandes Super Sayanos".

Yo ya me lo he comprado. Así que aprovecho para adelantaros, de la forma más sofisticada posible, una imagen de la intro.




Revista ¡¡AL ATAQUE!!

¿Quién no recuerda el programa de televisión "¡¡Al ataque!!"?. De la mano de Alfonso Arús, a principios de los 90 se creó un referente del humor en televisión. Un humor basado en la parodia de personajes políticos (Antonio Guerra), futbolísticos (Jesús Gil), extraños (Carlos Jesús) o inventados (Pepe Gáfez). Y todo ello con muy pocos medios: máscaras, siempre los mismos disfraces y un croma.

En la época del programa, surgió la revista que llevaba su mismo nombre. Y yo, en aquel entonces, sin percatarme de la mayor parte de los chistes sobre política o fútbol, me compraba todas las semanas mi ejemplar. Estaba enganchado. Me alucinaba ver dibujados los mismos personajes que en la tele eran personas. Además me partía de risa con los historietas y montajes, y "alucinaba" con las imágenes de algún que otro culo carnoso (porqué no decirlo... o escribirlo...)

Tras su fin, Arús reapareció con "El show de Alfonso Arús". En la misma cadena y con el mismo formato, pero con una audiencia limitada a los fieles del anterior programa. Años más tarde, se hicieron nuevos intentos pero quedaron relegados a cadenas locales. Siendo preferible escuchar a Arús desde la radio en programas como "La jungla".

Y, como no, aquí dejo algunas páginas de uno de mis números de la revista. Una publicación que se atrevía a mostrar en portada la frase: "La revista semanal más chachipilongui". Algo que hoy al escritor le impediría salir a la calle.



Las dimensiones en el universo

Pulsa "Play" y usa las teclas "Izquierda" y "Derecha" para desplazarte. Verás la relación en las dimensiones de objetos muchísimos objetos. Partiendo del quantum hasta llegar al universo en sí.

Llegarás a pensar que no somos nada en comparación con el resto del universo y que... necesitamos años de evolución para apreciar tales magnitudes.

¡Ojo! El flash lleva música. Que no te pille desprevenido.





Cortesía de www.newgrounds.com

Autómata finito determinista sin ánimo de lucro

¿Recordáis en la película "Men In Black" el extraterrestre que le roba la piel al granjero?. Pues posiblemente esté basado en hechos reales. Atención al autómata finito determinista de 4 estados que comprende la capacidad de razonamiento de este ser: 

Estados:
Sin ánimo de lucro (inicial)
¿Tú qué prefieres?
Picha o tortilla de patatas
Tú me entiendes (final)

Cualquier otra expresión o sonido se debe a la falta de control sobre las cuerdas vocales (me lo ha dicho Iker Jiménez).

Memoria musical

Esta entrada está dedicada a canciones que voy conociendo o recordando y creo dignas de compartir (siempre y cuando YouTube me lo permita). Por eso mismo iré actualizando la lista con nuevas joyitas. Espero que os guste.
Cualquier sugerencia será aceptada.

Artista: Brooklyn Funk Essentials
Álbum: Cool and Steady and Easy
Canción: Blow Your Brains Out
Spotify: Brooklyn...

Artista: Earth, Wind & Fire
Álbum: The Eternal Dance
Canción: Happy Feeling
Spotify: Earth...

Artista: Quincy Jones
Álbum: You've Got It Bad Girl
Canción: Summer In The City
Spotify: Quincy...

Artista: Tower Of Power
Álbum: Urban Renewal
Canción: Only So Much Oil In The Ground
Spotify: Tower...

Artista: DJ Jazzy Jeff & The Fresh Prince
Álbum: Homebase
Canción: Summertime
Spotify: DJ...

Artista: The Brand New Heavies
Álbum: Brother Sister
Canción: Midnight At The Oasis
Spotify: Brand...

Artista: Seal
Álbum: Seal
Canción: Kiss From A Rose
Spotify: Seal...


Sin entrada en YouTube:

Artista: Caroline Crawford
Álbum: Nice & Soulful
Canción: Can't Hold Back
Spotify: Caroline...

Artista: Prince
Álbum: Planet Earth
Canción: Resolution
Spotify: Prince...

SQL: Unix Timestamp

Unix Timestamp es el formato en que se representa una fecha y hora contando los segundos transcurridos desde el día 1 de enero de 1970 a las 00:00:00 (comienzo del día). Con SQL de Oracle podemos tratar estas fechas de la siguiente manera:

Hora actual en formato Unix Timestamp:
select (sysdate - to_date('01/01/1970', 'dd/mm/yyyy'))*86400 
from  dual; 

De formato Unix Timestamp a Date:
select to_date('01/01/1970') + &parametro_unixts/86400 
from dual;

PL/SQL: Agrupar concatenando

Para concatenar cadenas de diferentes filas de un grupo devueltas a partir de una consulta SQL de forma similar a aplicar count() o max() con números, usamos la función concat_group. De esta forma reducimos la cantidad de filas a una única.

Sus parámetros son dos:
 * Un cursor sobre una consulta SQL para tomar la columna con la cadena a concatenar
 * Una cadena que se usara como separador

Ejemplo:
select concat_group(cursor(
 select to_char(nombre)
 from usuarios 
where rownum < 400));

Limitación: La cadena devuelta está limitada a 32760 caracteres que es la cantidad máxima de bytes que permite el tipo varchar2.


create or replace function concat_group(
p_cursor in sys_refcursor, 
p_separador varchar2 default ' ')
is return varchar2
  salida varchar2(32760);
  cadena varchar2(32760);
begin
  loop fetch p_cursor into cadena;
    exit when p_cursor%NOTFOUND;
    salida := salida||p_separador||cadena;
  end loop; 
  close p_cursor;
  return ltrim(substr(salida, length(p_separador), length(salida)));
end;

PL/SQL: Pasar una cadena a MD5

create or replace function cadena_a_md5(cadena in varchar2) 
return varchar2 
is
 cadena_hex varchar2(32);
 ofuscacion varchar2(16);
begin
 ofuscacion := 
dbms_obfuscation_toolkit.md5(input_string => cadena);
 select lower(rawtohex(ofuscacion)) into cadena_hex 
from dual;
 return cadena_hex;
end;

¿Don Periñón, Perignon, Pérignon...?

Al menos dos veces al mes me pregunta una amigo: ¿Don Periñón es un  vino, un cava o un champán?. Y yo echo a correr. Tengo que reconocer que siempre dudo. Siempre. Llegando a pensar que es un vino.

Más de uno/a que lea esto puede sentir vergüenza ajena pero es lo que hay: siempre dudo. O mejor dicho: siempre dudaba.

Como bien saben los cerca de 7000 millones de personas* existentes,  se trata de un champán que realmente se llama "Dom Pérignon"*. En fín, Google siempre tiene la respuesta.

* Dom Pérignon:  http://www.domperignon.com

Super Michael Bros

Si te gustan los videojuegos clásicos y alucinabas con Michael Jackson, estás delante de la combinación perfecta: Michael Jackson como Mario Bros.
Es increible encontrar un juego tan antiguo con un nuevo formato. MJ en el mundo de Mario. Saltando, girando y bailando como lo hacía en Moonwalker.

¿Bailar en el centro de Málaga?

Si no te gusta el reguetón (o como se escriba si es que hay una forma establecida), la rumba o el pop de Shakira, entonces estás perdido en el centro de Málaga.

El centro de la ciudad está repleto de "pubs" orientados a diferentes edades y estilos. Pero todos tienen un denominador común: el estilo y repertorio musical. Hay locales que se limitan a un único estilo (rock español de los 80 y 90) y otros que combinan varios pero siempre con las mismas canciones (I will survive de Gloria Gaynor, la canción de Grease cuyo nombre nadie conoce, etc). A ello se le suman los experimentos de aficionados a disc jockey que te hacen tomar consciencia entre canción y canción de la calidad del sitio.

Lugares en los que acabas moviendo la cabeza de un lado a otro, dando palmas y cantando lo que suena para integrarte en el ambiente de forma inconsciente en lugar de bailar y divertirte de verdad (aunque habrá a quien lo primero le baste). A la mayoría de la gente que entra en un pub le gusta bailar. Entonces, ¿por qué no ponen música que te haga moverte sin necesidad de mostrarte lascivo como en el caso del reguetón o palmear como en el caso de las canciones "inbailables" de Rosario Flores?.

En el centro de Málaga no conocen la música hecha para discotecas. Que es a lo que intentan parecerse estos pubs. En los años 80 se definió la "música disco" como un conjunto de estilos musicales que llenaban las pistas de baile. Hoy, las pistas de baile se llenan para beber y fumar "tonteando" con alguien mientras te mueves siempre de la misma forma al ritmo de lo que suena. Generalmente no apetece disfrutar bailando.

Evidentemente, hay muchísima gente a la que le gusta éste tipo de sitios para pasar la noche. Sin embargo, ¿no es sorprendente ver cómo se exagera la forma de bailar cuando suena Michael Jackson o Earth, wind and fire?. Se aprecian las ganas de saltar, moverse y disfrutar bailando de la gente. Y hacerlo con música con ritmo y calidad. Entonces... ¿por qué no suena esta música más a menudo?, ¿por qué no suena más funky o soul?, ¿el estilo está determinado por el gusto de la gente o por el aficionado a disc jockey?.

Estas son preguntas que lanzo para que alguien me ayude a entender la situación. Todo ello, por supuesto, sin entrar en la crítica del acondicionamiento y trato de los empleados. Asunto para el que habría que dedicar algunas entradas más en el blog.

Semana santa de Málaga y Ronda 2010

Semana santa. Santa feria...

Este año he vivido la semana santa de Ronda y Málaga capital. Y, al margen de la rascada de bartola que me he dado que es lo único que me interesa de esta semana, he visto bastantes tronos (no recuerdo tantos en el mismo año). Una cantidad que me ha servido para llegar a apreciar algo bonito en las procesiones (cosa que nunca antes había hecho). Pasando minutos delante de los tronos y callejeando por ambas ciudades, me he sensibilizado (solo un poco) y he llegado a sacar conclusiones comparando el estilo de varales y costaleros y el respeto de la gente en las calles ante el ritual.

Prefiero el estilo de costalero al de varales. La sencillez, limpieza y elegancia de una escultura paseada por una plataforma adornada con figuras de madera y rodeada por un manto colgante aterciopelado me parece una imagen mas bella que la de otra paseada por 100 hombres que, aunque den una mayor sensación de caminar a la escultura, me dan una mayor sensación de desorden y se pierde majestuosidad.

Por otra parte, la banda de música, como siempre, es la parte que más (la única en la mayoría de los casos) me ha emocionado. Las procesiones sin banda quedan, de nuevo a mi parecer, incompletas.

En cuanto al respeto de la gente también opino. Esta apreciación es mucho más inteligible puesto que no requiere de sentimentalismos ni devoción. Me refiero al respeto de la procesión en si. A su espacio necesario en la calle o el silencio necesario en muchos casos para dotar de un poco de magia al espectáculo. En Ronda el respeto está asumido. No hay gente que se siente (con la familia como un domingo de playa) invadiendo la calle por la que pasa ni abraza a nazarenos para hacerse fotos como si de carnavales o un circo se tratase. Habrá gente que lo vea así y eso denota una falta de respeto hacia quienes consideran a este espectáculo como un ritual anual e incomodan el propio proceso de la procesión. Haciendo que la calle quede como la entrada de una feria (sin tener en cuenta que en la entrada de una feria  no suele haber charcos de orina como sí me he encontrado y pisado en algunas calles de Málaga).

En resumen, este año he valorado un poco más el espectáculo procesional y optado por la semana santa rondeña a la de málaga. Por supuesto, con todo el respeto a las hermandades y gente de ambas ciudades.

SQL: Cómo actualizar un conjunto de filas sin cursor

De forma general, el formato de la sentencia UPDATE necesaria sería el siguiente:

update tabla_destino alias_td
set alias_td.atributo = (
select alias_to.atributo
from tabla_origen alias_to
where alias_td.clave_primaria = alias_to.clave_primaria)
where alias_td.clave_primaria in 
(select clave_primaria from tabla_origen)

Este UPDATE actualiza un atributo de un conjunto de tuplas a partir de un atributo de un segundo conjunto.

Analizando cada parte, tenemos:

1. Indicamos el atributo de la tabla que vamos a actualizar

update tabla_destino alias_td
set alias_td.atributo =

2. Seleccionamos el atributo de la tabla origen del que tomar el nuevo valor. Concretamente estamos seleccionando aquellas tuplas de la tabla origen cuya clave primaria coincide con la clave primaria de la tabla destino (la condición podría haber sido sobre otro campo, pero siempre de valor único).

(select alias_to.atributo
from tabla_origen alias_to
where alias_td.clave_primaria = alias_to.clave_primaria)

3. Seleccionamos el conjunto de tuplas a actualizar. Actualizaremos aquellas tuplas cuya clave primaria esté dentro del conjunto de claves primarias de la tabla origen. Sin esta cláusula se actualizarían todas las tuplas de la tabla destino en lugar de hacerlo únicamente en las que nos interesan. Su ausencia supondría el problema de asignar el valor null en aquellas tuplas cuya clave primaria no aparece en el conjunto de la subconsulta, ya que la condición "alias_td.clave_primaria = alias_to.clave_primaria" de la subconsulta no sería cierta en estos casos y devolvería null.

where alias_td.clave_primaria in (select clave_primaria from tabla_origen)

Como ejemplo, veamos la forma de actualizar en la tabla "usuarios" el email y teléfono a partir de la tabla "tmp_usuarios":

update seg_usuario s
set s.usuario_mail = (select f.email from tmp_usuarios f where s.seg_usuario_id = f.usuario),
s.tf = (select f.telefono from tmp_usuarios f where s.usuarios_id = f.usuario)
where s.usuarios_id in (select usuario from tmp_usuarios)

SQL: Importación de la BD

Teniendo el fichero .dmp (creado como se indica en la entrada anterior del blog), la importación podemos realizarla de forma interactiva usando el ejecutable $ORACLE_HOME/bin/imp. En la secuencia de preguntas, podemos ir respondiendo como sigue:

1. ... nombre del fichero .dmp
2. ... 500002.
3. ... No.
4. ... No.
5. ... Sí.
6. ... Sí.

Al igual en la exportación, podremos elegir trabajar exclusivamente con tablas concretas, esquemas o la base de datos al completo. 

IMPORTANTE: Para realizar la importación de datos de una tabla que ya existe, conviene usar una tabla provisional en la que volcar los datos. Posteriormente podremos tratarlos para incluirlos en la tabla de destino. Esta idea es extrapolable al nivel de esquema.

SQL: Exportación de la BD

Autenticarse como usuario "oracle". Podemos hacerlo rápidamente desde el usuario root:
sudo -i
su oracle
Conviene realizar todas las operaciones desde el mismo directorio. Así será más cómodo referenciar a los ficheros necesarios (por ejemplo, /oracle/export)

De forma interactiva

1. $ORACLE_HOME/bin/exp
2. Usuario: system; Contraseña: ****
3. Tamaño del buffer: Cantidad máxima de bytes (por ejemplo, 50000)
4. Archivo: 'expdat.dmp' (este es el nombre por defecto)
5. Elegir la opción por defecto en el resto de preguntas

Usando un fichero de parámetros

Si queremos evitar este proceso interactivo, podemos usar un fichero de parámetros (con extensión 'par'). Este es un ejemplo: exportacion.par
userid=system/****
full=y
file=/oracle/export/full_20_00.dmp
log=/oracle/export/full_20_00.log
consistent=y
buffer=50000
direct=y
Donde cada parámetro significa:

userid: Usuario y contraseña del usuario system
full: Indicación de si queremos una exportación completa (esquemas, datos, usuarios, permisos...)
file: Fichero de exportación
log: Fichero de log del proceso de exportación
consistent: Indicación de si queremos recoger los cambios realizados
durante el proceso de exportación
buffer: Memoria a emplear en el proceso
direct: (aumenta la velocidad del proceso)

Así podríamos usarlo:
exp parfile=exportacion.par

De forma programada

1. Creamos un fichero con la asignación variables de entorno. Esto es necesario para su lectura desde el cron. Este es un ejemplo (entorno.txt):
#ORACLE_BASE=/app/oracle; export ORACLE_BASE
ORACLE_HOME=/usr/lib/oracle/xe/app/oracle/product/10.2.0/server ; export ORACLE_HOME
ORACLE_SID=XE; export ORACLE_SID
PATH=$PATH:$ORACLE_HOME/bin; export PATH
PATH=$PATH:/usr/ccs/bin; export PATH
LANGUAGE=spanish_spain.AL32UTF8
NLS_LANG=spanish_spain.AL32UTF8
export LANGUAGE NLS_LANG
ORACLE_OWNER=oracle;export ORACLE_OWNER

2. Creamos un script para llevar a cabo todo el proceso (copia.sh)
. /oracle/export/entorno
cd /oracle/export
$ORACLE_HOME/bin/exp parfile=/oracle/export/exportacion.par

3. Creamos un cron (cron.txt):
#Min.   Horas   Dia     Mes     Dia S   Comando
#(0-59) (0-23)  (1-31)  (1-12)  (0-6)
#------ ------  ------  ------  ------  --------------------------------
00      20      *       *       *       /oracle/export/copia.sh >/oracle/export/exportacion.log 2>&1

4. Incluimos el cron en el conjunto de tareas programadas:
crontab cron.txt

5. Podemos visualizar la lista de tareas ejecutadas como cron:
crontab -l

Así, la relación de llamadas en los ficheros usados como ejemplo quedaría: 'cron.txt' define el cron que ejcutará a 'copia.sh' que a su vez usará a 'exportacion.par' y a 'entorno'.

Mis lentejas

Este fin de semana he descubierto lo realmente fácil que es hacer unas lentejas. Ya me lo decían pero... ¡hay que hacerlas!. El poder der Mercadona hace milagros. Esta es una guía rápida para dummies:


Aprobado: La mitad de todo lo que hay en la bandeja de verduras para cocido der Mercadona + La mitad de todo lo que hay en la bandeja de carnes y hueso para cocido también der Mercadona + Tres puñaos* de lentejas por plato + Un pimiento + Una cebolla pequeña pelada sin cortar + Agua que cubra las lentejas dos dedos* por encima + Calentar a fuego muy lento durante 2 ó 3 horas (esto sin olla a presión) todo mezclado estando pendiente de que no se pegan las lentejas al fondo cada 15 minutos

Notable: + Una cabeza de ajo + Una hoja de laurel + 4 clavos

Sobresaliente: + Chorizo y morcilla de Benaoján.

Matrícula de Honor: Olvidarse de todo lo anterior y hacerlas como mi Santa Señora Madre.

    Ahora me sumo a la gente que dice: "Si no las haces es porque no quieres.".


    * Puñao: Unidad de medida internacional que mide la cantidad que cabe en una mano de adulto.
    * Dedo: Unidad de medida internacional equivalente a 1.25 cm.

    SQL: Usar privilegios DBA sin autenticación

    Para trabajar con los privilegios del usuario SYS, SYSTEM o SYSMAN sin necesidad de autenticarse, es necesario seguir los siguientes pasos:

    1. Entrar en el sistema operativo como usuario con privilegios suficientes para
    gestionar los servicios de Oracle. En Ubuntu, por defecto, es "oracle". Por lo que
    tendríamos que ejecutar el siguiente comando:

    su oracle
    

    2. A continuación ejecutar SQL*Plus con:

    sqplus / as sysdba

    A partir de entonces, podremos realizar cualquier operación como DBA. Operaciones tales como manipular bloqueos o clave de los usuarios SYS o SYSTEM.

    SQL: Cuándo fué la última modificación de una tabla

    select scn_to_timestamp(max(ora_rowscn))
    from tabla
    

    SQL: Qué sesiones están bloqueadas

    select /*+ rule */
    e.username espera, 
    e.sid sesion, 
    e.osuser ux_user, 
    e.process ux_pid, 
    e.terminal, 
    e.program, 
    sql_text
    from v$sqlarea t, v$session e, v$lock le
    where le.lmode = 0
    and le.sid = e.sid
    and t.hash_value(+) = e.sql_hash_value