March 8 2014

Requerir un email único en el snippet Register de Modx

Saturday, March 8, 2014 17:46
Posted in category Otros, Programación

Recientemente he estado trasteando con el snippetRegister” del paquete “Login” de Modx, siguiendo el manual que podemos encontrar en su página web oficial.

En principio todo parecía funcionar a la primera hasta que he intentado registrar a un usuario con el mismo email y el snippet me ha dejado registrarme sin problemas. He estado intentando buscar la solución a este problema en el paquete Register hasta que he me he dado cuenta de que este comportamiento se puede gestionar en las opciones de configuración de Modx. Para solucionar este comportamiento por defecto tendremos que acceder a :

System->”System Settings” y buscar la clave que denominada ‘allow_multiple_emails‘  y establecerla a FALSE.

 

March 1 2014

Conseguir que funcionen las Friendly URLs de Modx

Saturday, March 1, 2014 19:11
Posted in category Internet, Otros

Habilitar las Friendly URLs de modx parece bastante sencillo según las instrucciones que podemos leer en su documentación oficial. Si tras seguir los pasos el sistema no nos funciona puede que os pase como me pasó a mi, y es tener la instalación de modx en otro directorio que no es por defecto el directorio raíz.

Mi instalación estaba hecha en el directorio “htdoc/modx” por lo que tuve que cambiar el fichero “.htaccess” de mi instalación:

RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]

RewriteRule ^(.*)$ /modx/index.php?q=$1 [L,QSA]

February 22 2014

Instalando modx

Saturday, February 22, 2014 17:54
Posted in category Programación

Este artículo pretende ayudaros con la instalación de Modx. Para quien no lo sepa Modx es  un sistema de administración de contenidos (CMF) y framework de código abierto, desarrollado en PHP. Su API y modelo de eventos le otorga una amplia capacidad de adaptación y personalización, haciéndolo muy flexible en la creación de sitios Web.

Lo primero de todo, tenemos que descargarnos Modx desde su página webUna vez descargado tendremos que descomprimirlo en la carpeta htdocs de nuestro servidor Apache.

Yo por ejemplo lo he dejado en /var/www/htdocs/modx

Antes de proceder a la instalación de Modx, tedremos que cambiar el nombre al fichero “ht.access” por “.htaccess”.

El siguiente paso es abrir un navegador y escribir la URL donde hayamos dejado los archivos que vienen con la descarga de MODX

Yo he tenido que escribir la siguiente URL : “http://localhost/modx/setup/index.php”. Si probáis a poner solamente “http://localhost/modx” es posible que recibais el siguiente mensaje de error:

503 Error 
Could not load MODX config file.

Ahora simplemente tendremos que seguir el wizard de instalación y ya tendremos nuestra instancia de Modx instalada.

Si en posteriores ocasiones queremos acceder al panel de control, la URL de login es “http://localhost/modx/manager/index.php”

 

January 28 2014

DTS_E_CANNOTACQUIRECONNECTION

Tuesday, January 28, 2014 11:21
Posted in category Oracle, Otros

En alguna ocasión he necesitado usar los “Integration Services” para pasar tablas desde una base de datos de Oracle a otra de SQL Server y me he encontrado con el siguiente mensaje de error:

[Origen de OLE DB 1 [73]] Error: Código de error SSIS DTS_E_CANNOTACQUIRECONNECTIONFROMCONNECTIONMANAGER. Error de la llamada del método AcquireConnection al administrador de conexiones “Conex.user”. Código de error: 0xC0209303. Puede que haya otros mensajes de error expuestos anteriores a éste con más información sobre el motivo del error del método AcquireConnection.

La solución es sencilla:

  1.  “Click con el botón derecho en tu proyecto y haz click sobre ‘Propiedades'”
  2.  Selecciona “Debugging”
  3.  Cambiar el valor de  “Run64bitRuntime”  a falso.

 

 

October 1 2013

Obtener la IP del cliente que llama a nuestro servicio web usando el enfoque POJO de Axis2

Tuesday, October 1, 2013 15:07
Posted in category Otros

Si utilizamos el enfoque POJO (http://axis.apache.org/axis2/java/core/docs/pojoguide.html) para crear servicios WEB con Axis2, no tendremos por defecto acceso a datos como conocer la IP del cliente que nos está invocando.
Existe una forma de acceder a esta información y es haciendo que nuestra clase implemente “Lifecycle” con lo que ya podremos acceder a la clase MessageContext para obtener datos del cliente que ataca a nuestro servicio web.

   public class WSNPojo   implements Lifecycle

Forma de obtener la IP:

   public String  getIP() { 
        MessageContext messageContext = MessageContext.getCurrentMessageContext();      
        String ipAddress = "";
        if(messageContext != null){
           ipAddress = (String)messageContext.getProperty("REMOTE_ADDR");
        }
        System.out.println("ip" +ipAddress);
        return ipAddress;
    }

Métodos que debe implementar nuestra nueva clase:

    @Override
    public void init(ServiceContext sc) throws AxisFault {
        System.out.println("Hello I am inside the service init method"); 
    }
 
    @Override
    public void destroy(ServiceContext sc) {
        System.out.println("Hello I am inside the service destroy method"); 
    }
September 29 2013

Lector de ficheros binarios generados por el CMS de Avaya en Java

Sunday, September 29, 2013 11:30
Posted in category Programación

Recientemente mi empresa ha comprado el CMS de Avaya para que los supervisores del Call Center puedan monitorizar el estado de sus agentes. Aunque los informes que trae por defecto son bastante potentes, si queremos poder rizar el rizo con ellos tendremos que leer y tratar la información que genera el CMS de Avaya en unos ficheros binarios, los denominados ficheros ECHI (External Call History Interface).

Existe un software propietario de Avaya que permite gestionar esos ficheros e insertar la información en una base de datos para su tratamiento posterior, pero el coste de su licencia es muy elevado. Hay una alternativa de software libre realizada en Ruby (http://echi-converter.rubyforge.org/) que se puede adaptar a nuestras necesidades.

No obstante, he preparado un sencillo código en Java que interpreta un fichero binario del CMS de Avaya e inserta la información en una tabla de la base de datos para quien le pueda ser de utilidad. El código se basa principalmente en 3 clases: La clase “CallRecord” que contiene todos los atributos que nos podemos encontrar en el fichero ( version, talktime, callID, etc); la clase “CMSReader” que se encarga de ir leyendo cada uno de los ficheros generados por el CMS en el directorio FTP configurado a tal efecto y que va generando objetos CallRecord que serán insertados en la base de datos. La última clase es la que sirve de conexión con la base de datos “DataBase“.

public CallRecord readCallRecord(RandomAccessFile in, boolean firstRecord){
        try{
                CallRecord cr = new CallRecord();
                if (firstRecord){
                    cr.setVersion(readIntBytes(in, 4));
                    log("Version:" + cr.getVersion());
                    cr.setSequenceNumber(readIntBytes(in, 4));
                    log("SequenceNumber:" + cr.getSequenceNumber());
                }
                cr.setCallID        (readIntBytes(in, 4));
                cr.setACWTime       (readIntBytes(in, 4));
                cr.setAnsholdTime   (readIntBytes(in, 4));
                cr.setConsultTime   (readIntBytes(in, 4));
                cr.setDisptime      (readIntBytes(in, 4));
                cr.setDuration      (readIntBytes(in, 4));
                cr.setSegstart      (readIntBytes(in, 4));
                cr.setSegstartUTC   (readIntBytes(in, 4));
                cr.setSegstop       (readIntBytes(in, 4));
                cr.setSegstopUTC    (readIntBytes(in, 4));
                cr.setTalktime      (readIntBytes(in, 4));
                cr.setNetintime     (readIntBytes(in, 4));
                cr.setOrigholdtime  (readIntBytes(in, 4));
                cr.setQueuetime     (readIntBytes(in, 4));
                cr.setRingtime      (readIntBytes(in, 4));
...

El código fuente lo podéis descargar desde AQUÍ.

 

 

 

June 2 2013

Gmail permite buscar mensajes con adjuntos de un determinado tamaño

Sunday, June 2, 2013 14:46
Posted in category Otros

No sé cuanto tiempo llevará permitiendo Gmail filtrar los mensajes que contengan adjuntos que superan un determinado tamaño, pero al menos por la interfaz de usuario esta opción sigue sin aparecer.

Si lo que pretendes es buscar mensajes con adjuntos pesados para liberar tu espacio de almacenamiento gratuito que ofrece Gmail, podemos buscar de la siguiente manera en la barra de búsqueda:

size:20m

De esta manera Gmail buscará entre todos tus mensajes, aquellos que ocupen más de 20 megas.

December 31 2012

Feliz Año 2011 + 2 a todos

Monday, December 31, 2012 9:13
Posted in category Otros

Os deseo lo mejor

Felices Fiestas!!!

November 1 2012

Matar sesiones de Oracle que bloquean la compilación de un paquete

Thursday, November 1, 2012 21:15
SELECT 'ALTER SYSTEM KILL SESSION '||''''||sid||','||serial||''';' FROM (
SELECT sid, serial# AS SERIAL
  FROM v$session
 WHERE sid IN
       (SELECT SID FROM v$access WHERE object = 'XX_PACKAGE_NAME_XX')
)
August 20 2012

Obtener un Objeto File a partir de un Objeto Message de la Java Mail Api

Monday, August 20, 2012 15:39
Posted in category Programación
try {
            MimeMessage mm =  (MimeMessage)message;
            StringBuffer rawMessage = new StringBuffer();
            //Obtenemos las cabeceras del Mensaje
            Enumeration<String> e = mm.getAllHeaderLines();
            while(e.hasMoreElements()){
                    rawMessage.append(e.nextElement()+"\r\n");
            }
            rawMessage.append("\r\n");   
            //Generamos el fichero que vamos a anexar al mail
            File f=new File("AuxFile.eml");
            InputStream inputStream =  mm.getRawInputStream();
            OutputStream out=new FileOutputStream(f);
            byte buf[]=new byte[1024];
            int len;
            //Escribimos al fichero las cabeceras
            out.write(rawMessage.toString().getBytes());   
            //Escribimos el cuerpo del mensaje
            while((len=inputStream.read(buf))>0)    out.write(buf,0,len);
            //Cerramos el fichero
            out.close();
            //Cerramos la fuente de datos
            inputStream.close();
 
        } catch (Exception ex) {
           System.out.println(ex.getMessage());
        }

Página 2 de 6412345...Fin »