sábado, 21 de febrero de 2015

QRegExp: explicación rápida y sin marisqueras

Ejemplo #1: Detectar un número de dos dígitos 
"([0-9]{2,2})"
Explicación
[0-9]: Dígito del 0 al 9
{2,2}: Mínimo 2 y máximo 2 (Modifica al anterior que es [0-9]).

Pruebas:
QRegExp rx("([0-9]{2,2})");
rx.indexIn("123");        // Lo encuentra en 0
rx.indexIn("-asd66");   // Lo encuentra en 4
rx.indexIn("6");            // No encuentra

Ejemplo #2: Detectar las x de un polinomio y sus coeficientes
"([0-9]{,}x)"
Explicación
[0-9]: Dígito del 0 al 9
{ , }: Indica que la x puede tener o no un número adelante (cuando el coeficiente es 1 se no es necesario colocarselo)
x: Carácter x

Pruebas:
QRegExp rx("([0-9]{,}x)");  rx.indexIn("2y+3x");        // Lo encuentra en 3
rx.indexIn("2y+345x");    // Lo encuentra en 3
rx.indexIn("2y+x");          // Lo encuentra en 3
rx.indexIn("2y-5");           // No lo encuentra rx.indexIn("6");               // No encuentra

miércoles, 18 de febrero de 2015

Autologin luego de instalar Plasma 5 en Fedora

Cuando instalas plasma 5 luego de reiniciar la pantalla se queda en modo terminal y debes iniciar con startx.
Para activar el autologin  debes ejecutar el siguiente comando:
systemctl enable --force sddm.service

miércoles, 11 de febrero de 2015

Convertir varias imágenes en un fichero PDF en Fedora 21

En esta entrada veremos como convertir varias imágenes en un fichero .pdf.

Primero debe instalar gtatool-imagemagick


yum -y install gtatool-imagemagick

Luego convierte las imagenes a pdf con

convert imagen1.jpg imagen2.jpg fichero.pdf

En este caso las imagenes que quiero convertir tienen como nombre IMG_*.jpg y las quiero juntar en un fichero llamado fichero.pdf











convert ./IMG_*.jpg fichero.pdf

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

Qt + Postgresql en Fedora 21

Para usar una bd en postgresql usando Qt en fedora 21 primero debes instalar el driver de postgresql

yum install qt5-qtbase-postgresql

Luego en el proyecto agregar la linea sql en el fichero .pro de nuestro proyecto



Listo :) Ahora puesdes probar el driver usando el siguiente código:



#include <QtCore/QCoreApplication>

#include <QDebug>
#include <QSqlDatabase>
#include <QStringList>

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

    qDebug() << "Available drivers: " << QSqlDatabase::drivers();

    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");

    qDebug() << "addDatabase() " << (db.isValid() ? "VALID" : "ERROR");

    return a.exec();
}



Aqui pongo un ejemplo más pulido:

Solucionar problema "la autentificación password falló para el usuario postgres" SOLUCIÓN DEFINITIVA

Esta es una solución definitiva hecha con arrechera porque estos hijos de la mil puta hacen que perdamos tiempo modificando la maldita contraseña y buscando como arreglar este maldito problema:

Primero cambiar la clave del usuario postgres

passwd postgres
(luego introducimos la clave)


Luego debes comentar con # todas las entradas de 
/var/lib/pgsql/data/pg_hba.conf y añadir al final 

#TYPE  DATABASE        USER            CIDR-ADDRESS            METHOD
# "local" is for Unix domain socket connections only
local   all             all                                    ident
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                md5




Así quedó en mi terminal:



Luego reiniciar el servicio de postgres


service postgresql-9.4 restart

luego ejecutar
su postgres

psql
y luego
ALTER USER postgres WITH PASSWORD 'NuevaClave';

A la final debes volver a borrar lo que agregaste al fichero 
/var/lib/pgsql/data/pg_hba.conf y dejarlo como estaba al inicio.

viernes, 6 de febrero de 2015

Descarga Bizagi Modeler (Mega 1 link)

Si intentas descargar Bizagi Modeler desde su pag oficial te darás cuenta que la velocidad de descarga es una patada en las bolas. Por eso decidí subirlo a mega y compartirlo.
Este es el link:

https://mega.co.nz/#!ts8WXQ4Y!AX8OWkbY9HlBJeNUYj6DRAP3Ykp_pVWoCUjMafKdxqM



Hosting

jueves, 5 de febrero de 2015

MTP en Fedora 21

Al intentar copiar datos a mi Nexus 5 desde la pc me encontre que no tenia permisos de escritura.
Para solucionar esto solo hay que instalar kio_mtp simple-mtpfs libmtp fuse fuse-libs gvfs-mtp

yum install kio_mtp simple-mtpfs libmtp fuse fuse-libs gvfs-mtp




Luego cuando conecto el teléfono ya me aparece en la barra lateral y puedo escribir en el.

Libreria GLPK con Qt Creator

Primero debes instalar glpk en tu distribucion de linux
En fedora basta con 
yum install glpk*

Al intentar compilar un ejemplo de glpk en qt creator me mostraba esta falla.


Para corregirlo solo debes agregar la siguiente linea a tu fichero .pro


LIBS += -lglpk



Recompilas y listo. En este caso me muestra la versión de Qt




Este es el ejemplo mostrado

#include "stdio.h"
#include "glpk.h"

int main(int argc, const char *argv[])
{
    printf("GLPK Version: %s\n", glp_version());
    return 0;
}