Cliente de Bittorrent para el Raspberry Pi

Y bueno, mi Raspberry Pi pasa todo el día conectado monitoreando la casa, y como durante el día no hay nadie, la conexión de internet pasa completamente desocupada….. algo realmente malo.

Para aprovechar un poco más nuestra conexión perezosa, instalé Transmission, que es un cliente de Bittorrent que corre como un demonio en Linux; dado que el Raspberry Pi consume prácticamente nada de energía al estar conectado, resulta bastante práctico para tenerlo descargando cosas durante el día.

Para instalar Transmission, debemos ejecutar los siguientes comandos desde el terminal de nuestro Pi:

sudo apt-get install transmission-daemon
sudo apt-get install transmission-common
sudo apt-get install transmission-cli

Si no hay ningún problema en la descarga se instalarán los paquetes necesarios, y arrancará el demonio de transmission. Antes de empezar a usarlo, debemos editar un par de detalles en su archivo de configuración. Para esto, detenemos el servicio con el siguiente comando:

sudo service transmission-daemon stop

A continuación editamos el archivo /etc/transmission-daemos/settings.json (sudo nano /etc/transmission-daemos/settings.json) y modificamos las siguientes líneas, con los datos que vayamos a usar según nuestro caso (para las rutas de archivo y las IPS, son las que tengo creadas en mi PI):

"download-dir": "/home/pi/transmission", 
"incomplete-dir": "/home/pi/transmission/incompleto",
"rpc-whitelist": "127.0.0.1,192.168.1.100",
"rpc-whitelist-enabled": false,

Además, para dar acceso via navegador, es necesario que modifiquemos las líneas del nombre de usuario y contraseña del mismo archivo:

"rpc-password": "su_contrasena",
"rpc-username": "su_usuario",

La contraseña acá la colocamos sin encriptar. El momento de reiniciar el demonio se encriptará automáticamente. Para reiniciar el servicio, basta con el comando:

sudo service transmission-daemon start

y Voilá! tenemos nuestro cliente de bittorrent conectado 24/7, que lo podemos monitorear desde nuestro navegador, con la IP de nuestro Raspberry, y el puerto 9091

torrent

Felices descargas 🙂

pd. Si desean acceso externo (por ejm. para colocar descargas desde la oficina) basta con abrir el puerto 9091 en su router, y en lo posible, darle un dominio virtual, como lo indiqué en el post de cómo configurar no-ip para el raspberry.

Acceso a dispositivos de almacenamiento USB desde el Raspberry Pi

De pronto le haya sucedido a alguien, les dejo este tip.

Al conectar una memoria usb o un hdd portable a su raspberry pi, puede darse el caso de que cuando quieran grabar un archivo sobre el mismo, les devuelva un error de escritura por falta de permisos. Para solucionar esto hay que instalar la librería ntfs-3g, con el siguiente comando:

 

sudo apt-get install ntfs-3g

Con esto, basta con reiciar el Pi, y tendrán acceso de lectura y escritura en sus dispositivos USB…… se ahorrarán un dolor de cabeza 🙂

Error 404 al usar el paginador de entradas de wordpress

En uno de mis proyectos actuales, se me presentó un inconveniente que me estaba poniendo los pelos de punta! En un sitio web un poco complejo en su estructura, simplemente los paginadores de los posts publicados en determinadas categorías no funcionaban, llevando a un error 404, e impidiendo que los visitantes puedan revisar entradas anteriores.

Aparte de eso (y es algo que no me había dado cuenta hasta ahora) es que si en el administrador de wordpress, seleccionamos las entradas de determinada categóría, no se visualizaba ninguna. Inicialmente pensé en un bug de wordpress, pero al investigar un poco (más bien bastante), encontré que el problema se daba por la creación de «Custom Types» dentro de las entradas. Este es nuestro caso, ya que tengo varios tipos distintos de entradas, ya que así fué requerido en la estructura del sitio.

La solución resultó bastante sencilla. Hay que agregar este código al final del archivo functions.php

 

function category_set_post_types( $query ){
    if( $query->is_category ):
        $query->set( 'post_type', 'any' );
    endif;
    return $query;
}
add_action( 'pre_get_posts', 'category_set_post_types' );

Que hará que las entradas normales se mapeen correctamente dentro de las categorías, y así eliminaremos los problemas que teníamos con los paginadores.

Espero les sea de utilidad.

Configura tu Raspberry Pi para acceder remotamente usando No-IP

Bueno, poco a poco el Raspberry Pi va teniendo más funciones a su cargo. Luego de convertirse en cámara IP, y servidor de Airplay, y luego de instalar apache y mysql (algo tan trivial como poner sudo apt-get install apache2 y sudo apt-get install mysql), llegó la hora de darle acceso al PI al mundo exterior.

Primero, debemos tomar en cuenta, que la mayoría de nosotros, tenemos una conexión casera de internet, que no tiene una dirección IP estática. Por esta razón, necesitamos alguna manera de conocer la dirección IP de nuestro modem de banda ancha, para tener una dirección de acceso a nuestra red.

Existe el servicio de www.no-ip.com, que nos permite crear un dominio virtual (o si tenemos un nombre de dominio libre, lo pueden configurar también ahí), y este dominio virtual, asignarlo a una dirección IP donde esté conectado nuestro servidor (el PI en este caso). Entonces, el primer paso obligado, es ingresar en www.no-ip.com y crear una cuenta nueva, para escoger un subdominio de los varios que se tienen disponibles en dicho servicio.

Una vez que hemos creado y configurado la cuenta, vamos a trabajar en nuestro Raspberry Pi. La idea es que periódicamente, el PI detecte la dirección IP pública a la que está conectado el modem, y la envíe al servicio no-ip para actualizar el dominio virtual. Para esto, debemos instalar el paquete no-ip en nuestro Raspberry, usando los siguientes comandos:

mkdir no-ip
cd no-ip
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar -zxvf noip-duc-linux.tar.gz
cd noip-2.1.9-1/
make
sudo make install

Al empezar la instalación, nos solicitará nuestros datos de la cuenta de no-ip, verificará el dominio virtual creado y nos preguntará el tiempo de actualización de la dirección ip externa. Podemos dejar todos los valores por defecto tal cual, y continuar hasta finalizar la instalación.

Podemos iniciar el servicio ejecutando «sudo /usr/local/bin/noip2» pero lo ideal sería que inicie automáticamente en el arranque del PI. Para esto debemos crear el archivo /etc/init.d/noip2 con el comando

sudo nano /etc/init.d/noip2

y colocamos esto dentro del contenido del mismo

#! /bin/bash
### BEGIN INIT INFO
# Provides: Servicio No-IP
# Required-Start: $syslog
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: arranque automatico para no-ip
# Description:
#
### END INIT INFO
sudo /usr/local/bin/noip2

Guardamos el archivo, y finalmente damos permisos de ejecución, y lo colocamos en la cola de arranque

sudo chmod +x /etc/init.d/noip2
sudo update-rc.d noip2 defaults

Así garantizamos que el dominio virtual creado en no-ip tenga siempre asignada nuestra dirección IP externa de nuestro modem. Ahora si podemos configurar nuestros servidores virtuales en nuestro router y listo! acceso externo a nuestro PI.

En mi caso, tengo un modem Huawei, y configurar los servidores virtuales no es ninguna ciencia. Se crea el nombre del servicio, se asignan los rangos de puertos y la IP interna a la que se redireccionará el servicio y listo.

rpi_ports

Con esto, tengo acceso VNC, SSH y HTTP a mi Raspberry Pi. Cero seguridad (no se recomienda nunca abrir un SSH, pero bueno, esto se hizo para probar) pero cualquier cosa que pase con mi Pi la puedo revisar desde la oficina o desde mi teléfono celular

 

Descargas de archivos, y codigos CRC en vb.NET

En los últimos días, tuve que implementar (como siempre, al apuro) una aplicación que visualice archivos PDF desde un repositorio central de archivos, utilizando Visual Basic .NET, con el limitante de que los archivos PDF que son visualizados no deben ser guardados directamente por el usuario en su computador.

Para esto, del lado del cliente, se implementó una pequeña aplicación que descarga el archivo PDF mediante una solicitud a una URL, utilizando la siguiente función:

Public Sub descargaArchivo(ByVal _urlOrigen As String, ByVal _archivoDestino As String)
        Try
            Dim _WebClient As New System.Net.WebClient()
            _WebClient.DownloadFile(_urlOrigen, _archivoDestino)
        Catch _Exception As Exception
            MessageBox.Show("Se ha Producido una excepción de descarga: {0}", _Exception.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
End Sub

El uso des esta funcion es sencillo: se ingresa como parámetros la url de descarga del archivo, y la ruta donde se desee guardar el mismo. Para ocultar un poco el acceso directo al archivo descargado, usamos la hora actual del sistema, y hacemos que guarde el archivo descargado en la carpeta temporal de windows, con los siguientes comandos:

Dim timestamp As String = Date.Now.TimeOfDay.ToString
timestamp = timestamp.Replace(":", "")
timestamp = timestamp.Replace(".", "")
Dim archivo As String = System.IO.Path.GetTempPath.ToString + timestamp + ".pdf"

….. facil, sencillo y transparente para el usuario

Otra función que me resultó bastante útil, es la que realizamos para obtener un Código de Checksum SHA256 para comparar la huella de los archivos indexados en una base de datos contra los archivos descargados. La función es bastante sencilla, y es la siguiente:

Private Function calculaChecksum(archivo) As String
        Using Stream As FileStream = File.OpenRead(archivo)
            Dim sha As SHA256Managed = New SHA256Managed
            Dim checksum As Byte() = sha.ComputeHash(Stream)
            Return BitConverter.ToString(checksum).Replace("-", String.Empty)
        End Using
End Function

Esta funcion requiere la ruta real de acceso al archivo del que se desea obtener el checksum, y devuelve el código hash como un string.

Para eta función, es necesario importar las siguiente librerías:

Imports System.IO
Imports System.Security.Cryptography

que proveen soporte para el manejo de archivos, y las funciones de criptografía.

Hackeando al Raspberry Pi

El famoso Raspberry Pi, que no ha tenido mayor uso desde que está en mis manos (más por falta de tiempo, que por falta de ganas), necesitaa un upgrade básico: un conexión WIFI.

El tener un puerto ethernet en la microcomputadora, de hecho que es una ayuda gigantezca, pero resulta poco práctico si el único chance de obtener una conexión por cable a la red, es dejarlo conectado debajo de mi escritorio, al router de internet. Es por esto que se volvió justo y necesario, darle una conexión wireless, para poder seguir con las pruebas y los experimentitos.

Por si no lo sabían, el Pi tiene 2 puertos USB, pero con un pequeño limitante. Estos tienen un fusible que limita a 140mA la corriente máxima de cada uno, y ciertos dispositivos USB no funcionan correctamente con ese límite (de hecho un teclado flexible que pensaba usarlo ahi no se enlaza 🙁 ), así que frente a esto quedan 2 opciones:

  • La primera, que es la más común entre los dueños de este bicho, es utilizar un hub usb energizado, que aunque no lo crean, resultó bastante escazo por acá (el único que encontre buscando un poco, pedían $40, así que negado). Por seguridad creo que voy a buscar un hub chinito en ebay, y esperar que llegue; pero…..
  • La segunda opción es meterle mano al Pi, con la pérdida de garantía que eso conlleva, y eliminar los límites de corriente.

Para no perder la costumbre, me fuí por la segunda opción, pero a medias, ya le realicé un puente únicamente en el puerto usb superior, quedando el inferior con protección (ahí tengo conectado un mini hub usb para el teclado y el mouse), así que el wireless irá en el puerto de arriba.

2012-08-29 20.34.07

Como se puede ver en la foto (mirenla en flickr, para verla en detalle), pueden ver el cablecito de puente sobre el fusible que se encuentra a un costado del conector…… cero garantía contra daños y 100% conexión!

Ahora, una vez que logramos alimentar correctamente el usb, tenemos que instalar el módulo en el sistema operativo del RPi.

El módulo usado es un TP-Link 723n que para mi buena suerte, costó $18 y es compatible 100% con Debian Wheezy pero para facilitar aún más las cosas, encontré un script que se encarga de toda la instalación de drivers, y configuración de la red wireless. Este script lo pueden encontrar en esta url http://dl.dropbox.com/u/80256631/install-rtl8188cus-latest.sh y lo deben ejecutar con el siguiente comando, desde el terminal de su RPi:

sudo ./install-rtl8188cus-latest.sh

Es cuestión de seguir los pasos (ojo, no se debe conectar el módulo USB hasta que el script lo solicite), colocar el nombre de la SSID y la contraseña, y voilá! tenemos wifi en el Pi.

Les dejo algunas imágenes del hack, y hasta ahora está funcionando sin problema. Además, me olvidaba. El Pi está overclockeado a 900Mhz (viene a 700Mhz de fabrica) y hasta ahora está super estable.

Les dejo algunas fotitos adicionales.

 

2012-08-29 20.43.43

2012-08-29 20.42.24

2012-08-29 20.34.07

La historia de los videojuegos (en video)

[HTML1]

Les dejo un remix de juegos clásicos. Este video fué realizado usando cortes y el audio de estos juegos

  • Zork
  • MULE
  • Dam Busters
  • Flight Simulator
  • Kings Quest: Quest For The Crown
  • DOS Ninja
  • Hard Hat Mack
  • Chess
  • Donkey
  • Lode Runner
  • Sid Meier’s Pirates
  • Burger Time
  • Galactix
  • Where In The World Is Carmen San Diego
  • Alley Cat
  • Pool of Radiance
  • Wizardry
  • Oregon Trail
  • Leisure Suit Larry in The Land of The Lounge Lizards
  • Space Quest: The Sarien Encounter
  • Defender of The Crown
  • Jeopardy!
  • Captain Power and The Soldier of The Future
  • Cannonball Blitz
  • Arctic Fox
  • California Raisins
  • High Rollers
  • Wavy Navy
  • Ultima
  • Sim City
  • Prince of Persia
  • Monkey Island 2
  • Lemmings
  • Wolfenstein 3D
  • Kings Quest VI
  • Dune II
  • Sam & Max Hit The Road
  • Command & Conquer: Red Alert
  • Supremacy
  • Civilization
  • Doom
  • Sim City 2000
  • Day of The Tentacle
  • Myst
  • Mech Warrior 2
  • Wing Commander 3
  • X-Com UFO Defense
  • Command & Conquer
  • Warcraft II: Tides of Darkness
  • Star Wars TIE Fighter
  • Elder Scrolls Arena
  • Warlords II
  • Duke Nukem 3D
  • Diablo
  • Elder Scrolls II
  • Starcraft
  • Heroes of Might and Magic III
  • Fallout
  • Blade Runner
  • Riven
  • Half-Life
  • Quake II
  • Counter Strike 1.6
  • Deus Ex
  • Star Wars: Knight of The Old Republic
  • Max Payne
  • Battlefield 1942
  • Medal of Honor: Allied Assault
  • Warcraft 3
  • Diablo II
  • Empire Earth
  • Unreal Tournament 2004
  • Splinter Cell
  • Half-Life 2
  • Hitman: Blood Money
  • Doom 3
  • Team Fortress 2
  • Left 4 Dead 2
  • Portal
  • Fallout 3
  • Dead Space 2
  • Gran Theft Auto 4
  • Borderlands
  • Amnesia
  • Civilization V
  • Starcraft 2
  • Limbo
  • Crysis 2
  • Deus Ex Machina
  • Minecraft
  • Portal 2
  • Dota 2
  • Diablo 3

Raspberry Pi! Hands On

Finalmente! El viernes, y luego de un mes de espera (realmente, más de 3 meses, desde que fué anunciada su fabricación), ha llegado a mis manos el Raspberry Pi, el pequeño microcomputador que ha dado muchisimo de que hablar en este último tiempo.

Por qué tanta novelería? Pues revisemos sus características del hardware

  • CPU ARM a 800Mhz
  • GPU Broadcom VideoCoreIV, OpenGL ES 2.0, decodificador 1080p H.264
  • 256MB de memoria RAM
  • 2 puertos USB
  • 1 puertoLAN 100Mbps
  • 1 salida de audio
  • 1 salida de video RCA
  • 1 salida de video HDMI
  • 26 pines de entrada/salida digital GPIO
  • Ranura SD para almacenamiento

En características como tal, no es nada revolucionario, y en procesamiento como tal, equivale más o menos a un computador con procesador Pentium III de 300Mhz, con una tarjeta de video «bastante poderosa» (se puede ejecutar juegos como Quake III Arena sin problema)

Lo que realmente hace notable al raspberry, es primero su precio. Éste tiene un costo de $35 dolares, y DHL, por costos de desaduanización y manejo, cargaron un adicional de $12, entregandonos un computador por $47…. nada mal eh? Además, soporta Linux como sistema operativo, lo que abre muchísimas posibilidades en cuanto al software que se puede ejecutar… teóricamente, toda aplicación de linux para PC, se podría recompilar  y ejecutar sobre el raspberry, tomando en cuenta obviamente las limitaciones de RAM y velocidad.

Como lo pienso usar? no se! jajaja, pero habrá que recordar un poco de Python, para empezar a programar aplicaciones, tomando en cuenta, que este bichito consume menos de 3W a plena potencia, y puede pasar encendido y conectado a la red todo el día sin aumentar la cuenta de energía eléctrica.  Inicialmente, la idea es conectarlo a mi TV, y armarlo como un Smart CRT-TV jejejeje. Mientras lo vaya probando, iré mostrando los avances.

Les dejo algunas fotos del juguete (les recomiendo verlas en full size), para que observen el diseño de la misma. Ojo con el close up del procesador. En realidad es un SoC (System on Chip) que contiene dentro del mismo dado de silicio, el CPU, el GPU, los puertos de Entrada y Salida, y sobre este, en torre, el chip de memoria ram. Realmente un trabajo memorable realizado por la gente de esta fundación.
R-PI

R-PI

R-PI

R-PI

R-PI

Raspberry Pi Smart CRT-TV

Algo de ASCII Art

MMMMMMMMMMMMMMMMMMMMMMNNNDDD+++~~~~~~~~~=====DDDNNNMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMDD???===+++++++++===++===???+++DDDMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMDD???===+++++++++===++===???+++DDDMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMNNNII++++++???????????????????????$$$NNNNNNMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMNNNII++++++???????????????????????$$$NNNNNNMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMM$$$==+++????????????III??III???IIIIII$$$DDDMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMM$$$==+++????????????III??III???IIIIII$$7DDDMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMDDDIII==??????777IIIIII???II???IIIIIIIIIZZZMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMDDDIII==??????777IIIIII???II???IIIIIIIIIZZZMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMM$$$===+++++$$$NNNOOOIIIIIIIIIIIIIIIIIIIIOOOMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMOOO777II???$$$NNN888IIIIIIIIIIIIIIIII777888MMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMOOO777II???$$$NNN888IIIIIIIIIIIIIIIII777888MMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMDDDOOO888ZZIII???$$$IIIIIIIIIIIIIIIIIIII777888MMMMM888$$$$$$NNNMMMMMM
MMMMMMMMMMMDDDOOO888ZZIII???$$$IIIIIIIIIIIIIIIIIIII777888MMMMM888$$$$$$NNNMMMMMM
MMMMMMMMDDD$$$$$$OOO88OOOIIIIIIIIIIIIIIIIIIIIIIIIII777ZZZDDDMM$$$??????$$$NNNMMM
MMMMMMMMDDD$$$$$$OOO88OOOIIIIIIIIIIIIIIIIIIIIIIIIII777ZZZDDDMM$$$??????$$$NNNMMM
MMNNNZZZ$$$777ZZZOOOOO888ZZZIIIIIIIIIIIIIIIIIIIIIIIZZZDDDNNNMM$$$???IIIIII$$$NNN
MMNNNZZZ$$$777ZZZOOOOO888ZZZIIIIIIIIIIIIIIIIIIIIIIIZZZDDDNNNMM$$$???IIIIII$$$NNN
88OOOIIIIII777OOOOOOOOOOOOOOOOOOOOIIIIIIIIIII777ZZZNNNMMMMMMMM777+++IIIIIIIIINNN
88OOOIIIIII777OOOOOOOOOOOOOOOOOOOOIIIIIIIIIII777ZZZNNNMMMMMMMM777+++IIIIIIIIINNN
NN888ZZZIII777ZZZOOOOOOOOOOO888888OOOZZZIIIII777DDDMMMMMMMMMZZ+++???IIIIIIIIIOOO
MMMMMNNNOOO888ZZZ$$$OOOOO888888888888777IIIIIIII$$$MMMMMMMMM$$~~~??????IIIIIIZZZ
MMMMMNNNOOO888ZZZ$$$OOOOO888888888888777IIIIIIII$$$MMMMMMMMM$$~~~??????IIIIIIZZZ
MMMMMMMMNNNMMMDDD88888888888888888ZZZIIIIIIIIIII???777NNN$$$~~===???IIIIIIIIIZZZ
MMMMMMMMNNNMMMDDD88888888888888888ZZZIIIIIIIIIII???777NNN$$$~~===???IIIIIIIIIZZZ
MMMMMMMMMMMMMMNNN888OO888ZZZZZZ$$$777IIIIIIIIIIIIII+++===~~~~~===+++IIIIIIIIIZZZ
MMMMMMMMMMMMMMNNN888OO888ZZZZZZ$$$777IIIIIIIIIIIIII+++===~~~~~===+++IIIIIIIIIZZZ
MMMMMMMMMMMMMMZZZ?????777777IIIIIIIIIIIIIIIIIIII???III+++===++??????IIIIIIIIIZZZ
MMMMMMMMMMMMMMZZZ?????777777IIIIIIIIIIIIIIIIIIII???III+++===++??????IIIIIIIIIZZZ
MMMMMMMMNNN$$$===+++++???IIIIIIIIIIIIIIIIIIIIIIIIII?????????????????IIIIIIIIIOOO
MMMMMMMM$$$~~~~~~===?????IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII???IIIIII??II?IIIIIIDDD
MMMMMMMM$$$~~~~~~===?????IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII???IIIII???IIIIIIIIIDDD
MMMMMDDD~~~~~~~~~===++??????IIIIIIIIIIIIII?????????IIIIIIIIIIIIIIIIIIIIIII+++ZZZ
MMMMMDDD~~~~~~~~~===++??????IIIIIIIIIIIIII?????????IIIIIIIIIIIIIIIIIIIIIII+++ZZZ
MMMMMZZZ===~~~===???????????IIIIIIIIIIII??+++++++++?????????IIIIIIII??????IIIZZZ
MMMMMZZZ===~~~===????????I??IIIIIIIIIIII??+++++++++?????????IIIIIIII??????IIIZZZ
MMDDD???++++++++++++?????IIIIIIIIIIIIIII??III??????+++???+++??????????????IIIZZZ
MMDDD???++++++++++++?????IIIIIIIIIIIIIII??III??????+++???+++??????????????IIIZZZ
MMDDDIII?????????????????IIIIIIIIIIIIIIIIIIIIIII???III??????+++++?????????777888
MMDDDIII?????????????????IIIIIIIIIIIIIIIIIIIIIII???III??????+++++????I????777888
MMDDD777III??????????????IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII??III?????????$$$NNN
MMMMM888III?????????IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$$$MMM
MMMMM888III?????????IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$$$MMM
MMMMMNNN777IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$$$888MMM
MMMMMNNN777IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$$$888MMM
MMMMMMMM888777IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$$$$$$DDDMMMMMM
MMMMMMMM888777IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII$$$$$$DDDMMMMMM
MMMMMMMMMMMDDDOOO$$$77IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII777$$$ZZZZZ888NNNMMMMMMMMM
MMMMMMMMMMMDDDOOO$$$77IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII777$$$ZZZZZ888NNNMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMNNNNNOOOZZZZZZZZZZZZZZZZZZZZZZZZZZOOONNNNNMMMMMMMMMMMMMMMMMM
MMMMMMMMMMMMMMMMMMMMNNNNNOOOZZZZZZZZZZZZZZZZZZZZZZZZZZOOONNNNNMMMMMMMMMMMMMMMMMM

Por si no se nota, es mi logo 😉

Reemplazar texto en una base de datos mysql

Existen situaciones, donde es necesario reemplazar una palabra (o una url) en todos los registros de una tabla…..y hacerlo a mano uno por uno resulta imposible

Para evitar eso, con este pequeño query de mysql, podemos realizar un reemplazo en masa, dentro de una tabla, en una columna específica

update nombre_tabla set meta_value = replace(nombre_columna, 'valor_a_buscar', 'valor_a_reemplazar')

Se explica solito el query, y espero les sirva, y les ahorre muchas muchas horas de trabajo