miércoles, 17 de diciembre de 2008

Primeros pasos como root con Ubuntu Intrepid Ibex

0 comentarios
Como ya posteé el otro día, ahora estoy trabajando con Ubuntu, y en este cambio arrastré a una amiga que, a estas horas del medio día, debe estar durmiendo porque supongo que pasó la noche pasada peleando con los drivers de su módem 3G.

Éste será el primero de una serie de post que quizás no os sirvan de nada a quienes pasáis por aquí de vez en cuando, pero creo que es necesario que quede por aquí anotado qué es lo primero que hay que hacer en Ubuntu, aunque haya documentación de sobra en Internet (y la citaré), porque me viene bien tenerlo a mano para futuras ocasiones y para que algún colega que empieza como yo haga las cosas como yo (de mal).

De modo que, en resúmen, una vez instalado Ubuntu (en mi caso Intrepid Ibex), vamos a crear la contraseña del usuario root. Abrimos la terminal y tecleamos:
sudo passwd root

A continuación se nos pide (dos veces) la nueva contraseña del root.

A partir de ahora, cuando queramos ejecutar acciones como root antepondremos el comando sudo a nuestra instrucción. Siempre se nos pedirá la contraseña, de modo que si vamos a pasar un rato trabajando como root en consola es más util iniciar sesión como root tecleando sencillamente:
su

Se nos pedirá la contraseña y no habrá que volver a teclearla durante la sesión.

Los comandos con los que vamos a estar familiarizados son:

  • su [nombreusuario]: cambia la sesión de consola al usuario especificado. Si no se especifica ninguno, como ya habeis comprobado, cambia a root.

  • sudo [órdenes]: (acrónimo de Super User DO) ejecuta como root los comandos que le siguen.

  • passwd [nombreusuario]: cambia la contraseña al usuario especificado.


Del mismo modo, si tenemos que hacer modificaciones en ciertos ficheros, quizás nos interese entrar al entorno gráfico directamente como root, para lo cual tenemos activar esta posibilidad en Sistema -> Administración -> Ventana de entrada. En la pestaña "Seguridad" seleccionamos Permitir acceso local al administrador del sistema. ¿Representa esto una vulnerabilidad? Cuando viene desactivado por defecto... por algo será, os garantizo que si tengo algún problema la desactivaré.

domingo, 14 de diciembre de 2008

Un nuevo espacio de trabajo en LAMPP. ¿Ahora escojo KDE o Gnome?

0 comentarios
He pasado el fin de semana poniendo al día el PC e instalando las aplicaciones que voy a utilizar para trabajar. En esencia, la cosa ha quedado así:

  • SO: Ubuntu 8.10. La instalación es sencillísima, sale del tirón, y detecta los drivers de todos los dispositivos, incluso les saca más partido que los drivers de fábrica para Windows Vista. Especialmente sencillo y potente con los drivers de NVidia.

  • Servidor web: XAMPP.

  • IDE: Aptana como plugin para Eclipse.


La verdad es que estoy como un niño con zapatos nuevos. El siguiente paso, quizás, es seguir este tutorial para instalar KDE en Ubuntu. Lo que me plantea muchas dudas y os lanzo la principal: ¿os gusta más Gnome o KDE?.

jueves, 4 de diciembre de 2008

Las 10 no-verdades del P2P que dice Cultura que son mentira

0 comentarios
(Explicado de una forma prolija aunque sencilla)

Un amigo, bastante implicado en asuntos de propiedad intelectual, me pasaba ayer el artículo Las 10 verdades del P2P que dice cultura que son mentira, publicado en El país hace unos días y que os recomiendo que leais antes de seguir con este post.

De entrada, diré que hay varias posturas que me parecen absolutamente erróneas y abusivas. Por un lado la de la SGAE, cuya presunción de culpabilidad hacia el internauta y el usuario general de dispositivos electrónicos esconde una actitud de sanguijuela que chupa la sangre del comprador mediante el celebérrimo canon (salvajada que padecí en cuantía desmesurada cuando me pasaron factura por el HP Pavilion con licencia de Windows Vista y en el que he instalado XAMPP y otras herramientas libres). Por otro lado la postura del internauta común y defensor a ultranza del "todo gratis" que amparado en unas leyes un tanto defectuosas (y que así nos quedemos o que el juez nos coja confesados) tiene una actitud de sanguijuela que chupa la sangre del artista. Pero al fin y al cabo ambos están el mis lado: el lado de los hombres, el lado del egoísmo, homo homini lupus, ya saben.

Hay también dos cosas aparentemente enfrentadas que me parecen geniales. La primera consiste en que un creador (novelista, músico, programador) pueda vivir de lo que crea, aunque creo que se da de una forma desproporcionadamente escasa, quizás porque, al menos en España, consumimos lo que mejor se nos vende sin capcidad de criterio: David Bisbal, Matilde Asensi, Windows Vista. (Y lo siento por muchos de vosotros, que caísteis como yo en la trampa, ya que estoy lo digo, pero el último disco de Amaral es meramente mediocre y El niño con el pijama de rayas es previsible, simplona y líricamente neutra a más no poder; y Microsoft es el coñazo padre del software, y Hotmail es incómodo, y Windows Live Messenger funciona nada más que regular). La segunda de aquellas cosas que me parecen sencillamente geniales es el concepto "free" que utilizamos en informática y que significa "libre", no "gratis". Pero esa máxima que dice que «compartir es mejorar» queda de sobra demostrada comparando cualquier proyecto de código abierto con otros de pago (y entiéndase pago de precios desorbitados).

Compartir es mejorar, sí, pero ese será el futuro siempre y cuando la mayoría de los hombres queramos que sea así, siempre que no se imponga esa avaricia miserable del ser humano, repito, homo homini lupus, y que los desarrolladores sepamos hacer llegar nuestros proyectos libres al usuario final. Debo decir,a demás, que este concepto es ampliable a las artes: sin Quijote no hay novela, sin El burlador de Tirso de Molina no hay Donjuanes ni tantas otras cosas, sin Truffaut no hay Jeunet, sin Beatles no hay nada. Es más, si el consumidor no tiene un acceso fácil al producto la cultura termina por desaparecer o por concentrarse en una élite. 25 € por una novedad bibliográfica es un abuso. 90 € por un videojuego es un abuso.

  • Aunque en la lucha antipiratería por parte de los editores hay ciertas contradicciones que nos hacen pensar que es sólo una pose:

  • El videojuego FIFA, por ejemplo, vende lo que vende gracias a la publicidad que supone la piratería (dato estudiado cuya fuente he olvidado y que tendréis considerar falso o digno de fe ciega).


Los discos que aparecen en las redes P2P antes de que se editen son filtrados directamente por la discográfica (los gremlins no existen).

Dicho esto, y teniendo en cuenta que hay una legislación vigente, mi postura claramente es compartir SÍ, piratería NO, encarecimiento de la cultura NO. Por lo que los diez puntos del artículo arriba citado, yo los veo así:

  1. Lo que está en Internet es gratis. Falso: Ambas posturas dicen lo mismo, aunque el antidecálogo lo hace como si el Ministerio dijera lo contrario. Lo cierto es que cada cual tiene derecho a decidir lo que cobra por su obra y el internauta el deber de pagarlo. No todo lo que está en Internet es gratis.

  2. Bajarse música o películas de Internet es legal. Verdadero: La descarga ilegal no es delito si no existe ánimo de lucro, lo que hay que tener claro es qué entiende la ley por ánimo de lucro. Por otro lado, si es un ilícito civil que por razones de privacidad de datos no se puede perseguir.

  3. Si no aparece el símbolo © en un contenido en Internet lo puedo utilizar. Falso: Hay que tener cuidado y buscar siempre la fuente original. Que un texto tenga copyleft o sencillamente no tenga copyright no significa que no haya sido plagiado.

  4. Es legal copiar o utilizar un contenido de Internet siempre que se cite al autor. Ni para uno ni para otro. La cita es legal, obviamente, la reproducción de fragmentos excesivamente grandes es plagio, además de innecesaria en una obra original. Que el canon sea injusto no significa que tengamos derecho a transgredir las leyes de propiedad intelectual: habrá que cambiar las leyes o retirar el canon. Pagar el canon no nos da derecho a hacer copias deliberadamente (de ahí lo injusto de pagar el canon).

  5. Cuando intercambio música y contenidos a través de programas peer to peer (P2P), no necesito autorización. Falso: Cultura acierta de nuevo y el antidecálogo tergiversa las cosas. Que enlazar a redes P2P no sea delito no signfica que su uso para distribuir sin autorización material con copyright sea legal.

  6. Los intercambios de archivos a través de las redes P2P son legales. Absolutamente verdadero: En este caso Cultura radicaliza. Las redes P2P -y por tanto su uso- son legales. Lo ilegal es compartir material sin autorización del autor. Pero son muy útiles, por ejemplo, para compartir software libre, trabajos propios, etc.

  7. Las redes P2P son seguras. Absolutamente verdadero. Basta un mínimo de sentido común para tener cuidado con lo que se baja y tener el equipo mínimamente securizado (antivirus, cortafuegos). Una red P2P no es más peligrosa que un servicio de correo electrónico.

  8. La industria cultural y los artistas ya ganan suficiente así que no perjudico a nadie si no pago. Falso. Efectivamente, la legislación vigente da a cualquiera el derecho de enriquecerse hasta llegar a límites repugnates. Que eso sea injusto e inmoral y que queramos tender hacia el reparto de la riqueza no nos da derecho al robo. Eso sí, es conveniente evitar mediante medidas legislativas que haya diferencias económicas tan grandes entre personas.

  9. Las descargas ilegales promocionan a los artistas y a los autores, que ven difundidos sus trabajos y se dan a conocer sin necesidad de la industria. Ni para uno ni para otro. Internet puede promocionar artistas, pero siempre y cuando el consumidor tenga inquietud por escuchar cosas nuevas, de no ser así neceista a un editor que le diga qué es lo que está de moda o qué no. De todas formas, si lo que se hace famoso en Internet es Artic Monkeys, mejor nos quedamos como estamos.

  10. El acceso a los productos culturales tiene que ser gratis y eso es lo que consiguen las redes P2P. Verdadero. Las redes P2P facilitan el intercambio de ficheros de forma gratuíta, o mejor dicho, pagando una conexión a Internet.


Resultado: Cultura 4 - Antidecálogo 4
Los dos suspensos


Yo diría que la gente del Ministerio de Cultura a tendido a simplificarlo todo excesivamente, a dar poca información para intentar convencer e incluso en algún caso amedrentar al usuario medio para que no use redes P2P, como si las redes P2P en sí fueran los delincuentes -en cuyo caso, siguiendo ese razonamiento, deberíamos prohibir el uso del coche para evitar los accidentes tráfico-.

Pero el antidecálogo tampoco tiene un buen razonamieto. Intenta defender la legitimidad de la piratería, cuando es claramente una práctica ilegal.

No creo que se trate sencillamente de legalizar algo o de perseguirlo, y no creo que haya que cambiar el modelo de negocio de una industria en concreto, sino remodelar la forma en que se distribuye la cultura para hacerla totalmente accesible -remodelaciones del sistema macroeconómico aparte-. Pero todo pasa, creo, por conseguir que la mayoría de la gente tenga criterio ante algo.

miércoles, 3 de diciembre de 2008

Debug de arrays en PHP

0 comentarios
Muchas veces un error de programación nos puede llevar a pasar algún que otro mal rato. Una errata en el código de un formulario o los valores de una consulta que no manejamos muy bien pueden llevarnos hacia resultados inesperados en un script (una acción que no se realiza sin dejar mensajes de error, filas que se insertan con valores incorrectos...). Aquí os dejo una pequeña función recursiva que recorre todos los elementos de un array y devuelve una cadena para que nosotros la imprimamos en pantalla en cualquier momento:
function debug_array($array){
$output = "";
foreach($array as $key => $value){
$output .= "<p>".$key." => ".$value."</p>";
if (is_array($value)){
$output .= "<blockquote>".debug_array($value)."</blockquote>";

}

}
return $output;

}

Llamar a la función es tan sencillo como esto:
echo debug_array($arrayquequierodepurar);

martes, 2 de diciembre de 2008

Method Post, Ficheros y AJAX. Soluciones sencillas para que no te vuelvas loco

0 comentarios
El envío de formularios mediante métodos AJAX puede ser un tanto engorroso, más aún teniendo en cuenta que deberemos usar funciones diferentes en función de si el método del formulario es GET o POST. Esto nos puede plantear algunos problemas, ya que dependiendo del tipo de campo del formulario debemos acceder a una propiedad u otra del objeto. Podemos utilizar esta función, a la que pasamos como parámetro la id del formulario que queramos enviar, para concatenar las variables en una cadena del tipo var1=value1&var2=value2&...varN=valueN.
function variablesdelformulario(form) {

var salida = ''; //cadena de variables
var i = 0; //contador
var primeravez = true; //Switch para saber si se comienza la cadena

formobj = document.getElementById(form); //Objeto formulario a tratar

//Recorremos todos los elementos del formulario
for (i = 0; i < formobj.elements.length; i++){
//Si es la primera vez cambiamos el switch
if (primeravez) primeravez = false;
//Si no es la primera vez añadimos
else salida += '&';
//Si es un checkbox marcado...
if (formobj.elements[i].type == "checkbox"){
if (formobj.elements[i].checked)
salida += formobj.elements[i].name+"="+formobj.elements[i].checked;

}
//Si es un radio button y está marcado...
else if (formobj.elements[i].type == "radio"){
if (formobj.elements[i].checked)
salida += formobj.elements[i].name+"="+formobj.elements[i].value;

}
//Si es cualquier otro elemento
else{
salida += formobj.elements[i].name+"="+formobj.elements[i].value;
}

}
//Devolvemos la cadena
return salida;
}

El gran problema viene cuando uno de los campos del formulario es del tipo file. En Desarrollo Web nos dicen:
[...] Sería algo como Archivo Subido con AJAX. Esto, hoy por hoy, no se puede hacer. Es así y no hay vuelta que darle.
Entonces usted dirá ...
- heeee, si yo en gmail puedo subir archivos y lo hago con AJAX !!!.
Yo le respondo ...
- No sea bobo, yo también creía lo mismo.

Hay sobradas muestras que el objeto XMLHttpRequest no puede enviar archivos al servidor. [...]

Efectivamente, el objeto XMLHttpRequest no puede enviar ficheros, pero se pueden enviar simulando una conexión asíncrona con un iframe, tal y como nos enseñan en el artículo Ajax File Upload.

Actualización 3/12/2008

Otro problema que se nos puede presentar al pasar variables de esta forma es que el caracter '&' esté dentro de uno de los valores -algo que casi siempre ocurrirá si uno de los campos contiene código HTML-, porque la variable que lo contenga se cortará exactamente donde aparezca '&'. Por ejemplo si var1 = 'Acci&oacute;n', la cadena de variables será "var1=Acci&oacute;n", lo que el servidor interpretará como dos variables: var1 = 'Acci' y oacute;n sin valor asignado, y además con un ';' por medio, lo que hará que el programa no funcione de ni coña.

Pero podemos solucionarlo de una manera muy sencilla haciendo la siguiente modificación en la función para reemplazar el símbolo '&' por una cadena de texto que nosotros podamos identificar para luego recuperarla. Afortunadamente tenemos funciones en JavaScript y PHP que hacen eso. En JavaScript codificaremos el valor de la variable con encodeURIComponent():
salida += formobj.elements[i].name + "=" + encodeURIComponent(formobj.elements[i].value);

Al recibir los parámetros en el servidor, con PHP, podemos reestablecerlos con urldecode():
foreach ($_POST as $key => $value)
$_POST[$key] = urldecode('MyHTMLamp;simbol', '&', $value);

De esta forma, ya con las variables separadas, volvemos a sus valores originales. Esto puede ser muy útil para enviar datos de textareas que utilizan un editor WYSIWYG o que contienen código HTML a secas, o aún más sencillo, si tenemos un campo 'empresa' y su valor puede ser "McDollar & sons".

jueves, 27 de noviembre de 2008

Lightbox 2 (o cómo conseguir ese delicioso efecto para ampliar imágenes)

2 comentarios
Lightbox 2 es una biblioteca escrita en JavaScript que permite mostrar en pantalla una imagen a partir de una vista previa, de una forma elegante y con una instalación sencillísima (al estilo de, por ejemplo, Lolacamisetas.com).

En la web oficial podeis encontrar un ejemplo de uso que permite ampliar una imagen o a través de una ampliación navegar por un album de vistas previas. El potencial de esta biblioteca radica sobre todo en la limpieza del diseño: las capas se abren con transiciones, muestran una animación de carga, el resto de la página se oscurece, los botones de navegación se muestran nítidamente. Y además, como decía antes, la instalación es tan fácil como hacer lo siguiente:

  1. Descargar de la página oficial el código.

  2. Incluir en nuestra página las siguientes librerías:

  3. <script type="text/javascript" src="js/prototype.js"></script>
    <script type="text/javascript" src="js/scriptaculous.js?load=effects,builder"></script>
    <script type="text/javascript" src="js/lightbox.js"></script>

  4. Activar las CSS de Lighbox 2 -o incluír las nuestras-:<link rel="stylesheet" href="css/lightbox.css" type="text/css" media="screen" />

  5. Añadir el atributo rel = "lightbox" a los links de las imágenes cuya vista ampliada queremos mostrar con lightbox, por ejemplo:<a href="images/image-1.jpg" rel="lightbox" title="my caption">image #1</a>

    (El atributo title de la imagen se utiliza también como texto de la ampliación con lightbox)

  6. Por último, para agrupar imágenes en álbumes, no hay más que poner el nombre del álbum en el atributo rel del paso anterior de la siguiente forma:<a href="images/image-1.jpg" rel="lightbox[roadtrip]">image #1</a>
    <a href="images/image-2.jpg" rel="lightbox[roadtrip]">image #2</a>
    <a href="images/image-3.jpg" rel="lightbox[roadtrip]">image #3</a>


En Lightbox 2 existe también un foro de ayuda además algún que otro truco más para sacarle el máximo partido a esta biblioteca.

miércoles, 26 de noviembre de 2008

La evolución de la Web de manera sencilla

0 comentarios
Atravesando como estamos una etapa febril de web 2.0, en la Red podemos encontrar ya bastantes textos que nos hablan de web 3.0 e incluso 4.0, y es normal, porque los supestos gurúes de la red dicen que la web 3.0 nos alcanzará en la próxima dédaca (y eso empieza dentro de poco más de un año, señores, que el tiempo pasa volando).

¿Pero qué es todo esto de la web x.0? Este gráfico que unblogmas comparte en su cuenta de flikr lo explica de maravilla:

Evolución de la web (via unblogmas)

Y este video que encuentro vía The Inquirer es mucho más intuitivo:



Pero, en resumen, la evolución de la web se resume en esencia en algo así:

  • 1.0 - El pasado (1990 - 2000). La web en la que un desarrollador podía publicar contenidos en Internet. Cuando la Red creció demasiado se hizo necesario el desarrollo de buscadores (¿lo llamamos web 1.5?) para cribar información y acceder en décimas de segundo a lo que estamos buscando. Éste sistema es defectuoso por razones que explicaré más adelante.

  • 2.0 - El presente (2001 - 2010). La web evoluciona incorporando tecnologías que mejoran la experiencia del usuario como AJAX, que sobre todo pretende abstraer al navegante de los tiempos de carga de las páginas, se tienen más en cuenta los estándares W3C y los diseños se basan CSS que, manipulados con JavaScript consiguen efectos visuales más atractivos. Se liberan infinidad de CMS's y se facilitan alojamientos gratuitos para crear blogs, portales, redes, etc. con contenidos fácilmente editables mediante un gestor (véase Wordpress, Joomla, elgg...). En definitiva: el usuario se convierte también en editor. En los procesos de búsqueda empiezan a cobrar bastante relevancia, merecida, sitios como digg.com.

  • 3.0 - El futuro inmediato (2011 - 2020). Se pretende desarrollar (por fin) la web semántica. Es decir: los buscadores utilizan mapas semánticos y redes significados para romper cierta barrera entre lo que el usuario que busca quiere decir y lo que el buscador encuentra. El problema es que en el momento en el que tecleamos unas cuantas palabras en un buscador estas dejan de ser palabras para convertirse en meras letras sin significado (y un significante sin significado es algo cojo). El problema radica en que una máquina (o cualquier artefacto no inteligente), que se comunica con un lenguaje estructurado y basado totalmente en operaciones aritmeticológicas no podrá nunca entender un lenguaje natural (esa es la gran barrera hacia la inteligencia artificial. De modo que la Web 3.0, hoy por hoy, es sencillamente una paradoja, aunque quizás pueda simularse con resultados más o menos óptimos.
    A esto habría que añadir la recopilación de datos de los usuarios (que ya se lleva a cabo mediante muchos sistemas) para cambiar los resultados de una búsqueda, seleccionar la publicidad, etc.

  • 4.0 - El futuro lejano (???? - ????). Lo que se ha reservado para la Web 4.0 es algo que veo muchísimo más cercano que la web semántica: el WebOS, es decir, el sistema operativo basado en la web, cosa que no sé muy bien cómo está planteada, pero que es, hoy día, imprescindible: se trata de que cualquier usuario o empresa acceda a sus datos y a sus aplicaciones a tavés de la web, es decir, desde cualquier lugar del mundo donde haya una conexión a Internet. Con eso solventamos un problema muy común en la PyME que ejemplifico: de tres ordenadores que tenemos en la oficina sólo uno tiene aquel viejo programa de contabilidad que no puede compartir datos con los demás ordenadores, y peor aún, no el usuario no sabe cómo hacer operaciones de mantenimiento.


Creo que de todos estos cambios lo más interesante para el navegante es el acercamiento a la web semántica. Sin duda el sistema de búsquedas que utilizamos ahora (llámese Google, llámese Yahoo) funciona mal. ¿Cómo puede un motor de búsqueda encontrar un texto literario? ¿Cómo puede relacionar expresiones y textos que en definitiva son ideas si los programas informáticos no pueden pensar? Sin duda, el protagonismo que tendrán los lingüístas en el futuro de la red será similar al de los desarrolladores.

Hola, mundo

0 comentarios

Tenía que empezar con el tópico, no pude evitarlo (os presento mis disculpas). Supongo que esta primera entrada (¿log entry? ¿seguro que se dice así en español?) debería ser para explicar de qué va esto, pero en realidad está bastante claro en el título, así que la pregunta que voy a responder no es qué, sino por qué: ¿por qué he empezado a escribir este blog? Porque creo que cualquier persona que se dedique en parte a cualquier proyecto de desarrollo debería, en la medida de lo posible, sacar un rato para escribir sobre las herramientas que usa. Dejaré algún tutorial explicando cómo preparo ciertas cosas (cómo hacer un fichero de configuración para una web, cómo conseguir ciertos efectos que se ven en determinados sitios, qué herramimentas libres utilizo, cómo empezar a hacer ese algo que parece tan complicado) Algunos no serán de la calidad que requiere un programador ávido de aprendizaje, por eso espero vuestras correcciones en los comentarios. No me cortaré a la hora de postear contenidos de otros blogs, porque eso servirá para que los lectores que pueda tener, en algún caso, descubran algo nuevo.

Entonces... ¿esto es un blog más sobre desarrollo y web? La respuesta es no, éste es el mío.