Macromedia (Adobe) cambia de licencia el Flash player

Malas noticias, lo leo en varios medios online… Parece ser que Adobe (formerly Macromedia :P ) ha cambiado la licencia bajo la que distribuye su reproductor flash. Han añadido una lista con los sistemas operativos en los que está permitido usarlo. Lo cual quiere decir que en todos los que no aparezcan en esa lista es ilegal el uso del reproductor. Esto incluye por ejemplo a los sistemas *BSD.

Esta es una de las cosas por las que no me gusta basar mis trabajos en Flash. Usar tecnologías no libres hace que no tengas ningún control sobre ellos, ya que te basas en software cuya licencia puede cambiar y perjudicarte gravemente.

Existe un proyecto (Gnash) que pretende crear un reproductor de flash libre, basandose en las especificaciones que macromedia liberó en su día sobre el formato de los archivos .swf. Aún está en una fase inicial pero tiene muy buena pinta. Si alguno tiene tiempo, que aporte su granito de arena ;) , a ver si conseguimos tener un reproductor libre y ser menos “esclavos” de Adobe.

Provincias y localidades de España / Códigos postales

Casi todos nos habremos encontrado con este problema a la hora de abordar el desarrollo de algunas aplicaciones:
Tener la lista de provincias de España en la base de datos, poder saber qué provincia es a partir del código postal, tener el listado de poblaciones de una determinada provincia.
Seguro que a más de uno le viene bien lo que dejo aquí ;)

<?php

$provincias = array (
	 array ('id' => "01", "nombre" => "ALAVA"),
	 array ('id' => "02", "nombre" => "ALBACETE"),
	 array ('id' => "03", "nombre" => "ALICANTE"),
	 array ('id' => "04", "nombre" => "ALMERIA"),
	 array ('id' => "33", "nombre" => "ASTURIAS"),
	 array ('id' => "05", "nombre" => "AVILA"),
	 array ('id' => "06", "nombre" => "BADAJOZ"),
	 array ('id' => "08", "nombre" => "BARCELONA"),
	 array ('id' => "09", "nombre" => "BURGOS"),
	 array ('id' => "10", "nombre" => "CACERES"),
	 array ('id' => "11", "nombre" => "CADIZ"),
	 array ('id' => "39", "nombre" => "CANTABRIA"),
	 array ('id' => "12", "nombre" => "CASTELLON"),
	 array ('id' => "51", "nombre" => "CEUTA"),
	 array ('id' => "13", "nombre" => "CIUDAD REAL"),
	 array ('id' => "14", "nombre" => "CORDOBA"),
	 array ('id' => "15", "nombre" => "CORUÑA, A"),
	 array ('id' => "16", "nombre" => "CUENCA"),
	 array ('id' => "17", "nombre" => "GIRONA"),
	 array ('id' => "18", "nombre" => "GRANADA"),
	 array ('id' => "19", "nombre" => "GUADALAJARA"),
	 array ('id' => "20", "nombre" => "GUIPUZCOA"),
	 array ('id' => "21", "nombre" => "HUELVA"),
	 array ('id' => "22", "nombre" => "HUESCA"),
	 array ('id' => "07", "nombre" => "ILLES BALEARS"),
	 array ('id' => "23", "nombre" => "JAEN"),
	 array ('id' => "24", "nombre" => "LEON"),
	 array ('id' => "25", "nombre" => "LLEIDA"),
	 array ('id' => "27", "nombre" => "LUGO"),
	 array ('id' => "28", "nombre" => "MADRID"),
	 array ('id' => "29", "nombre" => "MALAGA"),
	 array ('id' => "52", "nombre" => "MELILLA"),
	 array ('id' => "30", "nombre" => "MURCIA"),
	 array ('id' => "31", "nombre" => "NAVARRA"),
	 array ('id' => "32", "nombre" => "OURENSE"),
	 array ('id' => "34", "nombre" => "PALENCIA"),
	 array ('id' => "35", "nombre" => "PALMAS, LAS"),
	 array ('id' => "36", "nombre" => "PONTEVEDRA"),
	 array ('id' => "26", "nombre" => "RIOJA, LA"),
	 array ('id' => "37", "nombre" => "SALAMANCA"),
	 array ('id' => "38", "nombre" => "SANTA CRUZ DE TENERIFE"),
	 array ('id' => "40", "nombre" => "SEGOVIA"),
	 array ('id' => "41", "nombre" => "SEVILLA"),
	 array ('id' => "42", "nombre" => "SORIA"),
	 array ('id' => "43", "nombre" => "TARRAGONA"),
	 array ('id' => "44", "nombre" => "TERUEL"),
	 array ('id' => "45", "nombre" => "TOLEDO"),
	 array ('id' => "46", "nombre" => "VALENCIA"),
	 array ('id' => "47", "nombre" => "VALLADOLID"),
	 array ('id' => "48", "nombre" => "VIZCAYA"),
	 array ('id' => "49", "nombre" => "ZAMORA"),
	 array ('id' => "50", "nombre" => "ZARAGOZA")
);
?>

Es un array PHP con los nombres de las provincias y los dos primeros digitos (id) del código postal que le corresponde. No obstante, hay algunas excepciones en esto de los códigos postales. Aquí otra utilidad:

<script type="text/javascript">
/////////////////////////////////////////
//
// CODIGO POSTAL
//

/////////////////////////////////////////
// 
// Función constructora del objeto vector
// Este objeto se usa como matriz asociativa
//

function Vector() 
{
  this["43421"]="Barcelona";
  this["34492"]="Burgos";
  this["01427"]="Burgos";
  this["34815"]="Burgos";
  this["39232"]="Burgos";
  this["01211"]="Burgos";
  this["42142"]="Burgos";
  this["34260"]="Burgos";
  this["26212"]="Burgos";
  this["14449"]="Ciudad Real";
  this["02636"]="Cuenca";
  this["28190"]="Guadalajara";
  this["08717"]="Guadalajara";
  this["08619"]="Lleida";
  this["22583"]="Lleida";
  this["08281"]="Lleida";
  this["22584"]="Lleida";
  this["08697"]="Lleida";
  this["43449"]="Lleida";
  this["08289"]="Lleida";
  this["32151"]="Lugo";
  this["02438"]="Murcia";
  this["04690"]="Murcia";
  this["04647"]="Murcia";
  this["03657"]="Raspay";
  this["50686"]="Navarra";
  this["09471"]="Segovia";
  this["26127"]="Soria";
  this["28310"]="Toledo";
  this["02215"]="Valencia";
  this["42269"]="Zaragoza";
  this["44591"]="Zaragoza";
  this["22808"]="Zaragoza";
  this["42220"]="Zaragoza";
  this["22806"]="Zaragoza";
}

///////////////////////////////////////////////////////
//
// Nombre de provincia como función del CPostal
//

function obtener_provincia_de_cp(codpos){
// A esta func. la llamamos directamente al perder el foco los campos
// cod. postal de cada sección.

  var nodefinido;        // Necesario para comparar con 'undefined'
  var tiponodefinido,tipoexc;
  var cod = new Array(); // Vector que asocia CP con Provincia
  var exc = new Vector();// Vector asociativo para las excepciones
  
  cod[1]="Alava";cod[2]="Albacete";cod[3]="Alicante";
  cod[4]="Almeria";cod[5]="Avila";cod[6]="Badajoz";
  cod[7]="Illes Balears";cod[8]="Barcelona";cod[9]="Burgos";
  cod[10]="Caceres";
  cod[11]="Cadiz";cod[12]="Castellon";cod[13]="Ciudad Real";
  cod[14]="Cordoba";cod[15]="A Coruña";cod[16]="Cuenca";
  cod[17]="Girona";cod[18]="Granada";cod[19]="Guadalajara";
  cod[20]="Guipuzcoa";
  cod[21]="Huelva";cod[22]="Huesca";cod[23]="Jaen";cod[24]="Leon";
  cod[25]="Lleida";cod[26]="La Rioja";cod[27]="Lugo";cod[28]="Madrid";
  cod[29]="Malaga";cod[30]="Murcia";
  cod[31]="Navarra";cod[32]="Ourense";cod[33]="Asturias";cod[34]="Palencia";
  cod[35]="Las Palmas";cod[36]="Pontevedra";cod[37]="Salamanca";
  cod[38]="S.C. Tenerife";cod[39]="Cantabria";cod[40]="Segovia";
  cod[41]="Sevilla";cod[42]="Soria";cod[43]="Tarragona";cod[44]="Teruel";
  cod[45]="Toledo";cod[46]="Valencia";cod[47]="Valladolid";cod[48]="Vizcaya";
  cod[49]="Zamora";cod[50]="Zaragoza";
  cod[51]="Ceuta";cod[52]="Melilla";
  
  if (!isNaN(codpos)){
    if (codpos > 999 && codpos < 53000 && codpos.length == 5){
      var Prov = codpos.substring(0,2);
      if (Prov < 10) Prov=codpos.substring(1,2);
      tiponodefinido= typeof nodefinido;
      tipoexc= typeof exc[codpos];
      if (tipoexc != tiponodefinido) // Si es una excepcion...
        Prov = exc[codpos];           // obtenemos el valor del vector
      else                           // si no lo es...
        Prov = cod[Prov];            // lo pillamos de la tabla cod
      Prov = Prov.toUpperCase();
      return Prov;
    }
  }
  return '';
}
</script>

Y como hoy me siento generoso :P, aquí os coloco un XML con todas las provincias y sus correspondientes localidades.
El Arbol XML tiene la siguiente estructura:

<lista>
	<provincia id="01">
		<nombre><![CDATA[ALAVA]]></nombre>
		<localidades>
			<localidad c="0"><![CDATA[ABERASTURI]]></localidad>
			<localidad c="0"><![CDATA[ABETXUKO]]></localidad>
			<localidad c="0"><![CDATA[ABEZIA]]></localidad>
			<localidad c="0"><![CDATA[ABORNIKANO]]></localidad>
			<localidad c="0"><![CDATA[ACEBEDO]]></localidad>
			<localidad c="0"><![CDATA[ACILU]]></localidad>
			<localidad c="0"><![CDATA[ACOSTA]]></localidad>
			...
			
		</localidades>
	</provincia>
	
	...
	
	<provincia id="29">
		<nombre><![CDATA[MALAGA]]></nombre>
		<localidades>
			<localidad c="0"><![CDATA[RONDA]]></localidad>
			<localidad c="0"><![CDATA[MALAGA]]></localidad>
			...
			
		</localidades>
	</provincia>
</lista>

Podeis descargaros el XML completo en este enlace (zip).
Espero que os sea de ayuda ;)

Llegan los dominios .eu

eurid

Desde hace unos días el registro para los dominios .eu ha sido abierto para todo aquel que lo solicite (hasta ahora habia algunas restricciones para garantizar que las marcas/empresas pudieran registrar primero los suyos).

A mi me gustaría registrar alguno que otro para un proyecto que tengo en mente. Espero que no pase como con los .es… la mayoria fueron registrados por especuladores… He echado un vistazo y veo más de lo mismo: empresas de registro de dominios acaparando los términos más interesantes para luego venderlos a precios abusivos o dirigirlos a paginas cargadas de banners y adsense…

Eso si, vienen bastante baratitos (hostinglmi los tiene a 15 € ).

¿Necesitas vitaminas? Llega Vitamin

vitamin

Si eres desarrollador, diseñador o te gustan las cosas de la web y estar informado de todo lo último, Vitamin viene cargado de artículos interesantes, entrevistas a gente conocida y recursos de utilidad.

Las primeras entrevistas tienen muy buena pinta (Jason Fried, Eric Meyer, Thomas Fuchs y Dave Shea). Esperemos que el contenido sea mejor que el diseño general de la portada ;) (me parece bastante sobrecargada).

vía Taberna del Turco.

Getting Real

Hace poco me compré el libro de 37signals: Getting Real. Tras leerlo y releerlo no hago más que encontrarlo cada vez más fascinante. Básicamente se trata de una recopilación de “recetas” que paso a paso te llevan a conseguir desarrollar una aplicación web y hacer que sea exitosa. Sin duda os lo recomiendo, es el libro perfecto que viene bien tener cerca cuando necesitas enfocar esa idea que lleva tanto tiempo rondándote por la cabeza.
Aquí os pego un trozo que no tiene desperdicio (con el correspondiente link):

Simple rules, as with the birds simulation, lead to complex behavior. Complex rules, as with the tax law in most countries, lead to stupid behavior.

Many common software development practices have the unfortunate side-effect of eliminating any chance for emergent behavior. Most attempts at optimization — tying something down very explicitly — reduces the breadth and scope of interactions and relationships, which is the very source of emergence. In the flocking birds example, as with a well-designed system, it’s the interactions and relationships that create the interesting behavior.

The harder we tighten things down, the less room there is for a creative, emergent solution. Whether it’s locking down requirements before they are well understood or prematurely optimizing code, or inventing complex navigation and workflow scenarios before letting end users play with the system, the result is the same: an overly complicated, stupid system instead of a clean, elegant system that harnesses emergence.

Keep it small. Keep it simple. Let it happen.