@carloscapote.com - Probablemente, el sitio web más aburrido de todo Internet

Posts guardados como 'Informática'

Cómo validar números de documentos de identidad (NIFs, CIFs o NIEs) desde MySQL

17 de August de 2012 · Sin comentarios

Los números de documentos de identidad tienen un dígito que se calcula en función del resto. Esto se hace para que sea posible comprobar que se ha dado un número correcto. Si alguien te da el número de documento 11111111-J, sabes que se ha equivocado. En el caso hipotético de que la parte numérica estuviese bien, la letra que le correspondería debería de ser una H y no una J.

Si, por algún motivo, necesitas comprobar la validez de un número de identidad, seguro que te interesa la página de generadores y validaciones de documentos de GenWare. Buscando un poco, verás que es bastante fácil encontrar sitios en internet en los que se pueden generar o validar números de documento.

El caso es que las herramientas online son muy útiles cuando sólo quieres validar un número y puedes permitirte hacerlo manualmente. Sin embargo, esto es rara vez así. Lo normal es que quieras que un formulario de una aplicación -o página web- en la que se pide a alguien su número de documento, sea capaz de validarlo. Igual que no aceptas un campo en que se ha rellenado un email sin introducir una arroba, tampoco te interesa aceptar un número de documento que sabes que no es válido.

SELECT IsValidDocNumber_es('Q2816003D') AS IsValid;
-- Returns 2

Buscando un poco más, encontrarás también un montón de scripts en JavaScript, PHP, Java y cosas por el estilo, que hacen este tipo de validaciones.

Hace no mucho, en cambio, me vi en la necesidad de validar números de documento que ya tenía en una base de datos. Esto puede ser más necesario de lo que parece: cuando haces importaciones masivas de datos, cuando ya habías empezado a recoger datos antes de activar la validación, o cuando quieres hacer la validación desde el lado del servidor para garantizar que de ningún modo podrá ser evitada.

Para solventar esto, lo que hice fue una traducción a SQL (para usarla desde MySQL) de un script de Josep Rosell que encontré bajo el título validar NIF, CIF, NIE según ley vigente. El artículo es de noviembre de 2011 pero a día de hoy -16 de agosto de 2012- sigue vigente.

SELECT getDocType_es('Q2816003D') AS DocType;
-- Returns CIF: Organismo público...

Tener las funciones disponibles desde MySQL facilita un montón ciertas operaciones. Dada una tabla entidades en la que existiese un campo CIF, podrías sacar muy rápidamente un porcentaje de CIFs incorrectos de tu base de datos. Bastaría con ejecutar la query:

SELECT
    IsValidDocNumber_es(CIF) AS IsValid,
    count(*) AS CIFs
FROM entidades
GROUP BY IsValidDocNumber_es(CIF);

Es sólo una muestra pero creo que da una idea de las posibilidades que ofrece tener esta función disponible desde MySQL. Para facilitarme la vida, la he colgado en GitHub como mysql-validdoc-es.

Enlace corto:http://capo.gl/k1 | Categoría: Informática | Tags: · ,

→ Sin comentarios

Cómo exportar fácilmente todas vistas de una base de datos MySQL

15 de August de 2012 · Sin comentarios

Hace unos días tuve que exportar vistas de una base de datos MySQL y me vi con un pequeño problema. La herramienta que más utilizo para exportar e importar datos o estructuras en MySQL es phpMyAdmin. El problema lo encuentro cuando lo que se quiere exportar son las definiciones de las vistas de una base de datos, es decir, quieres un fichero que contenga algo como:

CREATE VIEW v AS
    SELECT
        qty,
        price,
        qty*price AS value
    FROM t;

Para solucionar esto, puede ser de bastante ayuda saber que en la tabla views de la base de datos information_schema están todas las vistas de tu servidor, ¡con sus respectivas sentencias!

SELECT
    concat('CREATE VIEW ',
        table_name,
        ' AS ',
        view_definition,
        ';') AS createview
FROM information_schema.views
WHERE table_schema = '{database}';

Cambiando {database} por el nombre de la base de datos de la que quieres exportar las vistas. Como uso mucho MySQL sobre Linux y normalmente tengo acceso por línea de comandos a los servidores, he hecho un pequeñín script en bash que me pide el nombre de la base de datos que quiero exportar, los datos de acceso (usuario y contraseña) y genera un fichero .sql con las definiciones de todas las vistas de esa base de datos.

El script está disponible en GitHub con el nombre de mysql-bash-export-views.

Enlace corto:http://capo.gl/jy | Categoría: Informática | Tags: · ,

→ Sin comentarios

Cómo hacer una copia de seguridad de la base de datos de enlaces de seriesyonkis.com, for (casi)Dummies

26 de January de 2011 · 92 comentarios

En mi post sobre “cómo hacer una copia de seguridad de tu sitio favorito de enlaces” explicaba cómo hacer una copia completa de un sitio web, pero también advertía que:

La copia de un sitio web “a lo bestia” no es completamente funcional y suele ocupar mucho  más de lo que ocupa el sitio original.

Así que me comprometí a ofrecer una forma elegante de proteger toda esa información que contienen los sitios de enlaces amenazados por el Sinderetazo.

La idea no es tan simple como en el post anterior. Esta vez lo que propongo requiere saber un poquín de programación pero el resultado nos permitirá obtener un fichero de unos pocos megas con todos los enlaces de tu sitio de enlaces favorito (en este caso, tomaremos como ejemplo seriesyonkis.com).

Aunque no lo conocía de antes (así que el script probablemente diste mucho de ser el mejor script posible) he escogido Ruby como lenguaje. La razón es que permite muy fácilmente hacer conexiones vía http y obtener, para entendernos, el html de una página en formato cadena de texto:

#Get generically, HTTP content
#    Receives a URL and returns its content
def gethttpcontent(url)
  begin
    url = URI.parse(url)

    #Perform the HTTP query and get the content
    req = Net::HTTP::Get.new(url.path);
    res = Net::HTTP.start(url.host, url.port)
      { |http| http.request(req); }

    #Return the body
    return res.body;
  rescue
    return ""
  end
end

Por cierto, aprovecho para pedir perdón por el uso patatero que hago de mi inglés a lo largo del código fuente. Cuando programo me flipo muchísimo.

Además de estas facilidades (cortesía de la librería net/http de Ruby) utilizo también las facilidades de Ruby para tratar cadenas. En concreto, utilizo lo que llaman pattern matching para recorrer elementos de una página.

  content =
    gethttpcontent("http://www.seriesyonkis.com/")
  content.scan(/<li class="page_item">(.*?)<\/li>/)

Usando esta técnica he escrito funciones que permiten descargar cada serie, cada temporada de cada serie, cada episodio de cada temporada y cada enlace de cada episodio.

En particular, para descargar los enlaces he tenido que hacer un pequeño apaño porque los enlaces no están escritos explícitamente en el código fuente de la página (están protegidos -por decirlo de alguna manera- por funciones JavaScript).

La manera de salvar este pequeñín obstáculo ha sido descargar los ficheros JavaScript y ejecutarlos localmente (haciéndoles creer que están siendo ejecutados desde un navegador):

function locclass() {
  this.search = '" + locationsearch + "'; }
location = new locclass();

function docclass() {
  this.write = docwrite; }
function docwrite(str) {
  print(str); }
document = new docclass();

Donde locationsearch es una variable que no viene a cuento ahora.

Usando estas técnicas, he escrito el script sy-getseries.rb, que permite obtener un fichero (con todos los datos necesarios para generar algo del estilo de sy-links20110124.ods, de sólo 2.83Mb) con los más de 163.000 enlaces que a día de hoy hay en seriesyonkis.

PD: Para abrir el .ods necesitarás LibreOffice o una aplicación compatible.

Enlace corto:http://capo.gl/8m | Categoría: Informática | Tags: ·

→ 92 comentarios

Cómo hacer una copia de seguridad de tu sitio favorito de enlaces, por si aca

10 de January de 2011 · 2 comentarios

Como iba diciendo, la famosa ley Sinde amenaza con cerrar sitios web (de hecho, en el maldito texto se habla de la posibilidad de cerrar “Servicios de la Sociedad de la Información”) sólo por contener enlaces a material protegido por derechos de autor, en lo que parece una alusión casi directa a sitios como SeriesYonkis o Vagos.

Dejando de lado que considero catastrófica la persecución de sitios de enlaces (sólo ejercen una labor informativa y siquiera alojan los contenidos que presuntamente violan derechos de propiedad intelectual), considero que la ley es completamente inútil y me dispongo a mostrarlo, estos días, de diferentes maneras.

Como primer ejemplo, tanto para mostrar la inutilidad de la ley, como para servir de inspiración a quienes puedan tener interés, os propongo que penséis en haceros copias de seguridad de vuestros sitios favoritos de enlaces. Si usas Linux, puedes hacer una copia bastante funcional de un sitio web de enlaces con sólo copiar y pegar este comando en tu línea de comandos:

wget –html-extension –convert-links -r -p -U Mozilla http://www.misitiodeenlaces.com/index.html

Si quieres profundizar en esta opción, te recomiedo que eches un vistazo al artículo que dedican a wget en Linux Reviews.

Si usas Windows, o lo de la consola no te mola demasiado, no desesperes: ¡no hace falta que vayas navegando y guardando enlace a enlace! Siempre te quedan los programas de descargas de sitios web. Un ejemplo más que suficiente es HTTrack. Échale un vistacín, que seguro que te resulta útil. Y, si no te gusta, busca “website copier” utilizando tu buscador favorito, que verás que encuentras opciones para todos los gustos.

Eso sí, te advierto que no es oro todo lo que reluce. La copia de un sitio web “a lo bestia” no es completamente funcional y suele ocupar mucho  más de lo que ocupa el sitio original. Un sitio web como Series Yonkis puede ocupar unos 30Gb por este procedimiento (cuando, en realidad, sus enlaces caben en un fichero de texto de unos pocos megas), por lo que te recomiendo que estudies un poco cómo afinar las opciones de tu programa de descarga de sitios web antes de lanzarte a lo loco a copiarlo todo.

Entonces, ¿qué alternativa nos queda para salvaguardar toda esa información tan valiosa que ahora se encuentra en peligro? Mañana -pasado mañana a lo más tardar- os propondré una solución mucho más elegante.

Enlace corto:http://capo.gl/8c | Categoría: Informática | Tags: ·

→ 2 comentarios

Una manera elegante de meter código fuente en tus posts en WordPress: el plugin SyntaxHighlighter

25 de December de 2010 · Sin comentarios

Acabo de descubrir SyntaxHighlighter, una extensión de WordPress que permite añadir pedacitos de código de programas en tus posts de forma bastante chula. Por ejemplo, un “hola mundo” -eso sí, un poco insistente- en C, podría quedar más o menos así:

int main() {
int i;
//Saludo 10 veces, nada menos
for(i=0; i&lt;10; i++) {
	printf("¡Hola mundo!"); } }
return 0;

El caso es que instalarlo y utilizarlo es más fácil que el mecanismo de un chupete. Desde la sección Plugins de WordPress (en la zona privada) pinchas en añadir nuevo, buscas “SyntaxHighlighter Evolved”, lo añades y lo activas. Ahora ya puedes meter en tus posts pedacitos de código. Basta con rodearlo así:

<pre class="brush: c">
	/* Aquí iría tu código en C */
</pre>

Después de brush: puedes especificar el lenguaje que quieres utilizar. Puedes consultar una lista de lenguajes disponibles en la web oficial del plugin. Si tienes problemas avísame por los comentarios y te echo una mano.

Enlace corto:http://capo.gl/7x | Categoría: Informática | Tags: ·

→ Sin comentarios