Categories
programación

Hola mundo para GWT y Maven

GWT es una potente herramienta que nos permite programar aplicaciones web dinámicas en Java con cero conocimientos de javascript. Por otra parte, maven es una herramienta de gestión y construcción de aplicaciones que nos evita tener que lidiar con las dependencias entre versiones de librerías, automatizar tareas, y muchas otras cosas que facilitan la vida al programador.

La conjunción de estas dos herramientas proporciona una buena base para construir proyectos web y mantenerlos sin muchos dolores de cabeza. Para todo aquel que quiera comenzar uno nuevo, o simplemente probarlo, he creado un proyecto en Google Code llamado gwt-maven-helloworld.

Espero que ha alguien le sea de ayuda(yo lo hubiese agradecido).

Categories
linux programación ubuntu

Ordenar fotos según fecha de toma

A veces vamos de fiesta, o de excursión, y son varias las personas que toman fotos con sus cámaras, y que más tarde comparten con los demás. La tarea de juntarlas todas ya es difícil de por sí (perezosos que son algunos :P), así que una vez que se tienen juntas, suele ocurrir que cada cámara tiene su propia forma de nombrar las fotos, y también su propia numeración.

Por ello me he creado este script que renombra las fotos respetando el orden en el que se tomaron las fotos. Para que esto funcione, es necesario que todas las cámaras de fotos tengan la fecha correcta, porque de lo contrario, los datos exif que lee el script, serán erróneos.

#!/bin/bash

#Forma de usar:

# sh ordena.sh *.jpg *.JPG …

# el resultado es una carpeta “ordenadas” con las fotos

# renombradas según la fecha en la que se tomaron

# Ficheros usados por el programa

FICHERO_ORDENACION=orden.txt

FICHERO_ORDENADO=ordenado.txt

>$FICHERO_ORDENADO

>$FICHERO_ORDENACION

# Recorrer todos las fotos pasadas como parámetro

# y almacenarlas en un fichero con su fecha de captura

for NOMBRE in $@

do

FECHA=`exif $NOMBRE | grep origi | cut d‘|’ f2`

echo $FECHA @ $NOMBRE >> $FICHERO_ORDENACION

done

# Ordenar el fichero segun las fechas

cat $FICHERO_ORDENACION | sort n >$FICHERO_ORDENADO

# Crear una carpeta para las fotos ordenadas

mkdir ordenadas

# Recorrer el fichero de fotos ordenadas, y copiarlas con

# un nuevo nombre a la carpeta “ordenadas”

a=0;

while read line

do

a=$(($a+1));

NUMERO=`printf “%04d” $a`;

NOMBRE=`echo $line | cut d‘@’ f2`;
FICHERO=`echo $NUMERO.jpg`;

cp $NOMBRE ./ordenadas/$FICHERO

done <$FICHERO_ORDENADO

# Borrado de ficheros temporales

rm $FICHERO_ORDENADO

rm $FICHERO_ORDENACION

Para poder usar el script es necesario tener instalado el paquete exif:

sudo aptitude install exif

Para quien prefiera descargar el archivo aqui.

Categories
linux programación

Mono, C# y los iconos en la bandeja del sistema

No hace mucho me uní a un proyecto open source alojado en sourceforge. Dicho proyecto está escrito en c# y compilado para Mono. La verdad es que nunca había programado nada en dicho lenguaje así que estoy en un periodo de “aprendizaje”.

Una de las primeras cosas que hice en el proyecto fue actualizar el sistema usado para mostrar un icono en la bandeja del sistema. Al buscar información por internet, encontré un ejemplo (han actualizado el ejemplo a petición mía, en base a mi post :P) en la documentación de mono, pero que resultó ser el mismo sistema que ya se usaba en la aplicación y que estaba en desuso. En la lista de correo de mono me informaron de que existía una clase llamada StatusIcon, con la que fácilmente se podía crear un icono así que emplee esa finalmente. Y para que algún día pueda ser de utilidad a alguien, hago mi aportación poniendo un ejemplo de un “hola mundo” para mono con icono incluido:

using Gtk;
using Gdk;
using System;

class Hello {
  private static StatusIcon trayIcon;

  private static Gtk.Window window;

  // Método principal de la clase, que se ejecuta al invocar
  // la aplicación
  static void Main()

  {
    // Iniciliza Gtk+ para su funcionamiento
    Application.Init ();

    // Creación de una ventana con título
    window = new Gtk.Window ("Hola mundo");

    // Asociación del evento delete_event() cuando la ventana es cerrada
    window.DeleteEvent += delete_event;

    // Carga de la imagen del icono de la bandeja del sistema
    Pixbuf iconTray = new Pixbuf ("/tmp/iconoBandeja.png");

    // Creación del icono
    trayIcon = new StatusIcon(iconTray);
    // Activar la visibilidad del icono
    trayIcon.Visible = true;

    // Asociar al evento de clic sobre el icono el método OnTrayIconClicked
    trayIcon.Activate += OnTrayIconClicked;
    // Asociar al evento de clic derecho sobre el icono el método OnTrayPopup
    trayIcon.PopupMenu += OnTrayIconPopup;

    // Poner un tooltip al icono
    trayIcon.Tooltip = "icono hola mundo";

    // Mostrar la ventana
    window.ShowAll ();

    // Arranca el bucle principal
    Application.Run ();
  }

  static void OnTrayIconPopup (object o, EventArgs args) // handler for mouse click

  {
    // Crear menu
    Menu popupMenu = new Menu();
    // Crea un item en el menú con el texto 'Salir'

    ImageMenuItem menuItemQuit = new ImageMenuItem ("Salir");
    // Crea una imagen para el item del menu
    Gtk.Image appimg = new Gtk.Image(Stock.Quit, IconSize.Menu);

    // Asociar la imagen con el item
    menuItemQuit.Image = appimg;
    // Añadir el item al menu
    popupMenu.Add(menuItemQuit);

    // Asociar al evento de clic sobre el item el evento OnPopupClick
    menuItemQuit.Activated += OnPopupClick;
    // Hace visible el menu
    popupMenu.ShowAll();

    // Muestra el menu
    popupMenu.Popup();
}

  static void OnPopupClick(object o, EventArgs args)

  {
    // Termina la aplicación cuando el usuario pulsa el botón Salir
    Application.Quit();
  }

  static void OnTrayIconClicked(object sender, EventArgs a)
  {
    // Cambia el estado de la ventana de la aplicación entre visible y no visible

    if (window.Visible)
    {
      window.Visible = false;

    }
    else
    {
      window.Visible = true;

    }
  }

  static void delete_event (object obj, DeleteEventArgs args)

  {
    // Termina la aplicación cuando el usuario cierra la ventana
    Application.Quit ();
  }
}

Para compilar la aplicación:

mcs holaMundoIcono.cs -pkg:gtk-sharp-2.0

Y para ejecutarla:

./holaMundoIcono.exe