viernes, 25 de marzo de 2011

Java Tip: Comparar dos fechas

Si tenemos dos fechas en Java, no las podemos comparar como si de int se tratara, con los comparadores lógicos '>', '<' e '='

Para compararlas podemos usar la función 'compareTo' que devolverá > 0 si la primera fecha es antes que la segunda o > 0 si por el contrario la primera fecha es después que la segunda

public static void main(String[] args) throws InterruptedException {
 Date d = new Date();
 Thread.sleep(1000);
 Date d2 = new Date();
 
 //Will output -1 
 System.out.println(d.compareTo(d2));

 //Will output 1
 System.out.println(d2.compareTo(d));

 //Will output 0
 System.out.println(d.compareTo(d));
}

miércoles, 23 de marzo de 2011

Picasa - Cambiar fecha de una foto

Si tenéis fotos de las antiguas, en papel fotográfico y las queréis digitalizar con un escaner, os encontraréis con el problema de que la fecha de la foto será la fecha del escaneo.

También puede pasar que se tenga mal configurada la fecha de la cámara al hacer las fotos.

Si nos gusta tener las fotos ordenadas, esto supone un rollo y el que no queden colocadas como uno desea. Por ello, con Picasa (si no lo conoces te lo recomiendo), es muy fácil cambiar esta fecha:

Herramientas -> Ajustar Fecha y Hora

y elegimos la fecha en la que se hizo la foto realmente.
LISTO

martes, 15 de marzo de 2011

iPhone 4.2.1 3G y Greenpoison... toca esperar

Pues eso, yo estaba ilusionado con la posibilidad de por fin hacerle el jailbreak al iPhone, pero parece que no se puede porque la versión que tengo en mi poder es una 3G y no una 3GS.

En el propio README de la versión que me he descargado para Windows viene bien claro una lista de dispositivos a los que se les podrá aplicar y el 3G no aparece.

Aún así lo intenté sin ningún resultado, por lo que tocará esperar a otra solución, ya que tampoco quiero actualizarle la baseband a la del iPad.

Por otro lado he visto esta web, donde parece posible, pero tengo que leérmelo todo con más calma y empaparme un poco de la jerga del iPhone y de su funcionamiento. A ver si en breve puedo contar que lo tengo liberado y con el jailbreak.

jueves, 10 de marzo de 2011

Tomar notas

Todo el tiempo me encuentro ante el dilema de cómo tomar notas y sobre qué medio. Soy mucho de utilizar papel y bolígrafo, anticuado dirán algunos, pero muy práctico y la mejor manera para plasmar ideas.

El problema me surge cuando días después quiero volver a echar un vistazo a esa hoja donde apunté cierto desarrollo... y la hoja no aparece por ningún lado: o bien la paso por alto y no soy capaz de identificarla del resto o bien se encuentra en la papelera de reciclaje de papel.

Por eso, cuando tengo idea de que lo que voy a escribir puede tener cierta importancia y que puedo volver sobre ello en algún momento no muy lejano, intento utilizar medios electrónicos. Por un lado tengo las "Sticky Notes" que vienen con Windows 7 y por otro utilizo el (ya abandonado) Google Notebook.

Sobretodo el segundo tiene la ventaja de que al ser de Google, es muy fácil buscar entre los apuntes que se tomen, además de poder clasificarlo en diferentes cuadernos. Por no decir que allá donde vayamos, lo tendremos (siempre que tengamos internet) a diferencia de los papeles.

Hay otro tipo de herramientas para tomar notas, pero orientado más a otros campos como evernote, con integración en teléfonos móviles para que no se nos escape nada a nuestras anotaciones.

Por último, como último medio de anotación, utilizo este blog de "reciente" creación: si considero que lo anotado, averiguado, inventado, descubierto... puede ser de interés general, lo plasmo como una entrada de este blog y así queda de manera pública para todos, incluido yo.

Y aún así y con todo, no estoy satisfecho. Hay algo que no termina de encajar en todo esto, algunas veces me da pereza abrir el google notebook, otras lo dejo todo desordenado, otras lo pongo en papel pensando que luego me acordaré, otras incluso escribo un post y luego no recuerdo que estaba aquí escrito... ¿No hay una herramienta útil que permita tomar notas en medio digital, de manera que sea como si de un papel se tratase (poder pintar con el ratón), que lo guarde online para poder acceder a ello desde cualquier punto y con un sistema que haga que las búsquedas sean eficiente? Si alguien conoce tal aplicación, ¡que me lo diga por favor!

miércoles, 9 de marzo de 2011

Escribir código fuente en Blogger

Hoy voy a probar a escribir código fuente en este post, de manera que quede bonito y visible para los usuarios.
Hasta hoy lo hacía de manera manual y rudimentaria, eligiendo el tipo de letra, los estilos y el color de fuente, pero claro, eso frena mucho la manera de escribir entradas, así que antes de seguir me he propuesto conseguir este punto.

La información la he encontrado aquí

Bueno, allá voy, escribiré un simple "HelloWorld.php" para probarlo:

<?php

echo "Hello world!";

?>


Actualización: en resumen y como recuerdo para mi, lo que hay que hacer para escribir en formato de código fuente en este blog es:
<pre class="brush: html">

</pre>

Y meter el contenido codificado, que se puede hacer aquí:
http://www.string-functions.com/htmlencode.aspx


Las distintas "brush" disponibles son:
  • CSS
  • Java
  • JavaFX
  • JScript
  • Php
  • Plain
  • Sql
  • Xml

miércoles, 2 de marzo de 2011

Singleton en PHP

Entre los patrones de diseño de programación, se encuentra el Singleton, consistente en pocas palabras en restringir la creación de objetos de una clase a una única instancia, que será la que se utilice en todo el resto del código.

Los requisitos para este patrón son dos:
  • Un único punto de acceso a la variable única o singleton, accesible desde todo el resto del código.
  • Constructor privado para que sólo la propia clase sea capaz de manejar la creación de si misma.

Hay aspectos avanzados en todo este patrón que no voy a tratar aquí, simplemente voy a contar una implementación básica y como pie de post mencionaré los otros aspectos.

Para crear un constructor privado en PHP:
private function __construct(){}

La clase tendrá una instancia de sí misma, privada y estática:
private static $instance

Y existirá un método para acceder a esta variable y que en caso de no existir, se creará. Este método será público para que sea accesible desde todos sitios y estático, pues en un principio no contaremos con ninguna instancia de la variable.
public static function getInstance(){
  if(self::$instance == NULL){
   self::$instance = new Singleton();
  }
  return self::$instance;
}

Poniendo todo junto, quedaría algo así:

class Singleton{

  private static $instance;

  private function __construct(){}

  public static function getInstance(){
  if(self::$instance == NULL){
    self::$instance = new Singleton();
  }
  return self::$instance;
}

  public function test(){
    echo "Cualquier cosa";
  }
}


Y para hacer uso de ello, sería de la siguiente manera:
Singleton::getInstance()->test();


Los aspectos más avanzados que decía que hay que tener en cuenta son la clonación y la serialización: todavía sería posible crear otras instancias del objeto Singleton mediante una clonación o serialización/deserialización. Para controlar esto se debe limitar el uso del método __clone y __wakeup lanzando un error en caso de que sean llamados