viernes, 4 de marzo de 2011

Migracion

El blog lo migre a www.batubn.com

Saludos

martes, 21 de diciembre de 2010

La utilidad de atención al cliente vía twitter

Desde un tiempo a la fecha distintas empresas, corporaciones, o como deseen llamarse, están escaneando sus menciones en distintas redes sociales entre otras twitter, algunas no entran en el juego, y otras están corriendo el riesgo y destinan recursos a controlar los reclamos de clientes surgidos en estas.


He tenido interacciones principalmente con @movistarchile y @entel_ayuda.


@entel_ayuda mostró gran disposición, aunque fue un poco lento, y debí insistir en algunos casos, aunque finalmente generó resultados.


Por otro lado, tenemos a @movistarchile, quienes poseen mucha disposición a resolver los problemas, aunque lamentablemente, al menos en mi caso, las soluciones no se dan, se contactan con el afectado, toman los requerimientos y finalmente los traspasan a las áreas de siempre. Nuevamente caemos en el mismo “circulo vicioso” de siempre, donde ofrecen soluciones, y lamentablemente en las siguientes boletas te das cuenta que la solución no fue tal, y vuelves a contactarte y nuevamente caemos en lo mismo.


Así pueden pasar meses sin una solución final y lo único que te dicen: “La empresa es grande” y “Debemos investigar el caso”.


Antes lo cual queda la duda, ¿Este es el momento en que las empresas ataquen dentro de las redes sociales, siendo una extensión más de la actual burocracia y los problemas que estas muestran o deberían primero mejorar los procesos, y darle un mayor poder de resolución a áreas que apuntan a tecnologías de rápida interacción?

domingo, 27 de junio de 2010

Compartir disco usb con samba.

Luego de extrañarme por que no podia compartir un disco usb mediante samba debi investigar, preguntar y seguir investigando.

Finalmente encontre una pagina que lo explicaba de mandera bien simple http://www.goltratec.com/wp/2008/09/16/instalar-disco-usb-en-ubuntu/ .

En las siguientes lineas mostrare las pocas acciones que debi realizar poder compartir el disco USB.

Nota: Desconozco si influira e el resultado final, pero previamente habia instalado usbmount por pruebas anteriores por el mismo tema.





Lo primero es saber el UUID de la unidad para lo cual ejecutamos

# sudo blkid

En mi caso el resultado fue:
/dev/sda1: UUID="611122b5-ad3b-4dbc-923f-c71e46b4fd42" TYPE="ext4"
/dev/sda5: UUID="d52eb565-821e-46ca-b804-6428e049166b" TYPE="swap"
/dev/sdb: UUID="C2902DC3902DBEB3" TYPE="ntfs"

en mi caso el UUID de la unidad es "C2902DC3902DBEB3" de tipo "ntfs"

Ahora creamos el directorio donde montaremos el dispositivo

#sudo /media/directorio_a_montar

ahora editamos el archivo /etc/fstab y agregamos la linea que se describe mas abajo
#sudo vi/etc/fstab
UUID=C2902DC3902DBEB3 /media/directorio_a_montar/ ntfs

ahora ejecutamos
#sudo mount -a

Podemos revisar si el disco esta bien montado ejecutando el clasico "ls"

Finalmente debemos configurar el samba (este articulo muestra su configuracion) agregando al archivo smb.conf las lineas puestas mas abajo.

#sudo vi /etc/samba/smb.conf
[disco_usb]
path = /media/directorio_a_montar/
valid users = sharer
read only = No
create mask = 0777
directory mask = 0777
available = yes
browsable = yes
writable = yes

y finalmente reiniciamos samba
#sudo /etc/init.d/smbd restart

viernes, 4 de junio de 2010

Administracion de Oracle:::Matar la sesion

A continuación de detalla la secuencia de instrucciones para matar una sesion oracle

nos conectamos como system

#sqlplus system/clave


para saber que con que usuario estamos conectados usamos

SQL> show user;


generamos otra conexion la cual intentaremos matar (desde otro terminal)

#sqlplus alumno/123456


en la consola de system
desc nos muestra la estructura de la tabla

SQL>desc v$session;


buscamos el proceso donde esta la sesion del alumno
muestra los procesos que ahi en las sessiones
el sid es el identificador del proceso
si el proceso es dividido por el oracle en varias partes se repite el sid y con distintos serial
process indica el proceso en el sistema operativo

SQL>select sid, serial#, username, process from v$session where username='ALUMNO'


entrega como resultado

       SID    SERIAL# USERNAME                       PROCESS
---------- ---------- ------------------------------ ------------------------
138 111 ALUMNO 4973



matamos la session
SQL>alter system kill session '138,111';


al no matar el proceso (SO), el pmon se encarga de recuperarlo en aproximada mente en un 1.5 minutos buscandolo en el historal de oracle.

para matar la session de forma definitiva

#kill -9 4973

o

SQL>!kill -9 4973

Administracion de Oracle:::Primeras configuraciones



Crearemos un usuario
no usamos el usuario sys para crear usuarios, ya que este posee muchos privilegios, trabajaremos con el usuario system
como no sabemos la clavem la cambiaremos
SQL> alter user system identified by nueva_clave;

conectamos el usuario system
SQL> conn system/clave

creamos un usuario
SQL> create user alumno identified by clave;

otorgamos provilegios
grant es un conujunto de uno mas privilegios
privilegio es el acceso sobre uno o mas objetos
resource (permisos para crear objetos), connect (permiso para conectarse)
SQL> grant resource, connect to alumno;

asignamos el tablespace user por defecto ya que estaba originalmente el system
SQL> alter user alumno default tablespace users;

conectamos como usuario alumno
SQL> conn alumno/clave;

Administracion de Oracle:::Subir la base de datos

Este es un resumen de las clases que tengo en el DUOC de Administracion de Base de datos

En esta primera parte se mostrara como se sube la base de datos.

Estos ejemplos fueron realizados en un linux red hat.


Lo primero que se debe hacer es iniciar sesion como usuario oracle.

luego se debe iniciar el oracle.
#sqlplus /nolog

Conectamos como sysdba para lo cual no se requiere clave ya que se esta
SQL> conn sys as sysdba
Enter password:
Connected to an idle instance.

Subimos la base de datos.
antes de montarla revisa que el nivel de cambio coincide entre los controlfile, datafile y redolog
luego limpia el redolog y finalmente sube la db
SQL> startup

Para confirmar que esta arriba revisamos los procesos

los procesos de color anaranjado son los minimos
#ps -fea | grep ora_
oracle 4564 1 0 20:44 ? 00:00:00 ora_pmon_DUOC
oracle 4566 1 0 20:44 ? 00:00:00 ora_vktm_DUOC
oracle 4570 1 0 20:44 ? 00:00:00 ora_gen0_DUOC
oracle 4572 1 0 20:44 ? 00:00:00 ora_diag_DUOC
oracle 4574 1 0 20:44 ? 00:00:00 ora_dbrm_DUOC
oracle 4576 1 0 20:44 ? 00:00:00 ora_psp0_DUOC
oracle 4578 1 0 20:44 ? 00:00:00 ora_dia0_DUOC
oracle 4580 1 0 20:44 ? 00:00:00 ora_mman_DUOC
oracle 4582 1 0 20:44 ? 00:00:00 ora_dbw0_DUOC
oracle 4584 1 0 20:44 ? 00:00:00 ora_lgwr_DUOC
oracle 4586 1 0 20:44 ? 00:00:00 ora_ckpt_DUOC
oracle 4588 1 0 20:44 ? 00:00:00 ora_smon_DUOC
oracle 4590 1 0 20:44 ? 00:00:00 ora_reco_DUOC
oracle 4592 1 0 20:44 ? 00:00:00 ora_mmon_DUOC
oracle 4594 1 0 20:44 ? 00:00:00 ora_mmnl_DUOC
oracle 4596 1 0 20:44 ? 00:00:00 ora_d000_DUOC
oracle 4598 1 0 20:44 ? 00:00:00 ora_s000_DUOC
oracle 4682 1 0 20:44 ? 00:00:00 ora_p000_DUOC
oracle 4684 1 0 20:44 ? 00:00:00 ora_p001_DUOC
oracle 4686 1 0 20:44 ? 00:00:00 ora_qmnc_DUOC
oracle 4701 1 0 20:44 ? 00:00:00 ora_cjq0_DUOC
oracle 4719 1 0 20:44 ? 00:00:00 ora_q000_DUOC
oracle 4721 1 0 20:44 ? 00:00:00 ora_q001_DUOC
oracle 4773 1 0 20:46 ? 00:00:00 ora_j000_DUOC
oracle 4775 1 0 20:46 ? 00:00:00 ora_j001_DUOC

preparamos el listener
#vi $ORACLE_HOME/network/admin/listener.ora
# listener.ora Network Configuration File: /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
# Generated by Oracle configuration tools.

#El listener se puede llamar como uno quiera para identificarlo para comunicarlo con el ORACLE
#abre el puerto de comunicacion
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))
)
)
)

#Ejecuta este programa EXTPROC instanciado en la linea superior para
#LISTENER puede ser cuaquier nombre, aunque debe llamarse igual en ambos bloques
#Ej CUALQUIERVALOR... SID_LIST_CUALQUIERVALOR
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = DUOC)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = DUOC)
)
)
# /u01/app/oracle/product/11.2.0/db_1 corresponde al $ORACLE_HOME

subimos el listener
desde el 11G el listener no parte por defecto
desde el 10 esta hecho para trabajar en grilla(*) que es distinto al clustes
el listener lo deja trabajando en forma normal no como grilla
#lsnrctl start

para ver si se inicio correctamente
#netstat -putan | grep 1521

aqui dice que lo que llegue a cualquier interfaz de red :::* pasa al
...
tcp 0 0 :::1521 :::* LISTEN 4210/tnslsnr
...

(*)Grilla: trabajan varios oracles trabajando como uno solo.

miércoles, 7 de abril de 2010

Agregar Validaciones Personalizadas a JQuery Validator

Me ha sorprendido gratamente el potencial de JQuery y las distintas librerías que le puedes ir agregando, una de estas es Validation, que permite hacer validaciones dentro de los formularios.
Este plugin incluye una serie de validaciones por defecto (email, campo obligatorio, numérico, etc…) y además se pueden agregar nuevas validaciones.



En el ejemplo se puede ver el uso de nuevas validaciones junto a la personalización del mensaje de estas.
Para el ejemplo se usaron las siguientes librerías


formulario.html

<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery/jquery.js"></script>
<script type="text/javascript"
src="js/jquery/lib/validate/jquery.validate.js"></script>

<script type="text/javascript">

$(document).ready(
function() {

/**
* creamos una validacion llamada formato que solo permita un cierto rango de caracteres
* en el campo
*/
jQuery.validator.addMethod("formato", function(value, element) {
return this.optional(element) || /^([a-z]|\d|[ ]|\,)+$/i.test(value);
}, "Error formato");

/**
* Creamos una validacio que no permita duplicidad de valores en ciertos campos
*/
jQuery.validator.addMethod("notEqualTo", function(value, element, param) {
return this.optional(element) || value != $(param).val();
}, "No puede repetir el valor en los campos);

/**
* Validacion con una complejidad mayor
*/
jQuery.validator.addMethod("validacionCompleja",function(value, element, param) {
var result = true;
var comparador = $(param).val();
if (value == "" || param == "") {
result = true;
}

if (value.length >= 3 && comparador >= 3) {
result = true;
} else {
result = false;
}
return result;

}, "validacionCompleja");

$("#fvalida").validate(
{
rules : {
campo1 : "required",
campo2 : {
minlength : 1,
notEqualTo : "#campo1",
validacionCompleja : "#campo1",
formato : true,
required : true
}
},
messages : {
campo1 : {
required : "campo requerido"
},
campo2 : {
notEqualTo : "no debe ser igual al campo 1",
minlength : "largo minimo 1",
formato : "caracteres no permitidos",
validacionCompleja : "campo 1 y campo 2 deben tener al menos 3 caracteres"
}
}
});
});

</script>

</head>

<body>

<form action="controlador" method="post" id="fvalida" class="admform">

<fieldset><legend>Prueba Validator</legend>

<ol>

<li><label for="campo1">campo1</label><input type="text"

id="campo1" name="campo1" /></li>

<li><label for="campo1">campo2</label><input type="text"

id="campo2" name="campo2" /></li>

<li><input type="submit" name="Enviar" /></li>
</ol>
</fieldset>
</form>
</body>
</html>