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.
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).
¿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.
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') + ¶metro_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.
* Población mundial: http://datafinder.worldbank.org/population-total
* 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:
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
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).
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.
Como ejemplo, veamos la forma de actualizar en la tabla "usuarios" el email y teléfono a partir de la tabla "tmp_usuarios":
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.
3. ... No.
4. ... No.
5. ... Sí.
6. ... 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:
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
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:
2. Creamos un script para llevar a cabo todo el proceso (copia.sh)
3. Creamos un cron (cron.txt):
4. Incluimos el cron en el conjunto de tareas programadas:
5. Podemos visualizar la lista de tareas ejecutadas como cron:
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'.
sudo -i su oracleConviene 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/exp2. 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.paruserid=system/**** full=y file=/oracle/export/full_20_00.dmp log=/oracle/export/full_20_00.log consistent=y buffer=50000 direct=yDonde 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.
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:
2. A continuación ejecutar SQL*Plus con:
A partir de entonces, podremos realizar cualquier operación como DBA. Operaciones tales como manipular bloqueos o clave de los usuarios SYS o SYSTEM.
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: 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
Suscribirse a:
Entradas (Atom)