¡Por las barbas de Hari Seldon!

No sé si alegrarme y llenarme de expectativas, o echarme a temblar: según SlashDot se están preparando dos películas basadas en obras de Isaac Asimov, una de ellas de La Fundación.

Todos los que hayáis leído la saga seguro que habéis pensado en algún momento cómo era posible que no se hubiera llevado (o intentado llevar) al cine. La historia es larga y compleja, manteniendo un hilo narrativo a lo largo de varias épocas y con personajes y situaciones muy dispares y continuas referencias hechos, acciones y decisiones anteriores y sus implicaciones en el curso de la historia futura. Es una historia que en libro está muy bien pero en cine, y más a lo largo de varias películas, es complejo mantener la atención del espectador palomitero medio. Aunque como comentan en SlashDot, El Señor de los Anillos tampoco era fácil y no ha quedado mal, y Watchmen tres cuartos de lo mismo y por ahora pinta bien.

Gracias, Fon

Creo que no he escrito nada sobre Fon, al menos no centrándome exclusivamente en el tema aunque lo haya tocado de pasada.

Por si alguien no lo conoce, Fon es una red de gente que comparte vía WiFi su conexión a Internet, con intención de crear un acceso WiFi común global. Para los no-foneros, conectarse a la red es de pago y parte de la cuota va para el propietario del fon-spot (el punto de acceso); si eres fonero, puedes conectarte gratis a cualquier fon-spot, en cualquier parte del mundo. Para hacerte fonero lo único que tienes que hacer es comprar una fonera (el punto de acceso, unos 30€) y conectarla a Internet. La red está bastante extendida, sobre todo en grandes ciudades y en ciertos barrios en los que se han formado comunidades WiFi más o menos activas.

El caso es que me hice fonero casi de rebote: hacía tiempo que había leído sobre el tema y me llamaba la atención pero no me decidía, hasta que empecé a tener problemas con el router WiFi de la ADSL de Telefónica y el iPod Touch, y buscando buscando routers WiFi vi que la fonera era uno de los más baratos, con el añadido de entrar en la red Fon. Tengo la fonera más de seis meses, bastante gente ha pasado por mi fon-spot, pero yo nunca había llegado a usar la conexión fon de otros.

Hasta que me he cambiado de piso. No sabéis lo cómodo que es y la alegría que te llevas al llegar la primera noche que vas a pasar en tu nuevo piso, encender el ordenador y ver un ESSID tipo FON_xxxxxx. :-D Inteneeeeee… X-D

Cuando me fui a vivir a Las Rozas una de las priemras cosas que hice fue llamar a Telefónica para contratar un ADSL. La verdad, comparé ofertas en BandaAncha y algún otro sitio pero no buscando la más barata o la que más ancho de banda tuviera, si no la que menos tardaran en gestionarme el alta y la instalación. X-D Y no me defraudaron, en mi experiencia Telefónica en esos aspectos se lleva el gato al agua (también en el precio, ¡pero al alza!) y en tres o cuatro días tenía Internet. Sin embargo ahora al cambiar de nuevo de piso ya no tengo prisa: llevo dos semanas viviendo aquí y esta vez si que he comparado distintas ofertas, he llamado a unos y otros operadores… y todavía no me he decidido. Ya.com tiene muchas papeletas; la segunda opción sería Orange, pero después de leer la experiencia de algunos, no se yo… Lo que si que acabo de hacer hace un par de días es pedir a Telefónica el traslado de la línea, porque o me quedo con Telefónica, o en cualquier caso para irme con otro operador primero necesito tener línea de Telefónica. Pero vaya, sin prisas. Y sabiendo que si tengo mala suerte y el operador falla, no me instala la línea en dos meses, da problemas… siempre voy a tener un backup WiFi.

Ah, y todo esto con mi fon-spot apagado, claro. No sé si hay algún límite pero … las dos semanas que llevo aquí mi fonera está en un cajón y yo sigo con acceso a la red. Y estoy haciendo uso, no me estoy bajando cosas a lo loco pero Dexter, The Big Bang Theory, The IT Crowd, Terminator The Sarah Connor Chronicles y Heroes caen religiosamente tooodas las semanas. :-)

Gracias, Fon. Y en particular, gracias, FON_antonio. :-D

Retorno de las estrellas

Verás…, imagínate una reunión de mundos. Primero rosa, un espacio infinito del rosa más fino y pálido, y en él, penetrando en él, un segundo espacio ya más oscuro y después de un rojo ya casi azulado, pero muy lejos, y rodeándolo todo, la fosforescencia, sin gravedad, no como una nube ni como la niebla…, diferente. No encuentro palabras para explicarlo. Salimos los dos del cohete y lo contemplamos. Eri, no lo comprendo. Verás, incluso ahora siento un nudo en la garganta, de tan hermoso que era. Piensa esto: allí no hay vida. No hay plantas, ni animales, ni pájaros, nada, ningunos ojos que puedan contemplarlo. Estoy completamente seguro de que desde la creación del mundo nadie lo había visto, y Arder y yo fuimos los primeros. Y si nuestro gravímetro no se hubiera estropeado, por lo que tuvimos que aterrizar allí para arreglarlo, pues el cuarzo estaba roto y se había escapado el mercurio, nadie habría estado allí hasta el fin del mundo, nadie lo habría visto. ¡Es realmente misterioso! Se tienen unos deseos directos… Oh, no sé… No podíamos irnos, sencillamente. Olvidamos por qué habíamos aterrizado y permanecimos quietos, mirando.

¿Qué te ha demostrado Starck? ¿La inutilidad de la cosmodromía? ¡Como si no lo supiéramos nosotros mismos! ¿Y los polos? ¿Qué había en los polos? Los hombres que los conquistaron sabían muy bien que allí no había nada. ¿Y la Luna? ¿Qué buscaba el grupo de Ross en el cráter Eratóstenes? ¿Brillantes? ¿Y por qué Bant y Yegorin han atravesado el centro del disco de Mercurio? ¿Para adquirir un buen bronceado? ¿y Kellen y Offshag? Lo único que sabían cuando volaron a la fría nube de Cerbero era que allí se puede perder la vida. ¿Has entendido lo que Starck dice realmente? El hombre ha de comer, beber y vestirse; todo lo demás es una locura. Todos tenemos nuestro propio Starck, Bregg. Cada era lo ha tenido. ¿Para qué os envió Gimma a ti y a Arder? Para que recogierais muestras con el succionador Corona. Pero ¿quién envió a Gimma? La ciencia. Qué profesional suena esto, ¿verdad? El conocimiento de las estrellas.

Bregg, ¿crees que no hubiéramos volado, de no existir las estrellas? Yo creo que sí. Habríamos querido conocer el espacio, para justificar el todo de alguna manera. Geónidas o cualquier otro nos diría qué mediciones y descubrimientos valiosos se pueden hacer por el camino. No me interpretes mal. No estoy afirmando que las estrellas sean solamente un pretexto… El polo tampoco lo fue; Nansen y Andree lo necesitaban… El Everest fue más necesario para Irving y Mallory que el aire mismo.

Retorno de las estrellas, Stanis?aw Lem

Optimizando el SQL de osCommerce

  • english
  • spanish

An entry about how the way SQL queries are built affects their performance, something I think many people don’t pay attention to:

For the last couple of days I’ve been struggling with the database of an osCommerce-based on-line shop. Everything ran perfectly until after four years of existence we have a DB with over 1500 categories and 16000 products, and the web is getting increasingly slower over time. We use a heavily modified osCommerce 2.2 installation, so moving to osCommerce 3 is out of the question (besides, it’s still alpha and this is a production site). After some hw and os-level optimization that didn’t help to improve performance, I had to start digging into the code and the DB.

First of all: activate the log-slow-queries option on mySQL’s config. This creates a new log with all the queries that take longer than expected to run (def. more than 10 seconds). With this information, we can concentrate on those queries that are hitting the bigger performance penalties and start the optimization process there.

To get you on context, this is the query that extracts all the products from a given category:

SELECT pd.products_name, pd.products_description, m.manufacturers_name,
p.products_image, p.products_quantity,  p.products_date_added,
p.products_id, p.manufacturers_id, p.products_price,
p.products_tax_class_id, IF(s.STATUS, s.specials_new_products_price, NULL)
AS specials_new_products_price, IF(s.STATUS, s.specials_new_products_price,
p.products_price) AS final_price
FROM products_description pd, products p
LEFT JOIN manufacturers m ON p.manufacturers_id = m.manufacturers_id
LEFT JOIN specials s ON p.products_id = s.products_id,
products_to_categories p2c
WHERE
p.products_status = ’1′ AND p.products_id = p2c.products_id AND
pd.products_id = p2c.products_id AND pd.language_id = ’3′ AND
p2c.categories_id = ’114′
ORDER BY p.products_date_added DESC;

On the first place for those unfamiliar with osCommerce, there are a heap of tables involved. Six on this example: categories, products, products_to_categories, products_description, manufacturers and specials (products with discounted prices). According to mysql-slow.log, that query was taking around 12 seconds to run. The log also read “Rows_examined: 1903433″. No wonder it was taking that long. :-D

Why so many “rows_examined”? Going back to DB theory on the University, ;-D if memory serves and leaving each particular DB engine’s optmizations aside, when selecting from several tables the DB engine does the cartesian product (product set) of all their tuples, this is, every possible combination of each tuple on one table with every other tuple on the other tables. After that, those combinations matching the WHERE criteria are selected (and I say engine optimizations aside because I don’t get the math here: 16k products, 16k descriptions, 1k5 categories, and just 1903433 combinations?). On the other hand with JOIN the related data is appended to those tuples already selected by the WHERE clause and ONLY TO THOSE.

So, why using more than one table on the where clause if it isn’t strictly necessary? On the previous example, we want to extract all the info of the products on a given category, but we select from the products, products_description and products_to_categories tables. Wouldn’t it be better using only the products_to_categories table on the from clause, reducing the result set to only the category we are interested on, and then get all the products’ information with JOIN? It’s the same principle as when piping data through several commands on a shell-script, using first grep and then cut: first reduce the data set, so that on each following step there is less data to spend CPU cycles with, increasingly reducing the overall processing time.

With this modification, the resulting query looks like:

SELECT pd.products_name, pd.products_description, m.manufacturers_name,
p.products_image, p.products_quantity,  p.products_date_added,
p.products_id, p.manufacturers_id, p.products_price,
p.products_tax_class_id, IF(s.STATUS, s.specials_new_products_price, NULL)
AS specials_new_products_price, IF(s.STATUS, s.specials_new_products_price,
p.products_price) AS final_price
FROM products_to_categories p2c
LEFT JOIN products p ON p.products_id=p2c.products_id
LEFT JOIN products_description pd ON p.products_id=pd.products_id AND pd.language_id=’3′
LEFT JOIN manufacturers m ON p.manufacturers_id = m.manufacturers_id
LEFT JOIN specials s ON p.products_id = s.products_id
WHERE p2c.categories_id = ’114′ AND p.products_status = ’1′
ORDER BY p.products_date_added DESC

The result sets of both queries are identical, but while the first one took around 12 seconds to run, the second one only takes a couple of milliseconds. :-) I’ve found several similar cases already on my osCommerce installation, that have gone from more than 10 seconds to milliseconds after rearanging the query in a similar fashion.

Another important point are indexes: I’ve found some queries that couldn’t be further optimized, they already used only one table on the from clause, the more restricting one, and then some joins. On these cases what I’ve found is that some table lacked an index on the foreign key column, and after adding it the execution time has gone down again from seconds to milliseconds.

Historia de los espaguetis

Después de tanta polémica con Bolonia, la huelga y los colegios, Ricardo Galli ha publicado un interesantísimo artículo (y bastante largo) sobre la historia de los colegios, las universidades y las profesiones. Quien quiera poner todo ésto en perspectiva, que se arme de paciencia y un buen rato y lo lea, y luego saque sus propias conclusiones. Se podrá estar de acuerdo o no con las conclusiones de Ricardo, pero sin duda el repaso histórico de cómo hemos llegado donde estamos es muy interesante para cualquiera con un poquito de interés en el por qué de la situación actual (¿cómo era eso de que “quien no conoce la Historia está condenado a repetirla”?).

Por cierto, que uno de los comentarios hace referencia a un detalle que todo el mundo que se ha movilizado éstos días al grito de “¡fuego!” ha pasado por alto: si lo que queremos es salir de la “precariedad laboral” de la que muchos se quejan, con horarios rocambolescos, guardias, turnos, llamadas a las tantas de la noche o en fines de semana cuando algo explota… necesarios, pero sin regular, lo que nos hace falta es UN CONVENIO que refleje nuestra realidad laboral y poder salir de una vez del de oficinas y despachos (ya me gustaría a mí tener horario de 9 a 18, o mejor, de 8 a 15) y dejarnos de historias. Con eso si que estaría de acuerdo y eso si que ayudaría a mejorar nuestra situación laboral, no un colegio que lo único que va a promover es la exclusión de la profesión de personas muy válidas y con mucha más experiencia que la mayoría de los que tenemos una carrera mientras que veríamos como unos pocos (la panda de @#$%&! de siempre) consigue más poder y nos sigue mangoneando con una sonrisa y muy buenas palabras.

¿Dos españoles al volante en la F1?

¿Tendremos doblete Fernando/Pedro éste año?

En El País publican que Pedro está haciendo pruebas con Force India. Por lo visto ha finalizado el contrato que tenía ésta escudería con Ferrari, que le suministraba los motores, y ahora ha firmado con McLaren-Mercedes. Puede que éstas pruebas que está haciendo De La Rosa sólo sean para poner a punto el motor en el coche, o como apuntan en el artículo puede que McLaren tenga mano para “sugerir” un cambio de pilotos. Quién sabe.

Estaría bien, Pedro lleva la tira de años en la F1 y hace tiempo que no es piloto oficial. En el Force no es que vaya a conseguir gran cosa, pero bueno… con motor McLaren digo yo que se comportará mejor que el Arrows que llevaba hace años.

Al curro en metro

Ya soy un Mandril, 100%. Hoy he ido al tajo en metro. :-D

La estación de Tribunal (línea 10) me coge a 2-3 minutos de casa. De ahí una parada hasta Alonso Martínez (entre espera, trayecto y cambio de andén, a lo tonto 5 minutos), línea 4 directo hasta Avda. de la Paz (veintipico minutos, casi media hora), y luego unos 10-12 minutos andando hasta Telefónica I+D. En total unos tres cuartos de hora.

La vuelta la he hecho distinta porque mirando en Google Maps parecía que Alonso Martínez me quedaba cerca de casa, con lo que evitaba un trasbordo (que además la línea 10 iba PETADA). Me ha salido bien la jugada, he tardado unos cinco minutos menos al volver que al ir.

Y a todo eso, el trayecto leyendo. :-D Incluso por la calle. X-D Pero aún me falta, hay gente que me supera: hay peña capaz de moverse por los túneles del metro (pasillos, escaleras, etc.) leyendo. Buf, años de práctica. :-)