Reemplazar cadena en base de datos

Si queremos reemplazar una cadena dentro de una tabla en todas las filas de un campo tenemos que ejecutar el siguiente comando

Yo me apunto las cosas que si no luego se me olvidan…

Buscar y reemplazar texto en fichero grande en consola

Puede ser que en algún momento necesitemos reemplazar una cadena de texto por otra en un archivo muy grande. Esto suele pasar, por ejemplo, cuando estamos haciendo una migración de una web a otro dominio, con lo que queremos cambiar un dominio por otro:

www.dominio.com por nuevodominio.com

El caso es que tenemos un problema, y es que si lo que tenemos como archivo fuente es un dump de una base de datos, y esa base de datos es muy grande (del orden de 20MB para arriba ya va un poco mal la cosa), si intentamos cargar en modo texto la base de datos en cualquier editor de texto, seguramente se nos quede colgado y no nos permita abrirlo. Y aún si conseguimos abrirlo, hacer un reemplazo puede hacer que el ordenador se funda por completo.

Para solucionar esto podemos hacerlo mediante consola con el comando sed

Explicación:

  • sed = Stream EDitor
  • -i = in-place (guardar el archivo original con extensión back)
  • La cadena del comando:
    • s = comando se sustitución
    • original = una expresión regular que describa la cadena a reemplazar (o la cadena en si)
    • nueva = la cadena de reemplazo
    • g = global (reemplazar todas las ocurrencias y no solo la primera)
  • fichero.txt = el archivo en cuestión

Con lo que, estando en la carpeta donde se encuentra el fichero que necesitamos reemplazar, ejecutaríamos el siguiente comando:

y en menos de dos segundos tendremos todo el fichero cambiado.

+info:

http://askubuntu.com/questions/20414/find-and-replace-text-within-a-file-using-commands
http://www.computerhope.com/unix/used.htm

Problema al crear proyecto nuevo en Netbeans 7.0.1 en Ubuntu

ubuntu-logo32

 

Si al intentar crear un proyecto nuevo, en la ventana de creación del proyecto se queda pensando y no te deja elegir que tipo de proyecto es, con lo que no puedes seguir al paso siguiente, seguramente sea porque tienes instalada una versión de openjdk que tiene algún bug.

La solución es desinstalar la librería openjdk e instalar la oficial de Oracle:

1. Desinstalación de openjdk. En mi caso tengo la 6 con lo que lo primero sería cambiar ese número por la que tengáis instalada. Para mirar qué número de versión tenéis:

Lo siguiente es desinstalar openjdk (cambiando el 6 por lo que sea):

Después de hacer esto si ejecutamos

Nos dirá algo así como bash: /usr/bin/java: No such file or directory

Con esto ya habremos desinstalado openjdk

2. Instalar Java 7 de Oracle:

Con esto en principio ya podréis crear proyectos sin problema.

+info:

http://kiranscience.blogspot.co.uk/2012/08/remove-openjdkjre-from-ubuntu-1204.html

http://www.webupd8.org/2012/01/install-oracle-java-jdk-7-in-ubuntu-via.html

Console.log en Magento

El viernes pasado empecé una maquetación de la ficha de producto de una tienda online que estamos creando en Magento. Es una ficha un tanto complicada, ya que tiene multitud de efectos con javascript: cloud zoom, tooltips, sliders, etc…

Como ya conozco jQuery nunca me he querido meter a aprender Prototype que es el framework javascript que utiliza Magento.

El caso es que para comprobar si selecciono bien los objetos y hacer un poco de debug en el navegador hace tiempo que uso Google Chrome usando la consola. Así que voy insertando llamadas a console.log para sacar información del estado de los scripts.

Cuando ya llevaba un rato programando me encontré con un error, del que ya hablaré otro día. Para hacer debug e intentar solucionarlo, empecé a poner llamadas a console.log en todo el código. Cuál fue mi sorpresa cuando vi que no se mostraba nada en la consola de Chrome.

Después de un largo rato y cuando ya estaba pensando en volver a los antiguos alerts se me ocurrió que el problema podría estar en Magento, y… piensa mal y acertarás.

Encontré una forma de solucionarlo gracias a astorm en gitHubhttps://gist.github.com/992233

Lo que hay que hacer es poner el siguiente código en un archivo .xml de layout, en local.xml por ejemplo:

Con esto y habiendo refrescado la caché ya podemos usar console.log sin ningún tipo de problema. Hasta podemos usarlo en las funciones Prototype sin tener que ensuciarnos mucho las manos.

Algún día hablaré sobre las ventajas de utilizar jQuery en lugar de Prototype, pero eso ya es otra historia.

Actualización: Una vez utilizados los console.log para propósitos de debug es recomendable quitarlos ya que nuestro querido internet explorer explota en su subuniverso cuando se encuentra con una de estas sentencias… kill ie!!

Actualización2: Otra opción es modificar el código que anula los console.logs excepto para Firebug en Firefox. Habría que comentar las siguientes líneas del archivo magento/js/varien/js.js alrededor de la línea 500 en Magento 1.5.2 para luego volverlas a descomentar en servidor de producción:

 

Corrigiendo bug z-index en ie7 con jQuery

Hace poco, terminé de maquetar el boceto de una tienda online que estamos montando en Logocomunica. El boceto requería un mini carrito en el header que se mostrara cuando el usuario pasara por encima el ratón. Todo funciona perfectamente en todos los navegadores, excepto, claro está, en internet explorer 7.

En esta ocasión, este maravilloso software decidió que el carrito debía mostrarse siempre por debajo de las capas con el atributo z-index inferior, saltándose a la torera lo que le indicaba:

Después de unas tres horas creyendo que el problema estaría en mi código CSS y cambiando y volviendo a cambiar positions, z-index y demás atributos, se me ocurrió que el problema podía ser iE7. Y efectivamente iE7 tiene un bug cuando trata los índices de capas asignados mediante z-index. + info iE7 bug z-index

Tras perder tanto tiempo en este problema opté por una solución rápida proporcionada por Vance Lucas en la que recorre todo el dom de arriba a abajo asignando a cada div un z-index, empezando por 1000 y restandole 10 a cada div interno, con lo que los div superiores tendrán un z-index superior a los inferiores.

Solución no ideal, pero efectiva. El carrito ahora queda como en todos los navegadores modernos:

Dios salve a jQuery! Mi consejo, recomienda a todo el mundo que actualice su navegador y que si eso se cambien a un navegador que no me mate por dentro cada día…

nota mental: siempre pensar que el fallo es de iE7 antes de romperme los cuernos

+info: http://www.vancelucas.com/blog/fixing-ie7-z-index-issues-with-jquery/

Cambiar todos los archivos a UTF-8 en Eclipse

Tip tonto que me trae de cabeza cada vez que instalo Eclipse.

Cuando instalas Eclipse, no se por qué razón, viene por defecto la codificación de los archivos de texto en codificación ANSI, con lo que todos los archivos que tuvieras en UTF-8 se verán con caracteres raros sustituyendo a letras con acentos, eñes y demás caracteres usados en castellano.

Para hacer que todos los archivos de texto se vean con la codificación correcta hay que ir a Preferences / General / Content types, seleccionar Text en la lista de Content Types y en default enconding poner UTF-8.

Con hacer esto, todos nuestros archivos de texto tendrán UTF-8 y volverán nuestras preciadas tildes…

Deshabilitar Fooman Speedster en Magento… TERROR!

Fooman Speedster es un módulo para Magento que permite acelarar la carga de la web en un tanto por ciento bastante considerable. Para ello minimiza archivos, optimiza el código e implanta metas entre las etiquetas <head> y </head>.

Todo funciona de maravilla si tienes la web terminada y no la piensas tocar. Pero entonces surge el día en el que tienes que cambiar el css por alguna razón y te das cuenta de que los ficheros los ha minimizado permanentemente. Bueno, como tienes copia de seguridad no pasa nada, restauras la copia y deshabilitas el módulo…

ARG!!!! HORROR!!!! El módulo sigue en funcionamiento pero no pone nada entre las etiquetas <head> y </head>. Pero lo peor no es eso, lo peor es que hace lo mismo tanto en el frontend como en el backend!! Ahora como deshabilitas el módulo?????

Que no cunda el pánico. Resulta que Magento da prioridad a la configuración de los módulos por xml con lo que sólo hay que ir a la configuración del módulo, /app/etc/modules/Fooman_Speedster.xml y poner el campo:

a

Después de esto, si tienes la caché activada igual sería buena idea hacer un buen flush.

Hace poco tuvimos un momento de pánico en la empresa por este tema y lo solucionamos rápido porque nos pusimos a buscar la solución como locos y la encontramos, pero por si acaso alguien no dispone de mucha gente para operar…

+ info en este thread: http://www.magentocommerce.com/boards/viewthread/48669/

Cambiar entre tiendas en Magento

Tenemos un cliente en Logocomunica que tiene dos tiendas en la misma instalación de Magento. Quería que hubiese una forma de pasar de una a otra tienda mediante un switcher o algo por el estilo.

Buscando por internet he encontrado un snippet que saca un combo para cambiar de una tienda a otra.

Snippet for switching between websites por la gente de Inchoo

Lo que he hecho ha sido coger ese snippet, meterlo en una carpeta llamada selectarea dentro de la carpeta template de mi tema y luego en el archivo de layout page.xml, dentro del bloque header he incluído esta línea justo encima de la línea que indica el bloque del buscador (se puede incluir en el sitio que queramos de todas formas):

Luego tuve que cambiar el nombre del los websites para que pusiera lo que yo quería, pero eso es tema aparte.

Borrar XCode3 ( Developer-old )

Una vez instalado XCode 4 se mueve la carpeta del anterior XCode3 a /Developer-old

Para borrar los archivos anteriores y recuperar 5GB de espacio en disco se debe ejecutar la siguiente orden desde el terminal:

Después de hacer esta operación aún quedará la carpeta /Developer-old con alguna carpeta dentro (Application, Documentation, Extras) que ocupan en total unos míseros 20 megas. Con borrar esta carpeta nos habremos librado de la anterior versión de XCode.

Tip sencillo pero útil…

+ info en inglés

Aplicación Android no carga las imágenes de alta densidad

Para la aplicación que estamos haciendo en Uhuru Labs tenemos como objetivo varios tamaños de pantalla a diferentes resoluciones. Para ello hay que adecuar los elementos gráficos que utilizamos en la aplicación para que sean vistos en los diferentes tipos de pantalla.

Haciendo pruebas hace un tiempo, ya que andamos un tanto verdes en el asunto, nos dimos cuenta, probando en un HTC Desire, que la aplicación no cargaba las imágenes adecuadas para la pantalla de este dispositivo, y eso que estaban bien posicionadas en su directorio correspondiente (hdpi).

Buscando por internet dimos con que hay que indicarle a la aplicación mediante el archivo Manifest.xml a que tipo de pantallas está enfocada la aplicación mediante estas líneas:

+info: http://developer.android.com/guide/topics/manifest/supports-screens-element.html