Creando una lista de Podcasts en iTunes

Uno de los objetivos que me planteé este año fue volver a hacer deporte de forma habitual. Sin querer convertirme en un Iron Man (aunque estaría chulo poder correr una de esas), el objetivo era incorporar el deporte de nuevo a mi rutina de vida diaria. Y lo he conseguido. Ahora salgo todas las semanas, 3 ó 4 veces, a caminar, marchar o trotar de forma suave.

Me he habituado a ir escuchando música mientras camino. Ya, ya se que la mayoría de la gente lo hace, pero es que yo era un «anti-cacharros» para correr, y me molestaban hasta las zapatillas. Pero el iPhone 4 engancha, y más si usas una herramienta de tracking como RunKeeper Pro. Durante el Invierno y la Primavera he ido con el iPhone sin problemas. Pero ahora en Verano me apetecía algo más ligero. Y mi mujer tenía tirado por aquí, sin usar, un iPod Shuffle de 2GB (rosa, eso sí). Ante tamaño sacrilegio, no tuve más remedio que ponerlo en uso y cargarlo con música.

Y todo perfecto. Pero echo de menos mis podcasts. Porque cuando antes he dicho que escucho música he mentido: yo escucho podcasts, y así aprovecho el deporte para enterarme de cosas, o entretenerme. Es la mejor radio, y la que más escucho. El caso es que en el Shuffle, que lo cargué de emergencia con un aleatorio de canciones de 5 estrellas, no había ni un podcast. Tenía que solventarlo. Mi mente ya sabía lo que quería:

«Dile a iTunes que SELECT * FROM podcasts WHERE nombre_podcast = Game Over OR Macniacos OR 85% Cocoa OR …»

El problema es que aún no he terminado el Interfaz Mente de Diego – iMac. Está en preAlpha :-). Así que tenía que pelearme con el interfaz de iTunes, que será muy intuitivo, pero para otros. Porque lo que es para mí…

Lo que sí tenía claro, es que debía ser una lista de reproducción, y luego cambiarle los criterios hasta llegar a algo como el SELECT de arriba. ¡ERROR!. Las listas de reproducción te permiten arrastrar ahí canciones para luego reproducirlas, pero no definir criterios. Lo que necesito es una nueva lista de reproducción inteligente.

Listas de reproducción inteligentes

Listas de reproducción inteligentes

Me lancé a crear la lista, pero eso de hacer que me listara todos los podcast Y que luego pusiera los capítulos no reproducidos de unos cuantos de ellos, seleccionados a mano me ha llevado unos minutos hasta comprenderlo. Sí, soy demasiado estúpido. Pero una búsqueda booleana directa me gustaría más. A mí al menos… Sin aburrir más al personal, para crear la lista he llegado a:

Configuración de la Lista de Reproducción

Configuración de la Lista de Reproducción

Ahora esto hace lo que yo quiero: me saca 10 podcasts de entre los de arriba que no estén marcados como reproducidos. ¡Bien!. iTunes 0, Diego 1.

El resultado de la Lista: los podcast que quiero escuchar

El resultado de la Lista: los podcast que quiero escuchar

Actualización 27/07/2011:

Tal y como aparece la captura de pantalla con las reglas anteriores, NO se muestran los 10 podcasts añadidos recientemente y que no se han reproducido. Sólo se muestran los 10 añadidos hace menos tiempo. Eso me ha llevado a que, por ejemplo, si me bajo 10 episodios de 85% Cocoa y otros 10 de iCharlas, y escucho todos los de iCharlas me seguirán apareciendo en la lista (aunque ya los he escuchado) porque son los últimos que he añadido. Se soluciona con una condición «Nº de reproducciones es 0», quedando las reglas:

Nuevas reglas de la lista inteligente

Nuevas reglas de la lista inteligente

Sincronizando el iPod Shuffle

El Shuffle que tengo es uno de los de primera generación. Que por cierto, son los que más me gustan de diseño. Los de la 3ª generación han vuelto a este diseño original del que nunca debieron apartarse 🙂

Si tratas de autorellenar uno de estos Shuffles desde iTunes con la lista de podcasts, una ventanita te dice que tralará:

Error Shuffle 1ª generación: no soporta podcasts

Error Shuffle 1ª generación: no soporta podcasts

Y Apple te lo deja bien clarito:

La función Autorrelleno de iTunes no añadirá audiolibros y podcasts a ningún modelo de iPod. Es posible añadirlos manualmente si los arrastras hasta el iPod shuffle en iTunes.

Así que nada de hacer las cosas automáticamente (bueno, sí puedes si te dejas la pasta en un Shuffle de los nuevos). En mi caso, la sincronización la hago en tres pasos:

  1. borro todo del Shuffle
  2. copio los podcasts de mi lista en el Shuffle
  3. y entonces que iTunes autorellene con mis canciones favoritas. No caben todas, OK, mete las que quieras
Y de esta forma, llevo podcasts y música en el Shuffle. El problema ahora es encontrar los podcasts para reproducirlos, pero esa es otra historia 😉
j j j

Mi oficina en casa (Home Office), Junio 2011

Me gusta el porno Geek. Y mucho. Eso de mirar chismes «me pone». Y no te rías: si estás leyendo esto, es porque te gusta esa variante del porno Geek, para voyeurs, llamada Home Office Setups. Me encanta ver las oficinas de otras personas (si son informáticos mejor, ya que entonces el factor Geek se multiplica).

Comencé esta afición con dos clásicos, las increíbles oficinas de Mitch Haile y de Stefan Didak. Vídeos como los de Bilsta57 no me ayudaron mucho a superar este vicio. Finalmente me hice seguidor de Workstation Setups en Twitter. Y ahora he dado un paso más. Ya que mucha gente tiene curiosidad en ver cómo amontono los ordenadores que atesoro, he decidido hacer una fotos (bastante malas, aviso), y subirlas a Flickr. Abajo tienes una presentación «bonita» de las fotos, pero si quieres, puedes ir a Flickr y ver las fotos con sus descripciones, comentarlas, etc.

Ya sabes, me encantaría que me enseñaras tus «vídeos caseros». En el buen sentido, claro 😉

j j j

Mi primera aplicación para iPad

He terminado y entregado mi primera App para iPad. Ha sido un encargo, muy especial, para crear un cartel interactivo dentro de un museo. Así que no la busques en la App Store, porque no va a aparecer. La App está dedicada a narrar los sucesos que llevaron hasta la primera Constitución democrática de España, «La Pepa», proclamada en 1812. Es visualmente muy sencilla (debía ser «minimalista») y muy fácil de usar: se desplazan los sucesos con un «swipe» o bien se avanza por un «cover flow» en la parte inferior.

Mi App para iPad en funcionamiento

Mi App para iPad en funcionamiento

Con esta App he aprendido muchas cosas:

  • cómo desarrollar pensando en la resolución del iPad
  • cómo hacer pruebas con el iPad de mi mujer cuando ella no lo está usando
  • cómo usar a fondo UIScrollView
  • cómo encontrar trozos de código en Internet que me resuelvan problemas 🙂
  • cómo distribuir una App de forma sencilla para que el cliente la pruebe sin tener que ir yo a instalarla en sus dispositivos (gracias @xelecto por enseñarme BetaBuilder)
  • a hacer un MVC del que me sienta contento
  • a comenzar un proyecto pensando en cómo voy a reutilizar el código
  • que el iPad no tiene motor de vibración 😛
  • que desarrollar para un estudio de diseñadores te abre los ojos sobre muchos aspectos de diseño, pero también a ratos te hace odiar a la raza humana.
Cambiando de evento

Cambiando de evento

Increíblemente he cumplido «casi» perfectamente en tiempo, pese a estar con mil cosas a la vez. Y me he vendido muy barato, debo decirlo, porque el proyecto me atraía mucho.

Tengo ahora una buena base para plantearme una App que cuente cuentos, o explique cosas (al estilo de aquellos estupendos libros de «Cómo funcionan las cosas»).

Así que ya sabes: si tienes una App interesante para desarrollar, dinero en el bolsillo y las ideas claras, siempre puedes contactar conmigo para contratarme como desarrollador Freelance. O directamente puedes donarme el dinero y ya yo voy haciendo algo «magical» 😀

Batalla de Trafalgar

Batalla de Trafalgar

j j j

Instalar el plugin de Mercurial en Eclipse

Los sistemas de control de versiones son adictivos. No puedes probarlos, porque luego no puedes vivir sin ellos. Aunque sea un pequeño ejemplo el que vas a programar, te sientes perdido sin tu repositorio y empiezas a pensar «¿y si se me ocurre cambiar esto o lo otro, y luego me arrepiento?». Ese tipo de «problemas» se solucionan casi en el acto con un VCS. Y si es distribuido (Git o Mercurial), mejor que mejor.

Antes de seguir, quiero dejar claro que no entro en las guerras religiosas entre los DCVS Git o Mercurial. Yo uso Mercurial porque Joel Spolsky lo explica de forma increíblemente sencilla. Aunque ahora que Git viene integrado con XCode4, probablemente es una buena alternativa… bueno, no :-). En fin, usa el que te de la gana, pero usa uno.

Para casi todos mis proyectos uso Mercurial. No lo uso para los ejemplos que escribo para mis cursos. Y estaba pensando «¿porqué no usarlo?». Por pereza mental, y por hacer siempre las cosas de la misma forma. Mi padre dice que «si un burro tira de una noria para un lado y le das la vuelta, ya no sabe tirar de ella». Y es que nos acostumbramos a hacer siempre lo mismo, de la misma forma, y nos estancamos. De vez en cuando hay que revisarlo todo con una mirada fresca y en lugar de pensar «¿hay una manera de optimizar esto que estoy haciendo?» debemos plantearnos «¿en serio tengo que seguir haciendo esto?».

El caso es que un sistema de control de versiones es casi perfecto para dar clases. Puedes tener una primera versión, sencilla, y luego ir promoviendo a las distintas versiones más avanzadas, que pueden ser changesets o bien nuevas ramas. Los cambios que hagas durante la clase para demostrar algo siempre puedes revertirlos sin problemas. Para eso está el DCVS. Y distribuir el código es más sencillo: compartes tu repo, y los alumnos se clonan los repositorios y punto. No hay que andar con historias de copiar los Workspaces de Eclipse y que luego falle (los WS de Eclipse dependen del sistema en el que los uses, hay que cambiar luego los Build Paths, etc.). Como se puede ver, todo son ventajas. La pregunta es porqué no lo he usado hasta ahora…

Instalar Mercurial

Evidentemente, antes de nada lo primero es instalar Mercurial, ya sea para Linux, Windows o Mac, o para donde vayas a usar el DCVS. Si no, el plugin de Eclipse no podrá usar Mercurial porque no lo encontrará en tu sistema. Te lo bajas de su sitio web oficial.

Instalando hgEclipse

HgEclipse es un plugin para Eclipse que añade soporte Mercurial a tus proyectos. Una vez instalado, en el menú contextual del proyecto encontrarás en la opción Team > Share la parte de Mercurial. Para instalarlo, iremos a Help > Install New Software e introduciremos el repositorio http://cbes.javaforge.com/update. En mi caso (instalándolo en Mac) no necesito los binarios de Mercurial para Windows, así que no los marco para instalar.

Instalando hgEclipse: repositorios

Instalando hgEclipse: repositorios

Cuando pulsemos Next, pasaremos a descargar e instalar el plugin. Al final no hay más remedio que reiniciar Eclipse. Así que hazlo 🙂

hgEclipse instalándose

hgEclipse instalándose

Usando HgEclipse

Una vez con todo instalado, lo primero es crear el repositorio Mercurial en nuestro proyecto. Eso lo prepara todo para poder gestionar las versiones de tu codigo fuente. Equivale a un «hg init». Para ello, pulsaremos con el botón derecho del ratón en el nombre de nuestro proyecto y seleccionaremos Team > Share Project. Si todo está correctamente instalado nos aparecerá una ventana como la siguiente:

Share > Project

Share > Project

Como queremos crear un repo Mercurial, basta con pulsar siguiente. Nos mostrará dónde va a crear el repositorio (que es una carpeta llamada .hg, dentro de nuestra carpeta de proyecto). Aparecerán unos nuevos iconos en las carpetas y ficheros de nuestro proyecto y la palabra [new] indicando que el repo es nuevo, pero aún no se ha realizado el primer commit.

Repositorio tras el init

Repositorio tras el init

¡Vamos a añadir ficheros a nuestro repositorio! Botón derecho en el proyecto > Share Project, pero ahora aparece un menú con un montón de opciones. Seleccionamos Add. Esto añade los ficheros del proyecto al repositorio. Yo suelo añadir únicamente el código fuente, pero no los ajustes del proyecto, ni las carpetas propias de Eclipse, como muestro a continuación:

Añadamos ficheros al repo!

Añadamos ficheros al repo!

Ahora que hemos añadido, los iconos de los ficheros fuente cambian y tienen un «+» azul al lado. Están ya controlados por el repositorio, pero no hemos subido este cambio, que en este caso es subir la primera versión. Para ello, Team > Share Project > Commit y añadimos un mensaje de commit. HgEclipse nos muestra los ficheros que va a subir, y los que no tiene «controlados», por si queremos añadirlos.

Commit

Commit

Al pulsar OK, ¡listo!. Ya tenemos control de versiones funcionando. Ahora, si modificamos un fichero se nos mostrará como cambiado y podremos hacer un commit con esos cambios. O podremos compartir el código fuente del proyecto por la red con la opción Serve. Cualquiera en la red podrá hacer un Pull del repo y bajarse este código fuente. Mucho más rápido que compartir el proyecto en una carpeta SMB y encima evitas problemas con las configuraciones de Eclipse (yo lo uso en Mac y mis alumnos, normalmente, en Windows)

Las opciones del menú de Share Project son muy amplias. Os animo a irlas probando y a aprender Mercurial entre todos. El que tenga un truco especial de cómo usa Mercurial, ya sabe, que use los comentarios.

hg commit -m "post acabado"
hg tag -m "v1.0"
j j j

Cambiar el nombre de varios ficheros a la vez en Mac OS X

Estoy terminando una App para iPad que me han encargado y me he encontrado con un problema. Tenía 32 imágenes, con nombres 1.png, 2.png, así hasta 32.png y necesitaba crear una versiones reducidas para tener una «vista previa». Vamos, lo que se conoce como un thumbnail. En Mac yo lo hago con vista previa:

  • selecciono todos los ficheros del 1.png al 32.png, pulsando Cmd+A
  • los arrastro a una carpeta vacía que acabo de crear, pulsando la tecla Opción de Mac (Alt). Así en lugar de mover los ficheros, se copian
  • selecciono todos los ficheros recién creados, pulsando de nuevo Cmd+A
  • los abro todos a la vez con Vista Previa (Cmd+Flecha abajo)
  • una vez en vista previa, los selecciono todos de nuevo (Cmd+A)
  • y les cambio el tamaño con Herramientas -> ajustar tamaño
  • una vez listo, los grabamos todos (Archivo -> Guardar todo)

Ahora tengo, en dos carpetas distintas, 32 ficheros que se llaman 1.png, .. 32.png, como se puede ver aquí:

Miniaturas antes de renombrar

Miniaturas antes de renombrar

Es decir, tengo los originales y los que he reducido de tamaño. El problema viene cuando ahora quiero cambiar el nombre de los ficheros para que se llamen thumb1.png, … thumb32.png. Renombrarlos uno a uno es un rollo. Y desde terminal me daba pereza hoy. Así que he buscado una herramienta gráfica y me he encontrado con NameChanger, una pequeña Aplicación que funciona perfectamente para esto.

NameChanger en funcionamiento

NameChanger en funcionamiento

NameChanger nos permite renombrar, o añadir algo al principio o final de una serie de archivos, o hacer cambios más potentes usando caracteres comodín. Y siempre te muestra antes de hacer nada, cual va a ser el resultado. Como se puede ver, es una de esas herramientas obligatorias de tener a mano.

j j j

Convertir efectos de sonido entre distintos formatos con iTunes

Hace ya un tiempo que publiqué en el App Store mi tercera App, ClockRing. Es una utilidad que hace que tu iPhone suene cada hora, como suena la radio, con esos pitidos. Aunque puedes escoger otros sonidos, claro. Es una aplicación muy sencilla, que usé para aprender a usar las LocalNotifications de iOS y decidí dejar como Software Libre. Lo que significa que si quieres ver cómo está escrita la App, siempre puedes bajarte su código fuente de su Wiki.

El caso es que para que suene algo cuando se lanza una notificación necesitas un archivo con un efecto sonoro. En mi caso, los busqué libres también y me los bajé de FreeSound.org. Bueno, pues muchas veces vienen en un formato que no está soportado directamente por el iPhone (los que se admiten para LocalNotifications están en esta lista):

  • Linear PCM
  • MA4 (IMA/ADPCM)
  • µLaw
  • aLaw

Se me ha dado el caso hoy de tener que convertir de nuevo efectos de sonido, en este caso desde AIFF hasta WAV. Y no recordaba cómo hacerlo. Ni con qué herramienta. Y resulta que iTunes lo hace todo. Paso a paso:

  • Selecciona los ficheros de audio con los efectos de sonido y arrástralos a iTunes. Aparecerá el típico «+» verde y se añadirán a tu biblioteca.
  • Busca esos ficheros en iTunes, para tenerlos localizados.
  • Ve a Preferencias > General (se debe abrir por ahí)
Preferencias iTunes

Preferencias iTunes

  • Ahora, pulsamos en Ajustes de importación. Se nos abre esta ventana:
Ajustes importación

Ajustes importación

  • Aquí podremos cambiar la forma de importar audio, es decir, cómo queremos que iTunes convierta de un formato a otro. Esto se usa para convertir por ejemplo los CDs en ficheros con un formato determinado, pero también sirve para convertir.
  • Disponemos de los siguientes formatos:
codecs-audio

codecs-audio

  • Ahora ya basta con seleccionar los efectos de sonido, que hemos copiado en iTunes y pulsar en Avanzado > Crear versión de WAV. Esta opción de menú va cambiando para reflejar el ajuste anterior.
  • Pulsando con el botón derecho del ratón sobre estos efectos puedes «Mostrar en el Finder», lo que te abrirá la carpeta en la que están estos ficheros, por si prefieres trabajar ya con ellos desde el Finder. En mi caso, desde aquí los copio a XCode.

Y así, sin instalar nada más, únicamente con iTunes que viene con cada Mac, podemos realizar esta sencillísima tarea (pero que para un inútil total del audio como yo, es un mundo). Si alguien conoce una forma más sencilla, por favor, que la cuente en los comentarios. Le estaré eternamente agradecido… o lo que dure este blog.

j j j

El pertinaz iPad (o iPhone) killer

pertinaz.

(Del lat. pertinax, -acis).

  1. adj. Obstinado, terco o muy tenaz en su dictamen o resolución.
  2. adj. Muy duradero o persistente. Enfermedad pertinaz.

Sea el iPad, el iPhone o lo que sea de Apple, últimamente la blogosfera tecnológica me parece la sección de necrológicas del periódico. Sólo les falta empezar con aquello de «La familia y amigos de Steve piden un ruego por el alma de esta pobre tablet…» cada vez que otro fabricante anuncia que va a publicar las especificaciones futuras de algo que a lo mejor a finales de año empiezan a fabricar.

Porque es así de esperpéntico. Imaginemos esto en otra industria, por ejemplo la del automóvil. ¿Alguien se imagina cómo caerían las acciones de Renault si se descolgaran diciendo que van a fabricar un coche que va a ser el Ferrari-killer, sin mostrarlo?. Porque al menos en este sector, en las ferias, te enseñan un prototipo, en un stand dando vueltas y rodeado de niñas monas que no se qué hacen ahí, porque ni te explican cómo funciona el coche ni nada. Es decir, no se atreven a hacer anuncios de humo y esperan a tener algo más o menos tangible. No acabado, prototipos, pero algo.

En el sector del software / hardware, como es virtual (o eso se piensa más de uno al que la corbata le constriñe el riego del tronco cerebral) se puede anunciar cualquier parida y salir ante la prensa con un PowerPoint, dos papelitos y un PNG pasado por PhotoShop y listo. Y esto no sería demasiado grave, si no estuviera ahí el coro de palmeros blogueros. Porque empresas moribundas como Nokia o RIP (digoooo, RIM) pueden hacer todas las tonterías que quieran. Pero al que escribe su opinión desde su independencia se le debe exigir un mínimo criterio.

Pero claro, esto de los blogs se ha convertido en un negocio (para algunos, yo soy demasiado torpe para ni siquiera pagar el alojamiento de esto, que a fin de cuentas es mi página personal). Y ves comparativas del iPad2 y el Motorola Xoom junto con los modelos que los fabricantes dicen que van a sacar, que sí que sí, que verdad de la buena, para el Verano, o luego, o ya veremos, que te haremos una actualización OTA, y si no me tocas lo que rima… Entiendo que los grandes blogs viven de las visitas a sus sitios y de la publicidad, y que si pones dos semanas seguidas: «Últimas noticias en la guerra de las tablets: no hay guerra, el iPad sigue machacando a sus no-competidores, porque ni se ven» la gente deja de acudir porque total, para que me cuentes lo mismo semana tras semana…

Y nada crea más expectación que una buena pelea, aunque en realidad esa pelea no exista, porque de momento es uno pegando y los demás recibiendo. Y se inventan que si han visto el iPhone blanco, el de colores, te hablan de los rumores de lo que traerá, comparan cosas con precio y duración de la batería con papeles, etc. Pues eso no son «noticias tecnológicas». Es basura. Es el equivalente a los programas de chismorreo de los famosos, llevado a las máquinas. Son el Hola del periodismo tecnológico. Ni aprendes, ni ves nada tangible. Sólo noticias sacadas apresuradamente repitiendo como papagayos lo que las relaciones públicas de los fabricantes les pasan en las ferias (donde por cierto les pagan los viajes, comidas, etc.) o traduciendo rumores del Inglés al Español.

¿Qué me gustaría a mí, que me creo tan listo para criticar al resto? Dos cosas:

  • menos prisa por escribir chorradas y más profundidad en los análisis. No hay que ser el primero en la fiesta, sino el mejor, que decía el tito Steve.
  • una competencia seria y creíble al iPad. La competencia nos hará más fuertes, es lo que siempre digo. Hará un mejor iPad para los que queramos usarlo y mejores productos para los que no. La situación actual de monopolio de facto de Apple no es buena para nadie, ni siquiera para Apple, que aunque gane pasta a camiones se acaba relajando y, por ejemplo, nos mantiene el sistema de notificaciones de iOS, que está claramente diseñado por un retard.
</rant>
<feed-the-troll-in-the-comments-section>
j j j

Crear un sitio web WordPress con una máquina virtual local

En el último post comenté que estaba usando una máquina virtual de Bitnami para hacer sitios web con WordPress y me pidió Fernando que explicara cómo subir el resultado de ese sitio web a un servidor que tengamos contratado en hosting. Ya que lo estoy haciendo esta semana, voy a anotarlo (para que no se me olvide), pero me gustaría empezar por el principio. Y ya advierto: este post está lleno de frikismo, comando UNIX de terminal y cosas ininteligibles. Luego no te quejes.

¿Por qué una máquina virtual? ¿Y qué es Bitnami?

Una máquina virtual es un programa que me permite ejecutar un S.O. completo dentro de otro. Por ejemplo, puedo arrancar Linux dentro de Windows 7, o Windows XP dentro de Mac OS X. Las máquinas virtuales tienen múltiples usos, pero a mi me encantan para no llenar de programas mi S.O. base. Así no se ralentiza, ni tengo el disco duro lleno de programas de «usar y tirar».

En el caso de crear un sitio web con WordPress es aún peor. Sin la máquina virtual necesitas:

  • un servidor web, como Apache, que soporte PHP
  • un servidor de BB.DD., como MySQL
  • configurarlo todo
  • instalar WordPress
  • y luego, claro, crear tu sitio con WP, es decir, instalar plugins, ponerlo en Español, crear contenido, probar diferentes temas, etc.

Todo esto se podría hacer directamente en nuestro servidor (ese que tenemos contratado en hosting), pero los inconvenientes son varios:

el sitio está visible mientras lo preparamos (a no ser que lo protejamos, por ej. mediante autenticación HTTP, pero eso exige aún más trabajo)

si la conexión que tenemos a Internet es mejorable, vamos a tardar bastante

Por eso, lo ideal es disponer de una máquina virtual, por ejemplo con Linux ya instalado y que lo traiga todo (Linux, Apache, MySQL, PHP y WordPress). Esto es lo que se llama un servidor LAMP + WordPress. Buscando en el catálogo de máquinas virtuales gratuítas que tiene VMWare me encontré con la Appliance de Bitnami. Es una máquina virtual VMWare con todo lo anterior ya instalado y configurado, gracias a la empresa Bitnami. Para instalarla, la descargamos y descomprimidos, y listo: ya podemos abrirla con VMWare. En mi caso, me he bajado la versión basada en Ubuntu, porque dominio mejor los Linux Debian-based que otros.

Manejando la máquina virtual de Bitnami

La máquina cuando arranca nos muestra una pantalla poco espectacular. Termina con un mensaje que nos indica cómo nos podemos conectar al WordPress que tiene dentro, y poco más.

MV Bitnami

MV Bitnami

En mi caso me indica que conectándome a la IP http://10.0.1.25 me aparecerá la interfaz web de la máquina virtual. Esa interfaz es una página web con información y el acceso al WP que está instalado dentro. Inicialmente el usuario es «user» y el password «bitnami». Al entrar, llegamos a un WP vacío, que podemos proceder a adaptar. En mi caso, lo que he estado haciendo ha sido:

  • traducirlo al Español. Abajo lo cuento con detalle.
  • instalar un tema de pago que queda bonito y que tenía por ahí abandonado. Me lo compré en el bundle de diseño Bundlehunt.
  • instalar unos cuantos plugins, para tener un formulario de contacto, mapas de Google, etc.
  • crear las páginas necesarias y copiar el contenido (texto y fotos) del sitio web antiguo

Probablemente lo más «complicado» sea traducir WP a español. Pero es muy sencillo. Sólo hay que ir a la página que tiene la traducción de WordPress y bajarse el ZIP.  Lo descomprimimos y veremos que un WP completo, sólo que ya traducido. Como a mí me gustan las cosas complicadas, prefiero pasar sólo los ficheros de localización al Español y decirle a WP que está en Español 🙂

Para eso, debemos iniciar sesión en la máquina virtual, e ir a la carpeta: /opt/bitnami/apps/wordpress/htdocs/wp-content/ con un:

$ cd  /opt/bitnami/apps/wordpress/htdocs/wp-content/

Bitnami guarda en /opt/bitnami/apps las aplicaciones web que lleva el appliance, concretamente PhpMyAdmin y WP.

Ahora, vamos a copiar los ficheros que antes descomprimimos. Los vamos a copiar por scp (suponiendo que te conectes a una máquina *NIX), con algo como:

$ scp usuario@la-ip-de-tu-maquina-real:/Users/tu-usuario/Desktop/wordpress/wp-content/languages/* .

Lo que hace la «frase mágica» anterior es conectarse a tu ordenador real (debes indicar la IP), con tu usuario (con el que has iniciado sesión). Te pedirá tu clave. Lo que hace es copiar los ficheros de la ruta que le hemos indicado, en la carpeta de la máquina virtual en la que estábamos.

Bueno, WP tiene los ficheros en su sitio, pero no los va a usar hasta que no se lo digamos. Para ello, hay que modificar el fichero wp-config.php  (en nuestro caso, está en /opt/bitnami/apps/wordpress/htdocs, por lo que bastará con hacer un cd ..). Yo lo he modificado con vi, que para eso estoy en modo geek :-). Hay que buscar la línea que pone:

define ('WPLANG', 'xxxx');
y dejarla así:
define ('WPLANG', 'es_ES');

Una vez que hemos acabado, grabamos y listo. Yo reinicié la máquina virtual completa (con reboot) para comprobar que todo estaba OK.

Subiendo todo esto a mi servidor en hosting

Ahora que todo funciona como queremos y hemos terminado en local ¿cómo subimos todo esto a mi servidor web?. Supongo que tienes un dominio, pongamos www.misuperwebquemevaahacerrico.com y su alojamiento asociado. Hay que tener claro lo que hay que subir:

  • por un lado, el sitio web de WordPress. Nada más en el apartado web. Es decir, ni la configuración de Apache, ni otras cosas. En el caso de bitnami, sería la carpeta /opt/bitnami/apps/wordpress de la máquina virtual
  • por otro, la base de datos asociada a esta web. Esa BD está en el MySQL que tiene la máquina virtual de bitnami.

Subiendo el wordpress

Lo primero que vamos a hacer va a ser comprimir la carpeta. En la máquina virtual tecleamos:

$ cd /opt/bitnami/apps

una vez en la carpeta apps, nos convertimos en root (ya que si no no podremos leer algunas de las carpetas del WP), con:

$ sudo su

comprimimos con el proverbial tar:

tar cvfz wp.tgz wordpress

esto va a comprimir la carpeta wordpress completa en un fichero llamado wp.tgz. Ahora hay que subir ese fichero a nuestro proveedor de alojamiento. Para eso, primero lo voy a copiar a la máquina física, usando de nuevo scp:

$ scp wp.tgz usuario@la-ip-de-tu-maquina-real:/Users/tu-usuario/Desktop/

Eso debería dejar el fichero wp.tgz en tu escritorio. Espero 🙂

Ahora sólo te queda subirlo, usando el interfaz que te de tu proveedor de alojamiento. En mi caso, esto va a RedCoruna y tienen, como todo el mundo, CPanel, que viene con un explorador de ficheros integrado en el navegador que permite subir cosas. Cuando lo tengas en la carpeta que te interesa, descomprímelo. Podrás acceder mediante: http://www.tudominioesequetevaahacerrico.com/wordpress. Y te va a fallar. Recuerda: no hay base de datos aún.

Subiendo la BD

Para subir la BD, primero vamos a exportarla. Para ello, necesitamos activar una aplicación que viene en la máquina virtual, pero que por razones de seguridad está desabilitada. Es PhpMyAdmin, una aplicación web para administrar el servidor de BB.DD. MySQL. Para activarlo, vamos a /opt/bitnami/apps/phpmyadmin/conf/ y editamos phpmyadmin.conf

$ cd /opt/bitnami/apps/phpmyadmin/conf/
$ vi phpmyadmin.conf

y cambiamos la línea que pone

Allow from 127.0.0.1

por

Allow from all
Configurando phpMyAdmin

Configurando phpMyAdmin

Debemos reiniciar el servidor Apache para que este cambio entre en funcionamiento. En el caso de la máquina virtual de bitnami lo hacemos con:

$ /opt/bitnami/ctlscript.sh restart apache

Ahora, apuntando un navegador a http://10.0.1.25/phpmyadmin nos aparecerá una pantalla de login. Usuario: administrator, clave: bitnami y al fin se abre el PhpMyAdmin

Dentro de PhpMyAdmin veremos la lista de BB.DD. a la izquierda:

Lista de BB.DD.

Lista de BB.DD.

Escogemos la nuestra (bitnami_wordpress) y nos vamos a la solapa «Exportar». Tal como viene debe funcionar. Marcamos la opción «Enviar (genera un archivo descargable)» y se nos descargará, al pulsar Continuar, un fichero con extensión .sql en nuestra máquina. ¡Esa es nuestra BD!

Ojo: en ese fichero (que es la BD de WordPress) las URLs están metidas «a pelo». Es decir, está lleno de 10.1.0.25 por todos lados. Y no queremos eso. En mi caso, he usado TextEdit de Mac para buscar y sustituir todas las ocurrencias de 10.0.1.25 por www.viajescarrasco.com, que es el dominio que estaba usando. Es un poco lamentable que WP meta en su BD referencias al dominio «hardcoded» en lugar de usar una variable, pero es lo que hay.

Ahora sólo nos queda subirla a nuestro dominio (probablemente usando el PhpMyAdmin de nuestro CPanel). Pista importante: ahora hay que buscar la pestaña «importar» de PhpMyAdmin e indicarle el fichero .sql anterior :-). Casi seguro que tendremos que crear la BD, un usuario para la misma y darle permisos a ese usuario para esa BD. Todo se hace en CPanel.

Configurar el sitio web

Pero aún no funciona nada. ¿Por qué?. Porque hemos subido un sitio web WordPress que piensa que está instalado en http://10.0.1.25, en lugar de en http://www.midominioetcetc.com. Hay que configurar eso. Para ello, buscamos el fichero wp-config.php (sí, el mismo que tocamos para el idioma) y cambiar el nombre de la BD, usuario y password. Nos debe quedar algo como:

define('DB_NAME', 'minombrededb');

/** MySQL database username */
define('DB_USER', 'usuarioquehecreado');

/** MySQL database password */
define('DB_PASSWORD', 'laclave');

/** MySQL hostname */
define('DB_HOST', 'localhost:3306');

Además, debemos cambiar el fichero .htaccess que viene con bitnami y dejarlo así:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
Este fichero hace la «magia negra» de la reescritura de URLs, de forma que funcionen los nombres de página en WP, por ej., cuando escribimos blog.freniche.com/formacion y nos lleva a la página correcta. No existe una carpeta llamada formación: se «traduce» al vuelo de forma que el WP lo interprete correctamente.

Conclusión

Como puedes ver, el proceso de traslado del sitio web es un poco laborioso. Lo bueno que es esto te serviría para mover tu WordPress entre diferentes proveedores de alojamiento. Y lo mejor de todo es que con la máquina virtual puedes hacer todas las pruebas que quieras, sin riesgos.
EOF.

j j j

Una mañana de trabajo cualquiera

Me paro un momento y miro en lo que estaba trabajando, y los programas que tengo abiertos ahora mismo, y no puedo evitar pensar que soy lo más alejado del minimalismo. Al menos en lo que se refiere al ordenador. Era minimalista cuando no tenía dinero más que para mi querido Amstrad CPC 464 con el monitor fósforo verde, con su unidad de casetes. El único periférico que tenía era un Joystick. Y a usarlo. Pero veía en las películas a gente en países lejanos y extraños, en salas llenas de ordenadores.

Como el programador de Parque Jurásico (que, por supuesto, además de ser el malo, cobarde y torpe, estaba mal pagado y era gordo y feo). Por cierto, si veis de nuevo JP os llamarán la atención dos cosas: una, que están programando fumando, algo impensable en cualquier entorno de hoy en día. La otra, que el sistema de «bug tracking» que usan es una libreta donde van anotando los errores 🙂

Volviendo al tema que me traía aquí, en esta mañana he comenzado programando en C, en el IDE Eclipse corriendo sobre Windows 7. Ese Windows 7 está instalado en mi MBP. Por si fuera poco frikismo, he usado el escritorio remoto de Windows para programar esos ejemplos en una ventana del iMac de 27″, que para eso tengo una pantalla grande. Mientras programaba iba actualizando la presentación de Keynote que acompaña al curso, en el iMac. Sonaba la música desde iTunes, donde estaba restaurando mi iPhone 3Gs con una copia de seguridad de ayer: mis niños han borrado algunas fotos en un descuido.

He terminado con C y me he pasado a WordPress. Arrancando una máquina virtual VMWare de Bitnami, que ya tiene un entorno WP completo sobre Linux, me he dedicado a crear un nuevo sitio para migrar una vieja web que hice hace ya la tira en Typo3. Es decir, instala plugins, widgets, temas, escribe posts, importa información, etc.

Ahora toca pensar en el próximo curso de Java EE que tengo que impartir a finales de mes. Java, Servlets, EJBs, JBoss, Eclipse de nuevo (aunque ahora en su «sabor» Java). Tendré que ojear un libro, que tengo en formato CHM (formato típico de Windows en otra época). Y luego, un poco de Objective C para comenzar un proyecto iPad que me han encargado. Tengo cosas que leer de UML…

Es por este desbarajuste de trabajo que tengo, con tantas tecnologías, frameworks, lenguajes, herramientas y entornos distintos por lo que amo a mis dos Macs. Necesito ser anti-minimalista, ya que si lo fuera no podría hacer la mitad de las cosas que hago. Esta es la razón de haber ampliado mi iMac a 12 GB de RAM. Aún así, procuro no instalar nada si ya tengo una aplicación que hace más o menos lo mismo, que si no acabas con un montón de aplicaciones similares que no acabas de dominar en profundidad.

Bueno, sigo, que quiero ir terminando. Que no hace mucho me comentaron que a lo mejor tengo que aprender CLIPS… 🙂

j j j

Nueva GSOD

Sabiendo mi afición por las Google Screen Of Death (GSOD), me manda Francisco Páez (gracias!) esta de un error 404 en Google:

GSOD

GSOD

Increíblemente a Francisco, tras sufrirme como profesor Stasi-Style en el curso de preparación para la certificación SCJP que impartí el pasado verano, le han quedado ganas de leerme y ayudarme con mis neuras.

Y por cierto, si quieres certificar en tu empresa a un grupo de programadores, no lo dudes: mi método de ser el más pesado del mundo funciona 🙂

j j j