Programar en C con Garbage Collection

De los 20 lenguajes mejor ubicados en el índice TIOBE, 14 tienen alguna forma de «Garbage Collection«. Esos 14 lenguajes representan más de un 47% de peso en el índice. Los únicos lenguajes «importantes» que no tienen recolección automática de basura son C, C++ y Objective-C (Delphi, Pascal y Ada son minoritarios).

El caso de Objective-C es especial ya que desde la versión 2.0 tiene un garbage collector, pero es opcional y no está en la versión que se usa para desarrollar aplicaciones para el iPhone.

En C y C++ se puede usar el garbage collector de Boehm-Demers-Weiser. Básicamente en lugar de llamar a malloc, llamas a GC_MALLOC y los llamados a GC_FREE son opcionales.

En Ubuntu, debemos instalar libgc

 sudo apt-get install libgc-dev libgc1c2

y al compilar debemos usar la opción -lgc para indicarle al linker que use libgc.

gcc -std=c99 -Wall  -o programa *.c -lgc

Evitar que se Cierre una Aplicación Java / Swing

A veces es necesario evitar que el usuario cierre la aplicación mientras se está realizando un procesamiento o simplemente queremos que confirme que es verdaderamente si intención salir en ese momento


public class MyApp extends JFrame {
    public MyApp() {
        super("MyApp");
        this.setDefaultCloseOperation(DO_NOTHING_ON_CLOSE);
        this.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                if(!model.isProcessing()){
                    setVisible(false);
                    dispose();
                }else{
                    JOptionPane.showMessageDialog(
                            MyApp.this, "Espere a que terminemos de procesar..."));
                }
            }
        });
    }
}

En el ejemplo  suponemos que hay una variable de instancia «model» que nos permite saber si la aplicación está en condiciones de ser cerrada o no.

El salir de la aplicación ocurre al hacer dispose() del último o único JFrame que está visible siempre y cuando estén dadas las demás condiciones para que la aplicación termine. Es importante asignar DO_NOTHING_ON_CLOSE como operación de cerrado por defecto para poder definir nosotros qué pasa cuando el usuario quiere cerrar.

Publicar un Archivo via Ubuntu One

A partir de Ubuntu Lucid Lynx 10.04 la integración con el servicio Ubuntu One mejoró y ofrece más funciones.

La que más me llama la atención es la posibilidad de publicar un archivo directamente desde el escritorio, sin tener que subirlo manualmente a ningún lado y poder accederlo con una URL corta.

Está explicado en el video que pongo al final, pero básicamente hay que susbribirse al servicio Ubuntu One (que es gratis) seleccionar una carpeta, copiar el archivo ahí adentro, esperar a que se  sincronice, luego elegir la opción «Publicar via Ubuntu One» del archivo que queremos compartir y luego la opción «Copiar URL pública». Se puede dejar de publicar el archivo en cualquier momento.

El archivo se mantiene publicado y accesible aunque apagues la computadora ya que queda alojado en tu espacio de almacenamiento virtual privado.

No todo archivo sincronizado es público, sólo aquellos que publiques.

Ese servicio es ideal para compartir documentos, fotos o cualquier cosa sin tener que enviarla por mail como adjunto. Directamente eviar la URL corta para que los destinatarios accedan.

Un video con el paso a paso.