Una vez más, traemos el código fuente de una aplicación para que nos digáis si sabéis de dónde procede. En este caso se trata de un software de servidor, desarrollado por un programador alemán (aunque de nombre noruego y apellido español), que con apenas 20 años vio la necesidad de una aplicación libre para un nicho que todavía se encontraba muy verde.
Las pistas
-
Es un habitual entre las sugerencias de aplicaciones para entornos LAMP, MAMP y WAMP.
-
Fue uno de los primeros proyectos de software libre de su nicho, por lo que muchos de sus competidores actuales están realmente derivados de su propio código.
-
Mandriva y Ubuntu utilizan este proyecto para una sección de sus páginas web.
El código
Como veréis, el fragmento de código en PHP que os proporcionamos hoy es lo suficientemente descriptivo como para que una sola función os dé muchas pistas sobre el proyecto que buscamos:
class ▒▒_shopping_cart { var $code = '▒▒_shopping_cart'; var $group = 'boxes'; var $title; var $description; var $sort_order; var $enabled = false; function ▒▒_shopping_cart() { $this->title = ▒▒▒▒▒▒_▒▒▒▒▒_SHOPPING_CART_TITLE; $this->description = ▒▒▒▒▒▒_▒▒▒▒▒_SHOPPING_CART_DESCRIPTION; if ( defined('▒▒▒▒▒▒_▒▒▒▒▒_SHOPPING_CART_STATUS') ) { $this->sort_order = ▒▒▒▒▒▒_▒▒▒▒▒_SHOPPING_CART_SORT_ORDER; $this->enabled = (▒▒▒▒▒▒_▒▒▒▒▒_SHOPPING_CART_STATUS == 'True'); $this->group = ((▒▒▒▒▒▒_▒▒▒▒▒_SHOPPING_CART_CONTENT_PLACEMENT == 'Left Column') ? '▒▒▒▒▒_column_left' : '▒▒▒▒▒_column_right'); } } }
El reto
Como seguramente muchos ya sabéis de qué software se trata, he aquí algunas otras cuestiones que requieren conocer mejor el proyecto o saber bucear por su documentación (algo que debería ser indispensable para todo el que se adentre en un nuevo proyecto software):
-
Históricamente utilizaba una licencia libre vírica, pero a partir de determinada versión optaron por una más multipropósito. ¿Cuáles son estas dos licencias?
-
En agosto de 2011 se descubrieron tres importantes vulnerabilidades que fueron parcheadas un par de meses más tarde. ¿En qué consistían? ¿Podrías encontrar un commit o changelog de dichos parches?
-
De los más de 10.000 sitios registrados que usan esta tecnología, varios cientos son españoles. ¿Sabríais decir algún ejemplo?
Solución al anterior reto
Como muchos dijeron en las respuestas, el algoritmo que buscábamos era la ordenación quicksort, que frente al O(n2) de la mayoría de sus competidores, ofrece un orden de complejidad de O(log n) en el mejor de los casos.
Precisamente, para obtener esa cota en lugar del orden cuadrático una de las mejoras que se puede hacer es mejorar la elección del pivote. Y otra forma de mejorar su eficiencia, esta vez sin alterar el orden de complejidad, sería evitar la recursividad, aunque también es recomendable combinar quicksort con otros algoritmos que se comporten mejor con conjuntos reducidos una vez que hayamos ordenado la mayor parte de los datos.
Por último, la imagen utilizada pertenece al proyecto AlgoRyhtimics, que mediante danzas populares húngaras demuestra el funcionamiento de los principales algoritmos de ordenación: