Chart.js
Hoy he encontrado una página que me ha encantado, me ha abierto un nuevo horizonte.
En esta página te puedes descargar y encuentras información sobre una librería de Javascript orientada totalmente a generar gráficos dentro del CANVAS de HTML5.
Prometo utilizarlo e iré subiendo resultados.
Telegram
Hoy me he instalado Telegram, leyendo que es un sustituto seguro, gratuito, open source, en la nube, rápido, etc.
Hay versión para Android y para Iphone, y pronto habrá para desktop.
Por ahora, está sólo en inglés. Estoy pensando hacerme colaborador en Spanish.
Como he sido el primero de mis contactos en instalarlo, no tenía ninguno. Así que llevo toda la tarde intentando convencer a la gente. Por ahora van cayendo y me está gustando la experiencia. Ellos dicen que es igual que Whatsapp, menos mal que no han visto el Secret Chat, entonces se darán cuenta de que es mucho mejor.
Han pasado 2 semanas
Por ahora todo mejor. Muchos más contactos y apenas utilizo whatsapp. La única pega que consigo encontrar es que enviar los videos chorra y las fotografías, al no hacer ninguna compresión, se eterniza en ocasiones.
Quizás debieran meter la opción de subir video/foto comprimido
Tabla para almacenar usuario y contraseña de aplicación
Estoy planteándome un sistema de LOGIN de usuario/contraseña para mi página web desarrollada en PHP. Entonces llega el momento en el que debo almacenar los datos en MySQL.
Lo primero que uno piensa es en crear una tabla llamada USUARIO con dos campos de tipo VARCHAR:
– Usuario
– Contraseña
Pero esto supone que cualquier usuario de MySQL con derechos de consulta a la tabla USUARIO podrá ver las contraseñas de todo el mundo.
¿Cómo solucionar esto?
MySQL provee de varios métodos para almacenar las contraseñas encriptadas.
MD5(str
)
str
)Calcula una checksum MD5 de 128-bit para la cadena. El valor se retorna como una cadena binaria de dígitos 32 hex ,o NULL
si el argumento era NULL
. El valor de retorno puede usarse como clave hash, por ejemplo.
mysql> SELECT MD5('testing'); -> 'ae2b1fca515949e5d54fb22b8ed95575'
Este es el «RSA Data Security, Inc. MD5 Message-Digest Algorithm.»
SHA1(str
)
, SHA(str
)
str
)str
)Calcula una checksum SHA1 de 160-bit para la cadena, como se describe en RFC 3174 (Secure Hash Algorithm). El valor se retorna como cadnea de 40 dítigos hexadecimales, o NULL
si el argumento era NULL
. Uno de los usos posibles para esta función es una clave hash. También puede usarlo como función criptográficamente segura para almacenar contraseñas
mysql> SELECT SHA1('abc'); -> 'a9993e364706816aba3e25717850c26c9cd0d89d'
SHA1()
puede considerarse un equivalente criptográficamente más seguro que MD5()
. SHA()
es sinónimo de SHA1()
.
Creación de la tabla
Nuestra tabla debe tener 3 campos: Usuario, Método y Contraseña.
Método deberá ser sha1, md5 o texto.
Contraseña debe ser un VARCHAR(40), puesto que para almacenar el checksum de SHA1 necesitamos 40 dígitos.
La orden de creación será la siguiente:
CREATE TABLE usuarios_login( usuario varchar(30) PRIMARY KEY, contrasena enum('texto', 'sha1', 'md5'), metodo varchar(40) );
Insertar usuarios
Ejemplos:
INSERT INTO `usuarios_login` (`usuario`, `contrasena`, `metodo`) VALUES ('fulanito', MD5('contrafulanito'), 'md5'); INSERT INTO `usuarios_login` (`usuario`, `contrasena`, `metodo`) VALUES ('periquito', SHA1('contraperiquito1'), 'sha1'); INSERT INTO `usuarios_login` (`usuario`, `contrasena`, `metodo`) VALUES ('profesor', 'contraprofe', 'texto'); INSERT INTO `usuarios_login` (`usuario`, `contrasena`, `metodo`) VALUES ('guirado', SHA1('pedr1t0'), 'sha1');
Consultar usuarios
SELECT * FROM usuarios_login WHERE usr=’fulanito’ AND contrasena=MD5(‘contrafulanito’);
+—————+—————————————————+
| usr | contrasena | metodo |
+—————+—————————————————+
| fulanito | 24b5cf71922955eddd8fb1d3c52d2dc4 | md5
+—————+—————————————————+
1 row in set (0.00 sec).
Campos ENUM o SET en MySQL
Voy a crear una tabla en MySQL en la que debo introducir un campo del que podré coger 3 valores distintos de tipo texto.
¿Qué utilizar, ENUM o SET? ¿Cuál es la diferencia?
Tanto ENUM como SET, sirven para determinar los valores que puede tener un campo de una tabla, es decir, puedes determinar que en un campo solamente pueda contener valores de una lista definida por ti. La principal diferencia es que un campo del tipo ENUM siempre contiene sólo un valor de la lista; y un campo del tipo SET puede contener ninguno, uno o varios valores de la lista.
Hay más características de estos dos campos de MySQL, que les hace diferenciarse y es necesario conocerlas para decidir cual es más apropiado para nuestro diseño de la base de datos.
El tipo de campo ENUM se caracteriza por:
CREATE TABLE sizes ( size ENUM('small', 'medium', 'large') NOT NULL DEFAULT 'medium' ); |
- Sólo contiene un valor
- Se puede definir la lista de hasta 65535 valores distintos
- Si se permite NULL, este será el valor por defecto; sinó, y si no se define con DEFAULT, será el primer valor de la lista (en el ejemplo de arriba, si no defino el DEFAULT ‘medium’, por defecto sería ‘small’)
- Cada valor de la lista es numerado con un índice (empieza desde el 1), pudiendo usar el índice en vez del valor de la lista (en el ejemplo de arriba: 1=>’small’, 2=>’medium’ y 3=>’large’)
- En caso de introducir un valor no perteciente a la lista, el campo pasará a valer ”, una cadena vacía, que tiene el índice zero
- El índice de NULL es NULL,
- Para retornar el índice de un campo del tipo ENUM, podemos sumar zero al campo (SELECT size+0 FROM …)
- De almacenamiento físico, ocupará 1 byte si hay 255 o menos valores en la lista, o 2 bytes si hay 256 o más valores
El tipo de campo SET se caracteriza por:
CREATE TABLE letters ( letter SET('a', 'b', 'c', 'd') ); |
- Contiene zero, uno o varios valores
- Se puede definir la lista de hasta 64 valores distintos
- Los valores no pueden contener comas, ya que los valores asignados son separados por comas
- Cada valor de la lista representa un bit de la cadena de bits del campo
- El valor decimal del campo determina los bits, marcando los valores que contiene el campo,de manera que si todos los bits estan a 1, es que ese campo contiene todos los valores (ejemplo: si el valor decimal es 7, en binario sería 0111, y eso quiere decir que el campo contiene los valore ‘a’, ‘b’ y ‘c’)
SET Decimal Bytes ‘a’ 1 0001 ‘b’ 2 0010 ‘c’ 4 0100 ‘d’ 8 1000 - De almacenamiento físico, ocupará 1, 2, 3, 4, o 8 bytes, según la longitud de la lista de valores (si N es el número de valores, la formula es
(
bytes)N
+7)/8
Conociendo más a fondo los tipos de campos, y sabiendo sus posibilidades, ahora es fácil decidirse y justicarse.
Fuente:
http://otroblogmas.com/diferencias-entre-enum-y-set-en-mysql/
.
5 Essential Open Data Tools
CartoDB…. digno de ser imitado
Every data wrangler has their own list of favorites – the go to tools that they use when they need to work with data.
If you need to clean, transform, or mashup data or if you are working with a data set that will form the basis for an application, here is a list of tools that can make life easier for you.
- OpenRefine – I don’t think there is a better tool for cleaning messy data than OpenRefine. One of my favorite features is the ability to add new columns to a data set based on data in an external web service.
- jq – I see a lot of JSON in my job, and its exceptionally easy to use JSON data with a tool like this one. For example, here is a simple jq recipe for extracting a list of licensed pawn shops in Philadelphia to a CSV…
Ver la entrada original 219 palabras más
Agrupamiento de una consulta de Unión
Estaba trabajando en alguna consulta de SQL sobre MySQL levemente compleja. Cogía datos de 3 tablas y generaba, mediante una UNION una serie de datos. A estos necesitaba hacerles un GROUP BY.
¿Cómo agrupar el resultado de una consulta de Unión?
Ejemplo: (SELECT id_accv, round(x) as X, round(y) as Y from accv where X is not NULL) UNION (SELECT id_accv, round(direccion.x) as X, round(direccion.y) as Y from accv, direccion where accv.X is NULL and fid_codvia2 is NULL and accv.fid_codvia = direccion.fid_codvia and accv.portal = direccion.acctexto) UNION (SELECT id_accv, round(interseccion.x) as X, round(interseccion.y) as Y from accv, interseccion where accv.X is NULL and accv.fid_codvia2 is not NULL and accv.fid_codvia = interseccion.fid_codvia and accv.fid_codvia2 = interseccion.fid_codvia2)
Con la anterior consulta consigo un listado de ID con sus coordenadas X e Y correspondientes.
Ahora, ¿cómo consigo agrupar los puntos y saber cuántos ID hay en cada punto?
Es fácil, hago un ALIAS de esta consulta dentro de la cláusula FROM de la consulta de agrupamiento. El resultado sería:
SELECT count(id_accv), x, y from ( (SELECT id_accv, round(x) as X, round(y) as Y from accv where year(fechaaccidente)=2013 and X is not NULL) UNION (SELECT id_accv, round(direccion.x) as X, round(direccion.y) as Y from accv, direccion where year(fechaaccidente)=2013 and accv.X is NULL and accv.fid_codvia2 is NULL and accv.fid_codvia = direccion.fid_codvia and accv.portal = direccion.acctexto) UNION (SELECT id_accv, round(interseccion.x) as X, round(interseccion.y) as Y from accv, interseccion where year(fechaaccidente)=2013 and accv.X is NULL and accv.fid_codvia2 is not NULL and accv.fid_codvia = interseccion.fid_codvia and accv.fid_codvia2 = interseccion.fid_codvia2) ) as Tablauni group by X, Y
Apache: Forbidden – You don’t have permission to access SOLUCION
Apache: Forbidden – You don’t have permission to access SOLUCION.
Bueno, yo no utilicé «su» y luego el «chmod» sino que utilicé «sudo chmod»…
Esto me ha pasado al actualizar Ubuntu, algo habrá cambiado
Wireframing: gliffy.com
Voy a hacer un prototipo de un sitio web en el que estoy liado, así que empezaré a utilizar gliffy.com, ya comentaré cómo va.
Me he dado de alta y tienes 15 días de prueba. Puedes guardar tus diagramas y exportar a distintos formatos gráficos.