Cometí el error cuando estrené las aplicaciones de frases en Facebook de utilizar la siguiente sentencia SQL para sacar una frase aleatoria:
1
| SELECT * FROM `frases` ORDER BY RAND() LIMIT 1; |
Al principio funcionaba bien, la verdad es que no confiaba mucho en el crecimiento de la aplicación, por lo que dejé el código así. Pero al cabo de unos días, noté que mi proveedor de hosting desactivó mi cuenta por excesivo uso de CPU: el rápido crecimiento de usuarios y frases dentro de la aplicación causaron un uso exponencial de CPU en mi servidor.
Al principio no parece lógico pero si nos fijamos en lo que estamos haciendo con esta línea:
- Ordenamos de forma aleatoria la tabla frases (normalmente es más pesado que ordenar por fecha, o por un entero)
- Escoger el primero de la lista obtenida (esto ya no cuesta nada)
Es decir, estamos ordenando la lista por completo (de unas 2000 frases) cada vez que un usuario quiere consultar sólo 1. Por lo que al final (imaginémonos unos 30000 usuarios a la hora), hacemos muchas ordenaciones innecesarias que aumentan el uso de CPU.
Una buena solución podría ser extraer el total de filas que tenemos en la tabla (es más, no tendremos que extraerlo siempre, sino cuando añadamos o borremos información), es una consulta bastante ligera; y luego extraer un sólo elemento empezando por la fila obtenida al azar.
En el siguiente ejemplo propongo un código en PHP que obtiene una fila aleatoria de una tabla (estas líneas las extraigo de un proyecto más grande, por lo que se podrían simplificar un poco más):
He dejado un poco de lado las comprobaciones y he dado por hecho que en la tabla frases hay algún contenido. Pero creo que queda bastante clara la idea.
Puede haber más soluciones, pero creo que con esta tenemos más control sobre los resultados (podemos introducir condiciones al número y más cosas).
Probablemente cuando hacemos nuestra aplicación para Facebook queremos personalizar el mensaje hacia el usuario; es decir, escribir estimado o estimada, ya sea hombre o mujer nuestro usuario; en lugar de estimad@ (que quedaba muy bien hace una década, pero ahora deja que desear).
Facebook, desde su plataforma nos da opciones para conseguir esa información, pero hay un problema: están localizadas (es decir, que para español devolverá masculino o femenino; en inglés, male o female y en otros idiomas ya ni os cuento. Pero hay una forma para obtener siempre la información en el mismo idioma (ejemplo en PHP):
1 2
| $camposfql = "uid, name, first_name, last_name, pic, sex";
$userinfo = $facebook->api_client->call_method('facebook.users.getInfo', array('uids' =>$user_id, 'fields' => $camposfql, 'locale' => "en_US")); |
Con esto en $userinfo tendremos la información de uid, nombre, avatar y sexo del usuario con id $user_id y si un campo permite localización (como sex), lo dará en inglés de EEUU. Podemos estar seguros de que sex tendrá como valor male o female (o ninguno, si el usuario ha puesto como privado ese dato).
Podemos ver el resultado en esta aplicación: Qué Malo es Pensar:

http://apps.facebook.com/quemaloespensar
Algunos, estemos programando o tengamos que hacer unas cuantas fórmulas para OpenOffice.org Calc, nos sentimos más cómodos programando en inglés. Además de por la costumbre, porque la mayor parte de la referencia que encontremos estará en este idioma.
Es verdad que los desarrolladores de OpenOffice, quieren que muchas cosas se parezcan a MS Office y hacen una localización completa del programa, está muy bien; como también lo estaría poner un checkbox en las opciones para seleccionar si queremos las fórmulas localizadas o no.
Pero si miramos en Environment Variables - OOo Wiki podemos observar una variable de entorno en concreto: OOO_CALC_USE_ENGLISH_FORMULAS válida para todos los SSOO. Para utilizarlo en Linux tenemos varias posibilidades:
Ejecutar desde consola:
$OOO_CALC_USE_ENGLISH_FORMULAS=1 soffice
Por ejemplo, Gentoo, cuando se instala OpenOffice.org crea también accesos directos por consola, para Calc tenemos oocalc, es un script para bash localizado en /usr/bin (which oocalc) en cuyo código insertamos una línea (muestro lo insertado con comentarios):
1 2 3 4 5 6 7
| #!/bin/sh
#Nueva línea para tener las fórmulas en inglés
export OOO_CALC_USE_ENGLISH_FORMULAS=1
#Fin de la nueva línea para tener las fórmulas en inglés
cmd=`dirname "$0"`/soffice
exec "$cmd" -calc "$@" |
Esta nueva línea también la podemos poner en .bashrc para no tener que reeditar oocalc cuando actualicemos la versión.
También tenemos que tener en cuenta que es una medida experimental por lo que puede ser que tenga algún fallo que debamos reportar.
Ante la inclusión en el Anteproyecto de Ley de Economía Sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de internet manifestamos nuestra firme oposición al proyecto, y declaramos que…
- Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.
- La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.
- La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.
- La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.
- Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.
- Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.
- Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.
- Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.
- Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.
- En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.
Por favor difunde este manifiesto en tu blog, Twitter, en redes sociales, en foros o imprímelo y repártelo.
Últimos comentarios