Escrito por Iván Alonso el Martes 15 de Diciembre de 2009

http://technorati.com/tools dice:

Technorati has redesigned our sites and many things have changed. Technorati tools are not currently available with the new site launch. We plan to bring some back soon! Thank you for your patience.

Creo que la muerte de Technorati es más que patente. Define claramente la vida útil de la mayor parte de proyectos y empresas en internet. Cualquier emprendedor debería tener bastante claro que su objetivo debería ser crecer, crecer y crecer, vender lo más caro posible y desentenderse del proyecto. De todas formas antes o después el interés en el mismo va a caer…

Escrito por Iván Alonso el Martes 15 de Diciembre de 2009

Esta mañana me he puesto a revisar neverbot.com, y he descubierto que tenía cincuenta y tantos errores que impedían que la página validara correctamente según el W3C… principalmente eran culpa del nuevo sistema para ver el estado de twitter, del badge inferior donde se veía una foto aleatoria de mi flickr y del contador de visitas de statcounter (invisible).

Cambios principales:

  • En llamadas a scripts y similares, cambiar todos los ampersand (&) por &
  • Cambiar completamente el badge de flickr por uno ad hoc. Yo he seguido este post, y ahora muestro cuatro imágenes siendo el resultado perfectamente válido.
  • No olvidar los atributos alt en las imágenes que incluyamos en la página, aunque estén vacíos (alt=”"). A mí siempre se me pasa.

Ahora puede comprobarse la validez de la página… sólo me queda comprobar todas las demás que mantengo, como esta misma.

Actualizado: neverbyte también pasa el test XHTML 1.0 Transitional

Escrito por Iván Alonso el Miércoles 2 de Diciembre de 2009

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. 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.
  7. 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.
  8. 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.
  9. 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.
  10. 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.
Escrito por Iván Alonso el Viernes 27 de Noviembre de 2009

Esto ha costado por el modo en que se manejan los strings, pero al final se ha conseguido.

Este post de WPRecipes explica cómo conseguirlo, pero el problema viene cuando en tu estado de Twitter se incluye algún enlace. En ese caso el enlace reconstruido no se verá correctamente ya que las comillas dobles aparecerán dos veces (“”), y se añadirá al inicio del enlace el nombre de tu propio dominio para intentar solucionarlo, por lo que tus enlaces siempre serán algo del tipo:

http://www.tudominio.com/"enlace/de/twitter"

Y eso, lógicamente, no funciona. Gracias a un comentario de Nick Heer en este otro post de Smashing Magazine, al respecto de este tema, conseguí llegar a un trozo de código escrito por él… pero que tampoco funciona correctamente.

Al final, la solución ha sido (y por el amor del espagueti volador, con comillas simples, que parece que la gente no sepa cómo funciona PHP):

function nb_parse_feed($feed)
{
    $stepOne = explode('<content type="html">', $feed);
    $stepTwo = explode('</content>', $stepOne[1]);
    $tweet = $stepTwo[0];
 
    $tweet = str_replace('&lt;', '<', $tweet);
    $tweet = str_replace('&gt;', '>', $tweet);
    $tweet = str_replace('&quot;', '"', $tweet);
    $tweet = str_replace('&amp;', '&', $tweet);
    $tweet = str_replace('&lt;a href', '<a href', $tweet);
    $tweet = str_replace('"&gt;', '">', $tweet);
    $tweet = str_replace('&lt;/a&gt;', '</a>', $tweet);
 
    return $tweet;
}
 
function nb_twitter_status()
{
    // Tu usuario de Twitter
    $username = 'neverbot';
    $feed = 'http://search.twitter.com/search.atom?q=from:' . $username . '&rpp=1';
    $twitterFeed = file_get_contents($feed);
    return nb_parse_feed($twitterFeed);
}

Y, donde lo necesites:

<?php echo nb_twitter_status(); ?>

Lógicamente, puedes cambiar los nombres de las funciones, yo he utilizado el prefijo nb porque las he incluido en un archivo de funciones comunes que tengo para los themes de WordPress, que incluyo con:

include_once('nb_funcs.php');
Escrito por Iván Alonso el Miércoles 25 de Noviembre de 2009

200911251825.jpg

Escrito por Iván Alonso el Martes 17 de Noviembre de 2009

Me he dado un paseo por las cuatro páginas que mantengo ahora mismo, actualizando unas cuantas cosas:

  • Los feeds de todas se sirven ahora a través de FeedBurner (hasta ahora sólo lo hacía con neverbot).
  • A la última de las cuatro la he añadido los servicios de estadísticas de Google Analytics y Statcounter.
  • Y ya de paso he actualizado algunas versiones de plugins que estaban atrasados.

Y esta información, que no le interesa a nadie, me la dejo apuntada aquí para recordar en el futuro cuándo hice qué.

Escrito por Iván Alonso el Martes 17 de Noviembre de 2009

Cuando vamos a deshacer algún cambio en Xcode, nos encontraremos con el siguiente aviso cuando alcancemos el punto en que el archivo fue guardado por última vez:

“You are about to undo past the last point this file was saved. Do you want to do this?”

Pesadez infinita… Lo eliminamos ejecutando lo siguiente desde la terminal:

defaults write com.apple.Xcode XCShowUndoPastSaveWarning NO
Escrito por Iván Alonso el Lunes 16 de Noviembre de 2009

Con este primer post vamos a marcar los principios de una serie de entradas sobre desarrollo con OpenGL y C++. Dado que últimamente estoy utilizando mi nuevo Mac para todo, todos los ejemplos los voy a ir haciendo sobre OS X (y, salvo imposibilidades de fuerza mayor, en XCode, para ir cogiendo más soltura con el entorno).

¿Qué es OpenGL? Es una librería para gráficos 2D y 3D.

200911162133.jpg

¿Por qué voy a usar OpenGL y no <inserta aquí tu librería favorita>? Por muchas razones. Principalmente porque es un estándar aceptado profesionalmente, lo que significa que aprender te puede incluso servir de algo en la vida, además de únicamente para satisfacer tus ansias de conocimiento. Segundo porque es utilizable en muchas plataformas (Windows, Mac, Linux…). Esto es posible porque es una librería enfocada únicamente a lo que está enfocada: renderizar gráficos. No tiene conceptos de ventanas ni interactúa en modo alguno con el sistema de ventanas de ningún sistema operativo, ni se encarga de manejar la entrada desde los periféricos ni una larga serie de cosas que son distintas en cada sistema. Y tercero, porque tiene bindings a (es utilizable desde) una multitud de lenguajes, desde Smalltalk hasta C#, pasando por Visual Basic, el tiempo sigue pasando, siguen apareciendo lenguajes nuevos, pero puedes seguir utilizando OpenGL.

¿Y por qué no DirectX? Por una simple cuestión de cantidad de plataformas a las que puedes llegar con OpenGL (lógicamente mucho mayor a la de DirectX). Hasta donde llega mi conocimiento con ambos sistemas se pueden conseguir resultados idénticos mediante las mismas funcionalidades. De hecho, la experiencia adquirida con cualquiera de los dos sistemas probablemente te permita seguir haciendo lo mismo con el otro.

Más información en la wikipedia y en la página de OpenGL. Tutoriales interesantes en NeHe.

A ver si en el siguiente post ya conseguimos que algo se mueva en pantalla…

Escrito por Iván Alonso el Lunes 16 de Noviembre de 2009

Facebook Lite es un rapido, mas simple camino para manteenerte en contacto con tus amigos. Si te gusta, tu puedes elegir utilizarlo en uno de el Facebook regular yendo a el menù Herrmientas. Nosotros aun tenemos trabajo que hacer antes de que este completo, pero nosotros apreciariamos obtener tu hoja de vuelta en lo que tenemos construido hasta ahora.

Creo que sí, aún tienen trabajo que hacer antes de que esté completo.

Escrito por Iván Alonso el Lunes 16 de Noviembre de 2009

Necesitamos instalar:

  1. Mono para OS X (incluye Mono, GTK# y Cocoa#)
  2. MonoDevelop para OS X

Con la primera ejecución de MonoDevelop nos buscará las últimas actualizaciones.

Para comprobar que todo está funcionando correctamente, crearemos una aplicación de prueba que muestre un Hola Mundo, pero la peculiaridad estará en que utilizaremos los mismos espacios de nombres que usamos cuando programamos bajo Windows. Es decir, no utilizaremos GTK#, Cocoa#, ni ningún otro subsistema, sino WinForms.

Creamos una nueva solución C# vacía, como la siguiente:

Captura de pantalla 2009-11-16 a las 13.49.15.png

Tras esta ventana, puede aparecer otra para activar determinadas opciones para personalizar el proyecto, pero no marcaremos ninguna (en caso de necesitarlas, puede hacerse posteriormente en las opciones del proyecto).

Se habrá creado la solución HolaMundo con el proyecto HolaMundo en su interior. Haciendo click derecho sobre el proyecto añadiremos un nuevo archivo C# (Añadir, Nuevo Archivo, Empty Class, y le ponemos como nombre -por ejemplo- CHolaMundo).

Captura de pantalla 2009-11-16 a las 13.53.28.png

Captura de pantalla 2009-11-16 a las 13.54.50.png

Incluiremos el siguiente código en el nuevo archivo creado:

using System;
using System.Windows.Forms;
 
namespace HolaMundo
{
   public class CHolaMundo : Form
   {
      static public void Main ()
      {
         Application.Run (new CHolaMundo ());
      }
 
      public CHolaMundo ()
      {
         Text = "Hello Mono World";
      }
   }
}

Si intentamos compilar en este momento, nos devolverá el error:

Error CS0234: The type or namespace name `Windows’ does not exist in the namespace `System’. Are you missing an assembly reference?

La razón es que, por defecto, el compilador de C# incluído con mono únicamente referencia los siguientes ensamblados: mscorlib.dll, System.dll y System.Xml.dll. Para que el proyecto sepa que debe referenciar System.Windows.Forms, podemos lanzar el compilador desde línea de comandos (con el parámetro -r:System.Windows.Forms.dll), o añadirlo permanentemente a las opciones del proyecto.

Bajo el nombre del proyecto, en los archivos de la solución, veremos la carpeta Referencias, sobre la que haremos doble click, y buscamos el ensamblado que queremos referenciar en nuestro proyecto:

Captura de pantalla 2009-11-16 a las 14.09.23.png

Tras incluirlo, la solución ya funcionará perfectamente, por lo que podemos hacer un Build (Command+K) y Ejecutar (Command+Alt+Enter), y podremos ver este resultado:

Captura de pantalla 2009-11-16 a las 14.17.19.png

Desde luego no es la aplicación de .Net más compleja que podíamos utilizar como ejemplo, pero ya es algo. Y tanto el código utilizado como el ejecutable resultante son 100% compatibles con sistemas Windows.