Archivo de la categoría: ingeniería

Compro, luego existo, ¿de dónde es este código?

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: Seguir leyendo Compro, luego existo, ¿de dónde es este código?

JPA vs Hibernate

image3x1_258_20140430015456.png

Muchas personas me suelen preguntar que diferencias existen entre JPA ( Java Persistence API) e Hibernate como frameworks de persistencia. La realidad es que la diferencia es mucha ya que JPA es una parte de la especificación de EJB 3 ( JSR 220) . Por lo tanto no existe realmente como framework, sino que es simplemente un documento. Un documento en el cual se especifica los principios básicos de gestión de la capa de persistencia en el mundo de Java EE. Hibernate en cambio si que es algo real y se trata de un framework que gestiona la capa de persistencia a traves de ficheros xml o anotaciones.hibernatejpa.png

Seguir leyendo JPA vs Hibernate

Celebremos la llegada del hombre a la Luna con el código fuente del Apollo XI

Aunque en España y buena parte del mundo ya era día 21, como fueron los yankees los que lo consiguieron, podemos decir que ayer 20 de Julio se cumplían 45 años de la llegada del hombre a la Luna en el Apollo XI (no confundir con el Apollo XIII de la peli homónima esa del «Houston tenemos un problema») y que mejor manera de celebrarlo que leyendo el código fuente del ordenador de a bordo del mítico transbordador espacial. Cientos no, miles de líneas de código que son oro puro, canela en rama para todos los amantes de la historia de la informática y el desarrollo… vamos, todos los que nos paseamos por aquí (o así debería ser).

El código, que fue escrito por gente del MIT ex profeso para este Apollo Guidance Computer (AGC), es desde 2009 de dominio público, está alojado en ibiblio.org (el archive.org del software, basicamente) y estos días de conmemoración está siendo compartido como la espuma por todas las redes sociales. No te preocupes si no sabes código ensamblador (no ya cosas más arcanas como código máquina o hexadecimal) o lo tienes más oxidado que las bisagras de Bender después de un día sin cerveza, que todo bien profusamente explicado para que podamos entender cada línea de todas y cada una de las subrutinas y ficheros. Simplemente gozoso, como adentrarse en un yacimiento abisal de conocimiento developer.

Pd: entre esto y lo enganchado que estoy a la nueva serie ‘Halt and Catch Fire’, donde la trama gira en torno a la ingeniería inversa a la BIOS del primer PC Computer de IBM, me están entrando unas ganas locas de volver a la programación de bajo nivel, de HLT y soldador. Espero que se me pase pronto, que o estoy yo ya para esos trotes.


via:ibiblio