La Porra sigue creciendo

La Porra

En Febrero del año pasado, con intención de aprender la API de facebook y meterme en el mundillo del desarrollo de aplicaciones, creé junto a Tabi, una aplicación de la que ya he hablado en este Blog, La Porra

La temporada del 2007-2008, acabó con 841 usuarios registrados, que hicieron 2534 apuestas.

Esta temporada, la 2008-2009, el número de visitas a crecido mucho más. Ha habido más de 8000 usuarios registrados, que han hecho más de 16.000 apuestas en más de 100.000 visitas y han dejado más de 500 comentarios.

Además, durante esta temporada se nos ha unido Pello, y nos han llamado de varias empresas para ofrecernos colaboración, que puede que el año que viene haga crecer más a nuestra pequeña.

Cualquier idea que se os ocurra para hacer mejorara la aplicación, siempre es bien venida…

Curso de Aplicaciones Facebook en la Universidad de Oviedo

En noviembre del año pasado (más o menos) recibí un mail de un profesor de la Universidad de Oviedo, ofreciéndome impartir un curso de desarrollo de Aplicaciones para Facebook. Había contactado conmigo gracias a Txarly, creador de nvivo, a quien conocí en (creo) el Facebook Developer Garage de Madrid, al que fuí gracias a Javier Olivan, con quien contacté vía Tabi Vicuña… Que importantes son los contactos en este mundo…

Pero a lo que iba, que me surgió la oportunidad de dar el curso, y acepté. Ha sido el primer curso que he impartido para 30 personas (universitarios), y la experiencia ha sido impresionante. No me acordaba de lo que era la universidad y estas 2 semanas lo he recordado.

Han sido 30 horas de curso, 6 de teoría de redes sociales que impartió Txarly, y 24 técnicas (programación) que he impartido yo. Los asistentes, no tenían el nivel de programación que esperaba, y el temario ha sido más escaso de lo que yo pensaba, pero creo que todos hemos salido satisfechos de las clases.

Empecé impartiendo un pequeño curso de desarrollo web con XHTML, CSS, PHP, MySQL, que tuve que alargar más de lo debido, pero después de las bases, desarrollamos una serie de mini-aplicaciones que creo les gustó bastante. Aquí es donde podéis poner vuestros comentarios si no es así :-).

Para finalizar el curso, por grupos, han tenido que desarrollar una aplicación, y la verdad es que todos se lo han tomado muy en serio y con muchas ganas. El viernes veremos que es lo que han conseguido, pero desde luego, todos se ganaron un punto cuando en el último descanso del curso, ni siquiera salieron de la clase, se quedaron dándole duro a la aplicación. La verdad es que eso, a mi, me hizo mucha ilusión…

En fin, un placer impartir este curso, y con ganas de repetir algún otro por ahí.

Get y Set “mágicos” en PHP5

Este POST sólo puede interesar a programadores.
Cuando programo, me gusta hacer código limpio, y a veces, escribo muchas líneas de código que luego no uso. Esto, aunque me haga perder tiempo al principio siempre me facilita el trabajo de después, lo tomo como una inversión. Por ejemplo, si tengo una clase “noticia”, relacionada con una BBDD, de primeras le creo tantos atributos como campos tiene la tabla de la BBDD, y además los métodos guardar, borrar, modificar, buscar, dibujar etc. Pero además de esto, para hacerlo limpio, hasta ahora siempre me creaba por cada atributo, un metodo get y otro set.

class noticia {
  public $id;
  public $nombre;
  public function get_id() {
    return $this->id;
  }
  public function set_id($id) {
    $this->id = $id;
  }
  public function get_nombre() {
    return $this->nombre;
  }
  public function set_nombre($nombre) {
    $this->nombre = $nombre;
  }
  [...]
}

Esto, cuando tienes muchos atributos ( =campos en la tabla), se hace un poco tedioso y absurdo.
Hoy, leyendo la documentación de PHP5, me he dado cuenta que existe un método mágico (la sobrecarga) para no tener que hacer eso así. A ver si lo puedo explicar con un ejemplo:

class noticia {
  private $id;
  private $nombre;

  public function dame_nombre() {
  //   return $this->nombre;
    return $this->__get('nombre');
  }

  private function __get($atrb) {
    switch ($atrb) {
      case '':
          return '';
      case 'nombre':
          return 'Nombre: '.$this->nombre;
      default:
        return $this->$atrb;
    }
  }

  private function __set($atrb, $val) {
    switch ($atrb) {
      case '':
          return '';
      default:
        $this->$atrb = $val;
    }
  }

  private function __isset($atrb) {
    return isset($atrb);
  }

  private function __unset($atrb) {
    unset($this->$atrb);
  }

}

De esta manera, cada vez que accedemos desde fuera de la clase a los atributos “id” o “nombre”, pasarán por las funciones especiales __get o __set dependiendo de si estamos leyendolo o escribiéndolo. Y podemos poner todos los atributos que queramos sin tener que escribir nuevas funciones get y set para cada uno.
Esto me va a ahorrar mucho tiempo de ahora en adelante… 🙂

OJO: si accedemos desde dentro de la clase al atributo directamente, no pasará por la función mágica, pero podemos forzarlo haciendo $this->__get(‘nombre’);

MySQL, PHP, fechas e idiomas, vaya lio…

Como comenté en el POST anterior, ya hemos lanzado La Porra, pero ahora quiero escribir aquí algunas conclusiones técnicas que he sacado respecto al tema de las diferencias horarias y los idiomas de las fechas tanto en MySQL como en PHP.

El servidor que uso es un Solaris, creo (Joyent me lo dio gratis y configurado), y no sabía como cambiar la hora del sistema ni el idioma. Como no quería andar haciendo pruebas en el servidor de producción y no quería andar reiniciándolo, pensé en cambiar las configuraciones de PHP y MySQL. Aquí os dejo como lo he hecho:

Continuar leyendo “MySQL, PHP, fechas e idiomas, vaya lio…”

Capitulo VIII: Resumen y listado de artículos de ayuda

Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.

Artículos seguidos para realizar este articulo:

  • http://articles.slicehost.com/2008/4/25/ubuntu-hardy-setup-page-1
  • http://articles.slicehost.com/2008/4/25/ubuntu-hardy-setup-page-2
  • http://articles.slicehost.com/2008/4/30/ubuntu-hardy-ruby-on-rails
  • http://articles.slicehost.com/2008/5/9/ubuntu-hardy-mongrel-and-mongrel-clusters
  • http://articles.slicehost.com/2008/4/25/ubuntu-hardy-installing-apache-and-php5
  • http://articles.slicehost.com/2008/5/9/ubuntu-hardy-apache-rails-and-mongrels
  • http://articles.slicehost.com/2007/9/5/introduction-to-svnserve
  • http://articles.slicehost.com/2007/9/5/using-ssh-with-svnserve
  • http://articles.slicehost.com/2007/9/6/multiple-projects-and-subversion
  • http://articles.slicehost.com/2007/9/6/multiple-repositories-and-subversion

Otros Artículos de ayuda:
Continuar leyendo “Capitulo VIII: Resumen y listado de artículos de ayuda”

Capitulo VII: Capistrano el “deployador”

Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.

Vamos a por el siguiente paso, el que nos ayuda a “deployar”: Capistrano
Antes de nada, creamos la app Rails en nuestro proyecto:

rails project1 -c

La opción “-c”, añade todos los ficheros a subversion (pero sin hacer commit)

Ok, ahora, vamos a decirle a Subversion que ignore algunos ficheros que no queremos que gestione en las versiones:
Continuar leyendo “Capitulo VII: Capistrano el “deployador””

Capitulo V: Apache y PHP y RoR

Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.

Ahora, instalemos Apache:

sudo aptitude install apache2 apache2.2-common apache2-mpm-prefork apache2-utils libexpat1 ssl-cert

En la instalación, dará una pequeña advertencia:

apache2: Could not reliably determine the server's fully qualified domain name,
using 127.0.0.1 for ServerName

No te preocupes, vamos a solucionarlo. Abre el archivo de configuración de Apache:
Continuar leyendo “Capitulo V: Apache y PHP y RoR”

Capitulo IV: Mongrel

Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.

Instalemos Mongrel [Web oficial de Mongrel] (que es una gema, osea que simple):

sudo gem instal mongrel

Nos instalará alguna otra gema necesaria si no la tenemos ya instalada.
Mongrel tiene 3 instrucciones básicas (start, stop y restart), pero se puede combinar con muchos parámetros; por ejemplo, si queremos lanzar un Mongrel escuchando en el puerto 6000, y que esté en el entorno de producción:
Continuar leyendo “Capitulo IV: Mongrel”

Capitulo III: Instalar Ruby on Rails

Este es un artículo que forma parte de un grupo de artículos para aprender a configurar un servidor web que te pueden interesar.

Instalemos ruby y sqlite:

sudo aptitude install ruby1.8-dev ruby1.8 ri1.8 rdoc1.8 irb1.8 libreadline-ruby1.8 libruby1.8 libopenssl-ruby sqlite3 libsqlite3-ruby1.8

Necesitamos crear algunos simlinks:

sudo ln -s /usr/bin/ruby1.8 /usr/bin/ruby
sudo ln -s /usr/bin/ri1.8 /usr/bin/ri
sudo ln -s /usr/bin/rdoc1.8 /usr/bin/rdoc
sudo ln -s /usr/bin/irb1.8 /usr/bin/irb

Veamos que version de ruby tenemos:
Continuar leyendo “Capitulo III: Instalar Ruby on Rails”