El poder del amor

logoelpoderdelamorok-2288586

No, este no es un post sobre el día del amor y la amistad, este es un post sobre el más reciente reality de TV Azteca llamado “El poder del amor“, conducido por Penelope Menchaca, que empezó a transmitirse el día lunes 4 de febrero y tuvo su última emisión el día 8 de febrero, convirtíendose probablemente en el programa que sustenta el récord de haber sido retirado del aire más rápidamente, tan solo después de una semana de emisión… y eso es algo bueno.

Tuve la mala fortuna de ver ese programa y el simple hecho de verlo te hacía sentir cómo perdías neuronas con cada segundo que pasaba. El concepto de reality show era terrible. Uno esperaría que cualquier que trabaje en la TV sabría que los reality shows de ese tipo no han sido exitosos en México por los últimos 20 años, desde pasó la novedad del Big Brother. Tal vez los productores pensaron que después de 20 años el público mexicano estaría listo para otro reality, esa es la única explicación lógica para que invirtieran en un proyecto de ese tipo que, además, fue grabado en Turquía por cualquiera que fuera la razón para eso.

Por fortuna el programa fue un rotundo fracaso con el público y fue retirado en tiempo record de la programación y eso, eso me hace recuperar un poco la fé en la humanidad.

 

Tarea de programación C – Números primos

En un post anterior escribí el código para encontrar números primos en Java. A diferencia del código en aquel post, aquí he usado una representación digital de la criba o coladera de Eratóstenes. Usar una representación en memoria tiene la ventaja de que nos permite ahorrarnos muchos cálculos innecesarios que el anterior código hacía para comprobar si un número era primo. Además, gracias a que cualquier compilador moderno nos permite declarar arreglos o reservar bloques de memoria de tamaño arbitrario, es posible usar este código para encontrar fácilmente los números primos por debajo de 1,000,000,000 (o cualquier número en el rango del tipo de datos int).

#include 
#include 
#include 
#include 

#define LIMITE 100000000

uint8_t *criba;
int contador = 0;

int main() {
    criba = calloc(LIMITE, 1);
    assert(criba);
    for (int i = 2; i < LIMITE; i++) {
        if (criba[i] == 0) {
            contador++;
            printf("%d\n", i);
            uint64_t mul = i * 2;
            while (mul < LIMITE) {
                criba[mul] = 1;
                mul += i;
            }
        }
    }
    printf("Se encontraron %d números primos menores a %d.\n", contador, LIMITE);
}

El código anterior define LIMITE con un valor de 100,000,000 y en mi PC toma aproximadamente 4 segundos al programa para encontrar los números primos por debajo de ese valor. Si incremento el valor de LIMITE a 1,000,000,000 toma aproximadamente 40 segundos en mi PC, que sigue siendo más rápido que el tiempo que tomaba la versión anterior del código para un valor de 100,000,000. Nota que puede llegar a millones la cantidad de números primos para estos valores de LIMITE, por lo que recomiendo enviar la salida del programa a un archivo y no directamente a la terminal. Es decir, ejecuta el programa de la siguiente manera:

monstruosoft@debian:~/code$ ./primos > /dev/shm/primos.txt

En el archivo primos.txt se guardará la salida del programa, por ejemplo:

2
3
5
7
11
13
17
19
23
29
31
37
...
999999667
999999677
999999733
999999739
999999751
999999757
999999761
999999797
999999883
999999893
999999929
999999937
Se encontraron 50847534 números primos menores a 1000000000.

Nota también que aunque este código puede fácilmente reservar un bloque de memoria de 1 GB en C, el mismo código en Java siempre me daba errores de OutOfMemoryException. Incluso después de aumentar el tamaño de la memoria usada por la máquina virtual de Java, usar System.out.println() era extremadamente lento para intentar escribir varios millones de líneas de texto a un archivo, y un ArrayList con varios millones de números primos también causaba problemas al intentar usar el método toString() así que si conoces la forma de usar este código en Java deja un comentario.

 

Juegos indie mexicanos en Kickstarter – Parte 6

Este año empezó lentamente en lo que a proyectos de videojuegos mexicanos en Kickstarter se refiere pero poco a poco han empezado a aparecer. Ya en el post anterior hablé de Zaphiro’s Project, un proyecto que parece más una broma pero que, aunque resulte defícil de creer, ha alcanzado ya el 10% de su meta, eso es aproximadamente 2,500 pesos pero aún así no me explico cómo ha alcanzado esa cantidad.

El siguiente en la lista es Divenia Zero, un spinoff en 2D de Divenia, otro proyecto en Kickstarter. Aunque personalmente creo que la versión 2D de este juego luce mejor y ofrece más posibilidades que la versión en 3D, aún tiene muchos detalles que pulir antes de poder ser lanzada oficialmente; en particular, las animaciones y colisiones es obvio que necesitan todavía mucho trabajo. Hay un demo disponible del juego que espero poder probar próximamente, si es que corre en Linux.

Quest for Enlightenment es otro de esos típicos proyectos que prometen mucho pero no tienen nada que mostrar. Con una meta de un millón de pesos y sin nada que mostrar, es casi seguro que no alcanzará su meta pero hay un par de cosas que creo que vale la pena resaltar. Aunque el proyecto aparece en la categoría de México, basta hacer click en el nombre del creador de la campaña para ver que es de Costa Rica, esto puede marcar una preocupante tendencia de gente que hace pasar sus proyectos como si fueran mexicanos aunque no lo sean. No es como si México ofreciera más garantías de alcanzar las metas con éxito pero ciertamente México es visto como una economía más importante que la de otros países de latinoamérica. De verdad me preocupa la posibilidad de ver más y más proyectos haciendose pasar como proyectos mexicanos y si creen que estoy exagerando, sigan leyendo 😦 . Como si lo anterior no fuera suficiente, el creador de la campaña pretende haber contactado con estudios en “todo el mundo” para apoyarlo con su proyecto para finalmente encontrar un estudio, curiosamente, en Costa Rica. Todo esto suena bastante sospechoso y resulta ofensivo para los que pretenden apoyar su proyecto ya que parece estar basado en mentiras.

Aunque no es un videojuego, Pokenoticias es una campaña que pretender recaudar 100,000 pesos para una página de internet relacionada con noticias de videojuegos que luce abandonada desde hace más de un año. No hay mucho más que decir sobre esta campaña.

The Vale es un juego de survival-horror desarrollado por Fairyland, un estudio conformado por gente de México, Argentina y Reino Unido; una vez más, este proyecto no se siente muy mexicano que digamos y basta ver el video de presentación (que parece usar la fórmula de los videos del canal de YouTube Numberphile) de su anterior proyecto (que fue misteriosamente cancelado), The Lawless Online, para ver qué tan mexicano luce este estudio. Como mencioné antes, resulta preocupante ver proyectos que no lucen para nada mexicanos aparecer en los listados de proyectos de México. The Lawless online prometía ser un MMO y, honestamente, no creo que exista ningún estudio indie en México con la capacidad de crear un juego MMO; además, si revisas la campaña notarás que no tiene en realidad nada qué mostrar más que unos cuantos diseños 3D pero nada parecido a gameplay pero, en fin, ese proyecto fue cancelado. De vuelta a The Vale, el proyecto que sigue activo, parece ser un juego de survival-horror en primera persona (o quizas para VR) que parece fuertemente inspirado por Resident Evil 7. Las texturas y diseños 3D lucen bien pero yo tomaría con cautela el considerarlo un juego indie “mexicano”.

Equilibrio es el más reciente proyecto que ha aparecido en Kickstarter. Como de costumbre, el proyecto espera recaudar casi un millón de pesos al mostrar solamente unos cuantos dibujos hechos a mano, de mala calidad considerando que cuantan con 2 “ilustradores y diseñadores gráficos”. También cuentan con 2 “programadores”, por lo que no se puede justificar la falta de un “Hello world”, por lo menos. Como siempre, el juego promete muchas cosas como una “historia sólida y gran talento artístico y tecnológico”. Este proyecto parece una idea bien intencionada pero nada más.

BONUS: No es un videojuego pero Space Art es un proyecto para lanzar una línea de ropa. Lo gracioso aquí es que, ironicamente, pudieron haber conseguido más dinero con su campaña original que tenía una meta de 10 pesos 😀 .

 

Tarea de programación Java – Números primos

Una clásica tarea de programación es encontrar todos los números primos menores por debajo de una cantidad introducida por el usuario. El algoritmo más básico consiste en usar una versión digital de la criba de Eratóstenes que es bastante simple de escribir pero puede volverse muy lenta conforme se incrementa el la cantidad que introduce el usuario. El código en este post es básicamente el algoritmo la criba de Eratóstenes con unas cuantas optimizaciones. En mi PC es posible encontrar todos los números primos menores a 10,000,000 relativamente rápido usando este código. Para los números primos menores a 100,000,000 el código se tarda casi un minuto en mi PC. Para números mayores el tiempo se multiplicaría considerablemente.

El código para encontrar los números primos es el siguiente (lo siento, no pude lograr que wordpress formateara el código correctamente):

public static ArrayList<Integer> numerosPrimos(int max) {
    ArrayList<Integer> primos = new ArrayList<Integer>();
    primos.add(2);

    for (int i = 3; i < max; i++) {
        boolean es_primo = true;
        double limite = Math.ceil(Math.sqrt(i));
        for (int j = 0; j < primos.size(); j++) {
             if (i % primos.get(j) == 0) {
                 es_primo = false;
                 break;
             }
             if (primos.get(j) > limite) break;
        }
        if (es_primo) primos.add(i);
    }

    return primos;
}

 

He agregado este método a la clase TareasProgramacion en github. Se puede usar este método como en el siguiente ejemplo:

import java.util.*;
import org.monstruosoft.utils.*;

public class Prueba {
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        System.err.print("Escribe el número máximo para la búsqueda de números primos: ");
        int max = s.nextInt();
        ArrayList primos = TareasProgramacion.numerosPrimos(max);
        for (Integer i: primos)
            System.out.println(i);
        System.out.println("Se encontraron " + primos.size() + " números primos menores a " + max + ".");
    }
}

Al ejecutar el programa obtenemos la siguiente salida:

monstruosoft@debian:~/code/monstruosoft/java-utils$ java Prueba 
Escribe el número máximo para la búsqueda de números primos: 100
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97
Se encontraron 25 números primos menores a 100.

Juegos indie mexicanos en Kickstarter – Parte 5

Las fiestas decembrinas realmente tuvieron un impacto en la actividad del blog pero no sólo eso, también se vieron reflejadas en Kickstarter, donde desde diciembre pasado no había aparecido un nuevo proyecto de videojuego mexicano.

Zaphiro’s Project marca el inicio de la actividad de este año en los proyectos de juegos indie mexicanos en Kickstarter. Desafortunadamente es el típico proyecto que solamente busca estafar a la gente o que tiene una buena intención o un sueño pero ninguna posibilidad de llevarlo a cabo. El proyecto es el típico “no tengo nada que mostrar, ni una imagen” que se ve aún más marcado por el hecho de que el creador de la campaña incluyó en el resumen de su proyecto que “la imagen es solo de referencia”, además promete que será un MMO de mundo abierto con mecánica artesanal, sistema de mejora de armas, minería y refinación de minerales, IA, agricultura, cría de animales, entre muchas otras cosas. Eso es un proyecto muy ambicioso para alguien que no da muestras de poder siquiera programar el “Hello world!”. Este proyecto está destinado a fracasar. Seguiré esperando el día en que aparezca un proyecto serio 😦 .

GIMP 2.10 en Debian Stretch

Como lo he escrito múltiples ocasiones en otros posts, los repositorios estables son a la vez la mejor y la peor parte de Debian. Por un lado, el software en los repositorios estables está, en teoría, garantizado que funcione sin problemas pero por otro lado eso significa no es raro encontrarse con que el software en los repositorios estables es software con varios años de antigüedad 😦 . GIMP es un ejemplo de esto, la versión en el repositorio estable de Debian es la 2.8.18 a pesar de que la versión 2.10 ya fue lanzada de forma oficial hace tiempo, así que si quieres probar la nueva versión de GIMP, los repositorios estables no son una opción.

Es posible que la versión más reciente de GIMP esté disponible en repositorios como el de backports o el de debian-multimedia pero ahora la página oficial de GIMP ofrece un link a la versión para Flatpak que es lo más cercano a tener un ejectuable oficial. Para instalar y ejecutar GIMP para Flatpak basta ejecutar los comandos que aparecen en la página oficial de GIMP:

flatpak install https://flathub.org/repo/appstream/org.gimp.GIMP.flatpakref 
flatpak run org.gimp.GIMP//stable

Ya en el pasado hice un post sobre Flatpak también relacionado con GIMP, sobra mencionar que debes tener Flatpak instalado en tu sistema y que lo puedes instalar desde el gestor de paquetes de Debian Stretch. Si es la primera vez que instalas o ejecutas un programa de Flatpak se instalará una máquina virtual de Flatpak ya que, si recuerdas los posts anteriores, Flatpak es un sistema que ofrece una forma de virtualización que permite ejecutar programas aislados del resto del sistema y, sobre todo, gracias al uso de máquinas virtuales o runtimes, permite usar librerías diferentes a las instaladas en el sistema sin que estas causen conflictos.

gimp-2.10

La versión de Flatpak es lo más cercano que tendremos a un ejecutable oficial de GIMP para Linux y sin duda es mejor y más sencillo que tener que compilarlo manualmente como lo hicimos alguna vez con la versión de desarrollo 2.9. Sin embargo, sabemos que me gusta tomar el camino más difícil así que decidí intentar compilar GIMP manualmente y crear un ejecutable nativo para Debian Stretch.

El proceso fue largo y difícil ya que GIMP 2.10 tiene como dependencias muchas librerías que no están en el repositorio estable de Debian; además, muchas, si no es que la mayoría, de esas librerías también tienen versiones mínimas requeridas que son superiores a las que usamos antes para compilar GIMP 2.9 por lo que las versiones que usamos para compilar GIMP 2.9 ya no sirven. Después de cazar versiones recientes de muchas librerías, sistemas de compilación como meson y todas sus dependencias, después de luchar para compilar librerías que requieren opciones que no son nada obvias y de instalarlas en rutas personalizadas ajustando las respectivas variables de entorno, finalmente fui capaz de compilar exitosamente el GIMP 2.10 en Debian Stretch y, aunque escribí una larga lista de instrucciones detalladas para compilarlo, no creo que valga la pena obligar a nadie a pasar por todo eso ahora que existe la versión oficial para Flatpak. Todo ese trabajo para compilar GIMP 2.10 manualmente aún puede ser de utilidad si quieres probar la versión de desarrollo más reciente… tengo planeado un post sobre eso.

Reto de la toja azul 2019

Si has seguido el blog por algún tiempo tal vez recuerdes el reto de la toja azul, un reto de programación de monstrochan para poner a prueba y/o mejorar tus habilidades como programador. El reto de la toja azul 2019 está vivo y el primer proyecto terminado es Huachi Bird, un clon de Flappy Bird mezclado con el tema de moda de los huachicoleros y el robo de combustible de Pemex.

Además de la versión web, el proyecto también cuenta con una versión para Android.

huachi-bird