Intentare mostrarles todas las cosas que me pasan día a día en mis pruebas, en mi trabajo, etc.
jueves, 17 de febrero de 2011
Instalacion de Ubuntu
Instalar JDownloader en Ubuntu 10.10
fstab, monter discos en Ubuntu (Linux)
Para montar o editar los discos que se monten en Linux debemos editar el archivo /etc/fstab, y debemos de cargar algo de este estilo.
UUID=257deaa4-7dc4-47e2-863c-6f6866104def6 /mnt/carpeta ext2 user,exec,rw,auto,async,noatime 0 0
UUID=257deaa4-7dc4-47e2-863c-6f6866104def6 /mnt/carpeta ext3 user,exec,rw,auto,async,noatime 0 0
UUID=257deaa4-7dc4-47e2-863c-6f6866104def6 /mnt/carpeta reiserfs user,exec,rw,auto,async,noatime 0 0
el UUID depende de cada equipo y de cada disco así que esto lo tienen que sacar ustedes, para obtenerlo deben de hacer lo siguiente:
ls -l /dev/disk/by-uuid
con lo que debemos jugar además son con los parámetros, acá dejo una pequeña explicación de cada uno:
user sirve para que todos los usuarios tengan permiso para montar y desmontar la partición (contrario simplemente no añadir)
exec sirve para que podamos ejecutar binarios en esa partición (contrario noexec)
rw leer/escribir en la partición (contrario ro)
auto al iniciar la computadora la partición se monta automáticamente (contrario noauto)
noatime la información respecto a cuándo se ha accesado un fichero de la partición la última vez no se actualiza (contrario atime)
async sirve para que la escritura en la partición correspondiente se retrase un determinado tiempo en llevar a cabo, eso quiere decir que por ejemplo al copiar un fichero en esta partición este no se copia instantáneamente sino que se copiará cuando el sistema tenga suficiente recurso como para poder hacerlo. Por ejemplo si el sistema tiene una gran carga, o si se realiza la copia de varios ficheros al mismo tiempo no congestionar esta operación. (contrario es sync, Nota: sync se puede ejecutar como usuario normal para sincronizar las particiones)
Luego siguen dos 0 que el primero de ello simboliza un valor lógico (0 o 1) que indica si se debe intentar escribir un registro con los fallos que se han tenido al accesar la información de esa partición. El segundo 0 simboliza si se debe llevar a cabo comprobación periódica del sistema de ficheros.
bueno esto para arrancar da y sobra.
les copio como queda mi fstab, siendo que tengo 3 discos el primero con 4 partición (/,/home,/DATOS1, y swap), el segundo con 1 partición (/DATOS2), estos 2 son SATA, y el terceo con 1 partición (/DATOS3) y es un disco IDE.
# /etc/fstab: static file system information.
#
# Use 'blkid -o value -s UUID' to print the universally unique identifier
# for a device; this may be used with UUID= as a more robust way to name
# devices that works even if disks are added and removed. See fstab(5).
#
#
proc /proc proc nodev,noexec,nosuid 0 0
# / was on /dev/sda1 during installation
UUID=802801c8-36cb-4420-a22d-99858cb5b9f7 / ext4 errors=remount-ro 0 1
# /DATOS1 was on /dev/sda5 during installation
UUID=cc083e50-c72f-47dc-bff3-f8856f10ad6a /DATOS1 ext4 user,rw,auto,exec,async 0 1
# /DATOS2 was on /dev/sdb1 during installation
UUID=dc521035-8215-4cc6-a0c1-bc76d4525adc /DATOS2 ext4 user,noauto,exec,async 0 1
# /DATOS3 was on /dev/sdc1 during installation
UUID=481515a3-6cb1-46c0-baa5-5e71e6cc4fab /DATOS3 ext4 user,noauto,exec,async 0 1
# /home was on /dev/sda3 during installation
UUID=1fcf7d15-7fbc-4a52-9567-7b5397a0acfe /home ext4 defaults 0 1
# swap was on /dev/sda2 during installation
UUID=f83a7212-1dcb-4109-84d1-f4980c082b7d none swap sw 0 0
/dev/fd0 /media/floppy0 auto rw,user,noauto,exec,utf8 0 0
viernes, 11 de febrero de 2011
orphaned case en Genexus
En algunas situaciones en KB genexus 9, al compilar me ha saltado este error “orphaned case”, esto se da cuando tenemos algún Datastor, que no tienen definido bien el tipo de motor que se usa, esto pasa cuando creamos un modelo nuevo, y no definimos bien la parte de Datastor.
Lo que hay que hacer es elegir el motor que van a trabajar y con esto se soluciona, lo que van a tener que hacer es además generar los objetos que dan problemas.
jueves, 27 de enero de 2011
Tarjeta de red en VMWare Linux
Algunas veces me ha pasado, y a muchos de mis compañeros, que se copian una máquina virtual hecha en VMWare, con Linux (el caso particular es Ubuntu Server pero creo que aplica a cualquier distribución) de un equipo a otro y cuando inician la VMWare en el otro equipo, este no detecta la tarjeta de red.
La solución para esto la he encontrado con uno de los dos pasos que voy a mencionar abajo, pude que solo con el primero se solucione, pero como he dicho en algunos casos tengo que combinar los 2 pasos, y a veces no basta con hacer el 1 y luego el 2, sino que hay que hacer el 2 y luego el 1.
Primero que nada, lo mejor es la configuración de la red, de la vmware, ponerla en NAT (igual después si no le andan los pasos que pongo abajo, pueden cambar a Bridged)
Paso 1:
Por consola, vamos a /etc/network, y editamos el archivo interfaces.
Ahí si tenemos lo normal deberíamos de tener algo asi (depende si la eth0 está como dhcp que es mi caso o como estática que es un poco distinto, pero la idea va a ser la misma)
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet dhcp
La solución es agregar configuración como que tenemos más tarjetas de red, yo he tenido que llegar a definir hasta eth5, pero para ahorrarse el problema definan hasta la 9.
Entonces lo que tenemos que agregar es lo siguiente:
auto eth*
iface eth* inet dhcp
donde está el asterisco (*) cambiar por 1, 2, etc. (si van a agregar 3 tarjetas, debería quedar una eth0, eth1, eth2 y eth3, es decir van a tener que agregar 3 veces estos 2 renglones)
luego, guardan y cierran el archivo, y reinician ya sea el servidor o el servicio de red (/etc/init.d/networking restart)
Cuando reinician, ven las tarjetas que tienen configuradas (ifconfig) y esto les va a decir que tienen la 127.0.0.1 (es decir la de “lo” de la configuración), y tantas tarjetas de red como tengan configurada en la vmware, lo normal es 1 sola, pero esta red, puede ser la eth0 o la eth3, entonces si detecto la eth3, lo que hacen para dejar limpio el archivo borran la configuración de las otras tarjetas (eth0, eth1, eth2), nunca borren la de “lo” esa es intocable.
Si solo con esto no se soluciona, va el Paso2.
Paso2:
En la configuración de la VMWare, deben de agregar una tarjeta de red, luego reiniciar el equipo Linux, ver con ifconfig si quedaron las 2 tarjetas de red o solo 1, y luego (depende de que es lo que quieren yo estoy suponiendo que quieren 1 sola tarjeta de red), apagar el equipo, y a la VMWare sacarle la primer tarjeta de red. Estos son los pasos que a mí me funcionaron, ya sé que alguien puede decir porque no sacamos directamente de entrada la primer tarjeta, quedamos con 0 tarjetas, agregamos una tarjeta, ahora estamos con 1, y recién ah iniciamos el Linux, bueno de esta forma a mí no me funciono, yo tuve que iniciar el Linux con 2 tarjetas y luego quitar la primera.
Esto mismo que explique por consola, si el equipo es Suse, se puede hacer por Yast, pero eso lo dejo para que lo investiguen ustedes, ya que Yast es un poco fácil de entender (si sabemos lo que estamos haciendo y si leemos bien lo que él nos dice).
Bueno espero solucionar el tema.
martes, 25 de enero de 2011
Siguiendo con el tema de Store procedure de MySql, ahora lo que vamos a crear es un procedimiento para actualizar las estadísticas de MySql.
He leído un poco sobre las estadísticas sobre MySql, y el resumen seria que se debe de ejecutar cuando se borran o agregan muchos datos de una tabla (sobre todo si esta tiene muchos registros).
La teoría la tengo clara pero no les puedo confirmar si el actualizar las estadísticas realmente mejora la performance de la aplicación, es decir teóricamente lo debería de hacer, pero no he podido detectar fehacientemente que esto sea asi, las bases que yo trabajo de desarrollo son de muy pocos datos, y las bases de producción que lo he corrido los usuarios no me dijeron si anda mas rápido o no (tampoco se los pregunte para no obtener una respuesta negativa por el solo hecho de preguntarlo).
Bueno ahora con lo interesante, abajo pongo el procedimiento.
DELIMITER $$
DROP PROCEDURE IF EXISTS `estadisicas` $$
CREATE DEFINER=`root`@`%` PROCEDURE `estadisicas`(in base varchar(50))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tabla VARCHAR (50);
DECLARE cursor1 CURSOR FOR SELECT TABLE_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=base;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cursor1;
REPEAT
FETCH cursor1 INTO tabla;
IF NOT done THEN
SET @ddl = CONCAT('ANALYZE TABLE ', tabla, ';');
PREPARE STMT FROM @ddl;
EXECUTE STMT;
END IF;
UNTIL done END REPEAT;
CLOSE cursor1;
OPEN cursor1;
REPEAT
FETCH cursor1 INTO tabla;
IF NOT done THEN
SET @ddl = CONCAT('OPTIMIZE TABLE ', tabla, ';');
PREPARE STMT FROM @ddl;
EXECUTE STMT;
END IF;
UNTIL done END REPEAT;
CLOSE cursor1;
END $$
DELIMITER ;
* El parámetros que recibe es: nombre de la base. Para ejecutarlo simplemente hay que correr desde el browser lo siguiente:
CALL estadisticas('mibase');
Lo que estamos utilizando son 2 sentencias MySql, que son ANALYZE y OPTIMIZE .
viernes, 14 de enero de 2011
Cambiar masivamente los collate de MySql
Esto que voy a postear antes tengo que hacer 2 aclaraciones, primero es un plagio J, segundo gracias Diego Giusso (el creador). pero tenía que tenerlo accesible desde cualquier lugar y no solo desde la empresa.
La situación es la siguiente, tengo una base MySql que tienen algunos campos o tablas con un collate y otros con otro, entonces necesito de alguna forma unificarlos. Para esto utilizaremos un procedimiento almacenado, que se puede generar y ejecutar, directamente del browser de MySql.
Bueno acá abajo, copio lo que les decía que “robe”.
Solución masiva con procedimiento almacenado
* Podemos crear el siguiente procedimiento almacenado que nos permite automatizar la conversión de codificación de campos de una base:
DELIMITER ;;
DROP PROCEDURE IF EXISTS actCOLLATE;;
CREATE PROCEDURE actCOLLATE(in base varchar(50), in characterSet varchar(32), in collateNew varchar(32))
BEGIN
DECLARE done INT DEFAULT 0;
DECLARE tabla VARCHAR (50);
DECLARE campo VARCHAR (50);
DECLARE tipo TEXT (50);
DECLARE cursor1 CURSOR FOR SELECT TABLE_NAME, COLUMN_NAME, COLUMN_TYPE FROM information_schema.COLUMNS WHERE TABLE_SCHEMA=base AND NOT CHARACTER_SET_NAME IS NULL AND COLLATION_NAME<>collateNew;
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
OPEN cursor1;
REPEAT
FETCH cursor1 INTO tabla, campo, tipo;
IF NOT done THEN
SET @ddl = CONCAT('ALTER TABLE ', base,'.', tabla, ' MODIFY COLUMN ', campo, ' ', tipo, ' CHARACTER SET ', characterSet, ' COLLATE ', collateNew);
PREPARE STMT FROM @ddl;
EXECUTE STMT;
END IF;
UNTIL done END REPEAT;
CLOSE cursor1;
END;;
* Los parámetros que recibe son: nombre de la base, carácter set (por lo general ‘latin1’), collate (por lo general ‘latin1_general_cs’). Para ejecutarlo simplemente hay que correr desde el browser lo siguiente:
CALL actCOLLATE('mibase','latin1','latin1_general_cs');
* Una vez ejecutado, si se quiere eliminar el procedimiento lo pueden hacer ejecutando:
DROP PROCEDURE actCOLLATE;