Archive of articles classified as' "desarrollo"

Back home

How to name interfaces / abstract classes with namespaces

14Nov11

I’m building a new library with the aim to parse venues from Internet (code on Github). Well, aside from the purpose or usage of the library I’m using this project development to try to write the domain oriented code and by the way I’m facing some arquitectural problems.

Basically, in the past the most common convention for naming interfaces or abstract classes was the following:

For the interface (lib/domain/venue/interface.php):

interface venues_domain_venue_interface {}

And for the abstract (lib/domain/venue/abstract.php):

abstract class venues_domain_venue_abstract {}

Now, I want to port this code to PHP 5.3 Namespace format. The translation is not that direct, note that “abstract” and “interface” are reserver keywords and I can not use then to name my clases.

For the interface (lib/Domain/Venue/Interface.php):

use Venues\Domain\Venue;
 
interface Interface {}

And for the abstract (lib/Domain/Venue/Abstract.php):

use Venues\Domain\Venue;
 
abstract class Abstract {}

That will simply break with a PHP Parse Error because the “Interface” or “Abstract” are reserver keywords.

Researching on Internet I’ve found the following options:

 

1. Prepend the domain name

For the interface (lib/Domain/Venue/VenueInterface.php):

use Venues\Domain\Venue;
 
interface VenueInterface {}

And for the abstract (lib/Domain/Venue/VenueAbstract.php):

use Venues\Domain\Venue;
 
abstract class VenueAbstract {}

 

2. Append the domain name

For the interface (lib/Domain/Venue/InterfaceVenue.php):

use Venues\Domain\Venue;
 
interface InterfaceVenue {}

And for the abstract (lib/Domain/Venue/AbstractVenue.php):

use Venues\Domain\Venue;
 
abstract class AbstractVenue {}

 

3. Prepending “I” or “A”

For the interface (lib/Domain/Venue/IVenue.php):

use Venues\Domain\Venue;
 
interface IVenue {}

And for the abstract (lib/Domain/Venue/AVenue.php):

use Venues\Domain\Venue;
 
abstract class AVenue {}

 

4. Append “Class”

For the interface (lib/Domain/Venue/InterfaceClass.php):

use Venues\Domain\Venue;
 
interface InterfaceClass {}

And for the abstract (lib/Domain/Venue/VenueClass.php):

use Venues\Domain\Venue;
 
abstract class VenueClass {}

 

References:

No Comments

Get Facebook access_token

2Nov11

I’m going to try to document the experience of creating an access_token so my app. can post messages on my Facebook Page. As a summary, I have the following elements:

1) Facebook Page

This is the Doonish Facebook Page. It’s a page that describes the project and that try to get as many fans as possible.

2) Facebook Application

In the other side I’ve created an application for allowing the remote post to my page. This is application that will do that.

What I want to do is promote each day a new question from doonish into my Doonish Facebook Page.

 

How to automatically post in a Facebook Page?

1) Get application “access_token”

The first step is to get application “token_id” so we can post to the Facebook Page.

https://www.facebook.com/dialog/oauth?
    client_id={facebook-app-id}&
    redirect_uri={your-url}&
    scope=manage_pages&
    response_type=token

That will return with something like the following:

access_token={your-access-token}

2) Find the page “access_token”

Then, using the above token, you can go to the following location:

https://graph.facebook.com/me/accounts?
    access_token={your-access-token}

And you will see something like the following:

{
    "data": [
    {
        "name": "{your-page}",
        "access_token": "{page-token-id}",
        "category": "Website",
        "id": "{page-id}"
    },
    ...
    ]
}

3) Write the actual script

Whith the above “page-token-id” you can then write a PHP snippet that can do something like the following:

/**
 * Promote
 *
 * This method will automatically post a message on the facebook wall.
 *
 * @param integer $questionId The id of the question that we want to 
 *     promte.
 */
public function promote($questionId)
{
    $message = $this->generateMessage($questionId);
 
    $facebook = new Facebook(
        array(
            'appId'  => $this->facebookConfig['app_id'],
            'secret' => $this->facebookConfig['secret'],
            'scope'  => $this->facebookConfig['scope'],
            'cookie' => $this->facebookConfig['cookie'],
            'acceptUrl' => $this->facebookConfig['acceptUrl']
        )
    );
 
    $status = $facebook->api(
        '/' . $this->facebookConfig['page_id'] .'/feed',
        'post',
        array(
            'access_token' => $this->facebookConfig['token_id'],
            'message' => $message,
            'cb' => ','
        )
    );
}

Hope this code is useful for someone, it took me a while to figure out the right way to do it. I’ve used Facebook PHP SDK and I’ve got all the information from the Authentication page from Facebook Developers.

No Comments

doonish: Status update

2Jul11

Llevo un tiempo dedicando esfuerzo a doonish.es, el juego de preguntas y respuestas basado en Trivial Pursuit y ahora me he dado cuenta de que he dejado un poco abandonado el blog.

Tan solo resumir un poco lo que he estado movido entre manos durante estos últimos meses:

1) Trato especial a los usuarios que vienen de Google

Nos dimos cuenta de que nos llegan algunas visitas de Google y antiguamente si el usuario hacía click en nuestra página entraba directamente a la página de la pregunta. Ahora no, ahora si el usuario no tiene cookies (no es un usuario que conocemos) se le muestra directamente la respuesta. Esto lo hacemos porque entendemos que en este caso concreto el usuario quiere conocer la respuesta a la pregunta, así que intentamos satisfacer de algún modo su necesidad.

Ejemplo: ¿Cuál es la capital de Alaska?

Esto es lo que ve un usuario que conocemos:

Esto es lo que ve un usuario que no conocemos y que viene de google:

2) Ya tenemos SEO

Salió sin buscarlo. Me estuve intercambiando algunos correos con Manel Pérez. Aproveché nuestro buen trato y sus grandes conocimiento (trabaja en el departamento de SEO de Softonic) para preguntarle algunas dudas sobre  SEO. Fuimos charlando y al final vimos que había interés por ambas partes de que se incorporara al equipo de doonish. Ya tenéis la información en la página de “Sobre nosotros” de doonish.

3) API

En un tiempo récord he escrito una API para doonish. Es muy sencilla pero permite a desarrolladores acceder a la base de datos de preguntas de doonish. De momento no tengo muy claro como enfocarlo y la he hecho privada. Si a alguien le interesa aquí dejo cinco céntimos sobre mas o menos que endpoinds se han habilitado:

question.json
  • http://doonish.es/api/question.json
question/[CATEGORY].json
  • http://doonish.es/api/question/cine.json
  • http://doonish.es/api/question/corazon-y-famosos.json
categories.json
  • http://doonish.es/api/categories.json
Esto en principio va a permitir a otros desarrolladores jugar con nuestra base de datos. De momento la API es privada por lo que no se puede ver el contenido, adjunto una imagen para que os hagáis una idea.
Y bueno, todo esto lo acompaño con más de 2000 preguntas y ya casi 500 usuarios. Como decimos en Catalán: “mica en mica s’omple la pica” :) !
No Comments

Configurar l’idioma Català a Linux

30Jul10

Estic fent algunes probes per a mostrar les dates a PHP en Català. Al meu servidor local tot funcionava correctament, pero al passar-ho al servidor remot ha deixat de funcionar.

El codi font es el següent (en PHP):

setlocale(LC_ALL, $lang . "_ES.UTF-8");
echo strftime("%A %e de %B del %Y a " . $translate->_("las") . " %H:%M", strtotime($time));

En castellà funcionaba correctament, pero al passar-ho al català no funciona.

Per a que funcioni, he hagut de fer la següent modificació: Obrir el fitxer /var/lib/locales/supported.d/local i afegir la darrera línea.

es_ES.UTF-8 UTF-8
ca_ES.UTF-8 UTF-8

Despres de desar el fitxer, he executat la següent comanda:

sudo dpkg-reconfigure locales

I ja ha funcionat, ja puc veure la data tant en català com en castellà :) !

No Comments

Iterar sobre array en PHP y Javascript

26May10

¡Porfin lo encontré!

En PHP hacemos el típico foreach:

foreach($array as $key => $value) {
echo "clave = " + $key;
echo "valor = " + $value;
}

Y en Javascript también se puede hacer del siguiente modo:

for(i in array) {
alert("clave = " + i);
alert("value = " + array[i]);
}
No Comments

Por qué Zend Framework?

26Dec09

El otro día recibí un comentario de un lector de mi blog y me preguntaba:

Pau, por que  Zend Framework? Vi que hace un tiempo habías hecho un post sobre CakePHP.

Voy a dar la respuesta a este comentario en forma de post. Es cierto que había escrito un post sobre CakePHP. Un amigo (Xavier Orduña) me lo presentó y lo probé. Entonces aún no conocí­a ningún framework de desarrollo y, al topar por primera vez con Cake, me pareció una manera muy rápida de agilizar el desarrollo de una aplicación web.

Un tiempo más tarde, y sin haber profundizado con Cake, probé Zend Framework. También me lo recomendó otro amigo (Claudio Cossio) y tengo que confesar que me gustó más que Cake.

Ya llevo un tiempo desarrollando con Zend y después de un par de proyectos, puedo sacar las siguientes conclusiones. Antes advierto que no soy un experto en frameworks, he tocado mas o menos en profundidad Zend, he jugado con CakePHP y Django (para Python) y me han hablado muy bien de Symphony, así que ya aviso que mi punto de vista va a estar desviado.

  1. Documentación correcta: Acostumbro a consultar su documentación a menudo y está bastante bien, con ejemplos bastante bien explicados y sobretodo prácticos.
  2. Sencillo: Es relativamente sencillo de montar una aplicación básica con Zend Framework. Si luego quieres ir un poco más allá ya en cuanto a complejidad, ya vas a tener que mirarte la documentación.
  3. Completitud de módulos: Tiene módulos para casi todo. Una vez empiezas a programar con él, cada vez que revisas los módulos encuentras alguno que te va a ser útil.
  4. Zend está detrás: El hecho de que Zend, la compañía que desarrolla PHP está detrás de este framework me da una cierta seguridad de que será mantenido y que dará soporte por mucho tiempo.
  5. Patrones de base de datos: Me encanta el patrón de diseño que usa ZF para acceso a la base de datos: Table Data Gateway y Row Data Gateway. Me imagino que la mayoría de frameworks deben usar cosas parecidas, pero la manera en que lo resuelve Zend Framework es especialmente cómoda para el programador.

Por último, cito las palabras del amigo Carlos Buenosvinos en una de las discusiones del Grupo de programadores PHP Barcelona, en respuesta a “¿Qué framework PHP usáis?“:

Has de considerar, la comunidad, la continuidad, performance, si está basado en componentes o no (migrar o nueva aplicación desde 0), contenido en la red, libros (material didáctico), oferta de desarrolladores (en el caso de que quieras contratar), funcionalidades totales, funcionalidades que se adaptan a tus requerimientos, funcionalidades que le faltan para tu aplicación, si tienes desarrolladores en tu equipo que ya conozcan algún framework, soporte con PHP 5.3 (compatibilidad hacia atrás, sin compatibilidad, …), etc. No te dejes llevar por modas, como siempre, la respuesta es depende.

Pues nada, saludos y disfruten de las vacaciones de navidad (quien las tenga!).

No Comments

Resumen de iWeekend Barcelona 09

24Nov09

Este pasado fin de semana he tenido la oportunidad de asistir a iWeekend Barcelona. El evento se ha celebrado en Barcelona Activa y ha agrupado a más de 50 emprendedores que se han repartido para tirar adelante 4 proyectos.

En mi opinión, la fase de selección de proyectos es una de las partes más interesantes de iWeekend. Los emprendedores proponen la idea y tienen que seducir a los asistentes para atraer los recursos que la desarrolladán durante el fin de semana.

A continuación describo los proyectos que se han llevado a cabo durante este di

  • Vox Populi: Sistema de recolección y gestión de incidencias para ayuntamientos via móvil
  • Partido de Internet: Movimiento democrático que se constituye como partido político para regenerar la democracia
  • GoodBuyAmigo: Plataforma donde pedir consejo a tus amigos antes de hacer una compra online
  • alertas.de Servicio de alertas al móvil, correo electrónico y redes sociales a partir de unas preferencias especificadas

He formado parte del equipo que ha desarrollado alertas.de, junto con Miguel Florido y Santiago Lizardo. Hemos tenido la mala suerte de no poder formar parte de un grupo multidisciplinar, pero que nos ha permitido tirar adelante el proyecto con mucha agilidad.

De izquierda a derecha: Santiago, Pau y Miguel

En el otro lado del charco, nuestro estimado socio y amigo Claudio Cossio ha promovido el iWeekend en México obteniendo un éxito rotundo, tanto de asistencia como de repercusión en toda latinoamerica. ¡Enhorabuena!

Notas:

  • He recopilado algunos post con opiniones del iWeekend.
  • En Barcelona Activa me encontré con los chicos de Eventuo, hacía ya un tiempo que no nos veíamos y hemos dicho de quedar para comer para ponernos al día.
No Comments

PHP Conference 2009

15Oct09

La gente de PHP Barcelona se han animado, como cada año, a montar una la PHP Conference 2009, una conferéncia relacionada con PHP que se celebrará el 30 y 31 de Octubre en el Citilab, en Cornellà. Como podéis ver, el planning parece muy interesante.

Seguramente asistiré, como mínimo el sábado. Para los amantes del Facebook han creado el evento. Si os habéis decidido a venir apuntaros e invitar a todos vuestros colegas.

http://www.facebook.com/event.php?eid=150863109670

De cara a la promoción podéis seguir también a su twitter:

http://twitter.com/phpbarcelona

Han empezado a usar el topic #phpbcn2009 si alguno se anima a hablar de la conference usándolo más promoción para el evento de una manera sana y gratuita.

¡Espero veros ahí!

No Comments

API de Google Translate

9May09

Esta mañana he jugado con la API de google translate. Ha sido bastante sencillo ya que hay muchos ejemplos en la web.

En mi caso, tengo una aplicación bilingue donde los usuarios pueden escribir la descripción de un producto. La idea es que al cambiar de idioma se cambie el idioma de todo (incluido el texto insertado por el usuario).

Aquí os dejo el código de pruebas:

<script type="text/javascript" src="http://www.google.com/jsapi"></script>
 
<script type="text/javascript">
    google.load("language", "1");
</script>
 
<script>
    function translate(source, dest) {
        var div_source = document.getElementById("my_div_" + source);
        var div_dest = document.getElementById("my_div_" + dest);
        alert(div_source.value);
        google.language.translate(div_source.value, source, dest, function(result) {
            alert(result.translation);
          if (!result.error) {
            div_dest.value = result.translation;
          }
        });
    }
</script>

Pues esto es todo.

2 Comments

JAVA Method: boolean isInteger()

5Feb09

Hoy tenía la necesidad de ver si un texto es un entero o no. He estado buscando un buen rato en google hasta que he dado con ella. Aquí os la dejo:

private static boolean isDouble(String str) {
        try {
                double v = Double.parseDouble(str);
                return true;
        } catch(NumberFormatException e) {
                return false;
        }
}
 
private static boolean isInteger(String str) {
        try {
                int v = Integer.parseInt(str);
                return true;
        } catch(NumberFormatException e) {
                return false;
        }
}

It works! :)

No Comments