domingo, 4 de agosto de 2013

inkscape

Tengo en mente realizar un juego más decente que el simple BuscaminasS y para ello me estoy encontrando con una gran barrera, los gráficos. Es por ello que he empezado a ver las diferentes posibilidades en cuanto al diseño de imágenes. Por ahora estoy probando con inkscape y parece bastante prometedor. En concreto estoy siguiendo los siguientes videotutoriales:

El resultado, parece bastante decente sobre todo teniendo en cuenta que no se dibujar.


lunes, 31 de octubre de 2011

Apuntes OpenMP

#pragma omp directive-name [clause, ...] newline

#pragma omp parallel default(shared) private(beta,pi)

Directivas:
parallel.- Una región parallel es un bloque de código que será ejecutado por multiples threads.
pasada la región parallel sólo continua el hilo principal en ejecución. Si algún thread
finaliza dentro de una región parallel todos los threads finalizan y su resultado no está
definido.
Work-Sharing Constructs:
DO / for Directive.- Las iteraciones del bucle serán ejecutadas en paralelo por todos los threads.
Se asume que está dentro de una región parallel. Mirar clausulas.
Sections.- Cada sección es ejecutada una vez por un thread del total (de threads). Diferentes
secciones pueden ser ejecutadas por diferentes threads.
single.- El código sólo es ejecutado por un thread del total.
barrier.- Sincroniza todos los threads en ejecución. Cuando un thread alcanza esta directiva espera hasta que
todos los demás threads lleguen a este punto y a continuación todos los threads se continuan ejecutando
en paralelo.


Opciones de compilación.
-xopenmp.- Equivalent to -xopenmp=parallel
-xopenmp=parallel.- Enables recognition of OpenMP pragmas Requires at least optimization level -xO3
-xopenmp=noopt.- Enables recognition of OpenMP pragmas The program is parallelized accordingly, but no
optimization is done *
-xopenmp=none.- Disables recognition of OpenMP pragmas (default)
-xloopinfo.- Display parallelization messages on screen
-stackvar.- Allocate local data on the stack (Fortran only) Use this when calling functions in parallel
Included with -xopenmp=parallel | noopt
-vpara/-xvpara.- Reports OpenMP scoping errors in case of incorrect parallelization (Fortran and C compiler only)
Also reports OpenMP scoping errors and race conditions statically detected by the compiler
-XlistMP.- Reports warnings about possible errors in OpenMP parallelization (Fortran only)
-xcommonchk.- option to report upon inconsistentusage of threadprivate

miércoles, 21 de septiembre de 2011

Video qlearnphrases

Video sobre como usar qlearnphrases.



Todavía sigo luchando con el algoritmo para crear textos decentes. En concreto estoy intentando que a partir de un título, se cree un texto relacionado con el texto. Estoy publicando los resultados en este otro blog: La biblia es verso.

miércoles, 7 de septiembre de 2011

qlearnphrases

A raiz de un articulo publicado en en divertimentosinformaticos he desarrollado una pequeña aplicación llamada qlearnphrases.

El fin de esta aplicación es aprender palabras y formar frases con más o menos sentido de las palabras aprendidas. Admite dos métodos para aprender palabras; desde fichero de texto y desde una caja de texto.

Además permite guardar las palabras aprendidas a fichero, aunque el almacenamiento no es muy optimo. Y saca un listado con todas las palabras aprendidas ordenadas por orden alfabético y con enlaces a las posibles palabras que le sucederán en las frases generadas.

He subido a google code el código del proyecto, para obtenerlo basta con escribir desde consola;

git clone https://code.google.com/p/qlearnphrases/

He usado git, porque nunca había trabajado con este gestor de código y siempre viene bien aprender algo nuevo.

Por lo demás sólo decir que el código no es muy decente, no libero ningún tipo de memoria, pero sólo es la primera versión, esper poder ir mejorando el programa poco a poco.

Como ejemplo la siguiente es una frase generada automáticamente por el programa:

Ser maestro implica gran prestigio y lo siguiente:
Que si dentro de los misales y Usuarios OCU asciende a la zona de ahorros.
Y como futuros docentes a la posterior se trata de nosotros.

No es muy coherente pero tengo que mejorar muchas cosas antes de ponerme a perfeccionar el algoritmo para generar frases.

Enjoy developing :)

viernes, 26 de agosto de 2011

Deselecionar filas en un QTableWidget.


He estado intentando eliminar la selección de una tabla QTableWidget, y la verdad es que me he demorado más de lo común debido a la forma en que se hace con qt.

La forma que me ha resultado más sencilla es la siguiente:

- Obtenemos el rango seleccionado mediante la función selectedRanges() del QTableWidget.
- Vamos recorriendo el rango y llamando a la función setRangeSelected() pasandole cada uno de los elementos QTableWidgetSelectionRange y el parámetro false para quitar la selección.

Aquí dejo el código de ejemplo, está hecho en java con qtjambi

      List unselectRange = ui.tableWidgetUsers.selectedRanges();
      for(QTableWidgetSelectionRange range : unselectRange)
      {
        ui.tableWidgetUsers.setRangeSelected(range, false);
      }

viernes, 19 de agosto de 2011

Aplicando parches con diff.

En los proyectos de software libre es común que los programadores envíen sus parches de código fuente a un proyecto dado. La forma de aplicar los parches es con el comando patch.

Supongamos que tenemos el siguiente código fuente:
fib1.c
#include 
#include 

/* Find the nth Fibonacci number. */
static int fib(int n)
{
  if (n <= 0)
    return 0;
  if (n == 1)
    return 1;
  return fib(n - 1) + fib(n - 2);
}

int main(int argc, char** argv)
{
  if (argc < 2) {
    fprintf(stderr, "Need an argument.\n");
    return 1;
  }

  printf("%d\n", fib(atoi(argv[1])));
  return 0;
}
Y hemos recibido el siguiente parche: fib-linear-time.patch
--- fib1.c 
+++ fib2.c 
@@ -4,11 +4,17 @@
 /* Find the nth Fibonacci number. */
 static int fib(int n)
 {
-  if (n <= 0)
-    return 0;
-  if (n == 1)
-    return 1;
-  return fib(n - 1) + fib(n - 2);
+  int prev = 1;
+  int current = 0;
+  int i;
+
+  for (i = 0; i < n; i++) {
+    int next = current + prev;
+    prev = current;
+    current = next;
+  }
+
+  return current;
 }
 
 int main(int argc, char** argv)
Para aplicar el parche simplemente debemos ejecutar la siguiente orden desde consola:
patch < fib-linear-time.patch
Y con esto nuestro archivo fib1.c quedaría de la forma siguiente: fib1.c
#include 
#include 

/* Find the nth Fibonacci number. */
static int fib(int n)
{
  int prev = 1;
  int current = 0;
  int i;

  for (i = 0; i < n; i++) {
    int next = current + prev;
    prev = current;
    current = next;
  }

  return current;
}

int main(int argc, char** argv)
{
  if (argc < 2) {
    fprintf(stderr, "Need an argument.\n");
    return 1;
  }

  printf("%d\n", fib(atoi(argv[1])));
  return 0;
}




QString to const char*. Convetir QString a const char*

Cuando empezamos a programar en qt es común que no sepamos convertir converir un QString en char*.
Una forma rápida y sencilla de convertir un QString en un const char* es la siguiente.

String str("hello");
const char* ch = str.toLocal8Bit().constData();