lunes, junio 27, 2011

Actualizar la version de PHP a 5.2 o mas en CentOS

Tomado de: Actualizar PHP en Centos/

continuación mostraré un manual para actualizar la versión del PHP en un servidor Linux CentOS.
A mi me ha funcionado de maravilla, me estaba dando error la funcion json_encode() que estaba usando para una aplicación Ajax con CakePHP y con podía continuar sino instaba ese paquete o actualizaba el PHP.

Añadir los Repositorios

Antes de instalar nada hay que añadir el repositorio para poder descargar la versión 5.2 de php mediante el comando yum
No elimines ningún archivo del repositorio, crea uno nuevo con el siguiente nombre.
1/etc/yum.repos.d/CentOS-Testing.repo
utiliza tu editor de texto que prefieras, vi, nano, etc, yo uso mcedit. Copia dentro el siguiente texto.
He mantenido los comentarios originales de CentOS
01# CentOS-Testing:
02 # !!!! CAUTION !!!!
03 # This repository is a proving grounds for packages on their way to CentOSPlus and CentOS Extras.
04 # They may or may not replace core CentOS packages, and are not guaranteed to function properly.
05 # These packages build and install, but are waiting for feedback from testers as to
06 # functionality and stability. Packages in this repository will come and go during the
07 # development period, so it should not be left enabled or used on production systems without due
08 # consideration.
09 [c5-testing]
10 name=CentOS-5 Testing
11 baseurl=http://dev.centos.org/centos/$releasever/testing/$basearch/
12 enabled=1
13 gpgcheck=1
14 gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing
15 includepkgs=php*
Si quieres antes de actualizar puedes ver los paquetes que tienes instalados de PHP. Para ello ejecuta el siguiente comando:
1rpm -qa |grep php

Actualiza la version de PHP

Ahora ya puedes actualizar el PHP. Ejecuta el siguiente comando.
1yum update
Verás como se estable una conexión al servidor de repositorio y se empiezan a descargar los nuevos paquetes de la versión del PHP.

Reinicia el Apache

Una vez que haya terminado de instalar, reinicia el Apache.
1service httpd restart
Fuente original que he seguido para actualizar mi servidor CentOs: http://wiki.centos.org/HowTos/PHP_5.1_To_5.2

Guía para controlar un ataque de Denegación de Servicio

Tomado de:  Denegacion de Servicio

Los ataques de denegación de servicio (DoS) son uno de los ataques informáticos que hemos observado hace ya muchos años, y que aún siguen vigentes. En forma sencilla, consisten en un ataque hacia algún servicio informático (generalmente alojado en uno o varios servidores), con el ánimo de que este deje de funcionar. El ataque consiste en enviar determinados paquetes al objetivo, de forma tal de saturar los recursos que este puede procesar, y que así el servidor se vea en la necesidad de suspender la provisión del servicio. Como ataque derivado, aparecen los ataques de denegación de servicio distribuido (DDoS), donde el mismo es lanzado, no desde un sistema informático, sino desde múltiples nodos que realizan el ataque de forma simultánea.

Las redes botnets suelen ser utilizadas con estos fines, pudiendo lograr que todos los equipos zombis realicen el ataque contra el objetivo de forma simultánea, logrando mayor efectividad en el ataque. Asimismo, estos ataques están cada vez más asociados al hacktivismo, del cual ya hablamos en este mismo espacio. Un ejemplo de esto son los ataques contra la SGAE, o aquellos derivados contra PayPal, Visa y Mastercad a raíz del incidente de Wikileaks.

Es decir que, a pesar de su antigüedad, los ataques de denegación de servicio siguen vigentes, y es uno de los riesgos que las organizaciones deben considerar al momento de diseñar una estrategia de seguridad de la información. ¿Cómo controlar un ataque de denegación de servicio? Sobre este tema, hace unos días me encontré con esta interesante guía desarrollada por el CERT, titulada DDoS incident response (respuesta ante un incidente de DDoS), el cual recomiendo leer y tomar en cuenta para que la red de su empresa u organización esté preparada para enfrentar, si ocurriera, este tipo de ataque.

La guía considera seis pasos en el proceso de responder a un ataque de denegación de servicio. El primero de ellos, es la preparación. Aunque muchos habrán imaginado que la guía comenzaría cuando se detecta el incidente (segundo paso), la realidad es que para una correcta gestión de la seguridad, es necesario estar preparados, y es en esta etapa donde se recomienda, entre otras cosas, contar con un adecuado mapa de la red y conocimiento de la infraestructura, definir las personas a contactar ante la identificación del ataque y crear los procedimientos adecuados. Aunque sea redundante, estar preparados; y me animo a decir que este es el paso más importante.

Posteriormente, como ya se dijo, viene el paso de la identificación: detectar el ataque, determinar el alcance del mismo y, no menos importante, involucrar a las partes involucradas. Y este es, a mi criterio, un aspecto fundamental: ¿cuánto tarda el gerente de una empresa en enterarse de este incidente? Aunque muchas veces las comunicaciones suelen realizarse luego de haber controlado la situación, es recomendable involucrar a las personas correctas en esta etapa, donde luego será necesario hacer un análisis de la situación, y del ataque en particular.

Posteriormente, viene la etapa de contención. Esta, consiste en trabajar sobre los dispositivos de red, para lograr que el tráfico malicioso no afecte el funcionamiento del servicio, ya sea bloqueando o redirigiendo los paquetes del ataque, o bien buscando nuevos canales de comunicación entre el servicio y sus usuarios.

La cuarta etapa, consiste en la remediación: aún controlada la situación, es necesario detener el ataque de denegación de servicio. Cuánto más rápido se llegue a esta etapa, menor será el impacto (especialmente económico) del ataque. En esta etapa, es probable que se deba involucrar el proveedor de ISP, por lo que es recomendable saber cuál es el procedimiento para ello (primera etapa). El documento del CERT también aconseja, en caso de tener suficiente información, considerar involucrar a las fuerzas de seguridad en función de lo que determinen los departamentos legales de la empresa.

El ante último paso, la recuperación, consiste en volver el servicio al estado original. Si se realizaron direcciones de tráfico o cambios en las configuraciones durante el ataque, una vez que este ha terminado es necesario volver todo al estado original. Es importante estar seguro al momento de estar estos pasos, ya que si no se hicieron las etapas anteriores cuidadosamente, es probable que vuelvan a aparecer falencias en el servicio.

Finalmente, el sexto y último paso consiste en el post-ataque, etapa donde se debe analizar lo ocurrido y, entre otras acciones, se debe:

  • Documentar los detalles del incidente.
  • Discutir lecciones aprendidas y verificar si se pudiera haber evitado o controlado mejor el incidente.
  • Volver a la etapa uno y prepararse mejor en caso de una nueva ocurrencia del ataque.
Es una realidad: la mayoría de los lectores que tengan alguna responsabilidad sobre la seguridad de una red, no estarán trabajando en una organización que reciba cotidianamente ataques de denegación de servicio. Más bien, podríamos decir que suelen ser excepcionales, y aquí radica un aspecto fundamental: ¿estamos preparados para enfrentar ataques no frecuentes? Independientemente de cuándo ocurran, es en ese momento donde las empresas suelen arrepentirse de no estar listas para enfrentar la situación, por lo que, si está a su alcance, les recomiendo descargar la guía y dedicarle unas horas a la etapa número uno: prepararse. Como también indica el propio documento, recuerden, si se encuentran ante este ataque contra su organización, “siga los pasos de la guía, tome nota y no entre en pánico”.

Fuente: ESET Latinoamérica

Protección contra ataques DDoS


Los ataques de Denegación de Servicio (Denial of Service, DoS) son casi tan antiguos como las redes de comunicaciones, pero de un tiempo a esta parte se han popularizado entre las bandadas de script kiddies, para atacar a todo lo que no les gusta. Ya sean partidos políticos, webs de ministerios e instituciones del estado, empresas privadas, etc. Nadie está a salvo de la “ira vengadora” de un quinceañero con ínfulas de guerrillero (mientras sus padres piensan que está haciendo “los deberes”).

Primera observación: es delito en España desde diciembre del 2010 participar en este tipo de ataques. Leo en Twitter a algunos que argumentan que ellos “sólo se ponen de acuerdo para visitar una página web“. Menuda desfachatez. Llamar al 112 no es delito, por supuesto. Ponerte de acuerdo con 1000 colegas para que cada uno haga mil llamadas al 112 a una hora concreta puede poner vidas en peligro si nadie puede avisar a los bomberos de un incendio o avisar a la policía de un crimen.

Pero dejándo disquisiciones ético-legales a un lado, ¿qué se puede hacer para defenderse de ataques DoS? No es fácil y no hay soluciones mágicas, pero hay cosas que se pueden hacer:

Estar preparado
Los ataques que consisten en miles de conexiones válidas por segundo funcionan porque cada una de las conexiones supone una carga en nuestros servidores (mostrar la información de la página web, quizá haciendo consultas a una base de datos, etc.)

Todo el mundo que tiene página web debería tener calculado el impacto en rendimiento de sus páginas, y tener siempre un “website” alternativo de bajo impacto para situaciones de sobrecarga. Por ejemplo, durante los ataques en Nueva York del 11-S, muchos medios de comunicación sufrieron un “ataque DoS” no intencionado al tener a millones de personas por todo el mundo intentando enterarse de qué pasaba. Algunos, como la CNN cambiaron su página normal por una de sólo texto, sin publicidad, ni elementos innecesarios, de forma que cada petición se pudiera procesar en menos tiempo y así poder atender más conexiones por segundo.

Esto se puede incluso automatizar, de forma que los servidores web cambien automáticamente a la versión “light” en cuanto detectan un aumento inesperado del nivel de peticiones.

Usar redes de distribución de contenido (CDN)
Los CDN son sistemas que permiten a las empresas distribuir su contenido estático por servidores distribuidos por todo el mundo, como los proporcionados por la empresa Akamai. Durante los ataques DDoS a partidos políticos a finales de diciembre de 2010, casi todos cayeron enseguida (PP, CiU, etc.). Algunos de ellos tienen sus páginas alojadas en empresas de hosting de las de 10€/mes, y se merecen lo que les pase. Sin embargo, hubo una web de un partido que, aparentemente, no sucumbió, y es la del PSOE. Simplemente hicieron que su página principal fuera estática y fuera servida por servidores de Akamai. Da igual que se caigan los servidores, en todo momento se podía seguir visitando la web (con una funcionalidad reducida). Algunos críos participantes en el ataque se indignaron por esta “trampa”.

Como si quiero entrar en tu casa y digo que haces trampa por echar la llave. En fin.

Que te ayude tu proveedor de acceso a Internet
Si tienes un proveedor de acceso serio, siempre podrás pedir que te ayuden en caso de ataque. Como mínimo deberían ser capaces de reenviar el tráfico que está dirigido a tus sistemas, a una ruta inválida (null route) de forma temporal.

El problema de este sistema es que nadie podrá acceder desde fuera, ni los atacantes ni tus usuarios legítimos. Entre los participantes en el ataque, que normalmente no tienen conocimientos suficientes, se cree que el ataque ha tenido éxito, ya que la página web deja de estar accesible.

Esto viene a ser la estrategia de “hacerse el muerto”, que puede ser muy válida en algunos casos, sobre todo combinada con contenido estático en CDN (ver punto anterior).

Utilizar una solución anti-DDoS proporcionada por tu proveedor de acceso
Esto suele ser lo necesario cuando quieres evitar el ataque, pero quieres mantener tu sitio accesible por usuarios legítimos, y que el contenido no sea estático, sino transaccional. Es decir, seguir operando “business as usual”. Estas soluciones son complejas, y normalmente las ofrecen los proveedores de acceso a Internet a las grandes empresas, con un coste por supuesto.

Suelen consistir en:

  • Sistema de detección - elementos de red (tipo Arbor Peakflow) que detectan la anomalía en el tráfico de red y hacen análisis del tráfico. Si se situan en la “ruta” entre Internet y tu perímetro, suelen estar gestionados por el ISP. Si los situas en tu perímetro, pueden estar gestionados por el ISP o por la empresa cliente.
  • Mecanismo de redirección – puede ser iniciado por el ISP o por la empresa atacada, y suele consistir en “publicar” una ruta nueva usando el protocolo de rutado BGP, de forma que el tráfico a ciertas IPs se redirija a través de un sistema de mitigación.
  • Sistema de mitigación - son elementos de red (tipo Cisco Guard), gestionados por el ISP, que se “comen” todo el tráfico (suelen tener una capacidad enorme, difícil de saturar por el ataque típico), y se encargan de “separar el grano de la paja” mediante análisis estadístico, y reenvían a la empresa atacada el tráfico “limpio” mediante un túnel GRE cifrado.
Si la disponibilidad y el libre acceso a nuestras aplicaciones y contenido son vitales, es imprescindible tener algún tipo de preparación contra ataques de denegación de servicio. Dependiendo de nuestras necesidades y/o presupuesto, podremos usar unas medidas u otras. Para un estudio estupendo sobre el estado de las cosas, lo mejor es el “Network Infrastructure Security Report” que publica Arbor Networks anualmente.

Fuente: Blog de Alfredo Reino


sábado, junio 18, 2011

Internet mato a la estrella llamada TV

Tomado de: La intenet y la tv
televisor

Disclaimer: aprovechando que ahora colaboro en la revista de Deusto, en la sección de Internet, voy a publicar también en este espacio mis artículos.
Para acompañar la lectura de este post, nada más apropiado que escuchar la conocida canción “Video Killed the Radio Star” del grupo The Buggles. En su letra se describe a una estrella de la radio que ve como sus días de gloria llegan a su fin debido a la expansión del vídeo. Y aunque data de 1981, aún se mantiene vigente pero con dos nuevos protagonistas: Internet y la Televisión.
¿Nos encontramos ante un nuevo cambio de costumbres en nuestro entretenimiento audiovisual? Para descubrirlo, analicemos un poco la Historia. Allá por los años cincuenta, la irrupción de un nuevo electrodoméstico revolucionó la sociedad: el televisor. En sus inicios sólo contaba con dos canales públicos. Más tarde, en 1990, comenzaron a emitir las primeras cadenas privadas (Antena 3, Canal + y Telecinco), lo que desató una lucha encarnizada por la audiencia, provocando a su vez que por el camino se olvidasen los contenidos. Tras esto, la Televisión Digital Terrestre o TDT (con el consabido apagón analógico previsto para 2010), amplió el abanico de canales y propuestas temáticas.
Y el futuro parece que ahora está en la televisión 2.0: una programación a la carta en la que los telespectadores deciden qué es lo que quieren ver, en qué momento y en qué lugar, de manera flexible, asíncrona y sin inoportunos anuncios. Además, estos telespectadores han pasado de ser meros consumidores a generadores de contenido, gracias al éxito de portales de vídeos como YouTube, que han posibilitado que cualquiera pueda grabar y compartir un vídeo de una forma sencilla y rápida.
¿Y qué opinan los medios tradicionales al respecto?
La relación entre la televisión e Internet ha sido, desde sus inicios, una mezcla de amor y odio a partes iguales.
Por un lado, desde la televisión siempre ha existido una cierta tendencia a presentar Internet como un nido de pornografía, piratería, ciberdelincuencia, etc.
Otro aspecto que mantiene la distancia entre nuestros protagonistas son los conflictos con la propiedad intelectual. Por ejemplo, YouTube tiene que hacer frente, casi de forma diaria, a un aluvión de denuncias por albergar vídeos protegidos por el copyright. También las gestoras de derechos audiovisuales para el deporte están descontentas puesto que, si antes vendían a precio de oro la final de un mundial a unas cadenas determinadas, sabiendo que les concedían la exclusividad de la retransmisión, ahora, con Internet, están perdiendo el control sobre dónde se ven esas retransmisiones.
Sin embargo, los responsables de las cadenas comienzan a darse cuenta del poder promocional de la Red, que permite aumentar las audiencias más allá de sus fronteras. Por esta razón, muchas se están lanzando a este medio. El caso más sonado fue el de la BBC que, allá por marzo de este año, llegó a un acuerdo para emitir sus contenidos en YouTube. En España Antena 3, Cuatro y la autonómica catalana TV3 3, cuentan también con su propio canal donde cuelgan pequeños cortes de programas, series y noticias. Hasta la Comisión Europea (CE) ofrece una cadena temática: EU Tube, desde donde informa a los ciudadanos de su actividad.
Pero no sólo de YouTube vive el hombre: algunas autonómicas ofrecen su programación en sus páginas web (TV3, Telemadrid, ETB, etc.), LaSexta cuenta con su espacio en Google Video y Antena 3 acaba de lanzar su plataforma teleporlared.com, donde ofrece la programación de Antena.Neox, Antena.Nova, Antena 3 Noticias 24 y Antena 3 Internacional.
Otros proyectos que pueden hacer de Internet la nueva televisión, son los siguientes:
Zattoo
La propuesta de Zattoo consiste en la sintonización de canales a través de Internet. Aplica el concepto P2P a la televisión para ver las cadenas tradicionales (Antena 3, Cuatro, Telecinco, La Primera, La 2, etc.) en tiempo real y de forma gratuita. Su funcionamiento es similar a programas como el eMule: cada usuario comparte pequeños “trozos” de la transmisión con el resto, lo que hace que funcione como cliente y servidor a la vez. Por tanto, cuantos más usuarios estén viendo un canal, mejor rendimiento se obtendrá.
Con una calidad más que razonable, que dependerá de nuestro ancho de banda, esta P2PTV ha desembarcado recientemente en España. Para poder disfrutar de ella, tenemos que registrarnos en su web, descargar un programa (disponible tanto para Windows, como GNU/Linux y Mac OS X) y conectarnos.
Joost
Joost es otra televisión P2P desarrollada por los creadores de KaZaA y Skype. A diferencia de Zattoo, los contenidos son bajo demanda (no nos tenemos que limitar a ver lo que echen en ese momento). Además presenta una mayor interactividad entre los usuarios ya que cuenta con chats mediante Jabber, IRC y otros plugins.
De momento, sigue en beta cerrada y sólo se puede acceder mediante invitación.
Joox
Joox es un servicio que también posibilita ver series, documentales, películas, etc, pero a diferencia de los anteriores, éste no es P2P. Por lo tanto, a más usuarios, peor será el funcionamiento. Todos los contenidos están en formato DivX, por lo que hay que instalar un plugin para el navegador, pero no requiere de ningún software adicional. Además, permite descargar sus contenidos.
La legalidad de esta plataforma aún está en suspense puesto que infringe las leyes de copyright.
MySpaceTV
Próximamente también seremos testigos del lanzamiento de MySpaceTV, la nueva web del magnate de las telecomunicaciones Rupert Murdoch (presidente y principal accionista de la compañía News Corporation que es dueña de cadenas de televisión como Sky y Fox). Este proyecto será el complemento perfecto para la red social MySpace, de gran éxito en Estados Unidos (quinto sitio más visitado de toda la red) y que acaba de aterrizar en España, donde aún no cuenta con una gran comunidad.
Como vemos, los servicios de vídeo aparecen a un ritmo vertiginoso. Esto es un claro indicador de que hay negocio. Y si hay negocio, hay futuro.
Artículo en formato pdf

viernes, junio 17, 2011

Programa de estadísticas

Tomado de Estadisticas del servidor Web


Nuestro servidor web Apache crea unos ficheros llamados logs donde almacena información sobre los visitantes de las web’s de nuestro servidor.
El fichero encargado de almacenar los registros de los visitantes al servidor es /var/log/apache2/access.log. Si no has seguido este manual para intalar tu servidor, posiblemente el fichero se encuentre en otra carpeta.
¿Qué tipo de información se almacena en el access.log?
Cada vez que el navegador de un visitante hace una petición (puede pedir una página html, una imagen, etc.) se graba una línea en el access.log del tipo:
83.39.86.94 - - [17/Sep/2006:16:12:23 +0200] "GET /spip.php?article33 HTTP/1.1" 200 9995 "-" "Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.8.0.3) Gecko/20060523 Ubuntu/dapper Firefox/1.5.0.3"
En esa línea podemos observar, entre otros, estos datos:
- 83.39.86.94 IP del visitante
- [17/Sep/2006:16:12:23 +0200] fecha y hora
- GET /spip.php?article33 página solicitada (http://lubrin.org/spip.php?article33)
- Sistema operativo, navegador, etc.
Los programas loganalizadores o analizadores de logs se encargan de leer los ficheros de losgs, contabilizar, agrupar, resumir y presentar (de forma grágica) los resultados
Existen varios programas logoanalizadores:
- analog
- webalizer
- awstats
Veámoslos en funcionamiento con ejemplos reales:
- webalizer
- awstats
Me decanto por awstats porque, además de ofrecer más información que los demás, se actualiza periódicamente (por lo que detecta nuevos navegadores, nuevas versiones, etc.)

Instalación de awstats

1) En primer lugar necesitamos que apache tenga instalado el móduo de perl y activado el módulo cgi (casi seguro ya estarán ambos en tu sistema) Para asegurarnos que los tenemos:
# apt-get update
# apt-get install libapache2-mod-perl2
# a2enmod cgi
# /etc/init.d/apache2 restart
2) Ahora instalamos awstats
# apt-get install awstats
La instalación de awstats mediante apt-get no instalará la última versión, pero instalará una versión estable que funciona y nos valdrá para las primeras pruebas. Posteriormente descargaremos la versión más actual de la web oficial y actualizaremos

Configuración de awstats

Para que funcione necesitamos introducirle unos mínimos datos en el fichero de configuración: /etc/awstats/awstats.conf
Como mínimos necesitamos decirle:
- donde está el fichero de logs (access.log)
- donde pondrá los datos con las estadísticas
- nombre de nuestro servidor
- modo de actualizar las estadísticas
- etc.
Si buscas el fichero de configuración /etc/awstats/awstats.conf posiblemente no exista. En lugar de crearlo, lo que hacemos es coger el modelo que propone awstats y modificarlo a nuestro gusto.
El modelo llamado awstats.model.conf se encuentra en /usr/share/doc/awstats (es posible que haya otra copia en /etc/awstats).
Deberás copiarlo a la carpeta: /etc/awstats y renombrarlo a /etc/awstats/awstats.conf (éste último es el que leerá awstats y el que modificaremos).
LAs modificaciones imprescindibles a las que aludía antes son:
# AWSTATS CONFIGURE FILE 6.4
...
# MAIN SETUP SECTION (Required to make AWStats work)
...
LogFile="/var/log/apache2/access.log"
...
SiteDomain="lubrin.org"
...
DirData="/var/lib/awstats"
...
DirCgi="/usr/lib/cgi-bin"
...
DirIcons="/awstats-icon"
...
AllowToUpdateStatsFromBrowser=1
...
Además debemos verificar que nuestro fichero de configuración de apache está acorde con la configuración de awstats
# /etc/apache2/apache2.conf

Alias /awstats-icon /usr/share/awstats/icon

<Directory "/usr/share/awstats">
Options None
AllowOverride None
Order allow,deny
Allow from all
</Directory>
Si modficas la configuración de apache, no olvides recargarlo.
Actualización de las estadísticas
Existen varios modos de actualizar las estadísticas (podemos usarlos todos):
- Actualización automatica mediante cron. Para ello debemos modificar e l fichero /etc/cron.d/awstats y asegurarnos de que el ficheros de logs es el correcto (en nuestro caso debe ser /var/log/apache2/access.log)
- Actualización manual (no se suele usar cuando se usa la actualización por web). De todas formas se puede hacer mediante:
/usr/lib/cgi-bin/awstats.pl -config=lubrin.org -update
- Actualización vía web. Necesitamos poner la directiva AllowToUpdateStatsFromBrowser=1 en el /etc/awstats/awstats.conf
Ya estamos en condiciones de visualizar las estadísticas; para ello apuntamos a http://midominio.es/cgi-bin/awstats.pl
En mi caso se ven apuntando a:
http://lubrin.org/cgi-bin/awstats.pl

Actualizar a la última versión

Nos descargamos la última versión (preferiblemente la estable) de la web ofical http://www.awstats.org/. Entramos en la sección de descargas y bajamos el fichero comprimido (por ejemplo: awstats-6.5.tar.gz).
Lo descomprimimos (no hace falta que sea en el servidor) y vemos el contenido:
la carpeta wwwroot es la interesante. Dentro de ella tenemos la carpeta /cgi-bin con este contenido:
- awstats.pl (es el programa principal)
- awredir.pl
- awstat_model.conf (nuevo modelo de configuración)
- /lang
- /lib
- /plugins
Los ficheros awstats.pl y awredir.pl debemos subirlos (al servidor) a la carpeta /usr/lib/cgi-bin (el awstats.pl sobreescribirá la versión antigua).
El fichero awstat_model.conf puedes usarlo como nuevo fichero de configuración (o dejar el antiguo). Si usas este nuevo, deberás copiarlo a /etc/awstats, renombrarlo a awstats.conf y hacerle las modificaciones oportunas.
Las carpetas /lang, /lib y /plugins debemos subirlas a /usr/share/awstats (sbreescribirán las versiones antiguas)
La carpeta de iconos /wwwroot/icon debemos ponerla también en /usr/share/awstats.
Con esto es suficiente (puedes ampliar más en la web de awstats).
Una de las mejoras que incorpora esta nueva versión 6.5 es que distingue las diferentes distribuciones de Linux.
JPEG - 14 KB
awstats 6.4
En la versión 6.5 distingue entre las diferentes distribuciones de Linux
JPEG - 29 KB
awstats 6.5

Miedo a lo desconocido

Tomado de: Miedo a lo desconocido
 


¡Que vienen las TICs! ¡Corred! Qué miedo dan en ocasiones… Son el nuevo coco 2.0. ¿O realmente lo que nos da miedo es lo desconocido? Hoy me siento más empática que nunca con todas esas personas a las que, con sólo pensar en nuevas tecnologías, sudores fríos les recorran el espinazo. Me ha tocado pelearme con la declaración de la renta y soy una analfabeta esférica (lo mires por donde lo mires) en temas administrativos (un agujero negro a lo largo de mi ciclo formativo… aunque eso será otro post. Eso me produce inseguridad e impotencia a partes iguales.
La incertidumbre que nos genera lo desconocido, o dicho de otra manera, lo que no podemos controlar, normalmente nos paraliza. El ser humano por naturaleza necesita controlar lo que hace, entender lo que le rodea. Tendemos a asimilar lo desconocido como un peligro potencial en vez de hacerlo como una oportunidad. Y la coraza contra los peligros es la auto-defensa.
Y si lo desconocido nos da miedo, qué decir de los cambios… Pues para bien o para mal, es una de las características inherentes a las TICs. La web cambia a un ritmo endiablado. La formación debe ser continua. Ya no vale lo de ir a un curso y cruzarnos de brazos.
¿Pero qué es el miedo? Realmente es un aliado (igual que lo es el dolor… aunque parezca mentira). El dolor nos alerta de que algo no va bien. Las personas que no sienten dolor podrían quemarse una mano si se apoyan sobre una vitrocerámica encendida y no se serían conscientes de ello. El miedo también puede ser visto como un aviso. Una señal de debilidad, que debidamente identificada, podrá ser corregida o tomada en consideración. No tener miedo puede parecer una ventaja, pero realmente no es así. Ahora bien, lo que realmente es importante es que ese miedo no te paralice. Hay una cita anónima muy apropiada al tema: “Quedarse en lo conocido por miedo a lo desconocido, equivale a mantenerse con vida pero no vivir”.
Como bien dice la foto que ilustra este post, cambiemos nuestro miedo a lo desconocido por curiosidad.

Nace Libranda pegada al papel

Tomado de: Nace libranda pegada al papel

Las vacas sagradas del mundo editorial han movido su ficha digital. El resultado es Libranda, que ha sido hoy presentada pero hasta julio no arrancará motores. A la cabeza del experimento se ponen los líderes del papel: Planeta, Random House Mondadori, Santillana, SM, Alfaguara y un largo etcétera.
Lo primero de todo convendría aclarar de qué se trata. Si pensabais que sería una plataforma web desde la que se venderían contenidos en formato electrónico, ya vais mal encaminados. Según sus propios protagonistas la definen:
LIBRANDA es una plataforma que ofrece servicios auxiliares para la comercialización de contenidos digitales y para la promoción de los mismos.
Es decir, son un intermediario o, en este caso, distribuidor digital. Ellos ponen los ebooks y su almacenamiento, pero luego se venderán en librerías on-line. La razón de esto es, según ha comentado hoy en el programa de radio El Ojo Crítico Arantza Larrauri, directora general de Libranda, que quieren seguir manteniendo la cadena de valor existente en el mundo del papel. Aquí podemos ver el esquema de funcionamiento (pinchad sobre la imagen):

Es de agradecer que el formato que se ha seleccionado haya sido el estándar ePUB. Eso sí, con DRM de Adobe mediante.
Pero ahora viene cuando la matan: cuando se pregunta por el precio que tendrán esos contenidos, Arantza contesta que dependerá de la editorial (hasta ahí todo normal) pero que será sobre un 30% más barato que su hermano de papel. Pero se refiere al último hermano de papel que haya salido a la venta. Es decir, si el libro está en tapa dura, será un 30% más barato que su precio. Cuando salga en formato bolsillo, será un 30% más barato que ese precio. Por tanto, seguimos viendo que el papel marca el ritmo del digital a pesar de que el contenido sea el mismo. Seguimos viendo que el traje importa más que lo que va dentro

¿Qué es WordPress?

Tomado de: Wordpress para principiantes WordPress

1. ¿Qué es WordPress?

Es un CMS (Sistema de Gestión de Contenidos) especialmente pensado en la publicación de bitácoras pero que puede ser usado para la creación de webs de edición fácil y rápida. Tiene una serie de funcionalidades que vienen en su núcleo (gestión de feeds, búsquedas, etiquetas, categorías, ...) y luego se le pueden añadir otras muchas a través de plugins (por ejemplo, un detector de spam).

Con WordPress tenemos dos opciones: crearnos un blog en su plataforma comercial (wordpress.com) o en nuestro propio servidor gracias a su software bajo licencia GPL (wordpress.org). En ambos casos el gasto es cero pero con excepciones. En el primero, determinadas funcionalidades son de pago (por ejemplo, la posibilidad de editar el css de nuestra plantilla) y en el segundo, el coste estará en el servidor en el que decidamos montar nuestro blog.

En 2003, el proyecto b2\cafelog, que contaba con unos 2000 blogs, se dividió en dos ramas: b2evolution y WordPress. De la mano de Matt Mullenweg y Mike Little, la plataforma ganó muchos usuarios coincidiendo con el cambio de licencia de Movable Type.

Es de código abierto, está escrito en php y usa MySQL como gestor de base de datos. Uno de sus puntos más fuertes es la enorme comunidad de desarrolladores que tiene a sus espaldas. Al ser software libre, cualquiera puede escribir un plugin para agregar una funcionalidad determinada: desde la más rara (que nos aparezcan frases del musical Hello, Dolly! en nuestro panel de administración) a la más avanzada. Por esta razón tenemos un gran repositorio de plugins y plantillas para personalizar tanto como queramos nuestro site.

Como curiosidad queda que cada nueva versión recibe el nombre de una leyenda del jazz: Miles Davis, Art Blakey, Charles Mingus, Billy Strayhorn,...

1.1. Pros y contras de WordPress.com y WordPress.org


  • Pros de WordPress.org: es software libre, lo que nos aporta una transparencia de su funcionamiento. Además cuenta con una gran comunidad de desarrolladores que mantienen el sistema vivo y en continua evolución. El contenido es completamente tuyo dado que eres tú el que almacena los archivos y la base de datos del blog. Se tiene un control total sobre el diseño. Permite importar contenidos de otras plataformas como Blogger, LiveJournal, Movable Type,... Se puede ampliar fácilmente la funcionalidad de este gestor de contenidos mediante extensiones.

  • Contras de WordPress.org: somos los responsables de la instalación y del mantenimiento del software y WordPress se caracteriza por las continuas actualizaciones para mejorar versiones anteriores y arreglar los fallos que éstas pudieran tener. Se necesita disponer de alojamiento y de dominio. Las copias de seguridad corren de nuestra cuenta.

  • Pros de WordPress.com la plataforma evoluciona al mismo ritmo que su hermana libre (WordPress.org), lo que hace que sea un sistema que se adapta a las novedades que aparecen en la cambiante Red. Nos ahorramos los gastos de un servidor y un dominio propio, así como el trabajo que supone actualizar la versión del software.

  • Contras de WordPress.com: si deseamos instalar plugins o hacer modificaciones sobre el diseño de nuestra bitácora, deberemos tirar de cartera. Lo mismo que para ampliar los 3 GB de espacio para el almacenamiento de imágenes y ficheros subidos.

Wordpress tiene una parte visible para todo el mundo (a no ser que lo hagamos privado mediante un plugin) y una parte desde la que se administra los contenidos. Normalmente, el acceso a esa parte de administración está en la dirección http://urldelblog/wp-admin/

1.2. Tipos de usuarios

Por defecto, en WP, está desactivada la opción de que cualquiera pueda registrarse. Esa opción se habilita desde el panel de control, en Opciones Generales. Allí, conjuntamente se añade el rol por defecto que tomarían esos nuevos usuarios.

En WordPress existen cinco perfiles con diferentes privilegios (si queremos crear otros roles con permisos distintos, tendremos que instalar un plugin que nos provea de esa funcionalidad):
  • Suscriptor: es un mero lector que puede configurar su avatar, su dirección de correo, su página web, ...
  • Colaborador: puede crear entradas pero no las puede publicar.
  • Autor: puede crear entradas y publicarlas.
  • Editor: puede crear, eliminar, modificar y publicar entradas (tanto suyas como de otros). Lo mismo con las páginas, las categorías y los enlaces del blogroll.
  • Administrador: a lo que hace el editor, se le suma la administración de usuarios, gestión de plantillas y plugins, así como opciones generales del blog.

Tareas Admin Editor Autor Colaborador
Entradas : Crear nuevas
Entradas : Publicar No
Entradas : Modificar – Eliminar No No
Páginas : Crear No No
Páginas : Modificar – Eliminar No No
Categorías de Entradas : Crear No No
BlogRoll : Mantener No No
Presentacion ( Plantillas y Widgets ) : Modificar No No No
Usuarios : Mantener No No No
Opciones ( Generales, redacción, lecturas, etc ) : Mantener No No No

role-table.jpg
Roles vs. Capacidades de cada rol

2. Instalación

  1. Bajamos el paquete de Wordpress en castellano
  2. Extraemos el .zip descargado y copiamos la carpeta en /var/www/blog (o el directorio desde donde se sirvan las páginas por el apache). La estructura de WordPress es la siguiente:
    1. wp-config.php: fichero de configuración. Aquí está almacenado el usuario y el nombre de la base de datos, así como otros datos de seguridad. Es importante que este fichero no tenga lectura más que por el owner del mismo. Este fichero no se machaca con las actualizaciones de WP.
    2. wp-admin y wp-includes: carpetas que guardan los ficheros php que hacen que funcione el blog. Ambas carpetas se machacan con las actualizaciones
    3. wp-content: esta carpeta guarda los datos y configuraciones propias del blog. No se toca nada en la actualizaciones de WP. La estructura interna es la siguiente:
      1. uploads: todas las imágenes, vídeos y archivos que se suban a la librería de wordpress. Normalmente se organiza por años y luego por meses. Ejemplo: uploads/2009/12 (pero se puede configurar desde Opciones --> Misceláneas).
      2. plugins: todos los plugins que tenemos disponibles para el blog (aunque no estén activos).
      3. themes: todas las plantillas que tenemos disponibles para "vestir" al blog.
      4. languages: aquí van los ficheros .mo de los idiomas en los que queremos tener WP (tanto la parte visible como la de administración). Para indicar luego que el blog esté en un idioma u otro, habrá que añadir una línea en wp-config.php como la que sigue: define ('WPLANG', 'es_ES'); donde es_ES es el nombre del fichero .mo (tienen que coincidir en nombre).
  3. Ponemos los permisos adecuados para la carpeta blog (como owner y group al usuario de apache):
chown -R www-data:www-data blog
  1. Creamos una BD para wordpress ¡¡IMPORTANTE!! El nombre de la base de datos no puede tener guiones altos
mysqladmin -u root -p create nombrebd
  • Creamos un usuario con permisos para esa BD:
$ grant all on nombrebd.* to usuario@localhost IDENTIFIED BY 'pass';
$ flush privileges;
  1. Lanzamos desde el navegador la instalación ¡¡IMPORTANTE!! Cambiar el prefijo de las tablas SQL por defecto (wp_) durante la instalación por razones de seguridad
  2. Quitamos permisos al fichero wp-config.php
chmod o-w wp-config.php
chmod o-r wp-config.php
chmod g-w wp-config.php
chmod g-r wp-config.php
  1. Borramos los siguientes ficheros:
    1. wp-config-sample.php
    2. wp-admin/upgrade.php
    3. wp-admin/install.php
    4. wp-admin/installer-helper.php
    Si no vamos a importar ningún blog de otro sistema, borramos también: wp-admin/import/

3. Configuración

Tras la instalación es recomendable configurar las siguientes opciones:
  • Por razones de seguridad, cambiamos el nombre por defecto del usuario administrador (admin). Para ello, creamos un usuario con el rol de administrador, iniciamos sesión con esa nueva cuenta y borramos la de admin, asignando a ese nuevo usuario todo lo creado por admin.
  • Generamos una SECRET_KEY y unas Security Keys y las ponemos en wp-config.php
  • Cambiar los permalinks: en personalizada ponemos /%postname%/ o la forma que más nos guste. A poder ser, que sean url's "bonitas".
  • En Opciones --> Discusión dejar sólo marcada la opción "El autor del comentario debe rellenar el nombre y el e-mail" para que no estén todos los mensajes moderados por defecto.

4. Plugins

Como hemos comentado anteriormente, WP tiene un núcleo con funcionalidades básicas que pueden ser complementadas por plugins. A continuación vamos a describir algunos de los más interesantes, aunque podremos descargarnos muchos más desde el repositorio de WP, alimentado por todos los usuarios que van haciendo pequeños desarrollos.
  • Akismet: la mejor lucha contra el spam creada por el propio equipo de WP.
  • Contact Form 7: para crear formularios personalizados en múltiples idiomas, con múltiples campos y diferentes validaciones. Por ejemplo, el de contacto.
  • xlanguage: si queremos tener nuestro site en varios idiomas.
  • All in One SEO Pack: para optimizar al máximo nuestro site frente a los buscadores. El complemento ideal es Google XML Sitemaps, que genera de forma automática nuestro sitemap cada vez que se publica algo nuevo.
  • Si queremos que nuestros artículos puedan ser mandados de forma fácil a redes sociales como Facebook, twitter, menéame, etc... Sociable es nuestro plugin.
  • Subscribe To Comments: para permitir a nuestros lectores recibir notificaciones vía correo cuando alguien deje comentarios en determinadas entradas.
  • Members Only - Permite que el blog sólo sea accesible por usuarios registrados (tanto a posts como a la parte de administración).
  • wpDirAuth: si queremos que los usuarios del site se validen contra un LDAP.
  • Yet Another Related Posts: para obtener artículos relacionados con uno ya escrito en base a datos coincidentes como etiquetas, categorías o aparición de palabras en común.
  • Para "corporativizar" WP, se puede incluir un logo en la pantalla de login y en la zona de administración.
  • Para controlar la memoria empleada por WP: WP memory usage control.

5. Themes

En WordPress es sumamente sencillo cambiar la apariencia de nuestra página. Tenemos miles de plantillas para elegir, pero también podremos crear el nuestro. Además, desde el apartado de administración se podrá configurar la apariencia de una forma muy visual mediante widgets (en el apartado Apariencia --> Widgets). Aquí aparecen las barras laterales definidas y múltiples funcionalidades que se pueden colocar: comentarios recientes, posts recientes, buscador, una caja donde introducir nuestro propio código html, ...

La estructura básica de un theme es la siguiente:
  • header.php: aquí se define la cabecera de la página.
  • footer.php: aquí se define el pie de página.
  • sidebar.php: aquí se definen las diferentes barras laterales. Para que aparezcan en la sección de widgets para que puedan ser "alimentadas" desde el apartada de administración, hay que registrarlas en el fichero functions.php de la siguiente forma:
if ( function_exists('register_sidebars') )
{
    register_sidebar(array(
        'name' => 'Barra Lateral Derecha',
        'before_widget' => 'código html que queremos que se cargue al inicio de la barra',
        'after_widget' => 'código html que queremos que se cargue al final de la barra',
        'before_title' => 'código html que queremos que se cargue al inicio del título de la barra',
        'after_title' => 'código html que queremos que se cargue al final del título de la barra',
    ));
    register_sidebar(array(
        'name' => 'Barra Lateral Izquierda',
        'before_widget' => 'código html que queremos que se cargue al inicio de la barra',
        'after_widget' => 'código html que queremos que se cargue al final de la barra',
        'before_title' => 'código html que queremos que se cargue al inicio del título de la barra',
        'after_title' => 'código html que queremos que se cargue al final del título de la barra',
    ));
}
  • index.php: este es el fichero que carga de inicio del site. Desde aquí se invoca la carga de cabecera (get_header();), barras laterales (get_sidebar();) y footer (get_footer();).
  • single.php: este es el fichero que se interpreta cuando se carga un post concreto.
  • archive.php: igual que single.php pero para las páginas de categorías y etiquetas.
  • functions.php: aquí se recogerán funciones propias del theme. Por ejemplo, si queremos registrar varias barras laterales para que aparezcan en la sección de widgets, indicar a WP dónde están los ficheros de idiomas, quitar filtros, ...
  • Templates: podemos crear plantillas con comportamientos propios a los que luego asignar a cada página. Desde el editor de páginas estáticas hay una opción para aplicar plantillas. Para que un fichero php sea interpretado por WP como una template, hay que incluir al inicio del mismo el siguiente código:
/*
Template Name: Nombre-plantilla
*/
  • style.css: fichero con los estilos.
  • 404.php: si creamos este fichero, cada vez que algo no se encuentre en el blog, se cargará esta página.

6. Otros

  • Emoticonos
  • Gestión de idiomas
  • Cómo hacer backup de los datos:

    Tanto en WordPress.com como en la versión instalada en nuestro servidor, la opción de exportar se encuentra en la sección de “Herramientas" de la columna lateral de configuración. Hay que pinchar en el botón “Descargar el archivo de exportación", lo que nos genera un archivo XML con todos los posts, comentarios, campos personalizados, categorías y etiquetas. Este fichero se puede utilizar para ser importado en otro sitio creado con WordPress. También se puede importar desde otras plataformas, como Blogger, Posterous, LiveJournal y Movable Type, entre otros.

7. Enlaces de interés

Vistiendo a WordPress: nunca los themes fueron tan fáciles

Tomado de: Vistiendo a wordpress con themes

Como es costumbre, aquí dejo el material usado en el cursillo del e-ghost+aprendices que he impartido esta semana sobre cómo convertir a nuestro WordPress en una página web y no tanto en un blog y cómo entender a fondo el funcionamiento de las plantillas.
La información está también recogida en el wiki que, por cierto, está de estreno. No porque esté descontenta con wikispaces… pero me gusta más tener mis datos bajo mi paraguas (manías de vieja ;-) ). Poco a poco iré migrando el resto de contenidos allí.

La estructura de WordPress

Internamente WordPress se compone de los siguientes ficheros y carpetas:
  • wp-config.php: fichero de configuración. Aquí está almacenado el usuario y el nombre de la base de datos, así como otros datos de seguridad. Es importante que este fichero no tenga lectura más que por el owner del mismo. Este fichero no se machaca con las actualizaciones de WP.
  • wp-admin y wp-includes: carpetas que guardan los ficheros php que hacen que funcione el blog. Ambas carpetas se machacan con las actualizaciones
  • wp-content: esta carpeta guarda los datos y configuraciones propias del blog. No se toca nada en la actualizaciones de WP. La estructura interna es la siguiente:
    • uploads: todas las imágenes, vídeos y archivos que se suban a la librería de wordpress. Normalmente se organiza por años y luego por meses. Ejemplo: uploads/2009/12.
    • plugins: todos los plugins que tenemos disponibles para el blog (aunque no estén activos).
    • languages: aquí van los ficheros .mo de los idiomas en los que queremos tener WP (tanto la parte visible como la de administración). Para indicar luego que el blog esté en un idioma u otro, habrá que añadir una línea en wp-config.php como la que sigue: define (‘WPLANG’, ‘es_ES’); donde es_ES es el nombre del fichero .mo (tienen que coincidir en nombre).
    • themes: todas las plantillas que tenemos disponibles para “vestir” al blog. Nosotros nos centraremos en esta carpeta.
Como podemos ver, una instalación de WordPress es muy portable. Si nos queremos cambiar de servidor o hosting, bastará con que nos llevemos estas carpetas y la Base de Datos exportada en un simple .sql. No requiere de otras configuraciones más complejas.

La estructura básica de un theme

Las plantillas o themes son la capa de presentación de los blogs o páginas web que se monten. Se puede cambiar esta capa sin que la información se vea afectada. WordPress reconoce automáticamente los siguientes ficheros y los interpreta:
Cuerpo.jpg
  • header.php: aquí se define la cabecera de la página.
  • footer.php: aquí se define el pie de página.
  • sidebar.php: aquí se definen las diferentes barras laterales.
  • index.php: este es el fichero que carga de inicio el site. Desde aquí se invoca la carga de cabecera (get_header();), barras laterales (get_sidebar();) y footer (get_footer();) y en el cuerpo central, se ejecuta el bucle para cargar la información de los posts.
  • single.php: este es el fichero que se interpreta cuando se carga un post concreto.
  • archive.php: igual que single.php pero para las páginas de categorías y etiquetas.
  • category.php: plantilla para las categorías. Cuando un usuario pincha sobre el enlace de una categoría, WordPress prueba si existe el fichero category.php. Si no lo encuentra, carga archive.php. Y si éste tampoco lo encuentra, se va a por el index.php. Más adelante veremos un gráfico con la interpretación jerárquica que hace WordPress.
  • comments.php: plantilla de los comentarios.
  • searchform.php: formulario de búsqueda.
  • search.php: página donde se muestran los resultados de una búsqueda.
  • functions.php: aquí se recogerán funciones propias del theme. Por ejemplo, si queremos registrar varias barras laterales para que aparezcan en la sección de widgets, indicar a WP dónde están los ficheros de idiomas, quitar filtros, …
  • style.css: fichero con los estilos.
  • 404.php: si creamos este fichero, cada vez que algo no se encuentre en el blog, se cargará esta página.
Desde el apartado de administración se podrá configurar la apariencia de una forma muy visual mediante widgets (en el apartado Apariencia –> Widgets). Aquí aparecen las barras laterales definidas y múltiples funcionalidades que se pueden colocar: comentarios recientes, posts recientes, buscador, una caja donde introducir nuestro propio código html, …
También desde el apartado de administración (Ajustes –> Lectura) podemos configurar que la portada que se carga de nuestra web sea una página y no el formato blog de entradas, dándole más carácter de página web.
Podríamos cargar diferentes sidebars con la misma metodología que los headers y los footers (explicada más adelante), pero existe una manera para que generemos un espacio dentro del apartado de los widgets.
Para que aparezcan en la sección de widgets las diferentes sidebars que queramos “alimentar” desde el panel de administración, hay que registrarlas en el fichero functions.php de la siguiente forma:
if ( function_exists(‘register_sidebars’) )
{
register_sidebar(array(
‘name’ => ‘Barra Lateral Derecha’,
‘before_widget’ => ‘código html que queremos que se cargue al inicio de la barra’,
‘after_widget’ => ‘código html que queremos que se cargue al final de la barra’,
‘before_title’ => ‘código html que queremos que se cargue al inicio del título de la barra’,
‘after_title’ => ‘código html que queremos que se cargue al final del título de la barra’,
));
register_sidebar(array(
‘name’ => ‘Barra Lateral Izquierda’,
‘before_widget’ => ‘código html que queremos que se cargue al inicio de la barra’,
‘after_widget’ => ‘código html que queremos que se cargue al final de la barra’,
‘before_title’ => ‘código html que queremos que se cargue al inicio del título de la barra’,
‘after_title’ => ‘código html que queremos que se cargue al final del título de la barra’,
));
}
Para usarlas posteriormente, la llamada será de la siguiente forma:
<?php if ( !function_exists(‘dynamic_sidebar’) || !dynamic_sidebar(‘Barra Lateral Izquierda’) ) :
echo “El usuario no ha puesto widgets en esta barra”;
endif; ?>

Cabeceras y Footers personalizados

<?php if (is_category(‘Cine’)) {
get_footer(‘Cine’);
} else {
get_footer();
} ?>
De esta forma tan sencilla podemos cargar ficheros php personalizados para mostrar diferentes footers o cabeceras según estemos en una categoría u otra. En el ejemplo, si estamos en la categoría de Cine se cargará footer-cine.php. Si no, se cargará footer.php.
Sería exactamente lo mismo para las cabeceras (header-cine.php vs. header.php):
<?php if (is_category(‘cine’)) {
get_header(‘cine’);
} else {
get_header();
} ?>
Es decir, lo que WordPress busca es el fichero header-slug.php (el slug es el permalink. Es decir, la versión url del nombre: una cadena sin mayúsculas, sin tildes, con guiones en vez de espacios).

Categorías y etiquetas personalizadas

Para cargar diferentes presentaciones dependiendo de la categoría o la etiqueta sobre la que se pinche, podemos crear un php igual que lo hacíamos con las cabeceras, es decir category-slug.php o tag-slug.php o bien con el siguiente formato de nombre category-XX.php o tag-XX.php (donde XX es el id que tiene internamente esa categoría o etiqueta). De esta forma, podríamos ponerle una cabecera, un footer y un sidebar personalizados dependiendo de la categoría o la etiqueta en la que estemos.
Aquí vemos el orden en el que WordPress busca los ficheros y los carga:

Para cualquiera de las vistas que no tenga un archivo de plantilla separado, WordPress usará index.php de manera predeterminada. Si un visitante solicita un artículo individual, WordPress primero buscará un archivo llamado single.php. Si ese archivo existe, será utilizado para presentar el artículo. Si ese archivo no existe, WordPress utilizará index.php.

Templates

Podemos crear plantillas con comportamientos propios a los que luego asignar a cada página. Desde el editor de páginas estáticas hay una opción para aplicar plantillas. Para que un fichero php sea interpretado por WordPress como una template, hay que incluir al inicio del mismo el siguiente código:
/*
Template Name: Nombre-plantilla
*/

The Loop

El bucle es el proceso más importante de WordPress, aquel que nos devuelve y recorre todos los posts que corresponden al fichero desde el que se invoca:
  • Si se le llama desde index.php, nos devuelve los últimos posts que se hayan escrito (tantos como tengamos definidos que deberían formar parte de la portada en el apartado de administración).
  • Si se le llama desde archive.php, nos devuelve los posts de una etiqueta determinada o de una categoría concreta (dependerá de quién haga la llamada a ese fichero).
Por tanto, es en este bucle donde procesaremos la colección de posts.
<?php
get_header();
if (have_posts()) :
while (have_posts()) : the_post();
the_content();
endwhile;
endif;
get_sidebar();
get_footer();
?>
  • wp_query->current_post: nos devuelve el número del post en el que estamos dentro del loop. Un ejemplo de uso en el que mostramos el contenido para los tres primeros posts y sólo el título para el resto:
<?php if (have_posts()) :
while (have_posts()) : the_post();
if ($wp_query->current_post < 3) {
the_content();
}
else {
the_title();
}
endwhile;
endif; ?>
Sin embargo, nosotros también podemos controlar qué posts nos devolverá ese loop mediante la función query_posts. Esa función regenera la consulta y filtra los posts en base a los parámetros que le pongamos:
  • cat=ID: filtra por esa categoría. Si al id se le pone un guión por delante, muestra los posts de todas las categorías menos de esa.
  • tag=slug: filtra por etiqueta. En esta ocasión se le pasa el slug. Si queremos usar el ID de la etiqueta, pondremos el parámetro tag_id.
  • author=ID: filtra por usuario, usando el ID del mismo.
  • order=ASC u order=DESC: indica la ordenación de los resultados, ascendente o descendente.
  • year=año: filtra por año.
  • monthnum=mes: filtra por mes.
  • day=día: filtra por día.
  • posts_per_page=número: número de posts por página
Ejemplo:
<?php
query_posts(‘posts_per_page=5&author=3&tag=discos’);
//The Loop
if ( have_posts() ) : while ( have_posts() ) : the_post();
..
endwhile; else:
..
endif;
//Reset Query
wp_reset_query(); ?>

Funciones

  • the_permalink(): nos dará la url del post que estemos tratando dentro del loop. No tiene parámetros. Con get_permalink() tendremos que mostrarlo nosotros por pantalla con un echo, pero nos permite que, si tenemos el ID del post y se lo pasamos por parámetro, lo usemos fuera del loop: get_permalink($post->ID).
  • the_title($before, $after, $echo): muestra el título del post y también es necesario usarlo dentro del loop. Los parámetros $after y $before nos permite introducir cadenas de texto que irán delante y detrás respectivamente. Por ejemplo, si queremos que el título vaya con las etiquetas html <h3>, podemos hacer la siguiente llamada: the_title(‘<h3>’, ‘</h3>’). El parámetro $echo nos sirve para indicar si queremos que muestre el título por pantalla (si lo ponemos a true) o no para hacer algún tratamiento con ese título (si lo ponemos a false). Con get_the_title(ID) sucede igual que get_permalink pero para el título del post.
  • the_content(): muestra el cuerpo del post.Se usa dentro del loop. Tiene también su versión get_the_content().
  • the_excerpt(): muestra lo que hayamos introducido en el campo Extracto. Se usa dentro del loop. Tiene su versión get_the_excerpt().
<?php if(!empty($post->post_excerpt)) {
// Si tiene extracto, lo muestra
the_excerpt();
} else {
// Si no, muestra el contenido del post
the_content();
} ?>
  • the_time(): muestra la fecha por cada post. Le podemos pasar por parámetro el formato de esa fecha:
    • l = Nombre completo del día de la semana.
    • F = Nombre completo para el mes.
    • j = Día numérico.
    • m = Mes con dos dígitos.
    • Y = Año con cuatro dígitos.
    • y = Año con dos dígitos.
    • Para escapar letras, usaremos la barra \. Por ejemplo, para poner la palabra “de” le pasaremos “\d\e”
<?php the_time(‘l, j \d\e F, Y’); //Nos muestra Martes, 14 de Septiembre, 2010 ?>
  • the_date(): igual que the_time pero muestra la fecha solo en el primer post de un grupo que haya sido publicado el mismo día.
  • Bloginfo: nos ofrece numerosa información de nuestro blog que luego podremos plasmar en otros apartados (tiene se versión get_bloginfo):
    • bloginfo(‘name’): muestra por pantalla el nombre del blog.
    • bloginfo(‘description’): muestra por pantalla el nombre del blog.
    • bloginfo(‘url’): muestra por pantalla la dirección del blog.
    • bloginfo(‘stylesheet_url’): muestra por pantalla la ruta del fichero de estilos (style.css).
    • bloginfo(‘template_url’): muestra por pantalla la ruta del theme.
    • bloginfo(‘rss2_url’): muestra por pantalla la ruta del RSS.
En este ejemplo se muestra el nombre del blog enlazado a su dirección:
<a href=”<?php bloginfo(‘url’); ?>” title=”<?php bloginfo(‘name’); ?>”><?php bloginfo(‘name’); ?></a>
  • the_author(): muestra por pantalla el autor que ha escrito ese post. Tiene su versión sin echo: get_the_author.
  • the_tags( $before, $separator, $after): muestra las etiquetas asociadas a ese post. Por parámetro se le puede pasar el texto que precederá a las etiquetas, los caracteres que queremos que separen las etiquetas y el texto que irá al final. Tiene también su versión get_the_tags que nos devolverá un array con las etiquetas, para que las procesemos nosotros.
<?php the_tags(‘Etiquetas:’, ‘ – ‘, ‘<br />’); ?>
  • posts_nav_link: muestra un enlace con el texto que le pasemos por parámetro a los posts que estén en páginas anteriores. Se usa en el index.php para que se pueda navegar a los contenidos anteriores a los posts que se muestran en la portada.
  • previous_posts_link: muestra un enlace con el texto que le pasemos por parámetro a los posts que estén en páginas anteriores. Se usa en el index.php para que se pueda navegar a los contenidos anteriores a los posts que se muestran en la portada.
  • next_posts_link: muestra un enlace con el texto que le pasemos por parámetro a los posts que estén en páginas posteriores. Se usa en el index.php para que se pueda navegar a los contenidos posteriores a los posts que se muestran en la página desde la que se invoca.
<div>
<div><?php previous_posts_link(”,”,’&laquo; Artículos Anteriores’)?></div>
<div><?php next_posts_link(”,’Artículos Siguientes &raquo;’,”)?></div>
</div>
  • in_category($category): nos dice si ese post está en la categoría pasada por parámetro. Se puede pasar el ID de la categoría o bien el slug. Con esto también podemos hacer que tenga comportamientos distintos según la categoría y en un único fichero category.php.
<?php if (in_category(’3′) ){ ?>
<img src=’/images/plant.png’ alt=’a plant’ />
<?php } elseif (in_category(’4′) ){ ?>
<img src=’/images/flower.png’ alt=’a pretty flower’ />
<?php } ?>

Custom fields – Campos personalizados

Cuando estamos creando un post, justo debajo de la caja del texto podemos introducir campos personalizados introduciendo un nombre y un valor:

El Nombre será el identificador de nuestro campo personalizado y el Valor lo que queremos mostrar. Obtendremos el valor de ese campo dentro del loop con la siguiente llamada get_post_custom_values:
<?php $valor_custom_field = get_post_custom_values(“nombre-del-custom-field”); ?>
O también con la función get_post_meta:
<?php $valor_custom_field = get_post_meta($post->ID, nombre-del-custom-field); ?>
Estos custom fields son los metadatos extra de cada post (que se suman a los ya típicos autor, fecha, etiquetas, categorías, etc…). Así podría ser la canción que está escuchando el autor cuando escribió el post o su estado de ánimo, el precio (si usamos el blog como tienda virtual), etc…

Panel de administración del theme

Para crear un apartado de administración de nuestro theme, debemos incluir la siguiente llamada en functions.php (en este ejemplo estamos poniendo un textarea para que se almacene nuestro código de Google Analytics):
/* Meter código de Google Analytics */
function nombredeltheme_theme() {
if(isset($_POST['submitted']) and $_POST['submitted'] == ‘yes’) :
update_option(“google_analytics”, stripslashes($_POST['google_analytics']));
endif;
?>
<form method=”post” name=”update_form” target=”_self”>
<h1>Google Analytics</h1>
<table>
<tr>
<th>Google Analytics:</th>
<td><textarea name=”google_analytics” style=”width: 95%;” rows=”10″ />
<?php echo get_option(‘google_analytics’); ?></textarea><br />Copia el código Google Analytics aquí.</td>
</tr>
</table>
<p id=”jump_submit”>
<input name=”submitted” type=”hidden” value=”yes” />
<input type=”submit” name=”Submit” value=”Save Changes” />
</form>
<?php
}
function nombredeltheme_options() {
add_menu_page(‘Opciones del Theme’, __(‘Opciones del Theme’, ‘default’), ‘edit_themes’, __FILE__, ‘nombredeltheme_theme’);
}
add_action(‘admin_menu’, ‘nombredeltheme_options’);
Luego ponemos en el footer.php:
<?php echo get_option(‘google_analytics’); ?>
De esta forma se cargará en el footer lo que el usuario alimente desde el panel de administración.

Enlaces de interés

  • Nuestra nueva biblia: Codex WordPress.
  • El gran repositorio de WordPress de plantillas, para que seleccionemos una como base para la modificación.

Aprender a decir que NO

Tomado de: Aprender a decir que no

Tenía pendiente esta entrada desde hace tanto tiempo… (de hecho, me habían pedido la traducción de “7 Simple Ways To Say No” de Celestine Chua). Pero una conversación mantenida esta semana ha servido como catalizador del proceso ;-) .
Hablando con una persona a la que no conozco desde hace mucho, me ha sorprendido la radiografía tan exacta que ha sacado de mí. Me ha adjudicado el don de la asertividad pero con una carencia: no saber decir que NO. Es algo que tengo asumido… ¡pero que quiero cambiar! Hay días en los que es desesperante mirar tu correo electrónico. Muchas peticiones de ayuda, que estarías encantada de resolver, pero que requieren su tiempo, un bien que escasea precisamente por el círculo vicioso en el que me veo inmersa. En Aprendices hemos dicho (a veces medio en broma, a veces medio en serio) que tenemos que hacer un taller sobre esto.
Pudiera parecer que decir que sí a todo y a todos es positivo porque estamos contentando a las personas con las que nos relacionamos. Pero igual obtenemos el efecto contrario: frustración por terminar haciendo algo que realmente no queríamos hacer; no llegar a todo lo comprometido, sumando por tanto más frustración y ofreciendo una pésima imagen (y fallando a los que nos importan).
Las razones de esa parálisis a la hora de decir que NO pueden ser varias y las hay de todos los colores:
  • La culpabilidad, ese sentimiento traicionero que te golpea donde más duele: la conciencia. Simplemente quieres ayudar, pero no consideras que igual te estás haciendo a ti un flaco favor… Y esto se acentúa aún más en las mujeres por esa herencia cultural de debernos a los demás.
  • La incertidumbre de que si no aceptamos algo, no se nos presentarán futuras opciones (ya no nos volverán a llamar u ofrecer algo).
  • Querer agradar y el miedo a parecer una borde. Muchas veces he comentado con otros internautas que la red está plagada de un “buenrollismo” que en ocasiones es hasta agobiante. Nos damos jabón hasta límites insospechados… Nadie quiere asumir el rol del “vinagre” de Internet. Y más cuando en un medio escrito, las palabras quedan frías y las susceptibilidades están a flor de piel.
  • Que todo nos parezca atractivo. Entonces tenemos un grave problema de gestión de prioridades y una limitación inherente al ser humano: nuestros días, como los de los demás, tienen 24 horas (ni un minuto más, ni un minuto menos).
Si os sentís identificados con alguno de los puntos anteriormente expuestos, vosotros también sois unos “traperos del NO”. Así que hagamos juntos la terapia. Repetid conmigo:

“Me gustaría poder ayudarte, pero me resulta imposible”.
“No soy la persona más apropiada para esto. Si quieres, te puedo dar el nombre de…”.
“Ahora mismo no cuento con el tiempo suficiente para llevar a cabo eso y a mí me gusta comprometerme al 100%”.
Y sin duda, mi favorita, una frase mítica de Phoebe en la serie Friends:
“Me encantaría, pero no me apetece”.

¿Revoluciones 2.0? Causa vs. efecto

Tomado de: Rrevoluciones

¿Revoluciones 2.0? Causa vs. efecto

9 Comentarios »
Este viernes tengo el inmenso placer de debatir en el Museo de San Telmo de Donosti el papel de las redes sociales en las movilizaciones ciudadanas que están transformando el mundo árabe. Y es que mi compañero de mesa es un auténtico lujo: Sofiène Ben Haj M’Hamed, uno de los blogueros más activos y significativos de Túnez. Por fin podremos conocer desde las entrañas cuál es la incidencia real de las redes sociales en las revoluciones de los países del norte de África.
Por mi parte, yo pondré mi punto de vista desde el cómodo sofá de mi casa, asomada a la pantalla de mi ordenador y a los medios convencionales de comunicación que nos rodean. Veremos si ambas visiones son coincidentes.
¿Y cuál es mi percepción? La dejo por aquí para contrastarla con la vuestra y enriquecerla antes del viernes.
¿Realmente se cuecen las revoluciones internamente en Internet o las redes sociales lo que son es una gran altavoz para comunicar hacia fuera lo que sucede?
Yo soy muy escéptica y me cuesta creer el papel que se nos ofrece desde los medios de comunicación tradicionales y la propia web donde se proclama a Twitter o Facebook como los motores del cambio social (y para más inri, luego transcienden noticias del calibre de “Padre egipcio llama a su hijo Facebook“).
Me cuesta creer ese papel porque la brecha digital es demasiado honda (en Egipto, por ejemplo, el índice de penetración de Internet era de un 20% en 2008; en Libia, hay cerca de 350.000 internautas en una población de más de seis millones). Y estos números sólo hablan de acceso (dentro del acceso hay que valorar las sub-brechas derivadas del conocimiento de plataformas y su uso).
Me cuesta creer ese papel, porque los ciberdisidentes tienen un papel muy difícil ante regímenes dictatoriales que controlan el acceso a Internet (por ejemplo, las autoridades egipcias cortaron la Red al inicio de la revuelta). No hay más que echar un ojo al mapa de cibercensura que han elaborado Reporteros Sin Fronteras.
Es por esto que merece la pena recalcar la diferencia entre causa y efecto. Los cambios sociales y políticos son fruto de unos precedentes en el mundo off-line. La mecha no se prendió en las redes sociales. Otra cosa es que las TIC sirvan de catalizador (desde el poderoso impacto que supuso los SMS a las manidas redes sociales). Pero yo no confundiría “altavoz viral” (efecto) con “germen de una revuelta” (causa). Ese altavoz viral lo que sí puede ejercer es una presión mediática en los países de Occidente para que reaccionen de manera que no pierdan popularidad ante sus conciudadanos (aunque seguimos viendo que nada tiene tanto efecto como oler el petroleo ;-) ). Pero esto tampoco está causado por las redes sociales sino por la nueva forma del mundo en el que vivimos: un mundo globalizado, donde nos llegan noticias de cualquier rincón del planeta. ¿Que Twitter ha reducido a la mínima expresión el tiempo que tardan en llegar esas noticias hasta nuestros ojos? Totalmente de acuerdo.
Otra máxima que se cumple es la famosa frase de McLuhan: “El medio es el mensaje“. Las herramientas moldean la forma en que nos comunicamos. Las redes sociales nos imprimen su velocidad, su inmediatez, su brevedad, su autogestión, … Con el tiempo, las características de esas herramientas cambian lo que vemos y cómo lo vemos.
También se habla de las redes sociales como la panacea horizontal de la comunicación (la larga cola, que diría Chris Anderson) y, sin embargo, nuestra sociedad sigue estando necesitada de héroes con nombre y apellidos (o en este caso, nick) que pueblen nuestras pantallas. Y si no, que se lo digan al egipcio Wael Ghonim, ejecutivo de Google, que de la noche a la mañana se convirtió en un referente de la revolución egipcia. Es lo que se conoce como un “influyente” o más bien, “influenciador” (si existiera la palabra ;-) ). Sin embargo, quizás el problema venga de pensar que todos sus compatriotas son iguales a él. De la misma manera que nosotros aplicamos la regla de tres al resto de la sociedad que nos rodea pensando que pasa el mismo tiempo en redes sociales o tiene el mismo conocimiento de la Red. Endogamia pura y dura que nos nubla la vista y nos pone un cristal que no nos permite ver que pertenecemos a una minoría sesgada. La marabunta social motor de las revueltas estaba compuesta por esas clases medias, cultivadas y occidentalizadas, que tienen acceso a las TIC y saben sacarles chispas, pero sobre todo de las clases populares, que no usan Facebook o Twitter. Esas clases populares fueron las que reventaron tras llegar al límite de su aguante.
Otra cosa que me parece paradójica hasta al extremo es que se hable de derrocar regímenes dictatoriales en plataformas tan sumamente cerradas, donde una fotografía de una madre amamantando a su bebé puede ser censurada. Recientemente leía al padre de la web, Tim Berners-Lee, lo siguiente: “Las Redes Sociales son sólo cotos cerrados que no favorecen el intercambio real de ideas o de intereses, sino simplemente sirven para reforzarlos y conectar personas de ideas similares, llegando incluso a los extremos, sin favorecer el debate“. También solemos asociar a Twitter o Facebook propiedades mágicas como las inherentes a un servicio distribuido, con miles de voces y difícilmente controlable por un regímen. ¡Mentira! De distribuido tienen muy poco estas plataformas. Son servicios muy centralizados y fácilmente controlables por los Estados (por no hablar de lo sencillo que es también infiltrarse, espiar o incluso manipular información y/u opinión).
Las revoluciones siguen cociéndose en las plazas y no apretando botones de “Me gusta”. O como decía Moisés Naím: Ni Facebook, ni Twitter: son los fusiles.