sábado, 13 de octubre de 2012

Xampp, PhpMyAdmin y la pestaña privilegios

Sigo con la misma instalación que en el artículo anterior. Esto me pasó al principio. Ya decía, xampp-1.8.1-VC9, que instala phpmyadmin 3.5.2.2.

La primera vez que accedo al cliente phpmyadmin veo uno de los típicos mensajes a los que haces caso o no. Este versaba sobre la falta de seguridad de tener al usuario root sin contraseña. Vale. Pues sigo las instrucciones y lo arreglo, faltaría más. Dicen esas instrucciones que una de las cosas que debo hacer es entrar en la pestaña privilegios y establecer la contraseña pero... tal pestaña no existe. 

Es más, incluso si entras en la gestión de bases de datos, te permite crearlas pero no ofrece controles para eliminarlas.

Efectivamente, San Google me da unos cuantos resultados de gente a la que también le ha pasado pero, aparte de los inútiles que siempre recomiendan desinstalar y volver a instalar, poco en claro he sacado. Algún comentario habla de parar los servicios de apache y mysql y volver a entrar en phpmyadmin.

Pues ha funcionado. Incluso ese detalle de eliminar bases de datos. El porqué...

Nota: y la pestaña "privilegios" ahora se llama "usuarios", igual y queda mejor, sí.

Xampp, MySQL y las segundas instancias

Se me ocurre, a raiz de lo publicado en FBDblog, realizar una demo en vídeo sobre un sistema limpio. Me creo una máquina virtual con Win7x64 y me pongo a instalar Xampp. Lo hago todo y a la hora de poner en marcha la segunda instancia... no va.

Le he tirado horas, oiga. También es cierto que en mi máquina "real" MySQL está instalado de forma independiente de Xampp pero, vamos, "debería ir".

A ver, la secuencia ha sido, aparte de copias de carpetas y ficheros de configuración,

mysqld --install mysql2 --defaults-file="c:\xampp\mysql\bin\my2.ini"
net start mysql2

Y ahí nos quedábamos.

He encontrado la solución, finalmente, y ha sido desintalar el servicio original que Xampp puso en marcha durante la instalación:

net stop mysql
mysql --remove mysql
mysqld --install mysql --defaults-file="c:\xampp\mysql\bin\my.ini"
net start mysql
net start mysql2

Lo que he deducido es que el mysql que instala xampp no lee fichero de configuración alguno sino que carga con las opciones por defecto, que vete a saber cuáles son, y en algún punto las dos instancias intentaban compartir algún recurso que no debían. 

Conste que no a todos les pasará. Esto me ha pasado a mí con xampp-1.8.1-VC9 y no tengo idea de en qué punto metí la pata en la instalación, si así fue.

Cosas de la vida.

lunes, 24 de septiembre de 2012

MySQL, el error 87 y cambiar ubicación de las bases de datos

Esta ha sido de las gordas. El objetivo era cambiar la ubicación de los archivos de datos de mi servidor de pruebas MySQL, el que tengo instalado en mi ordenador de casa. Obviamente, acceso total a cualquier parámetro de configuración. Si instalas con típico "sí, sí y sí" es normal que se cree una carpeta en C:/ProgramData/MySQL/MySQL Server 5.5/Data/ que es donde va a para el conjunto de nuestras bases de datos y los ficheros necesarios para INNODB. Bien, ya no lo quiero ahí, lo quiero en X:/Carpeta/MySQL/Data/ (lo de las barras invertidas es porque el my.ini lo pone, y creo que necesita, así). 

En realidad, es fácil, hay varios sitios que te dicen como hacerlo. Solo hay que cambiar una variable en el my.ini (recuerda, "estoy" en Windows):
#Path to the database root
datadir="X:/Carpeta/MySQL/Data/"
Por supuesto, con el servidor apagado, este cambio se tiene en cuenta al iniciarlo.

Pues me ha ocurrido una cosa graciosa. Todo viene de que tengo 2 discos y lo estaba cambiando del disco C al D, pongamos. Pues no iba. Me he puesto duro, he entrado en un terminal con cmd.exe y arrancaba con mysqld.exe. He retocado mil veces el my.ini, cambiando de sitio, poniendo barras en un sentido y en otro ('/' por '\'). Que no. Todo el rato, la salida de mysqld era llegar a la zona de innodb y 

120924 14:18:17  InnoDB: Operating system error number 87 in a file operation.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.5/en/operating-system-error-codes.html
InnoDB: File name .\ib_logfile0
InnoDB: File operation call: 'aio read'.
InnoDB: Cannot continue operation.

Claro, ponte a leer lo que te dicen y como que no te enteras. Lo curioso es que la misma operación pero dentro del disco C, es decir, otra carpeta pero en el mismo disco, funciona.

Al final he conseguido la solución, me la ha dado Websofia, una línea más my.ini:

innodb_flush_method=normal
 
Muy acertadamente, ofrece enlaces a su particular investigación y en este enlace avisan de que hay un error gordo, un bug de esos, que hace que si tienes un disco GPT la cosa no chute. Los detalles más técnicos se van desgranando en esa página pero al principio ya describen lo que me ocurría a mí, un disco con más de 2GB en Windows, el disco D. En el disco C funcionaba porque se trataba de un particionamiento MBR normalito y corrientito, de los de toda la vida.

Como lo oyen, perdón, lo leen. Para encontrarlo fácil, fácil. Menos mal que soy de los que reinstalan solo si la desesperación me lleva a ver burros volando.

martes, 14 de agosto de 2012

Screencast o grabar la pantalla en video

Me encuentro en la necesidad de generar video tipo demostración, capturando las acciones que se van realizando sobre un programa ejecutado en mi ordenador. Pero después es muy posible que haya que editar ese video, quitarle pausas, errores de digitación, cualquier cosa, y puede que añadirle cosas como títulos, dibujillos, etc. Por supuesto, también audio, que lo grabaré posteriormente y lo añadiré al video. Como programa de edición de video (y audio), para eso lo he pagado, Adobe Premiere Pro CS5.5. Como ya he dicho muchas veces, entorno Windows 7 64 bits.

Agarra Google y busca programas. Algunos descartados por ser de pago, por ya vistos, por bla, bla, bla... Opciones:

Tiene una historia curiosa, es gratis, lo que me es fundamental, y funciona muy bien. Lamentablemente, se da de tortas con Premiere que tiene problemas con el formato de grabación y el canal alpha no lo interpreta bien. De hecho, un AVI sin compresión, cuando es importado a Premiere, produce efectos raros y el video es inservible a no ser que el original de CamStudio no necesite edición. La solución que aporta el artículo anteriormente enlazado no me ha funcionado, los codecs que sí he podido utilizar en CamStudio hacen que sea imposible importar el video en Premiere. Esto puede ser por la versión de 64 bits del programa y que esos codecs solo los tenga en versión de 32, Premiere es muy pejigueras con eso. Ponte a buscarlos y, si los encuentras para x64, instálalos... pues que no.
Bonito, sencillito y barato, pero no gratis. En realidad es un "todo en uno", capturador de pantallazos en imágenes en distintos formatos (jpg, png, tiff, pdf...) y grabador de video. Lo único que se le puede echar en cara es que el formato de video es Windows Media y no hay más. Pero Premiere se lo come sin problemas.
Ya empieza con chorraditas de esas que te instalan una barra de búsquedas en el navegador a poco que te despistes. Lo odio. Pero es que no he conseguido hacer nada, siempre un error que impide hasta iniciar la grabación. Lo desinstalo.
Ni el reproductor de Windows Media ha conseguido abrir el AVI. Tiene un formato propio (rcut) y parece más enfocado a generar flash para la web. Como no tiene más opciones de grabación, no me interesa.
Versión gratuita con menos funciones que sus hermanos de pago, pero suficientes para mí ya que es capaz de exportar a AVI, y utilizando los codecs del sistema, lo que me hace pensar que la salida de Camstudio es la incompatible con Premiere (o viceversa). La velocidad máxima de captura es de 9fps, no sé yo, pero para lo que lo estoy utilizando es asumilble, lo poco que he probado da una calidad aceptable, se notan saltitos al mover el cursor pero vale. Sobre todo porque Premiere importa sin problemas.
Y como me he cansado de probar más, me parece que ya tengo bastantes opciones, pues me pongo a trabajar. La decisión está entre Faststone y BB, el primero lo tengo a prueba el mes de rigor. El segundo tiene todas las de ganar, que ya es mío por 0€.


Imágenes de PICOL

lunes, 23 de julio de 2012

Skydrive y las imágenes

Hay un detalle de Skydrive que ha estado a punto de fastidiarme el negocio. Me explico.

Al final me he decantado por este servicio para mantener todos los materiales de nuestra asignatura, FBD, Google drive ofrece ese comportamiento en el que "todo" es editable y maneja y presenta los documentos, sea lo que sea, muy a su manera, cuando lo que queremos es un simple sistema de carpetas y archivos. También porque disponemos de unos cuantos gigas que no tenemos en, pongamos, Dropbox.

Al grano. Uno de los tipos de archivo que Skydrive presenta de una manera especial son los PNG, en realidad todo archivo de imagen. Esto consiste en que te monta un pase de diapositivas sin tú pedirlo. Lo que en otras circunstancias queda bonito, cuando quiero utilizar la imagen para que se vea en una entrada nueva de un foro montado con phpBB3, donde los BBcode te piden lo siguiente,

[img]https://skydrive.live.com/redir?resid=6491A71B1B9712F0!815[/img]

no vale, la URL que te da Skydrive para el acceso público no es interpretada correctamente por ser precisamente la que genera el mencionado pase de diapositivas.

No hay problema. Hay una opción semioculta que consiste en acceder al enlace "Ver original"



y ahí sí, el fichero se trata como tal y no entra en ningún inteface web raro, con lo que la URL se puede utilizar sin problema.

[img]https://public.blu.livefilestore.com/y1phLzSsjLFVb_f5npVSRyMtTtjAzcMqlsi0YfsAayyodFtgBXqFwyZfAgNqTbSpPjgxmJC_SlayPljDRVUZQl1lA/moodlenotas.png?psid=1[/img]

Ya, bueno, el chorizo es de aupa, pero qué más da, el lector no se va ni a molestar.

lunes, 16 de julio de 2012

Google sites y las imágenes que son enlaces

Chorraditas. Sí, pero qué le vamos a hacer. En Google Sites, cuando utilizas una imagen como enlace a otras páginas, el resultado final es un recuadro alrededor de la imagen que tú no habías pedido.


La primera imagen aparece recuadrada porque es un enlace a otra página web. La cosa es de un tonto subido. Si entramos en edición y pulsamos para ver el código HTML (último de la botonera de opciones de edición que nos aparece arriba de las cajas de edición), lo que obtenemos es esto:
<a href="http://cvnet.cpd.ua.es/gite/gitedesc.aspx?gite=11014&amp;ori=todos">
<img src="https://sites.google.com/site/fbddocs/config/customLogo.gif" height="50" width="50" border="0"></a>
Google añade border="0" automáticamente cuando se inserta una imagen. Ahora bien, si cambiamos ese trozo de código por 
<a href="http://cvnet.cpd.ua.es/gite/gitedesc.aspx?gite=11014&amp;ori=todos">
<img src="https://sites.google.com/site/fbddocs/config/customLogo.gif" height="50" width="50" style="border:0px"></a>
Arreglado:


¿Que por qué? ¡Y yo qué sé! Pero tiene que ver con el tema elegido. En mi caso "sencillo". Si lo cambio a "iceberg" ya no hace el "marquito".



lunes, 9 de julio de 2012

Greasemonkey

¡Qué cosas! Hay tanto que leer y que descubrir... Mira tú que Greasemonkey es una extensión de Firefox que permite ejecutar código en el cliente cada vez que se accede a una página concreta en internet. Todo ha venido porque quería añadir a mis fotos en Flickr una forma de compartirlas directamente en mi perfil de Google+. Pues aquí la solución, LouCypher el dueño, tan fácil como pulsar el botón install.

martes, 3 de julio de 2012

Volviendo a exportar desde Blogger e importando en WordPress

La naturaleza de este diario es la de ser efímero. A cualquier problema que me encuentre, el tiempo le da respuesta en forma de actualizaciones de versiones, reinstalaciones en limpio o simple casualidad. Como sigo haciendo probaturas con WordPress y queriendo aprovechar lo ya publicado en Blogger, volvemos a la importación y exportación.

Ahora he utilizado desde el principio la herramienta de WP importar desde Blogger que, tras la petición de autorización al producto de Google, hace la importación en un solo click (o en pocos) y, esta vez, ha funcionado casi a la perfección.

Digo casi porque todas las etiquetas de Blogger se han traducido a categorías de WP. Parece habitual porque hay otra herramienta que convierte categorías en etiquetas y vicecersa. Eco escuela 2.0 lo explica muy bien aquí.

Wordpress y la instalación directa de plugins

Tengo un WordPress para probaturas en un servidor que no administro yo y que no tiene acceso público a según qué puertos. El caso es que si quiero instalar o eliminar un plugin el método estándar es pasar por una pantalla en la que te pide datos de usuario y método de transferencia (FTP, FTPS o SSH). La razón es que solo tengo acceso a lo que mi cuenta de usuario permite dentro del sistema de archivos del servidor. Se aplica también a las actualizaciones de sistema al completo. Por ejemplo, si la conexión tuviera que ser por SSH, Jonathan V.C. te cuenta el proceso para conseguirlo.

Ya digo que, por no ser un servidor completamente abierto a Internet ni administrado por mí, ciertas cosas se pueden hacer y otras no. El caso es que hay una manera "directa" de que Wordpress instale lo que tenga que instalar. En el archivo wp-config.php hay que añadir las siguientes definiciones:

define( 'FS_METHOD', 'direct');
define( 'FS_CHMOD_DIR', 0777 );
define( 'FS_CHMOD_FILE', 0777 );

Con esto, no hace falta más que entrar en Wordpress con un usuario que te permita hacer estas instalaciones y ya no hace falta pelearse con los parámetros de conexión.

Más información en WordPress: Editing wp-config.php.

martes, 5 de junio de 2012

El día a día

Uno de esos días tontos.

El complemento de Firefox que tanto he utilizado, FireShot, ha dejado de funcionar porque ya no es "de gratis":
fireshot pro trial expired
your 30 day trial is over and we offer you to purchase fireshot pro
[...]will there be a Free-Version again available at the Mozilla-Addons-Website[...]?
A lo que respondió:
No, sorry.
 Más claro, agua. La "crisi", seguro. Venga, a buscar alternativas: ¿Pixl Grabber? ¿Recortes de Win7? Normalmente hago recortes de lo visible en el navegador, sin embargo los addons estos de Firefox casi todos prometen capturar la página entera (¿mejor imprimir a pdf, pongamos?) cosa que no parece que Recortes pueda hacer. Venga, a acostumbrarse.

A todo esto, en medio de la presentación telemática de la Renta. Este año estaba contento, ni un problema oiga, nada que tocar en el navegador, Firefox 12, que sí lee los datos fiscales, el certificado funciona... Ya van dos veces que he intentado subir la declaración, una desde el Padre y otra a pelo, desde el navegador, y que no:

Que sea verdad, porque si no...

...

Ha pasado un rato y vuelvo a hacer lo de siempre, pruebo con iExplorer 9. Ya la he presentado. Estoy harto. Todos los años lo mismo. Me niego a buscar en las FAQ. ¡Coñ...!

martes, 29 de mayo de 2012

Moodle, PHP y el tiempo de ejecución al importar cursos

El escenario es el siguiente: Xampp instalado en local para desarrollo, un curso de Moodle 1.9.x y un Moodle 2.2.x recién instalado, en fresco, con la base de datos MySQL creada durante la instalación.

El problema es que PHP viene configurado de fábrica con 30 segundos de espera a los resultados de una ejecución. Sobrepasados esos segundos, el servidor PHP detiene el proceso y el navegador se queda tonto. En uno de los pasos de la restauración del curso antiguo al nuevo entorno, el proceso dura más de ese tiempo y aparece una pantalla en blanco en el navegador, se detiene y nada más, ni "palante" ni "patrás".

La solución consiste en aumentar el tiempo de ejecución en el php.ini:

max_execution_time = 60

O más. El caso es que reinicias el Apache y refrescas la página y, entonces, la restauración continua.

Otros consejos sobre los parámetros en el php.ini en MoodleDocs.

domingo, 6 de mayo de 2012

Que la carpeta pública de Google Drive se vea bonita

Que anteriomente hablábamos de que Google Drive presentaba problemas cuando se pretendía navegar por un árbol de carpetas sin haber iniciado sesión. Lo normal es pedirle a Google el enlace público y enlazarlo en la página HTML en cuestión.  Supongamos, una carpeta "exámenes" que, además, ya está dentro de la carpeta pública (public share). Si le editamos la información para compartir y el enlace público (por cierto, un poco oscuro esto, hay que seleccionar la carpeta y entonces te aparece arriba un "ojo" que debes pulsar para que te muestre la información relativa a la carpeta):
Lo malo es que este enlace nos lleva al antiguo interfaz de Google Docs, que no se comporta bien en todos los navegadores, con partes inaccesibles si la ventana se hace pequeña o la lista de archivos es demasiado grande, entre otros:


Sin embargo, hay un truco absurdo, de lo tonto que es, para conseguir la nueva interfaz para todo el mundo. Estando identificado en tu navegador:
  1. Pides la famosa URL pública de la carpeta que quieres publicar y Google te proporciona esto: https://docs.google.com/open?id=0BzgkR4YJ-ln1NzU3MjUxODEtY2NkYy00MGQ2LTliODEtNDZlN2JmOTg5YTQx
  2. Copias la URL anterior y la pegas en una nueva pestaña o ventana del navegador donde has iniciado sesión.
  3. Google hace una redirección y la transforma en: https://docs.google.com/folder/d/0BzgkR4YJ-ln1NzU3MjUxODEtY2NkYy00MGQ2LTliODEtNDZlN2JmOTg5YTQx/edit
  4. Copias esta última URL y es la que debes enlazar en tu página, funciona correctamente en iExplorer y en Chrome.
Además, lo que yo buscaba, te muestra los comentarios y descripciones añadidos en Google Drive:

 Lo dicho, de tan tonto que es una de dos: o el tonto soy yo que me he perdido algo o el Google Drive aún tiene cosas que pulir.

ACTUALIZACIÓN: es el día de hoy (14 de mayo de 2012) que parece que alguien se lo ha hecho notar ya a Google, y poniendo el enlace público generado al compartir en Drive sin tocar nada, que la vista de un usuario sin identificar, automáticamente, se ve "bonita". Rápidos son, bien.

martes, 1 de mayo de 2012

Google Drive, Dropbox, Skydrive

La cosa es muy sencilla: quiero compartir documentos, principalmente PDF, con mis alumnos. Estos consisten en presentaciones de diapositivas comentadas, ejercicios, soluciones, exámenes, es decir, nada nuevo ni excepcional.

Habiendo que hay infinidad de opciones de almacenamiento en la nube, los productos del título son ya archiconocidos y, si es por prestigio de buen hacer, Dropbox gana por ahora. ¿Qué tienen los otros que no tenga Dropbox? Almacenamiento, ahora mismo 5GB Google Drive y, si fuiste rápido en su día, 25GB en Skydrive. Aparte de este detalle, ¿algo más?

Claro que si piensas en Google y todo su universo de aplicaciones piensas que es la opción a considerar porque esperas una fácil convivencia entre unas y otras. Mi idea, importada de Google Sites y sus plantillas de página de archivos, es que, al menos, una breve descripción podría acompañar al nombre del fichero. Ya si viene el tamaño, tipo de archivo y hasta un numerito de versión, pues mejor.

Lo incómodo de esta forma de trabajar es que hay que adjuntar el archivo a la página en Google Sites y gastas espacio de almacenamiento. Tampoco es que sea tan importante, pero si tienes Google Drive (que subsume al Google Docs, con lo bueno y con lo malo), ¿por qué no aprovecharlo? La cuestión es no tener que ir fichero a fichero sino tenerlo en una carpeta y poder actualizarlo cuando toque y añadir cuando se quiera.

El problema, pequeño si se quiere, con Google Drive es doble. Por un lado, lo que ve el dueño debidamente identificado no es lo mismo que ve un usuario anónimo. Es infinitamente más rica la vista del dueño, hablando de descripción, iconos, etc. El usuario anónimo solo ver el nombre del fichero y poco más.

Vista del dueño en Google Drive.

Vista del usuario anónimo en Google Drive.

Esta es exactamente la vista que tendría un usuario del tradicional Google Docs, por lo que parece que es que todavía no han adaptado la nueva interfaz para todos los usuarios y situaciones.

Por otro lado, como te salgas de Firefox (¡qué cosas!), empiezan los problemas: en iExplorer hay problemas con el ancho, ni vista de compatibilidad ni nada, la parte derecha se queda oculta. Lo peor de todo, y lo que me hace evitar la faceta pública de Google Drive, es que si la lista de archivos es lo suficientemente grande, ni iExplorer ni Chrome muestran una barra desplazamiento que te permite llegar al final de la lista, directamente no puedes verlos ni acceder a ellos si no tienes un cacho-pantalla o disminuyes la fuente hasta lo invisible. No he probado con más, me niego.

Da la impresión de que las cosas de Google van tan rápido que es fácil encontrarte con pequeños detallitos que no se acaban de pulir y que no te acaban de gustar. Al final, si se trata de mostrar una simple vista de archivos, te vuelves a lo conocido y demostradamente fiable, el Dropbox de toda la vida. 

¿Y Skydrive? Pues es exactamente lo mismo que Dropbox, así que es otra alternativa, ya a gustos. Tiene un detallito, eso sí, casillas de selección (checkboxes) para elegir varios archivos y descargarlos todos de golpe pero Dropbox lleva bastante más tiempo y está más integrado y abierto a otras plataformas. El dichoso iPad, por ejemplo. Hasta el momento, que yo sepa, aplicación de Skydrive para IOS no hay.

jueves, 19 de abril de 2012

Exportar de Blogger a WordPress

Ya se va a notar que ahora estoy enfrascado en labores de importación y exportación desde Google a WordPress (WP). Tan tonto como querer hacer una prueba y enterarme de cómo funciona WP pero reciclando todo aquello y todo esto que tengo diseminado entre los productos Google.

Ahora vamos de exportar un blog de Blogger, digamos este mismo, e importarlo en WorPpress. Lo primero que me dirán es que WP ya tiene una preciosa herramienta de importación directa desde Blogger, le das permiso a WP para que entre en tu cuenta Google y listo. Bien, lo he probado en dos sitios distintos, en uno funcionó pero me acabó insertando un caracter extraño (un "mayor que") en el inicio de todas las entradas. Sí importó las etiquetas aunque transformándolas en categorías de WP. En el otro sitio, mi casa, me salió un mensaje  de esos harto desagradables: unable to find the socket transport "ssl" - did you forget to enable it when you configured PHP? No he mirado mucho, pero lo que he encontrado es que la culpa la tiene Google, no yo. Al menos, así me lo he querido creer para no trastear mucho más.

La otra opción, también dentro de las herramientas de WP, es importar desde un archivo XML. No es directo, pero como Blogger sí tiene un opción de exportación a XML, así que lo primero ya está hecho. Lo segundo es que hay que adaptarlo al formato de WP. Nuevamente, San Google te da la solución: blogger2wordpress. Es de una simplicidad insultante, le das la ruta en tu disco duro del fichero obtenido en Blogger y te descarga un *.wxr.xml que se carga en segundos en WP, desde la opción herramientas/importar/WordPress, eso sí. Lo malo es que este no importa las etiquetas.

Según parece, no todo son flores, hay problemas con el tamaño, dicen algunos, y otros se han encontrado problemas con blogger2wordpress. De hecho, el problema de las etiquetas se me ha atragantado y me he dedicado a buscar alternativas. El hecho es que blogger2wordpress no codifica las categorías y etiquetas en un formato que WP entienda. La pista me ha venido de la importación parcialmente exitosa de mi primer sitio y de comentarios sobre soluciones al problema.

Efectivamente, me he ido a mi primer sitio y he exportado desde ese WP (lo que no estoy seguro es que, desde ese sitio, pudiera volver a importar de nuevo directamente desde Blogger). El problema del carácter raro que introduce al inicio de cada entrada lo he solucionado abriendo el fichero XML en el bloc de notas. En el fichero me he encontrado esto, <![CDATA[> que he sustituido por <![CDATA[. Hecho esto, la importación ya incorpora, eso sí, las etiquetas como categorías. Habrá que probar la otra herramienta de WP para transformar categorías en etiquetas.

Seguiremos dándonos tortazos e informando.

Copia de respaldo de Google Sites

Como bien dicen por ahí, una de las debilidades de Google Sites es su falta de herramientas de respaldo. Sí se puede hacer una copia del sitio entero a otro nuevo, pero dentro de Google, no a tu PC, por ejemplo.

No "problemo", el propio universo Google tiene la solución: google-sites-liberation, un programa en java que te lo descarga todo con cierta simplicidad. No me acaba de gustar esta obligación que tenemos de dar los usuarios y contraseñas para todo y para todos pero, si no, es que no hay manera. En cualquier caso, los detalles los tienen en la wiki del proyecto.

Tampoco es nada nuevo que grandes productos, principalmente por su dimensión, no entro en si Google Sites es mejor o peor que otros, dejen hacer y se nutran de terceros que rellenan pequeños o grandes agujeros del producto de referencia.

lunes, 27 de febrero de 2012

MySQL y ONLY_FULL_GROUP_BY

Una de "arreglo una cosa y estropeo otra". MySQL, históricamente, se toma varias licencias frente a los estándares de SQL que pueden venir bien o no tan bien. Uno que particularmente no me gusta nada es la relajación de las columnas obligatorias en el GROUP BY.

Si no tocas nada de la configuración del servidor, cosas como esta se pueden hacer:

drop table if exists TT;
create table TT(a varchar(2), b varchar(1), c int, primary key (a));

insert into TT values ('a1','a',1),('a2','a',2),('a3','b',10);

select a,b,sum(c)
from TT
group by b;



absum(c)
a1a3
a3b10

Desde el estándar SQL, group by debería contener todas las columnas no calculadas que aparecen en select, es decir, group by a,b, independientemente de que esto tenga sentido o no. En realidad, todavía no entiendo qué se gana permitiendo esta sintáxis. Sí tendría algún sentido, por aquello de ahorrarnos algo de trabajo, si la columna "b" dependiera funcionalmente de la columna "a", de hecho algo de eso hay en el estándar SQL99, pero sigo sin verle mucha gracia.

De todas formas, como se trata de enseñar SQL y no las triquiñuelas de MySQL, a nuestros alumnos les obligamos a que no hagan estas cosas, es decir, la compilación de esta orden debería dar un error similar a "TT.a no está en GROUP BY". Para que se comporte así, MySQL permite configurar una variable global, sql_mode, en la que se puede establecer, entre otras cosas, ONLY_FULL_GROUP_BY, esto es, "compórtate como te dice el estándar"; y como hacen otros como Oracle o SQL Server, dicho sea de paso.

set session sql_mode='ONLY_FULL_GROUP_BY';

Esto obliga a cambiar la orden durante la sesión que tengamos abierta en MySQL. Si seguimos queriendo que el group by se haga por las dos columnas anteriores:

select a,b,sum(c)
from TT
group by a,b;


absum(c)
a1a1
a2a2
a3b10

Bueno, seguramente es que tampoco queríamos esto sino

select b,sum(c)
from TT
group by b;


bsum(c)
a3
b10

Que es en realidad para lo que vale el group by.

Resulta que lo pones todo contento, el sql_mode mencionado, y va y otras consultas que antes funcionaban ahora dejan de hacerlo.

select b
from TT
where c >= ALL (select c from TT);

La consulta anterior, estando sql_mode='ONLY_FULL_GROUP_BY', genera un error cuando no debería hacerlo. Di tú que la suerte es que para la mayoría de las cosas que preguntamos en clase hay una alternativa y además intuitiva:

select b
from TT
where c = (select max(c) from TT);


Pero no deja de ser molesto. Es un bug más o menos documentado que, hasta donde yo sé, se arrastra al menos hasta las versiones 5.1.x de MySQL. En las 5.5.x he comprobado que ya no. 

-----
Actualización: nos han actualizado a la versión 5.1.61 y ha desaparecido el bug.

miércoles, 22 de febrero de 2012

Botón imprimir en Google Sites

A raiz de un problemilla de un alumno con la impresión de una de nuestras páginas de FBDdocs, me he puesto a buscar una solución. El caso es que, si quieres imprimir una página, las barras laterales, superior e inferior no hacen más que molestar. Solución: el típico botón de "imprimir" que genera una página limpia (o casi) y más apta para la impresora. Pero ese botón, ¿de dónde lo saco?

En los foros de Google he encontrado lo que buscaba. Lo he adaptado un poco a mis gustos, los colorines y tal, pero se trata de editar la página en cuestión en HTML e insertar el siguiente código:

<form xmlns="http://www.w3.org/1999/xhtml">

<STYLE type="text/css">
input.btn {
  color:#005;
  font: 75% 'trebuchet ms',helvetica,sans-serif;
  background-color:#ddd;
  border:0px solid;
  border-color: #696 #363 #363 #696;
}
</STYLE>
<input class="btn" onclick="window.open('http://fbddocs.dlsi.ua.es/practicas-sql-espanol/expresiones-de-seleccion-de-filas?tmpl=/system/app/templates/print/&showPrintDialog=1')" style="width:75px; height:25px" type="button" value="Imprimir" />
</form>

Acto seguido, al salir de la edición HTML, se convierte en un gadget que puede editarse y colocarse donde queramos. El inline style es para darle ese aspecto más personalizado. El resto no merece más comentario. Por cierto la página en cuestión, la original se puede ver aquí, con el botoncito de marras a la derecha.

Bonito.

miércoles, 1 de febrero de 2012

La timidez de MySQL

No sorprende ya el que MySQL haya dejado para más tarde ciertos aspectos de SQL, de hecho, forma parte de su filosofía de origen, un producto destinado a obtener la máxima velocidad en entornos cliente-servidor sobre HTTP.

No obstante, esto ha sido hasta gracioso, uno de esos errores que dice uno "manda uebos" pero que mira, es así. Todo surge de un compañero que me llama todo alarmado porque MySQL no funciona como es debido.
 use apruebas;

 select *
 from L_TA rigth join  L_TB on  a=d ;

 select *
 from L_TB left join  L_TA on  a=d ;

Me he tomado la libertad de ponerle colorines a las palabras clave en vez de colocar un pantallazo de MySQL Workbench, pero es tal y como se ve en su ventana de edición. Tampoco muestro la estructura de las tablas porque no hace falta para lo que voy a contar. En cualquier caso, parece evidente que las dos consultas deberían dar el mismo resultado. Pues no.

Hasta que me he dado cuenta del colorín de rigth, y es que, claro, está mal escrito:
 select *
 from L_TA right join  L_TB on  a=d ;

Adonde quería llegar es que MySQL no dice nada sobre el "rigth", se lo traga sin más, y ejecuta un inner join sin más preocupaciones. Como siempre, la suerte de comentárselo al de al lado, y la suerte de la inspiración de este. Ya conocía los casos de foreign key fuera de innodb pero ¿esto? Será que MySQL es tímido...

martes, 31 de enero de 2012

Kill, kill, kill... procesos en MySQL

A toda prisa me he tenido que ir al interné a buscar como parar un bucle infinito de inserciones en una tabla desde PHP.

Después del susto inicial, nada, fácil: show full processlist y kill x. Menos mal.

Tampoco me voy a arrostrar todo el mérito, el primero que me lo aclaró fue Trucos Informáticos.