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

lunes, 28 de febrero de 2011

Wii por HDMI ¿Posible?

Pues tras mirar unos minutillos por internet, parece que si que es posible conectar nuestra videoconsola Wii a una pantalla a través de un cable HDMI, pero eso sí, es caro: la opción más rápida sería comprar el adaptador que venden desde Neoya y eso supone unos 40$

Y que nadie se piense que con esto va a tener alta definición en la Wii... NO, simplemente es un adaptador que nos permite meter la señal de la Wii por un puerto HDMI, pero los 480p seguirán siendo 480 y nada más.

¿Alguien lo ha probado?
¿Alguien conoce otro método?

Gestionar tus juegos de Wii

La aplicación WBFS te proporciona una interfaz gráfica para tu disco duro formateado para la Wii, con el sistema WBFS.

En otras palabras: una vez seas capaz de cargar juegos en la Wii desde una unidad externa, será un requisito que esta unidad esté formateada con WBFS para que sean reconocidos. Sin ser entendido en el tema (todavía), no podrás gestionar los ficheros de esa partición desde un PC como si de un disco duro cualquiera se tratara, de manera que necesitarás una aplicación que te ayude con esta gestión. WBFS es esa aplicación

¿Y por qué mi Android no utiliza mi WiFi?

Esa es la duda que me corroe... tengo mi router wifi, con el que conecto todos los ordenadores de la casa. Sin embargo, cuando se trata de móviles, todo falla. Se conectan con una señal óptima, se autentican y se les asigna IP... todo perfecto hasta que intentas realmente acceder a internet. En ese punto todo son esperas y esperas y finalmente, fallo en la conexión.

¿Alguna sugerencia?

Con la Wii también tuve mis problemas cuando cifraba la conexión con WPA, pero después de quitárselo y pasar a un nivel inferior, WEP, parece que todo funcionó. No así con los teléfonos.

Para más referencia, el teléfono en cuestión es un HTC Magic liberado y rooteado con Cyanogen.

Y no puedo terminar el post sin dejar mi teoría: tengo un router que es una mierda (en su día sería bueno, pero ahora ya tiene unos cuantos años) y que debería cambiar por uno más decente.

viernes, 28 de enero de 2011

Insertar varias filas en MySQL con Java

Ayer me preguntaban como se podían meter varias filas directamente en una base de datos MySQL a través de Java. A mi, lo único que se me ocurrió es preparar un string con tantos valores como filas queramos meter:

String s = "INSERT INTO table (aa, bb ,cc) values (?,?,?), (?,?,?) , (?,?,?) , (?,?,?)...."

y así tantas veces como filas queramos meter. Todo esto se podría automatizar con un método que devolviera ese string automáticamente pasándole el número de filas que quisiéramos (escrito rápido y sin mucha comprobación):

public String createInsert(int rows){
   String s = "INSERT INTO table (aa, bb, cc) values ";
   for(int i = 0; i < rows; i++){
      s += "(?,?,?),"
   }
   //Aquí habría que quitar la última coma
}

Pero hoy, la misma persona que me preguntó me informa que todo esto ya está preparado en Java y que se puede hacer de manera mucho más sencilla... así que aquí dejo una mejor solución (lo de antes no eran más que indagaciones):

String s = "INSERT INTO table (aa, bb ,cc) values (?,?,?)"
PreparedStatement st = connection.prepareStatement(s);
int rows = 20;
for(int i = 0; i < rows; i++){
   st.setString("a string")  //or whatever value: int, date, null
   st.setString("a string")  //or whatever value: int, date, null
   st.setString("a string")  //or whatever value: int, date, null
   st.addBatch();      //añadir una fila
}
st.executeBatch();

lunes, 24 de enero de 2011

Grub.cfg en lugar de menu.lst

Donde dije digo digo Diego... y dónde antes se editaba /boot/grub/menu.lst ahora se edita /boot/grub/grub.cfg

Así que si quieres cambiar las opciones de arranque de GRUB de tu Ubuntu 10.04, ya sabes, no busques por menu.lst porque no lo encontrarás, busca y edita grub.cfg en su lugar