Migrado a WordPress

Desde hoy este blog está «parado» sobre WordPress.
Luego de un largo análisis, idas y vueltas, decidí mudarme de Drupal a WordPress.
Drupal es un excelente CMS y CMF. Creo que es el mejor que existe por estos días; y también creo que se volvió demasiado complejo y grande como para solamente alojar un blog personal.

Comencé este blog con la versión 5 de Drupal, y fui actualizando hasta la versión 7. El upgrade de la versión 7 a la 8 es más complejo de lo que este blog amerita, y la versión 8 de Drupal es también más compleja -y pesada- de lo que este blog requiere. Es por eso de decidí seguir esta guía, armarme de paciencia para ajustar los detalles necesarios, y hacer finalmente el cambio.

Una nueva etapa. Veremos qué me espera más adelante.

Como elegir tecnología (¿en estos días?)

Elegir un nuevo dispositivo tecnológico no es fácil. Hay muchísimas opciones, variantes, marcas, modelos, funcionalidades, etc.

Creo que estamos eligiendo mal, le estamos dando mucho lugar y protagonismo al hardware y casi nada al software. Deberíamos dejar un poco de lado las características físicas de los dispositivos y darle protagonismo a la parte que no vemos pero que sí usamos: el software.

Deberíamos relegar al hardware a un segundo lugar, y el primer lugar a la hora de decidir lo debería ocupar la frecuencia de actualizaciones de software que el fabricante ofrece. Tener un dispositivo capaz de conectarse a Internet y no mantenerlo actualizarlo, como mínimo, cada 6 meses es muy peligroso; y cada vez lo será más. No importa que el display sea 2k, 4k, u 8k, que tenga cámara de 13, 15, o 30 megapíxeles, que tenga 4G, 5G, o lo que sea: si no está al día en cuanto a actualizaciones de seguridad es un dispositivo peligroso; peligroso para él mismo, para nuestra seguridad y privacidad; y peligroso para la seguridad y privacidad de las personas que nos rodean.

La próxima vez que tengas que elegir un smartTv, un celular o lo que sea, poné tu seguridad y privacidad delante de todo, poné al software delante del hardware, preguntá: «¿cada cuánto voy a recibir actualizaciones de seguridad con esto?»

FLISol 2017

El sábado 22 de abril de 2017 se desarrolló Festival Latinoamericano de Instalación de Software Libre: FLISoL. En la Ciudad Autónoma de Buenos Aires éste tuvo lugar en la sede de la UTN de Av. Triunvirato.

En esta edición participé como expositor en dos charlas:

  • Drupal: El CMS que eligen los grandes

La presentamos en conjunto con Jose Sánchez (@ruloweb), y hablamos sobre las principales características que hacen que Drupal sea el CMS ─y CMF─ elegido y preferido para desarrollar y sostener grandes proyectos, como medios de comunicación, entidades gubernamentales, organizaciones sin fines de lucro, portales de empresas privadas, entidades de comercio electrónico, etc.

A continuación compartimos la presentación que utilizamos como guía.

  • Introducción a Ruby on Rails.

Es la tercera vez que re-adapto y presento esta charla; una breve exposición donde se presenta al ─según creo yo─ mejor framework para desarrollar aplicaciones web: Ruby on Rails. Completo, simple, ágil, extensible y escalable son solo algunas características de este increíble framework.

Comparto aquí las diapositivas que sirvieron de guía en esta charla.

Una estafa a gran escala. Los riesgos de una ilusión.

«La tecnología puede mejorar cualquier cosa» «Podemos confiar completamente en la tecnología» «La tecnología es infalible»

Estos son algunos de los argumentos falaces con los que se intenta defender el voto electrónico. Votar usando computadoras es abrirle la puerta al fraude, a la estafa. Es probable que ya nos hayan estafado. Es probable que ya te hayan estafado. Con tecnología, y sin que te dieras cuenta. ¿Cómo? Escuchá.

Entrevista a @arilijalad (fragmento)

Votar usando computadoras es abrirle la puerta al fraude. Las computadoras ejecutan un programa, y éste puede ser cambiado o reemplazado. Puede ser reemplazado incluso durante la elección por otro diseñado, por ejemplo, para dar totales falsos, o registrar los votos emitidos por los usuarios comprometiendo así el secreto del voto. Esto y mucho más puede hacerse sin que ningún usuario note absolutamente nada.

El voto electrónico, en cualquier de sus formas, abre la puerta al fraude. Un fraude posiblemente indetectable.

Tiempo estimado de lectura en Drupal

Hace un tiempo me pidieron agregar, para un sitio hecho en Drupal, información sobre el tiempo estimado de lectura de los artículos ahí publicados.

No recuerdo las fuentes que me ayudaron con esto, pero sí recuerdo que fue bastante más fácil y simple de lo previsto.

A continuación el fragmento de código que calcula el tiempo estimado de lectura de un artículo:

<?php 
 $postContent = render($content); 
 $word = str_word_count(strip_tags($postContent));
 $m = floor($word / 200);
 $s = floor($word % 200 / (200 / 60));
 $estimado = $m . ' minuto' . ($m == 1 ? '' : 's') . ', ' . $s . ' segundo' . ($s == 1 ? '' : 's');
?>
<p>Tiempo estimado de lectura: <?php echo $estimado; ?></p>

Este fragmento de código puede incluirse en el archivo node.tpl.php del tema en uso. Dependiendo de la estructura del tema, se podría ubicar de modo que una futura actualización del tema no haga que se pierda la modificación, pero eso es algo que depende de cada tema, por lo que habrá que remitirse a la documentación correspondiente.

Espero que sea de utilidad.

FLISOL 2015

El sábado 25 de abril se llevó a cabo el Festival Latinoamericano de Instalación de Software Libre (FLISOL). Este año participé con una charla similar a la del año pasado: «Introducción a Ruby on Rails». Nuevamente fue muy grato ver el interés que la charla y la herramienta despierta en los participantes.

Alguien dijo que corregir un texto, hacerle algunas añadiduras, quitarle algunas partes y alterar un poco el orden, es una tarea que está más próxima al engaño que a la creación. Con esta introducción ─que sirve a la vez de confesión─ comparto la presentación que utilicé en el evento.

Software Libre

Esta es una de esas cosas que pensé que nunca iba a escribir. Hay mucho escrito ya sobre el Software Libre, ¿para qué escribir algo más? ¿Qué podría decir (o escribir) que no se haya dicho ya? Posiblemente nada, pero no por eso va a ser menos útil.

El movimiento del Software Libre nace a comienzos de los 80 de la mano de Richard Stallman. Hasta ese momento el concepto de Software Libre no existía, y fue Stallman quién lo ideó, lo definió y lo presentó. Así como no existía el concepto de Software Libre, podemos también decir que no había Software Libre, o si había era realmente muy, muy poco. En este escenario Stallman presenta el concepto de Software Libre, y lo define de la siguiente manera:

Un software es libre cuando garantiza las siguientes libertades:

  1. Libertad de usar el programa, con cualquier propósito.
  2. Libertad de estudiar cómo funciona el programa y modificarlo, adaptándolo a tus necesidades.
  3. Libertad de distribuir copias del programa, con lo cual puedes ayudar a tu prójimo.
  4. Libertad de mejorar el programa y distribuir esas mejoras, de modo que toda la comunidad se beneficie.

A partir de este momento, el desafío era escribir ─o reescribir─ todo el software necesario para que las computadoras puedan funcionar ─y ser útiles─, ejecutando exclusivamente Software Libre. Si en aquel momento, alguien me hubiese preguntado: ¿Qué te parece más fácil: que la gente entienda el concepto y definición de Software Libre o que se escriba todo el Software Libre necesario para utilizar de forma productiva una PC? sin ninguna duda que hubiese elegido la primera de las opciones. Hubiese asegurado que todos entenderían, de forma simple, de qué se trata el Software Libre, pero que sería bastante más difícil conseguir que se escriba todo el Software Libre necesario; y más difícil aún que el desarrollo de Software Libre acompañe la celeridad y evolución de la informática. Bueno, me hubiese equivocado; y bastante. Resulta que hoy tenemos una gran cantidad de Software Libre en todas las áreas de la informática (útil, funcional y de excelente calidad), pero aún hay una gran cantidad de personas ─incluso en el ámbito de la informática─ que no entendió, y que no entiende, qué es el Software Libre. Con la esperanza de poder ayudar a que más personas sepan, y entiendan, qué es el Software Libre, he escrito este breve artículo. Espero que cumpla su función.

Wi-Fi MediaConnect

Wi-Fi MediaConnect es un software que Philips provee con algunos modelos de sus televisores. En caso de extravío, el software puede descargarse de la página oficial: Philips MediaConnect, pero para poder descargarlo hay que tener a mano el código que se encuentra en la etiqueta del envoltorio del CD-ROM. Si perdiste el CD-ROM pero no la etiqueta, estás salvado; pero si perdiste todo —que creo que es lo más normal— estás frito. Por eso dejo acá la versión 1.06.43 del Wi-Fi MediaConnect para que la puedas descargar las veces que quieras y sin necesidad de ningún código. Espero que sea de utilidad.

Agrego aquí la versión de Wi-Fi MediaConnect para Mac OS junto a su guía de instalación.

De Drupal a WordPress

Recientemente estuve trabajando en la migración de un blog de Drupal 7 a WordPress 3.3.

Basándome en ésta guía dirigida a migrar de Drupal 6 a WordPress, y con algunas pocas modificaciones, pude realizar el proceso sin mayores inconvenientes.

A continución dejo el detalle de los pasos realizados.

Detalles:

  • La base de datos utilizada por Drupal 7 se llama drupal, y la utilizada por WordPress 3.3, wordpress.
  • Ninguna de las instrucciones que aquí se indican escriben en la Base de Datos drupal, por lo tanto, el procedimiento se puede aplicar de forma reiterada la cantidad de veces que sea necesario.

Limpieza de las tablas de wordpress

TRUNCATE TABLE wordpress.wp_comments;
TRUNCATE TABLE wordpress.wp_links;
TRUNCATE TABLE wordpress.wp_postmeta;
TRUNCATE TABLE wordpress.wp_posts;
TRUNCATE TABLE wordpress.wp_term_relationships;
TRUNCATE TABLE wordpress.wp_term_taxonomy;
TRUNCATE TABLE wordpress.wp_terms;

Migración de las categorías

REPLACE INTO wordpress.wp_terms (term_id, `name`, slug, term_group)
SELECT DISTINCT d.tid, d.name,
REPLACE(LOWER(d.name), ' ', '_'), 0
FROM drupal.taxonomy_term_data d
INNER JOIN drupal.taxonomy_term_hierarchy h
USING(tid)
WHERE (1);

INSERT INTO wordpress.wp_term_taxonomy (term_taxonomy_id, term_id, taxonomy, description, parent)
SELECT DISTINCT d.tid 'term_id', d.tid 'term_id', 'category' category, d.description 'description', h.parent 'parent'
FROM drupal.taxonomy_term_data d
INNER JOIN drupal.taxonomy_term_hierarchy h
USING(tid)
WHERE (1);

Migración de los POSTS

INSERT INTO wordpress.wp_posts (id, post_author, post_date, post_content, post_title,
            post_excerpt, post_name, post_modified, post_type, post_status)
SELECT nid 'id', n.uid 'post_author', FROM_UNIXTIME(n.created) 'post_date', r.body_value 'post_content',
       n.title 'post_title', r.body_summary 'post_excerpt', n.title 'post_title', 'post', 'post',
IF(n.status = 1, 'publish', 'private') 'post_status'
FROM drupal.node n, drupal.field_data_body r
WHERE n.nid = r.entity_id;

Asociación de Posts y Categorías

INSERT INTO wordpress.wp_term_relationships (object_id, term_taxonomy_id)
SELECT DISTINCT nid, tid
FROM drupal.taxonomy_index;

Contabilización de post en cada categoría

UPDATE wordpress.wp_term_taxonomy tt
SET `count` = (
SELECT COUNT(tr.object_id)
FROM wordpress.wp_term_relationships tr
WHERE tr.term_taxonomy_id = tt.term_taxonomy_id);

Migración y asociación de comentarios

INSERT INTO wordpress.wp_comments (comment_post_ID, comment_date, comment_content,
            comment_parent, comment_author, comment_author_email, comment_author_url,
            comment_approved)
SELECT dc.nid, FROM_UNIXTIME(dc.created), df.comment_body_value, dc.thread, dc.name,
       dc.mail, dc.homepage, ((dc.status + 1) % 2) 'status'
FROM drupal.comment dc, drupal.field_data_comment_body df
WHERE cid = entity_id;

Contabilización de comentarios en cada Post

UPDATE wordpress.wp_posts SET `comment_count` = ( SELECT COUNT(`comment_post_id`)
FROM wordpress.wp_comments
WHERE wordpress.wp_posts.`id` = wordpress.wp_comments.`comment_post_id` );