Zumbe.net

Recorrer un Array en PHP

22 Agosto

Para recorrer un array en PHP tenemos tres opciones. Cada una es apropiada para distintas situaciones.

1: Bucle For

Este bucle es apropiado para arrays con un índice numérico. Si no hemos definido índices a nuestro array, por defecto será numérico.
Requiere tres parámetros, el primero es dónde empieza a contar, el segundo hasta cuándo, y el tercero las variaciones que va sufriendo la variable en cada iteración.

Código (php)
  1. $vector = array(‘a’,‘b’,‘c’);
  2. $vector[] = ‘d’;
  3. $vector[] = ‘e’;
  4. for($i=0;$i<count($vector);$i++)
  5. echo "<p>El vector con indice $i tiene el valor $vector[$i] </p>";

ver resultado

Otra ventaja de este bucle es que podemos recorrerlo parcialmente, o ir botándonos elementos. Por ejemplo, vamos a recorrer un array desde el elemento 3 hasta el 9, de dos en dos.

Código (php)
  1. $vector = array(‘a’,‘b’,‘c’,‘d’,‘e’,‘f’,‘g’,‘h’);
  2. $vector[] = ‘i’;
  3. $vector[] = ‘j’;
  4. for($i=3;$i<=9;$i+= 2)
  5. echo "<p>El vector con indice $i tiene el valor $vector[$i] </p>";

ver resultado

2: Bucle Foreach

Este bucle es el más indicado para arrays con índices no numéricos, aúnque sirve también para recorrer fácilmente uno numérico. La ventaja es que da igual cuántos elementos tenga el array, o cómo sean; foreach los recorrerá sin problema.

Código (php)
  1. $vector = array(‘uno’=>‘a’,‘dos’=>‘b’,‘tres’=>‘c’,‘cuatro’=>‘d’);
  2. foreach($vector as $c=>$v)
  3. echo "<p>El vector con indice $c tiene el valor $v </p>";

ver resultado

3: Bucle While

Para recorrer un bucle con índices, podemos optar también por el bucle While. Pero tendremos que hacer uso de las funciones list y each.

Código (php)
  1. $vector = array(‘uno’=>‘a’,‘dos’=>‘b’,‘tres’=>‘c’,‘cuatro’=>‘d’);
  2. while (list($clave, $valor) = each($vector)) {
  3. echo "<p>El vector con indice $clave tiene el valor $valor </p>";

ver resultado

Elije en cada ocasión la que más te convenga, pero ten siempre en mente todas las opciones.

2 comentarios | tags: PHP, Código, General

Trabajar con clases y objetos en PHP

22 Agosto

Programacion orientada a objetosEste verano comencé a orientar todos mis scripts a Objetos. Esta metodología es muy recomendada para cualquier proyecto con más de 100 líneas de código. Te permite agrupar en entidades tus herramientas de trabajo, de esta forma tu código es fácilmente reutilizable, mucho más comprensible, y mejor estructurado.

Voy a tratar de explicaros en qué consiste, y cómo programar clases y objetos en el lenguaje PHP. Advierto que muchas veces este concepto es complicado; a mí me costó mucho comprenderlo, y lo hice gracias a JavaScript y MooTools, que tiene un mejor soporte de objetos.

Sigue leyendo »

5 comentarios | tags: Código, General

CURLOPT de CURL

21 Agosto

Aúnque el título parezca más bien un trabalenguas proviniente del mismísimo Chiquito de la Calzada, hoy voy a comentar algunas potentes opciones que nos brinda la biblioteca CURL.

Para mí CURL era un auténtico desconocido, cuando en el anterior host no tenia ni fopen para urls externas. Pero una vez lo conoces se convierte en una herramienta muy potente y útil.

Lo primero a realizar en nuestro código, es siempre la inicialización de curl, con la función curl_init()

Código (php)
  1. $ch = curl_init();

Hecho esto tendremos en la variable $ch el identificador de nuestra sesión CURL. Ahora sólo nos tenemos que dedicar a marcarle nuestras preferencias para la conexión. Voy a mostraros a continuación las que me parecen más importantes, pero recordad que hay muchas más.

Código (php)
  1. // Indicamos la URL a la que queremos acceder
  2. curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
  3. // Si la conexión tarda más de 30 segundos, que no siga
  4. curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);
  5. // Si la conexión falla, que lo haga de forma "silenciosa"
  6. curl_setopt($ch, CURLOPT_FAILONERROR, 1);
  7. // Permitir que la conexión se redirija si le es indicado
  8. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
  9. // El resultado lo quiero almacenar en una variable, en lugar de que lo imprima por pantalla
  10. curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  11. // Voy a enviar contenido en forma de variables POST
  12. curl_setopt($ch, CURLOPT_POST, 1);
  13. // Estos son los campos POST, en forma de array asociativo
  14. curl_setopt($ch, CURLOPT_POSTFIELDS, array(‘nombre’=>"Alex",‘apellido’=>"Barros"));
  15. // Voy a finjir que tengo una serie de Cookies, incluida la de sesión
  16. curl_setopt($ch, CURLOPT_COOKIE, ‘nombre=Alex; galleta=chocolate; PHPSESSID=0123456789qwertyasdfg9876543210′);
  17. // Foy a finjir que provengo de otra web, la que yo quiera
  18. curl_setopt($ch, CURLOPT_REFERER, ‘http://zumbe.net/’);
  19. // Voy a indicar qué User Agent estoy usando. Por ejemplo el de un iPhone
  20. curl_setopt($ch, CURLOPT_USERAGENT, ‘mozilla/5.0 (iphone; u; cpu like mac os x; en) applewebkit/420+ (khtml, like gecko) version/3.0 mobile/1c25 safari/419.3′);

Por último, ejecutamos la sesión, y cerramos la misma.

Código (php)
  1. // Almaceno en la variable $resultado el codigo de la pagina
  2. $resultado = curl_exec($ch);
  3. // Se cierra el recurso CURL y se liberan los recursos del sistema
  4. curl_close($ch);

Sólo con esas herramientas ya podemos hacer un proxy muy completo, que nos haga lo que nosotros queramos.
Ahora sólo es echarle imaginación, ingenio y paciencia.

15 comentarios | tags: Código, General

Formularios demasiado extensos

20 Agosto

hate_forms.jpgYa estoy harto de ver esos extensos formularios de registro, donde te piden hasta la talla de calcetines!

Lo peor es que muchas de estas webs pertenecen a la corrriente 2.0, que tanto presume de simplicidad. Pero siempre se escapa este detalle, para mí fundamental en una herramieta online. Y no nos engañemos: los registros son un coñazo, y más cuando llevas más 50 cuentas distintas por la red.

Opino que de entre los potenciales usuarios de un servicio online, siempre existe una serie de filtros, que les hace seguir, o largarse con viento fresco.

Esto provoca que dependiendo de muchos factores, el servicio triunfe, y se consiga un elevado porcentaje de éxitos, o no.

Por poner un ejemplo, en un determinado servicio online (mal planificado), han entrado 100 personas, y ha ocurrido lo siguiente:

  • Las cien personas son expuestas a la página de presentación del servicio
  • 15 personas no les ha interesado el tema, no se ha captado su atención o el diseño les ha repelido [-15]
  • 8 personas les ha interesado, pero al no encontrar rápidamente cómo participar, se van. [-23]
  • 36 personas han llegado al formulario de registro, y al ver lo extenso y complejo que es se van [-59]
  • 4 personas han comenzado a rellenar el formulario, pero llegados a un punto, se arrepienten y se van [-63]
  • 9 personas han rellenado el formulario, pero algo les ha dado error, y tienen que revisarlo. No quieren [-72]
  • 12 personas lo han rellenado, pero al finalizar no se le indica de forma sencilla cómo comenzar el uso inmediato del servicio [-84]

Hemos acabado con el 16% de usuarios. Un numero francamente desalentador. Para resolverlo, evidentemente, hay que dedicar un tiempo a la planificación de la web.

Y en mi opinion uno de los puntos más importantes en la planificación cuando hay un registro, es que el registro tienda a CERO. Si es evitable, se evita, y sinó un máximo de tres campos a rellenar.

En ninguna de las herramientas que he creado se pide datos, excepto ZumbeHome, donde se piden 3 (+1 repetido).

Y dado que este es un tema que me remueve tanto la conciencia, ando día y noche pensando en el sistema perfecto de registro, donde no haga falta nada por parte del usuario para que use regularmente su servicio.

Tal vez tirando de OpenID… ?

3 comentarios | tags: Páginas Web, General

GStat se resiente

20 Agosto

gstat_muere.jpgHa llegado el momento que imaginaba que llegaría, pero rezaba por que nunca llegara.

GStat está consumiendo demasiados recursos de CPU en mi servidor compartido. Y para dejármelo claro mi servicio de hosting me ha enviado un mail, advirtiéndome de que si sigo así me cortan el grifo.

Por suerte tenía esto (más o menos) previsto, y ya estoy tomando medidas al respecto.

En primer lugar ya he limitado el número de registros por blog/día cada blog y 12horas a 50. Ya no aumentará de una forma tan exagerada la cantidad de nuevos registros… pero eso mejor que nada. Si esto resulta, tal vez en el futuro aumente la cifra a 100, o más, pero ahora prefiero no abusar.

La segunda medida está aún en proceso. Hoy mismo había comenzado a programar un sistema de caché, de tal forma que las gráficas se almacenen en esta caché, que será renovada diariamente.

EDITO: Ya ha sido implementado 

La solución que el servicio de host me propone es contratar un servidor dedicado, pero como ya he vivido de cerca con gafeman, están realmente caros! y mi economía no es especialmente boyante.

En fin, qué se le va a hacer… si alguien con servidor dedicado quiere emprender un GStat paralelo que registre muchos más datos, ya sabe dónde está el código.

6 comentarios | tags: GStat, Proyectos, General

De cómo hackear y después arrepentirse

19 Agosto

codigo.jpgSí, lo confieso. Hoy me he comportado como un auténtico hacker (aunque tampoco querría dármelas).

Tras recibir una sugerencia para almacenar la procedencia de los visitantes de GStat, con el fin de obtener información aún más específica, me puse a investigar cómo obtener una geolocalización a partir de una IP.

Mi sorpresa fue que no existía apenas software con este fin, y menos aún libre. El servicio más eficaz, que daba una infromación muy certera y específica, tenía como medida anti-robots un sistema de registro mediante e-mail, con lo que obtenias 50 oportunidades al día.

Esto me interponía dos barreras: 50 al día no puede sincronizarse con los 30.000 registros diarios de GStat. Además el sistema de registro mediante mail obligaría a hacerlo a mano, cada día, y olvidarse de un robot.

Sin embargo, donde podría ver barreras, yo ví desafíos.

Sigue leyendo »

11 comentarios | tags: Código, Software libre, General

Curiosidades + adelantos de GStat

19 Agosto

Os traigo algunas curiosidades y algunos adelantos de GStat!

iphone.jpg

De los 300.000 registros aproximados, sólo 7 provienen de un iPhone (0.002%). Influye seguramente que sólo se comercializa en EEUU. Por supuesto figura el Sistema Operativo Mac OS X, y el navegador Safari.

User Agent de un iPhone:
mozilla/5.0 (iphone; u; cpu like mac os x; en) applewebkit/420+ (khtml, like gecko) version/3.0 mobile/1c25 safari/419.3

wii.jpg

En cambio, la nintendo Wii tiene una cantidad de 52 registros, situándose en un 0.17%. El navegador utilizado es el Opera, y el SO es… el propio nintendo Wii ¿?. No figura.

User Agent de Nintendo Wii:
opera/9.10 (nintendo wii; u; ; 1621; es-es)

psp.jpg

Continuamos aumentando si nos vamos a la sony PlayStation Portable. Nos encontramos con 193 registros, el 0.64%. Navegador netscape, y de nuevo SO la propia consola.

User Agent PlayStation Portable:
mozilla/4.0 (psp (playstation portable); 2.00)

nokia.jpg

Y volviendo a bajos números, los dispositivos Nokia han realizado 23 registros, el 0.008%.

User Agent de dispositivos Nokia:
mozilla/4.0 (compatible; msie 6.0; symbian os; nokia n70/5.0638.3.0.1; 9399) opera 8.65 [es]

Si queréis que busque más curiosidades, comentadme qué es lo que os quita el sueño.

Como adelantos de GStat, pronto tendremos gráficas comparativas, gráficas en función del tiempo, y probablemente se incluyan datos de geolocalización.

Quiero agradecer una vez más a todos aquellos que están colaborando colocando el código en su web. Mil gracias a todos, este proyecto sigue adelante por todos y cada uno.

Ningún comentario | tags: GStat, General

Centralización máxima

14 Agosto

Como algunos ya sabréis, estoy planeando una centralización de todos los contenidos de Zumbe.

Consistiría en sustituir todos los blogs que tengo distribuidos por ahí, en uno solo, situado en Zumbe.net. De esta forma me es más cómodo escribir, capto mejor a los lectores, actualizo más amenudo, etc.

He estado toda una noche trabajando en el nuevo Skin que unificará todo Zumbe. Quiero que sea moderno, 2.0, interesante, etc. Por ahora me va gustando el resultado

http://zumbe.net/bin/next/

A vosotros qué os parece? cambiarias algo? tenéis alguna idea?

9 comentarios | tags: Proyectos, Páginas Web, General

Reconexión

13 Agosto

Ayer llegué del festival. Ha sido toda una experiencia para guardar en mi mente. The Prodigy despuntó con su locura, aúnque fué una aparición algo breve.

Nada más llegar a casa, encendí el ordenador para seguir con GStat, hay algunas gráficas nuevas, y la mayoría han sido retocadas un poco más, especialmente la de idiomas, que ahora muestras muchos más.

Estoy pendiente de tapar un agujero que califica de ‘Unknown’ muchos ‘Mac OS’ (no se por qué).

Estoy en estos instantes trabajando en el código js que me enviará la resolución de los usuarios (tan demandada), gracias a Gafeman por el empujoncito.

Al tiempo que escribo este post, superamos los 120.000 registros, y crece a un rito aproximado de 40.000 al día.

He de aclarar que el sistema está programado para no repetir al mismo usuario durante 5 días. Quiero que opinéis qué os parece: mucho, poco, adecuado…

Está claro que repetir tienen que repetir, porque la intención es generar gráficas en función del tiempo. Pero no se si 5 días es demasiado poco para seguir el ritmo de cambio.

Sigo trabajando para liberar el código, disculpad que tarde tanto.

Un saludo a todos, recordad que aprecio todas vuestras opiniones. Contactad conmigo por cualquier vía si tenéis alguna observación.

Ningún comentario | tags: GStat, Proyectos, Mi vida, General

Abandono el boom un par de días

10 Agosto

Esta misma noche me voy al festival de música electrónica Creamfields en Almería. De modo que GStat va a tener que seguir su andanza sin ayuda un par de días.

La semana que viene me pondré a tope, para empezar a preparar más features, y ofrecer un servicio de máxima calidad a todos los interesados. Los dos primeros objetivos: trabajarme el JavaScript, y hacer las primeras betas de gráficas en función del tiempo.

Quiero agradecer sentidamente a todos aquellos que publicáis sobre GStat en vuestros blogs (he visto un par en italiano por ahí).  El proyecto no podría salir adelante sin la ayuda global, y por ahora no está nada mal.

Especial agradecimiento a Alvy de Microsiervos, y a Juan Diego Polo de Wwwhatsnew.

Ya he contratado un plan de server mayor, con transferencia ilimitada. De modo que no me tengo que preocupar este finde por que se pueda exceder.

Un saludo a todos, y Muchas Gracias por la acogida que ha tenido GStat.

6 comentarios | tags: GStat, Proyectos, Mi vida, General

Zumbe.net es administrado por WordPress
Puedes suscribirte a las Entradas (RSS) o los Comentarios (RSS).
Esta obra se encuentra bajo una licencia de Creative Commons.