Mostrando entradas con la etiqueta ejemplo. Mostrar todas las entradas
Mostrando entradas con la etiqueta ejemplo. Mostrar todas las entradas

lunes, 27 de febrero de 2017

Ejemplo rapido de cron en linux

Debes editar el fichero /etc/crontab y añadir los tabs

Ejemplo:
20 8 27 2 * hector echo "esto es una prueba" | tee /tmp/prueba

Indica que quiere correr todos los años el comando "echo "esto es una prueba" | tee /tmp/prueba" con el usuario hector el 27 de febrero a las 8 y 20 AM


sábado, 3 de septiembre de 2016

Synergy conf ejemplo

Este es un ejemplo de un fichero de configuración de Synergy que me funciona. Consta de un equipo "laptop" que está a la izquierda de un equipo "localhost.localdomain".



section: screens
laptop:
halfDuplexCapsLock = false
halfDuplexNumLock = false
halfDuplexScrollLock = false
xtestIsXineramaUnaware = false
switchCorners = none
switchCornerSize = 0
localhost.localdomain:
halfDuplexCapsLock = false
halfDuplexNumLock = false
halfDuplexScrollLock = false
xtestIsXineramaUnaware = false
switchCorners = none
switchCornerSize = 0
end

section: aliases
end

section: links
laptop:
right = localhost.localdomain
localhost.localdomain:
left = laptop
end

section: options
relativeMouseMoves = false
screenSaverSync = true
win32KeepForeground = false
switchCorners = none
switchCornerSize = 0
end

viernes, 2 de septiembre de 2016

Ejemplo dirección de Ipostel para tarjeta Payoneer

Cuando rellenes la información para tu tarjeta Payoneer en venezuela, es recomendable colocar una dirección de Ipostel, puesto por experiencia propia he visto que los paquetes nunca llegan.
Dos ejemplo de formatos de direcciones usadas y que llegaron fueron las siguientes:



viernes, 22 de julio de 2016

Prueba de Smirnov - Kolmogorov en Excel

Ejemplo de la implementación de la prueba de bondad de ajuste de smirnov - kolmogorov en Excel

Prueba smirnov - kolmogorov 

Para descargar el fichero Excel

https://drive.google.com/open?id=0B9uuluhrKpGKdmVmSG5QXzJ0ems

jueves, 30 de julio de 2015

QtXlsx: Leer y escribir en ficheros .xlsx con Qt

La mejor librería (que he probado) para trabajar con ficheros .xlsx en Qt es QtXlsx.

Para usarla primero debes descargar el src desde aqui:

Si quieres visiar el repo en github:
https://github.com/dbzhang800/QtXlsxWriter


Luego de descargarlo lo descomprimimos en el directorio de nuestro proyecto de Qt


Luego vamos al fichero .pro de nuestro proyecto y agregamos la siguiente linea:

include(QtXlsxWriter-master/src/xlsx/qtxlsx.pri)



Compilas y listo, ya estas listo para el primer ejemplo:
Este código nos permitiría leer las dos primeras columnas de todas las filas.

void Ventana::leerTodo()
{
    QXlsx::Document *docIN= new QXlsx::Document("data.xlsx");
    int nFilas=docIN->dimension().lastRow();

    for (int i = 2; i <= nFilas; ++i) {
        QString nombre  =docIN->read(("A"+QString::number(i)).toString());
        QString apellido=docIN->read(("B"+QString::number(i)).toString());
        
        qWarning()<<"   Nombre  : "<<nombre;
        qWarning()<<"   Apellido: "<<apellido;
        
    }
}

El fichero .xlsx usado es algo así:





viernes, 1 de mayo de 2015

Ejemplo de QSettings

En este pequeño ejemplo veremos como obtener y guardar una configuración en el disco con QSettings.
Explicación:



Primero creamos el objeto de configuración. El primer parámetro es el grupo y el segundo la aplicación. Le puedes colocar cualquier nombre, solo debes tener en cuanta que cuando desees obtener valores de dicha configuración debes crear un objeto con los mismos parámetros.

QSettings settings("Group", "SMS");

Luego intentamos leer de la configuración. Puesto que en la primera corrida del programa todavia no hemos guardado nada entonces la variable scriptDelay valdrá 0.
En la segunda corrida valdrá 1000

int scriptDelay = settings.value("SMS/ScriptDelay").toInt();


Luego asignamos el valor de la configuración.

settings.setValue("SMS/ScriptDelay", 1000);



Este es el código de ejemplo:


#include <QCoreApplication>
#include <QSettings>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    QSettings settings("Group", "SMS");
    int scriptDelay = settings.value("SMS/ScriptDelay").toInt();
    settings.setValue("SMS/ScriptDelay", 1000);
    qDebug()<<"scriptDelay = "<<scriptDelay;
    return a.exec();

}

domingo, 15 de marzo de 2015

Ejemplo libconfig con QtCreator: Leer y escribir en el fichero de configuración

En esta entrada veremos un ejemplo de uso de libconfig en linux para trabajar con ficheros de configuración. Usaremos QtCreator como ide.

Lo primero es instalar el paquete libconfig

Desde debian:
apt-get install libconfig

Desde fedora:
yum install libconfig libconfig-devel


Luego debemos linkear la librería desde nuestro IDE. Para ello damos clic derecho al titulo del proyecto y luego en Add Library. Luego colocamos la dirección de el fichero libconfig.so. 
Por lo general está en /usr/lib64/libconfig.so si es un so de 64 bits
Por lo general está en /usr/lib/libconfig.so     si es un so de 32 bits


Puedes hacer el paso anterior de forma manual agregando la siguiente linea a tu fichero .pro
LIBS += -lconfig

Para este ejemplo utilizamos el siguiente fichero de configuración (example.cfg):

// Nombre
nombre = "Libros, Películas y mas";

// Inventario
inventario =
{
  libros = ( { titulo  = "Treasure Island";
              autor = "Robert Louis Stevenson";
              precio  = 29.99;
              qty    = 5; },
            { titulo  = "Snow Crash";
              autor = "Neal Stephenson";
              precio  = 9.99;
              qty    = 8; }
          );

  peliculas = ( { titulo = "Brazil";
               media = "DVD";
               precio = 19.99;
               qty = 11; },
             { titulo = "MEMEMTO";
               media = "VHS";
               precio = 18.99;
               qty = 5; }
           );
};





Este código lee el fichero, muestra su contenido y cambia el valor de la preferencia 'nombre' a Totona.

#include <stdio.h>
#include <stdlib.h>
#include <libconfig.h>


/* Este ejemplo lee el fichero de configuracion example.cfg
 * y muestra su contenido
 */
int main(int argc, char **argv)
{
    static const char *output_file = "updated.cfg";
    static const char *input_file  = "example.cfg";
    config_t cfg;
    config_setting_t *setting;
    const char *str;

    config_init(&cfg);

    /* Lee el fichero, si hay error lo muestra y sale */
    if(! config_read_file(&cfg, input_file))
    {
        fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg),
                config_error_line(&cfg), config_error_text(&cfg));
        config_destroy(&cfg);
        return(EXIT_FAILURE);
    }    
    

    /* Obtenemos el nombre. */
    if(config_lookup_string(&cfg, "nombre", &str))
        printf("nombre: %s\n\n", str);
    else
        fprintf(stderr, "No hay un campo 'nombre' en example.cfg.\n");

    /* Mostramos todos los libros del inventerio. */
    setting = config_lookup(&cfg, "inventario.libros");
    if(setting != NULL)
    {
        int count = config_setting_length(setting);
        int i;

        printf("%-30s  %-30s   %-6s  %s\n", "titulo", "autor", "precio", "QTY");

        for(i = 0; i < count; ++i)
        {
            config_setting_t *libro = config_setting_get_elem(setting, i);

            const char *titulo, *autor;
            double precio;
            int qty;

            if(!(config_setting_lookup_string(libro, "titulo", &titulo)
                 && config_setting_lookup_string(libro, "autor", &autor)
                 && config_setting_lookup_float(libro, "precio", &precio)
                 && config_setting_lookup_int(libro, "qty", &qty)))
                continue;

            printf("%-30s  %-30s  $%6.2f  %3d\n", titulo, autor, precio, qty);
        }
        putchar('\n');
    }

    /* Muestra todas las peliculas en inventario. */
    setting = config_lookup(&cfg, "inventario.peliculas");
    if(setting != NULL)
    {
        unsigned int count = config_setting_length(setting);
        unsigned int i;

        printf("%-30s  %-10s   %-6s  %s\n", "Titulo", "Media", "Precio", "QTY");
        for(i = 0; i < count; ++i)
        {
            config_setting_t *movie = config_setting_get_elem(setting, i);

            const char *titulo, *media;
            double precio;
            int qty;

            if(!(config_setting_lookup_string(movie, "titulo", &titulo)
                 && config_setting_lookup_string(movie, "media", &media)
                 && config_setting_lookup_float(movie, "precio", &precio)
                 && config_setting_lookup_int(movie, "qty", &qty)))
                continue;

            printf("%-30s  %-10s  $%6.2f  %3d\n", titulo, media, precio, qty);
        }
        putchar('\n');
    }
    
    /** Actualizamos el valor del nombre **/    
    config_setting_t *root,*nombre;

    root = config_root_setting(&cfg);
    nombre=config_setting_get_member(root,"nombre");

    // Cambiamos el valor del nombre y le colocamos
    config_setting_set_string(nombre,"Totona");

    /* Escribimos el fichero de salida*/
    if(! config_write_file(&cfg, output_file))
    {
        fprintf(stderr, "Error escribiendo en el fichero.\n");
        config_destroy(&cfg);
        return(EXIT_FAILURE);
    }

    fprintf(stderr, "Se ha actualizado el fichero %s y se ha guardado en: %s\n",
            input_file,output_file);


    config_destroy(&cfg);
    return(EXIT_SUCCESS);
}



Links de interés:
http://jpmens.net/2009/09/17/reading-configuration-files-with-libconfig/

domingo, 8 de febrero de 2015

Ejemplo Qt5 + Postgres

En la entrada anterior expliqué como se configuraba fedora para conectar qt5 con postgres. Ahora aquí se muestra un ejemplo de una aplicación en Qt que se conecta con una BD en postgres.

Primero creamos la BD de ejemplo desde pgadmin3. En este caso se llama BD_UNEG


CREATE DATABASE "BD_UNEG"
  WITH OWNER = postgres
       ENCODING = 'UTF8'
       TABLESPACE = pg_default
       LC_COLLATE = 'es_VE.UTF-8'
       LC_CTYPE = 'es_VE.UTF-8'
       CONNECTION LIMIT = -1;
-- Table: persona

CREATE TABLE persona
(
  cedula character varying(20) NOT NULL,
  nombre character varying(50),
  tipo character varying(30),
  estatus character varying(30),
  carrera character varying(30),
  CONSTRAINT persona_pkey PRIMARY KEY (cedula)
)
WITH (
  OIDS=FALSE
);
ALTER TABLE persona
  OWNER TO postgres;

qt postgres

Quedaría así


Ahora agrega algo a la BD. 



NOTA: En este ejemplo la clave de postgres es 123456 y el puerto es 5432

Este es el código en Qt que busca todos los elementos de la tabla persona y los muestra

#include <QtCore/QCoreApplication>
#include <QDebug>
#include <QSqlDatabase>
#include <QSqlError>
#include <QStringList>
#include <QMessageBox>
#include <QSqlQuery>
#include <QSqlRecord>

bool createConnection()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
    db.setHostName("127.0.0.1");   // Nombre del host
    db.setDatabaseName("BD_UNEG"); // Nombre de la BD
    db.setPort(5432);              // Puerto
    db.setUserName("postgres");    // Usuario
    db.setPassword("123456");      // Contraseña

    // Si esta abierto entonce retorna true
    if (db.isOpen()){
        qWarning() <<"La conexión ya estaba creada";
        return true;
    }

    // Abre la BD
    if (!db.open()) {
        QMessageBox::critical(0, QObject::tr("Database Error"),
                              db.lastError().text());
        return false;
    }
    return true;
}

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << (createConnection() ? "Se crea la conexión :)" : "ERROR al conectar :(");

    QSqlQuery qry;

    qry.prepare( "SELECT * FROM persona" );
     if( !qry.exec() )
       qDebug() << qry.lastError();
     else
     {
       qDebug( "Seleccionado!" );
       QSqlRecord rec = qry.record();
       int cols = rec.count();
       for( int c=0; c<cols; c++ )
         qDebug() << QString( "Columna %1: %2" ).arg( c ).arg( rec.fieldName(c) );

       for( int r=0; qry.next(); r++ )
         for( int c=0; c<cols; c++ )
           qDebug() << QString( "Fila %1, %2: %3" ).arg( r ).arg( rec.fieldName(c) ).arg( qry.value(c).toString() );
     }

    return a.exec();
}





Recuerda agregar QT += sql en el fichero .pro



Links de interes:
http://www.informit.com/articles/article.aspx?p=1405550


http://www.java2s.com/Code/Cpp/Qt/ConnecttoMySqlwithQSqlDatabaseanddoselectupdateinsertanddelete.htm


http://www.ics.com/designpatterns/solutions/qsqldatabase.html