Un escenario común para un administrador de servidores es que al subir un archivo se de cuenta que la codificación no es compatible con el programa que esta en el servidor. Una manera rápida y sucia de arreglar el problema es con nuestro viejo amigo vi:
vi -c ":wq! ++enc=utf8" archivo.txt
En el ejemplo anterior, se convierte el archivo de texto a UTF-8, pero también se puede usar latin1 y latin2.
Supongamos que tenemos las siguientes clases:
#include <iostream>
#include <boost/shared_ptr.hpp>
using namespace std;
class Base {
public:
virtual void imprime() { cout <<"Función imprime de la Clase Base" <<endl; }
virtual ~Base() { cout <<"Destructor de la Clase Base" <<endl; }
};
typedef boost::shared_ptr<Base> base_ptr;
class Derivada : public Base {
public:
virtual void imprime() { cout <<"Función imprime de la Clase Derivada" <<endl; }
virtual ~Derivada() { cout <<"Destructor de la Clase Derivada" <<endl; }
};
typedef boost::shared_ptr<Derivada> derivada_ptr;
Y queremos hacer esto:
int main
() {
derivada_ptr derivada( new Derivada );
base_ptr base( derivada );
base->imprime();
// La siguiente línea no va a compilar:
derivada_ptr regreso( base );
return EXIT_SUCCESS;
}
En la tercera declaración, nos va a marcar este error al compilar:
/usr/include/boost/shared_ptr.hpp:194: error: conversión inválida de ‘Base* const’ a ‘Derivada*’
Obviamente, necesitamos un casting. La forma para hacerlo sería así:
int main
() {
derivada_ptr derivada( new Derivada );
base_ptr base( derivada );
base->imprime();
// Ahora si compila:
derivada_ptr regreso( boost::static_pointer_cast<Derivada>( base ) );
return EXIT_SUCCESS;
}
Al ejecutar el programa, obtenemos esta salida:
Función imprime de la Clase Derivada
Destructor de la Clase Derivada
Destructor de la Clase Base
Como se ve, el smart pointer funcionó a la perfección a pesar de todas las transformaciones.
Si al ejecutar el comando:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON 00.*
TO 'user'@'localhost' IDENTIFIED BY 'password';
obtienes:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '00.* TO 'usuario'@'localhost' IDENTIFIED BY 'password'' at line 1
Es porque se necesita usar comillas invertidas en el nombre de la base de datos:
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `00`.*
TO 'user'@'localhost' IDENTIFIED BY 'password';
Para convertir archivos .docx, .xlsx y .pptx a versiones anteriores, una soloción es instalar en Windows, el paquete de compatibilidad de Office. Se puede bajar de la siguiente URL que no requiere ninguna validación:
http://office.microsoft.com/en-us/products/HA101686761033.aspx
No es necesario tener instalado Office. Si quiere ver los archivos es necesario tener instalado los visores correspondientes.
En este post iré poniendo comandos de unix para dividir archivos.
Dividir archivos de texto
1. Primero se determina la longitud del archivo contando el número de líneas:
Para cortar desde el inicio:
tail +"No linea de corte" archivo> archivo.cortado
Para cortar desde el final:
tail -"No linea de corte" archivo> archivo.cortado
Quitar bytes al inicio de un archivo binario
Muy útil cuando se quiere quitar encabezados a archivos con algún formato.
dd if=<old file> of=<new file> bs=1 skip=<bytes>