viernes, 29 de mayo de 2009

Importar tabla voluminosa a MySQL con phpMyAdmin

0 comentarios
Este es otro artículo básico para muchos pero que quizás sirva de orientación a aquellos que contratan un servicio de hospedaje con base de datos MySQL. Por lo general, o al menos en todos los casos con los que he tropezado, todos los alojadores emplean la herramienta phpMyAdmin como gestor de base de datos en línea. Y realmente aciertan porque es un software muy potente para realizar esta tarea.

En todas las instalaciones que he probado siempre tropiezo con el mismo problema. ¿Qué ocurre cuando tengo una tabla con un gran volumen de datos y la quiero importar a una tabla MySQL en mi recien adquirido alojamiento web?

Por lo general, puedes tener ese archivo original en tu ordenador, quizás ya preparado en formato texto con una relación de instrucciones SQL que insertarán todos los registros. Esta es la forma que yo suelo utilizar, sobre todo cuando tengo una tabla ubicada en una base de datos A y quiero traspasarla a otra B. Cuando tengo datos en mi ordenador local y no es un gran volumen, suelo pasarlos a Excel, retocarlos en base a mis necesidades y con una fórmula generar instrucciones SQL que copio en un archivo texto (si son muchas) o con copia y pega directamente al phpMySQL.

El problema está en cuanto quiero traspasar un gran volumen de datos. En ese caso la solución es simple. Convierte tus datos a un formato estándar CSV. Un fichero en formato texto plano donde los campos se separan con un carácter -normalmente utilizo la barra vertical (¦) de la tecla "1"-, los campos de texto se separan con otro carácter -opción que nunca uso, salvo que incluyan saltos de línea, en cuyo caso empleo el dólar ($)- y los registros se separan con un salto de línea y un retroceso de carro -es decir, "\r\n"-.

Consejos: no incluyas en la primera línea los nombres de los campos para este caso, al menos; y crea la estructura de la tabla exactamente igual y acorde a tu estructuva CSV.

Por último, en la ventana de "SQL" del phpMyAdmin, al pie de los formularios, la opción insertar archivo de texto en la tabla. Selecciona de tu ordenador el archivo a importar, indica en el formulario adjunto los carácteres utilizados para separar campos (en mi caso ¦), encerrar textos (si lo uso, en mi caso $) y fin de línea (que no suelo variar nunca). Y a esperar, pues si estás importando un gran volumen de datos, tardará lo suyo.

A considerar en el tema de los caracteres que separan trozos del archivo CSV. Utilizo la barra vertical porque el estándar, el punto y coma (;) me suele traer quebraderos de cabeza cuando hay campos de texto de por medio, que pueden contener, como parte de su contenido, un punto y coma. Salvo que un campo de texto contenga saltos de línea, nunca utilizo las comillas (") para encerrar sus contenidos, pues ocurre como con el punto y coma. Y de necesitarlo busco un carácter (y lo compruebo) que no se use en ningún registro de la tabla. Es decir, ten en cuenta que si el contenido de un sólo campo, puede incluir alguno de los caracteres subsodichos, tendrás errores a la hora de importar.

Un lío, ya lo sé. O muy básico, también lo sé. Todo depende de quién lo lea.

miércoles, 27 de mayo de 2009

Puede que no tenga permiso para utilizar este recurso de red

9 comentarios
Voy a explicar la solución (o supuesta solución) a un problema que me he encontrado intentando acceder desde un equipo con Microsoft Windows XP Home Edition a un servidor de archivos con Ubuntu 9.04 y Samba.

Creo, no estoy seguro, que el problema puede originarse al ser distintos los nombres de usuario en el equipo servidor (tanto en Ubuntu como en el propio Samba) y el equipo que accede, con XP Home Edition. Aunque en las últimas versiones de Samba puedes especificar el nombre de usuario Windows que accederá al recurso compartido y ésto debería solucionar esa diferencia, parece que no es así, desde el puesto con Windows XP.

Problema:

Aunque el equipo con XP accedía sin problemas a los recursos compartidos, en determinados momentos obtenía el siguiente mensaje de error. Desde ese instante no volvía a tener acceso a los recursos compartidos de Samba, excepto si reiniciaba el XP. Resulta un problema molesto porque no es constante, sino esporádico, por lo que siempre vas retrasando su solución, acordándote de "San Gates" cada vez que ocurre. Mensaje de alerta:

No tiene acceso a "\\EQUIPO\RECURSO". Puede que no tenga permiso para utilizar este recurso de red. Pongase en contacto con el administrador de este servidor para comprobar si tiene permisos de acceso.

Solución:

Después de días buscando información y de revisar innumerable número de veces la configuración de Samba y Ubuntu, encontré en el foro LANeros.com algo que parece funcionar (tres días sin problema). Además, esta solución se recomienda para equipos XP que no pueden unirse a un dominio de Windows 2000/2003 Server.

Básicamente se trata de tocar el registro (lanzar regedit.exe o regedt32.exe) del XP y establecer los valores indicados más abajo. (Ten en cuenta que modificar el registro de Windows puede producir problemas graves, así que haz una copia de seguridad primero, hazlo bajo tu propia resposabilidad o, preferiblemente, contacta con un técnico especializado.) Reiniciar el ordenador después de los cambios.

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Lsa
restrictanonymous = 0
restrictanonymoussam = 1
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services...
...\lanmanserver\parameters
enablesecuritysignature = 1
requiresecuritysignature = 0
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services...
...\lanmanworksation\parameters
enablesecuritysignature = 1
requiresecuritysignature = 0

Explicación:

SMB es un protocolo de comunicación de alto nivel que puede implementarse sobre diversos protocolos como TCP/IP, NetBEUI e IPX/SPX, junto con la ubicación de dichos protocolos en los niveles OSI y en la pila TCP/IP. Entre todas esas alternativas, tanto en el caso de Samba como de Windows 2000/XP, SMB se implementa habitualmente encima de NetBIOS sobre TCP/IP (esta alternativa se ha convertido en el estándar de facto para compartir recursos entre sistemas Windows). (Fuente: Curso de Integración Linux/Windows, capítulo 4 (fferrer.dsic.upv.es).)

Indagando un poco más encontré un parche en Microsoft para Windows Server 2003 y Windows XP x64 que resolvía un problema generado cuando la comunicación de un bloque de mensaje SMB entre un componente SMB del lado cliente y un componente SMB del lado servidor no se completa si los valores de firma de SMB no coinciden con los de la directiva de grupo o el registro.

Además, este problema se produce cuando la firma de SMB se requiere para el componente SMB del lado servidor y la firma de SMB se deshabilita para el componente SMB del lado cliente, o viceversa. Al respecto es recomendable leer el artículo escrito en el archivo de soporte técnico de Microsoft sobre como opera este sistema operativo las firmas SMB.

lunes, 25 de mayo de 2009

Quería opinar, pero mejor lo dejo en un algoritmo

0 comentarios
Quería opinar sobre lo contradictorio que es querer que tu equipo participe y gane la Copa del Rey y al mismo tiempo pitar los símbolos que presiden esa competición, ahora que ha pasado la marea de opiniones y ya no es un tema tan mediático.

Pero es tan obvio el tema, que mejor cambio el rumbo de este barco y lo dejo en esta tira cómica del Search Engine Journal y que define muy bien la tendencia y la importancia que hoy ha ganado el posicionamiento en un proyecto web.

Es algo más inocente, menos conflictivo y quizás, no tan obvio. Aunque en un instante, cientos de profesionales en busca de una oportunidad de negocio, se hayan autotitulado como "posicionadores" experimentados. En realidad, contados son los casos que de verdad deberían otorgarse ese título y se les reconoce por cierta humildad y, sobre todo, capacidad de observación y de extraer deducciones acertadas.

Si te venden un camión cuando tú sólo quieres una bicicleta; o quieren solucionar con una bicicleta tu problema de transporte pesado... ¡desconfía!

:)

"... y esto, en términos simples, es la manera de aumentar tu posicionamiento en los motores de búsqueda."

martes, 19 de mayo de 2009

¿Culpable la tecnología? ¿O el uso de la tecnología?

0 comentarios
Que la actual guerra contra el P2P está en fase de sexo, mentiras y cintas de video es más que evidente. Y que la industria se agarra a un clavo hirviendo, elevando al cielo las quejas y contradicciones más absurdas, también.

La última idea de los formados abogados de la industria discográfica ha sido llevar a juicio a Pablo Soto, creador de Blubster, Piolet o Manolito, conocidos programas P2P.

No voy a entrar en juicios obvios sobre la necedad del asunto. Simplemente citaré dos situaciones semejantes en las que se confunde la tecnología (su creación o distribución) con su uso por parte de sus usuarios. Sea éste último legal o no, moralmente justificable o no.

Sony BMG, propiedad del emporio de mismo nombre, es uno de los principales instigadores en contra del P2P. En realidad, aunque no se reconozca (y esto es una opinión personal), las compañías no están en contra de esta tecnología de intercambio de archivos entre iguales, sino que desean controlar ese tráfico y sacar tajada indiscriminadamente. Al igual que la SGAE pretende cobrar indiscriminadamente a los bares por el simple hecho de tener una televisión en el local, aunque sólo se use para ver CNN+. O como en un reciente caso en Badajoz, la tenga para uso personal de su propietario, quien aludía que estaba muchas horas en su local y que la usaba para su entretenimiento e información personal.

En 1984 la industria cinematográfica de Hollywood perdió una demanda contra Sony en el Tribunal Supremo de EEUU ante el lanzamiento de ésta última al mercado del sistema de grabación de vídeo Betamax. La demanda fue interpuesta exactamente por los mismos motivos (¡extrapolando!) que hoy Promusicae (la asociación española de productores, al igual que la SGAE es la asociación de autores) demanda a Pablo Soto. ¿Curioso verdad?

Como curioso fue el juicio contra ThePirateBay.com, a este lado del Atlántico, en Europa, donde un juez sueco dictaminó la culpabilidad de los creadores de este sitio web cuyo supuesto delito era compartir enlaces torrents. Lo curioso del asunto es que después de la sentencia se desmotró que el juez en cuestión tenía intereses directos en la industria. En concreto Europa Press cita que el juez Tomas Norstrom, que instruyó el caso contra The Pirate Bay, es miembro de la Swedish Copyright Association y de la Swedish Association for the Protection of Industrial Property. ¿Hacen falta más palabras?

¿Cabe esperar una justicia basada en el sentido común? ¿O es de esperar una justicia que sustenta en una mano la presión mediática y en la otra los lobbys de la industria discográfica, Promusicae entre ellos?

lunes, 18 de mayo de 2009

¡Veeeendo domiiiiiniooooouuuu! ¡Está baratito!

0 comentarios
Después de algunos años usando genteyjuguetes.com como un dominio para una pequeña tienda, programa en PHP y utilizando MySQL, que he utilizado para vender aquellas piezas que sobraban en mi colección, que llegaban a mis manos pero no acababan en mis vitrinas o piezas que consideraba interesantes para su venta o intercambio, creo que ha llegado ya el momento de deshacerme de estos dominios.

Así que genteyjuguetes.com está en venta, así como el dominio en inglés, que utilizo como redireccionamiento, peopleandtoys.com, también for sale.

Y creo que están baratitos, dado el trabajo acumulado de difusión y promoción.

¿Te atreves?


viernes, 15 de mayo de 2009

Dominio personalizado para tu blog

2 comentarios
Llevo varios días peleándome con la opción de utilizar dominio personalizado para mis blogs. Y me explico.

Tengo un blog, que llamaré miblog.blogspot.com y tengo un dominio que se llama miblog.com. Como lo he adquirido en parking, el dominio funciona como un redireccionamiento simple, de manera tal que al introducir www.miblog.com o miblog.com en un navegador me salta a miblog.blogspot.com.

Hasta aquí todo está bien, pero sin sacar todo el jugo posible a lo que es un dominio. Además, no es lo mismo publicar en un foro una referencia a un artículo que aparentemente se encuentra en un blog bajo tu propio dominio. (Hablo de una cuestión estríctamente de imagen.)

La solución es simple. En tu blog utilizas Configuración » Publicación, selecciona en Dominio personalizado y luego en Cambiar a opciones avanzadas. Introduces tu dominio como www.miblog.com y guardas la configuración (botón al pie de la página). Luego aparece la opción Redireccionar miblog.com a www.miblog.com, que debes marcar.

¡OJO! Sólo si utilizas este dominio exclusivamente para tu blog. En caso contrario, me explicaré más abajo.

En tu alojador de dominios debes introducir dos entrada del tipo CNAME, tal que así:

miblog.com. CNAME ghs.google.com.
www.miblog.com. CNAME ghs.google.com.

Hasta aquí todo correcto, pero...

Muy probablemente te funcionará www.miblog.com, pero no funcionará miblog.com. ¿Por qué?

Normalmente tu registrador tendrá otras entradas DNS que se generan automáticamente en el alta de tu dominio, tipo panel.miblog.com o si usas servidor de correo mail.miblog.com, por poner dos ejemplos clásicos. Esto es mucho más habitual de lo que se supone. Si es así, la manera de resolverlo es introduciendo las entradas DNS de esta manera:

miblog.com. A 216.239.32.21
miblog.com. A 216.239.34.21
miblog.com. A 216.239.36.21
miblog.com. A 216.239.38.21
www.miblog.com. CNAME ghs.google.com.

Ten en cuenta que según tu registrador pueden variar los detalles a la hora de configurar tus entradas DNS. También que cuando en la configuración de una entrada DNS estamos escribiendo una URL, siempre terminan con un punto ("."). Si estás escribiendo una IP entonces no hay que poner punto final.

La excepción, que te citaba más arriba, está, por ejemplo, en casos como este blog que estás leyendo.

¿Te has fijado en su dirección? Es blog.artecar24.com, siendo www.artecar24.com otra web, alojada en otro servidor.

Este caso es mucho más sencillo. Configura dos entradas DNS tipo:

mipalabrapreferida.miblog.com. CNAME ghs.google.com.
www.mipalabrapreferida.miblog.com. CNAME ghs.google.com.

(Obviamente, poniendo tu palabra preferida, que suele ser blog o blogging o bitacoras.) Configura tu blog como describí arriba. ¡Voilà! ¡Ahora tienes tu blog como un subdominio de tu web!

lunes, 11 de mayo de 2009

¿Desea detener la ejecución de este script?

1 comentarios
Puede suceder que tengas que programar un procedimiento javascript para tu web que sea lanzado, a su vez, por un script PHP o Perl o Python desde el servidor. La diferencia entre uno y otro es que el primero se ejecuta en el cliente y el segundo en el servidor, generando una página que envía al cliente.

Puede suceder que ese módulo PHP genere una página que cargue una gran cantidad de datos desde unas tablas MySQL y que realmente no tarde mucho. Pero para cada registro cargado deba, por ejemplo, ejecutarse un procedimiento javascript en el cliente. Puede incluso que cada registro sea parte de un objeto.

Y puede que entonces, y utilizando Internet Explorer, tu usuario se encuentre con este desagradable mensaje:

¿Desea detener la ejecución de este script? Un script en ésta página está provocando que internet explorer se ejecute con lentitud. El equipo podría dejar de responder si el script se sigue ejecutando.

Sin embargo, tú sabes que esto se debe a un gran volumen de datos, no a un script defectuoso. ¿Qué hacer? Por ahora no he encontrado soluciones satisfactorias que resuelvan este aspecto en el cliente. Así que por ahora, no hay otra que reprogramar tu módulo para que haga las cosas de otra manera.

Sin embargo, si aún así quieres saber cómo solucionarlo, en versiones posteriores a Internet Explorer 4 (¿hay alguien que use alguno anterior?) debes crear una entrada en el registro del sistema que parchea esta tendenciosa ventanita.

El problema surge porque IE utiliza un límite estándar de 5.000.000 de instrucciones para lanzar la subsodicha advertencia. Si el usuario, asustado, dice "Sí, quiero". Tu script, y en consecuencia tu diseño y desarrollo, se irán pa'l car###.

Para ampliar este límite, en el editor de registros (y si no sabes usarlo o tienes duda, recurre a la primera solución, "haz las cosas de otra manera"), crea una nueva entrada llamada "Styles" en "HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer", de manera tal que tengas un árbol así:

HKEY_CURRENT_USER\Software\Microsoft\InternetExplorer\Styles

En esta entrada añade una variable tipo DWORD con nombre "MaxScriptStatements" y un valor superior al de 5.000.000, pero sin abusar (o puedes encontrarte que IE no te avise de bucles infinitos). Importante, si haces esto con el IE abierto, debes cerrarlo y volverlo a abrir para que lea la variable del nuevo límite.

La solución, en sí misma, no me gusta. Te sirve a ti, cuando programas, para probar, pero no al usuario final o cliente. Y decirle a un usuario final que edite su registro no es muy elegante. Pero...

Fuente: http://support.microsoft.com/kb/175500.

viernes, 8 de mayo de 2009

Ubuntu 9.04 y GRAMPS 3.1.1-1

0 comentarios
Si usas Ubuntu como sistema operativo y usas GRAMPS como gestor de tu árbol genealógico puedes encontrarte una sorpresa con las últimas versiones de ambos.

En mi caso, había instalado GRAMPS 3.1.1-1, la última versión disponible, desde la web del Proyecto GRAMPS, dado que el repositorio de Ubuntu 8.10, la última versión que utilizaba, no instala ésta, sino una anterior, la 3.0.4, desarrollada en Python 2.5, pero...

Al actualizar a Ubuntu 9.04 te encontrarás con una sorpresa. Se instala Python 2.6 por lo que al intentar ejecutarse el shell script que lanza GRAMPS, intentará cargarlo con esta versión y dará un error. En mi caso no advertía del problema, simplemente, como usuario, lo que veo es que el GRAMPS no se ejecuta.

Solución, modificar el script que encontrarás en el directorio "/usr/bin" con nombre "gramps", en su última línea, modificando:

exec /usr/bin/python $GRAMPSDIR/gramps.py "$@"

Por este otro:

exec /usr/bin/python2.5 $GRAMPSDIR/gramps.py "$@"

De esta manera, forzamos, como expliqué más arriba. En mi caso, es como lo he solucionado. (A los muy técnicos, mis discupas si resulto muy simple. Y para los técnicos, disculpas si resulto muy complejo.) Por cierto, para modificar debemos editar como superusuario, abriendo una terminal y:

usuario@equipo:~$ sudo gedit /usr/bin/gramps