Thursday, May 26, 2011

Pensar en los usuarios finales

Recomiendo totalmente que los programadores al desarrollar alguna herramienta cuiden todos los frentes posibles.

Un punto muy importante es entregar las herramientas con un instalador para que de cero, puedan instalar lo que les estamos entregando.

Antes de continuar me gustaría que analizaran la siguiente caricatura:


La caricatura anterior me causa diversión, pero también me deja pensando el cómo hacemos todas las cosas que nos pide el cliente.

No se puede considerar un programa terminado sin tener su instalador y si no es necesario el instalador por lo menos un ejecutable Stand-Alone o que al descomprimir en alguna carpeta se pueda ejecutar desde ahí la aplicación sin ningún error o problema.

En el caso de las Herramientas de Maxicomercio es importante que se genere con su instalador. Está muy bien que me entreguen los avances en código fuente, pero si ya consideran que es funcional incluir el instalador para poderlo poner en las máquinas de los usuarios sin que nos de problemas.

Esto es, probarlo antes. Ejecuten en instalador en alguna máquina y vean que se instale y funcione correctamente sin requerir ninguna librería extra y que si la requiere, que la descargue automáticamente.

Otro punto importante es integrar al programa una manera automatizada para buscar y descargar actualizaciones. Estoy casi seguro que hay formas ya pre-programadas para hacerlo o incluso componentes que den esa funcionalidad sin tener que empezar desde cero. Esto nos evita tener que ir a cada equipo del cliente para actualizarle su versión. De ser posible recomiendo que dediquen tiempo a investigar este punto.

Resumiendo:

  1. Hacer instalador (SIEMPRE, cuidando que se integren todas las librerías y componentes que usemos en el desarrollo.)
  2. Probar nuestro instalador en algún equipo. Estar seguros de que funcionará con los sistemas operativos que utiliza el cliente.
  3. Integrar Actualizaciones Automáticas utilizando algún componente desarrollado previamente o integrado al sistema de desarrollo que estamos usando.

Friday, May 6, 2011

Guía Rápida de MySQL

Artículo Original: MySQL Cheat Sheet

Seleccionar una base de datos:
mysql> USE basededatos;

Mostrar las bases de datos existentes:
mysql> SHOW DATABASES;

Mostrar las tablas de la base de datos seleccionada:
mysql> SHOW TABLES;

Describir el formato de una tabla:
mysql> DESCRIBE tabla;

Crear una base de datos:
mysql> CREATE DATABASE nombre_basededatos;

Crear una tabla:
mysql> CREATE TABLE nombre_tabla (nombre_campo1 TIPO(TAMAÑO), nombre_campo2 TIPO(TAMAÑO), ...);


Por ejemplo:
mysql> CREATE TABLE mascota (nombre VARCHAR(20), sexo CHAR(1), nacimiento DATE);


Cargar un archivo separado por tabs a la base de datos:
mysql> LOAD DATA LOCAL INFILE "archivo.txt" INTO TABLE nombre_tabla;
(Usar \n para representar un valor NULL)

Agregar una fila por vez
mysql> INSERT INTO nombre_tabla VALUES ('Nombre', 'Dueño', '2006-05-23');
(Usar NULL para los valores NULL)

Obtener información:
mysql> SELECT columna1, columna2, ..., columna_n FROM tablas WHERE condiciones;

Toda la tabla: SELECT * FROM tabla;
Algunos valores: SELECT * FROM tabla WHERE nombre_columna = "valor";
Varios filtros: SELECT * FROM tabla WHERE columna1 = "valor1" AND columna2 = "valor2";

Modificar un conjunto de registros (que concuerden con un filtro)
mysql> UPDATE tabla SET nombre_columna = "nuevo_valor" WHERE nombre_columna = "valor_de_filtro";

Seleccionando sólo una columna en especial:
mysql> SELECT nombre_columna FROM tabla;

Obteniendo datos únicos/distintos/sin repetir:
mysql> SELECT DISTINCT nombre_columna FROM tabla;

Ordenar los datos
mysql> SELECT columna1, columna2, .... FROM tabla ORDER BY columna_n;

Orden inverso:
SELECT columna1, columna2, .... FROM tabla ORDER BY columna_n DESC;

Cálculo de fechas
mysql> SELECT CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(columna_de_fecha)) AS diferencia_de_fechas [FROM tabla];

MONTH(una_fecha) extrae el mes de la fecha especificada, DAYOFMONTH(fecha) el día.

Búsqueda de patrones (expresiones):
mysql> SELECT * FROM tabla WHERE columna LIKE 'algo%';

% es el caracter de comodín que significa cualquier cantidad de caracteres


mysql> SELECT * FROM tabla WHERE columna LIKE '_____';


_ es el caracter de comodín que significa cualquier caracter (sólo 1).

Búsqueda avanzada de expresiones regulares:
mysql> SELECT * FROM tabla WHERE columna RLIKE '^b;

. para un caracter
[...] para un conjunto de caracteres
* para 0 o más caracteres
^ para el comienzo
{n} para n repeticiones
$ para el final

Es válido tanto para RLIKE como REGEXP. Sin embargo, para forzar la diferenciación de mayúsculas de minúsculas se recomendaría usar “REGEXP BINARY”.


Contando filas:
mysql> SELECT COUNT(*) FROM tabla;

Agrupar las cuentas
mysql> SELECT columna, COUNT(*) FROM tabla GROUP BY columna;

GROUP BY agrupa todos los registros de cada valor distinto de la columna especificada

Filtrando varias columnas:
mysql> SELECT tabla1.columna1, columna2 FROM tabla1, tabla2 WHERE tabla1.columna1 = tabla2.columna_n;

Se puede comparar una tabla consigo misma utilizando ‘AS’ para darle un nuevo nombre a una columna.

Seleccionar la base de datos actual:
mysql> SELECT DATABASE();

Calcular el máximo
mysql> SELECT MAX(nombre_columna) AS nombre_nueva_columnal FROM tabla;

Columna auto-incrementada
mysql> CREATE TABLE tabla (numero INT NOT NULL AUTO_INCREMENT, nombre CHAR(10) NOT NULL);

mysql> INSERT INTO tabla (nombre) VALUES ("tomas"),("pedro"),("juan");


Agregando una columna a una tabla ya existente:
mysql> ALTER TABLE tabla ADD COLUMN [sintaxis para una nueva columna] AFTER nombre_columna;

Borrando una columna:
mysql> ALTER TABLE tabla DROP COLUMN nombre_columna;

Haciendo una copia de seguridad con mysqldump:
# mysqldump --opt -u usario -p base_de_datos > respaldo.sql

Si se quiere hacer el respaldo de muchas bases de datos, hay que utilizar:
# mysqldump --opt --all-databases > respaldo_todo.sql