You know the problem… “We’d like users to be able to authenticate using Facebook so they don’t have to create an account on our system.”

Here at Secret Source Ltd we do lots and lots of WordPress development and lately, nearly every project has required some sort of Facebook integration, the ability to log in with your Facebook account in particular. Fortunately there are multiple plugins to help you with that. We’re quite fond of the Nextend Facebook Connect plugin as it is very easy to configure and includes clear instructions on how to create a Facebook app and get everything working like a charm.

For me, though, there has always been one particular point of pain that none of these plugins have figured out how to work around: unless you want to be responsible for a Facebook app for your client’s logins, your client needs to give you THEIR Facebook credentials so you can login AS THEM to create and configure the Facebook login app.

However, I recently figured out a way around this. I know I may be late to the party but I’ve been unable to find this approach documented anywhere, or maybe I just didn’t search hard enough.

The approach is as follows:

  1. Log in to the Facebook Developer portal as yourself.
  2. Create a new app and configure it for your client, using their logo, domain, and everything.
  3. Go to Roles -> Administrators -> Add Administrators and add your client as an administrator. Note that you and your client do not need to be friends in order for you to add them, but you will need to know either their Facebook ID or Facebook “username”.

Once your client accepts your invitation to be an administrator, they can then go to the Roles tab and remove YOU from the list of administrators. The app is now THEIRS and your job is done! Note that if needed, the client can always add you back as an administrator.

This, to me, seems like a very reasonable way to have set this up and I can, for once, say I am quite happy with Facebook’s developer tools.

System Configuration

I have a CentOS 7 host machine with two KVM guests:

  1. Smoothwall 3.1
  2. Ubuntu 14.04

The Smoothwall is configured RED+GREEN+ORANGE with three separate network interfaces. The RED and GREEN interfaces are connected via bridged Macvtap with virtio drivers to two separate host interfaces (enp5s0 and enp6s0) which, in turn, are connected to two physical network cards on the machine. ORANGE is connected to a guest-only virtual switch. RED is connected to another network / gateway that connects the Smoothwall to the Internet, same as the host interface on the same card (but with different IP addresses – the RED is static, entered manually and the host is dynamic – DHCP).

After a restart of the host, all machines, host and guests, have all of the expected network connectivity, and everything just works.

The Problem

Where I live we experience periodic Internet outages lasting from a second or two to several minutes. Every time there is an outage the RED interface loses all connectivity, both inbound and outbound, once connectivity to the host has been restored (and possibly during the outage).

Following the loss of connectivity, in the host Settings -> Network control panel the interface associate with RED (Macvtap0), which is normally visible and editable, is still visible but it’s options cannot be changed as the Options button is missing. Also, the ON/OFF button is missing too. Furthermore, it no longer has anything more than a MAC address (normally it has both a MAC and an IPV6 address).

Control Panel Before Outage

Macvtap working properly

Control Panel After Outage

Macvtap failing

I’ve tried changing the driver (virtio, rtl8139, e1000, etc.) and I’ve tried changing the physical hardware but neither change has altered the behavior so I’m pretty sure it’s something in the Macvtap software that’s failing (or misconfigured).

The Solution?

There are multiple articles and bug reports that seem to indicate that this can be repaired by enabling promiscuous mode on the interface, but I tried that (sudo ifconfig Macvtap0 promisc) to no avail. Maybe I needed to toggle the interface (ifup or something like that?)

Estimado Bankia:

Desde hace varias semanas me encuentro totalmente incapaz de realizar transferencias desde mi cuenta de Empresa en el portal de Empresas de bankia.es. Sospecho que es algo que estoy haciendo mal ya que, si no mal recuerdo, lo logré hacer por lo menos una vez hace aproximadamente un mes.

Publico aquí (en este foro público) los tests que he realizado porque quiero saber si otra persona en el mundo también ha tenido este problema o si realmente soy yo el único en toda España. Al ser que soy yo, sabré que es un problema con los datos que introduzco y no, como siempre sugiere el personal de apoyo técnico de Bankia, un problema de mi navegador o sistema operativo.

Entiendo que algún protocolo hay que seguir al realizar apoyo técnico a distancia pero también creo que cuando la persona al otro lado del teléfono indica claramente que ya ha intentado todo lo que le sugieren, hay que creerlo y buscar otras posibles soluciones. En mi caso me dijeron que mandara un correo electrónico a la dirección de soporte técnico de Bankia, lo cual haré con un enlace a este post.

Los pasos a seguir que siempre recomienda soporte técnico de Bankia son: “eliminar cookies, limpiar cache, actualizar navegadores, probar con otros sistemas operativos / otro equipo, etc.” En este post muestro con capturas de pantalla todos los tests que he realizado. Al realizar los tests, pongo el navegador en modo “privado” para evitar problemas de cache y cookies. También, ya que la web de Bankia lo pone, pincho en Aceptar en cada aviso de cookies.

En mis tests seguía este proceso:

  1. Ir a la página inicial de Empresas de Bankia
  2. Pinchar en Entrar
  3. Introducir datos de contrato, etc. y pinchar en Enviar

Resultado Esperado

Veo un listado de mis cuentas

Resultado Actual

Se queda estancada la web con el mensaje: Cargando aplicación (me ha pasado alguna vez, ver más abajo)

Como alguna vez he logrado sobrepasar esta página, continúo con el proceso:

  1. Pinchar en la cuenta de la cual quiero transferir dinero
  2. Pinchar en la pestaña Favoritos para ahorrar tiempo
  3. Pinchar en el plus (+) para expandir la lista de favoritos (por cierto, interfaz totalmente no necesario en mi opinión)
  4. Pinchar en el favorito deseado
  5. Rellenar el formulario resultante con todos los datos necesarios para realizar la transferencia
  6. Pinchar en Continuar

Resultado Esperado

La transferencia se realiza con éxito y la web lo confirma con un mensaje de éxito.

Resultado Actual

Nada. La página no responde.

Hace unas semanas a través de twitter, avisé de este problema pero la respuesta dejó algo que desear.

Capturas de pantalla

Lo que sigue son las capturas de pantalla para los siguientes navegadores y sistemas operativos:

  1. Apple Macintosh
    • Google Chrome Chrome Mac About
      Chrome Mac Empresas Home
      Aquí falla – Pincho en Continuar y no responde la página ni muestra errores Chrome Mac Broken Continuar
    • Google Canary (open source version of Chrome) Canary Chrome About
      Aquí falla – Pincho en Continuar y no responde la página ni muestra errores Canary Chrome Broken Continuar
    • Firefox FF Mac About
      FF Mac Empresas Home
      Aquí falla – No llega a cargarse, da igual el tiempo que esté abierto FF Mac Cargando aplicacion
    • Safari Safari Mac About
      Safari Mac Empresas Home
      Aquí falla – Pincho en Continuar y no responde la página ni muestra errores Safari Mac Broken Continuar
  2. Linux Mint (Debian)
    • Firefox FF Linux About
      FF Linux Empresas Home
      Aquí falla – No llega a cargarse, da igual el tiempo que esté abierto FF Linux Cargando aplicacion
  3. Windows 8.1
    • Internet Explorer IE Win About
      IE Win Empresas Home
      Aquí falla – Pincho en Continuar y no responde la página ni muestra errores IE Win Broken Continuar

Ahora, como se imaginarán, preparar este informe detallado me ha costado un par de horas. Agradecería que Bankia tuviera el detalle de reconocer que sí que hay un problema y que no es ni mi navegador ni mi sistema operativo, etc., pero no lo harán. No lo harán porque no es su cultura. Lástima, lástima… Que sepa Bankia que a mi me ha costado un par de horas preparar este informe inútil pero a ellos les ha costado un cliente. Recomiendo a los directivos de Bankia que lean The Cluetrain Manifesto y que se actualicen sus maneras y que mejoren su apoyo técnico, nivel 1, pero tampoco me harán no creo que me harán caso así que adiós Bankia. ¡Adiós!

PD: Me pregunto que si su web funciona con estos errores, qué otros sistemas informáticos tendrán con errores?

Actualización (4 horas después de publicar esto): Recibí una llamada (tras un par de correos de Bankia pidiendo más información) de un tal Miguel. La verdad es que me trató muy bien: nada de actitud, pidiendo disculpas por la mala gestión de la incidencia y reconociendo que en efecto era un problema de Bankia. En concreto, la funcionalidad de Favoritos no funciona correctamente. Le comenté a Miguel que para mí, un botón o enlace, para los usuarios, es como una promesa y si no funciona o funciona de una manera no esperada, crea en ella una emoción parecido a la frustración. Le recomendé que quitaran la funcionalidad hasta que funcionara y dijo que lo anotaría en su informe.

Al final seguramente me han perdido como cliente por muchas razones (entre ellas si quiero cancelar mi cuenta tengo que ir a la oficina donde la abrí – que me lo expliquen…) pero agradezco mucho la llamada y la ayuda. Pena que no cuenten con 100 Migueles en Bankia para atenderte tan amablemente como fue conmigo.

In about 2006 Fer Torres (one of the members of our dev team), who was studying English, suggested we speak in English on Fridays as a way for him and the others in the office to practice in real-world situations. We did it for a few months and honestly it was not only fun but very beneficial for the non-native staff.

Now that I’m back doing development and helping to run a team of developers (all of whom are non-native) and now that I’m working in a shared office space (known as a coworking space here) where there are many non-native speakers of English, I suggested we take up the tradition anew. Much to my surprise, nearly everyone enthusiastically agreed.

Here’s how it works:

  1. On Fridays, speak in English whenever you can. The only rule is that it has to be fun. Play with the language…
  2. Use social media to help promote the idea. I like to post translations of common phrases in Spanish into English, phrases that might be a bit unusual or funny. I always include the #EnglishFriday hash tag.
  3. Whenever you text or write an email, try doing it in English! You might be surprised how much fun it can be.

Obviously, if you’re at work, there will be times when you simply need to revert to Spanish (or whatever your native language is). That’s fine, of course, because if it isn’t fun, people won’t do it.

I’m new to WordPress development and recently found myself needing to create a secondary query using WP_Query. The Codex has a pretty good introduction to querying WordPress using WP_Query but no where, not even in the new Developer documentation, do they say that you MUST call the_post() inside the loop. If you fail to call the_post(), you may get the error “Fatal error: Maximum function nesting level of ‘100’ reached, aborting!”

To the documentation team’s credit, they do point out that if you fail to call the_post(), many template tags will fail to function as expected. Also, in a few places they do mention that the_post() increments the internal counter by one. It makes me wonder why have_posts() doesn’t just call the_post() internally and be done with it…

I lost hours trying to figure this out. And just for the sake of completeness, here is a full example of what WordPress needs to properly execute a loop as a secondary query (and it matters not that this is against a custom post type):

$my_query = new WP_Query( $args );

while( $my_query->have_posts() ) {

$my_query->the_post(); // does nothing visual, just sets some variables and advances the internal pointer

the_title(); // note that we do NOT use $my_query->the_title(), I have no idea why not…

}

wp_reset_postdata(); // reset the main post variable, $wp_the_post to the main query

And it should be noted that all those posts about the problem being XDebug are all just wrong. The problem is not the limit placed on the number of nested function calls (100 seems far, far more than adequate) but the fact that you’ve reach 100 in the first place.

I sincerely hope this helps others in the same situation.