El Blog de over…

mayo 21, 2008

Tips de VIM #1

Filed under: ./general — elblogdeover @ 12:43 am

1. Aumento o disminución de un numero.

Para aumentar un numero bajo o cerca del lado derecho del cursor, debemos pasarnos al modo normal de VIM y presionar:

CTRL+A

Para disminuir un numero bajo o cerca del lado derecho del cursor, debemos pasarnos al modo normal de VIM y presionar:

CTRL+X

2. Insertar un archivo

Para ingresar el contenido de un archivo (o la salida de un comando) dentro del archivo actual, se de usar el comando r[ead]:

Ejemplos:

:r archivo.txt         inserta el contenido de archivo.txt en el texto que se este escribiendo actualmente

:0r archivo.txt        inserta el contenido de archivo.txt en la primera linea del documento que se este editando.

:r !ls                     inserta el contenido de la salida del comando ls en el archivo actual.

:$r !ls                   inserta el contenido de la salida del comando ls en el archivo actual en la ultima linea.

enero 15, 2008

Screenshots de Magic On-Line – Cisco Version

Filed under: ./general — elblogdeover @ 5:01 am
La Presentacion

La batalla ha empezado
El Campo de batalla….
El campo de batalla

 

 

Transacciones en PostgreSQL

Filed under: ./base\ de\ datos — elblogdeover @ 4:42 am

Las transacciones son un concepto fundamental en todos los sistemas de base de datos, el punto esencial de una transaccion es que engloba multiples operaciones en un solo paso. Por ejemplo, considere la base de datos de un banco que contiene balances para varias cuentas de clientes, supongamos que queremos registrar el pago de $100 desde la cuenta de Alice hacia la cuenta de Bob, las sentencias SQL a ejecutar para esta operacion serian como la siguiente:

UPDATE cuentas SET balance = balance – 100 WHERE nombre = ‘Alice’;
UPDATE branches SET balance = balance – 100 WHERE nombre = (SELECT branch_name FROM cuentas WHERE nombre = ‘Alice’);
UPDATE cuentas SET balance = balance + 100 WHERE nombre = ‘Bob’;
UPDATE branches SET balance = balance + 100 WHERE nombre = (SELECT branch_name FROM cuentas WHERE nombre = ‘Bob’);

Como se puede observar hay varias actualizaciones involucradas para terminar la operacion, los operadores del bando deben estar seguros de que todas esas actualizaciones se ejecuten, o en caso de falla que ninguna se ejecute, ya que se podria dar el caso de que Bob reciba $100 sin que sean debitados de la cuenta de Alice, Agrupando las actualizaciones en una sola transaccion se puede garantizar que en caso de un fallo ninguna actualizacion se ejecute.

En PostgreSQL las transacciones se configuran simplemente encerrando en un bloque las operaciones que se desean incluir en la misma, el bloque debe comenzar y terminar con los comandos BEGIN y COMMIT, por ejemplo:

BEGIN;
UPDATE cuentas SET balance = balance – 100 WHERE nombre = ‘Alice’;

COMMIT;

Al momento que se le pasa a postgresql la clausula COMMIT es cuando se escribe en base de datos las actualizacione u operacion que se desea hacer en la misma, si en algun momento no queremos hacer COMMIT de alguna operacion (quizas se nota que la cuenta de Alice da un balance negativo) entonces se puede utilizar la clausula ROLLBACK y todas las actualizaciones dentro de la transaccion se cancelaran.

Si no se desea hacer un rollback completo de la transaccion, entonces se pueden definir marcadores (savepoints) hasta los cuales se desea que se regrese en la transaccion, ejemplo:

BEGIN;
UPDATE cuentas SET balance = balance – 100 WHERE nombre = ‘Alice’;
SAVEPOINT marcador1;
UPDATE cuentas SET balance = balance + 100 WHERE nombre = ‘Bob’;
— se desea descartar la actualizacion para Bob y en vez hacerla para Wally —
ROLLBACK TO marcador1;
UPDATE cuentas SET balance = balance + 100 WHERE nombre = ‘Wally’;
COMMIT;

En el ejemplo anterior se vio el uso de Marcadores y Rollbacks, en este caso lo que paso es que se realizo una actualizacion sobre la cuenta de Bob, pero a ultima instacia se decide que el dinero no se le va a abonar a Bob sino a Wally, entonces se realiza un rollback hasta el marcador llamado marcador1 y se pasa a hacer la actualizacion en la cuenta de Wally.

diciembre 25, 2007

Diferencia entre la clausula WHERE y HAVING en SQL

Filed under: ./base\ de\ datos — elblogdeover @ 6:42 pm

Es importante entender la forma en como las clausulas WHERE y HAVING actuan sobre las funciones de agregacion y agrupacion en SQL, la diferencia fundamental entre WHERE y HAVING es la siguente: WHERE selecciona las filas a mostrar antes de que sean agrupadas o procesadas por una funcion de agregacion, mientras HAVING selecciona las filas despues de que estas hayan sido procesadas o computadas, por lo tanto, la clausula WHERE no debe contener funciones de agrupacion o agregacion, mientras que la clausula HAVING siempre contiene funciones de agregacion, es permitido escribir clausulas HAVING que no contengan agrupacion, pero rara vez es util, la misma condicion podria ser usada mas eficientemente en la clausula WHERE

Ejemplos:

SELECT ciudad FROM tiempo WHERE baja_temp = max(baja_temp);

El ejemplo mostrado anteriormente es una mala formulacion de una clausula WHERE porque contiene una funcion de agregacion y esto no es permitido. La reformulacion de esta clausula seria la siguiente:

SELECT ciudad FROM tiempo WHERE baja_temp = (SELECT max(baja_temp) FROM tiempo);

La consulta de arriba nos trae como resultado la ciudad con la mayor temperatura baja registrada.

SELECT ciudad, max(baja_temp) FROM tiempo GROUP BY ciudad;

La consulta anterior da como resultado la maxima temperatura baja por ciudad.

SELECT ciudad, max(baja_temp) FROM tiempo GROUP BY ciudad HAVING max(baja_temp) < 40;

La consulta anterior da como resultado la maxima temperatura por ciudad siempre y cuando el valor de la maxima temperatura baja sea menor a 40

SELECT ciudad, max(baja_temp) FROM tiempo WHERE ciudad LIKE ‘S%’ GROUP BY ciudad HAVING max(baja_temp) < 40;

La consulta anterior da como resultado la maxima temperatura por ciudad siempre y cuando el valor de la maxima temperatura baja sea menor a 40 y el nombre de la ciudad empieze por la letra S.

Nota: La informacion de este post es tomada de la documentacion oficial de PostgreSQL.

noviembre 14, 2007

Reemplazando hash por arreglos para la creacion de objetos en perl.

Filed under: ./programacion — elblogdeover @ 3:28 am

Una alternativa obvia como reemplazo de variables hash son los arreglos. Los arreglos tienen casi todas las ventajas de los hashes, al igual que un hash pueden almacenar multiple valores de diferente tipos, estos tambien pueden ser jerarquicos y expansdirse si es necesario, un arreglo tienen mayor performance y ventajas ya que estos utilizan menos memoria y el acceso a sus elementos es mas rapido.

El unico inconveniente de usar arreglos en vez de hash es que no son autodescritivos y se pierde la legibilidad del atributo de un objeto en las etiquetas proveidas por las llaves de los hash, por ejemplo, es mas complejo ver el error en:

sub Proyectil::get_velocity

{

my ($self) = @_;

return $self->[2]/$self->[11];

}

El equivalente en hash es:

sub Proyectil::get_velocity

{

my ($self) = @_ ;

return $self->{_tiempo_vuelo}/$self->{_distancia_vuelo};

}

Usando nombres en vez de numeros es muy facil verificar que estamos calculando (metros/segundos) en vez de (segundos/metros). Claro es relativamente sencillo evitar este tipo de problemas de significado de indices numericos predefiniendo constantes apropiadas, el siguiente ejemplo muestra una forma legible de escribir un paquete haciendo uso de arreglos.

package Proyectil;

use strict;

use constant TIEMPO_VUELO => 2;

use constant DISTANCIA_VUELO => 11;

sub get_velocity

{

my ($self) = @_;

return $self->[DISTANCIA_VUELO]/$self->[TIEMPO_VUELO];

}

Haciendo uso de constantes se simplifica la compresion del codigo haciendolo mas mantenible y ordenado.

septiembre 12, 2007

Tips MySQL

Filed under: ./base\ de\ datos — elblogdeover @ 5:46 am

1. Crear una cuenta de usuario en la base de datos
mysql> GRANT ALL ON basededatos.* TO ‘user’@’hosts’ IDENTIFIED BY ‘pass’;

2. Cancelar parcialmente la creacion de una consulta

mysql> SELECT *
-> FROM basededatos
-> WHERE\c

mysql>

“\c” mata la creacion del procedimiento SQL.

3. Con la sentencia SOURCE, se puede cargar un archivo para ingresar en una consulta desde la consola de mysql.

septiembre 10, 2007

Evitar escaneo de puertos con iptables

Filed under: ./seguridad\ hacking — elblogdeover @ 12:45 am

Para evitar escaneos sencillos de puertos debes agregar las siguientes reglas de iptables.

# Unclean
$IPT -A INPUT -m unclean -j DROP
# All of the bits are cleared
$IPT -A INPUT -p tcp –tcp-flags ALL NONE -j DROP
# SYN and FIN are both set
$IPT -A INPUT -p tcp –tcp-flags SYN,FIN SYN,FIN -j DROP
# SYN and RST are both set
$IPT -A INPUT -p tcp –tcp-flags SYN,RST SYN,RST -j DROP
# FIN and RST are both set
$IPT -A INPUT -p tcp –tcp-flags FIN,RST FIN,RST -j DROP
# FIN is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp –tcp-flags ACK,FIN FIN -j DROP
# PSH is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp –tcp-flags ACK,PSH PSH -j DROP
# URG is the only bit set, without the expected accompanying ACK
$IPT -A INPUT -p tcp –tcp-flags ACK,URG URG -j DROP

septiembre 9, 2007

Video de Sick Decade en Privilege

Filed under: ./general — elblogdeover @ 8:36 pm

Comandos utiles de man

Filed under: ./linux — elblogdeover @ 8:26 pm

Hacer un boockmark con man

Cuando estas leyendo la documentacion de un comando con man, puedes hacer un boockmark de una seccion que te interese con la letra m seguido de cualquier letra que desees, con esto se crea un marcador de manera que puedes seguir leyendo el manual y cuando lo requieras volver a la parte que te interesaba simplemente presionando la comilla simple seguido de la letra que usaste pare crear el marcador.

Probar un comando.

Si estas leyendo el manual de un comando determinado y quieres probar una de las opciones que dice el manual, pero a su vez no quieres salirte del manual para seguir leyendo, puedes hacer la prueba simplemente presionando ! esto te llevara a una consola donde puedes probar el comando con la opcion que deseas, luego de ejecutado el comando regresaras al manual exactamente en la parte donde quedaste leyendo.

septiembre 3, 2007

Evitar el borrado accidental de archivos

Filed under: ./linux — elblogdeover @ 1:45 am

Una posible solucion a esto puede ser crear un bash script que en vez de borrar el archivo lo mueva hacia un directorio, el script podria llamarse delete. Y acostumbrar a tus usuarios a usar delete en vez de rm, el script puede ser como el siguiente:

#!/bin/bash

/bin/mv -i ${*} ~/.Trash;

Despues de escribir el script debes hacerlo ejecutable (chmod +x delete) y colocarlo en un directorio que se encuentre en el PATH del sistema, podria ser /usr/bin para que cualquier usuario pueda ejecutarlo sin problemas.

Debes asegurarte de vaciar con regularidad la papelera de reciclaje, otra opcion es borrar el directorio ~/.Trash cada vez que el usuario salga de la session, eso se puede hacer colocando rm -rf ~/.Trash/* en el archivo .bash_logout

Older Posts »

Blog de WordPress.com.