Problemas de instalación con WP Super Cache

July 7th, 2008

Tuve varios problemas a la hora de poder realizar una instalación satisfactoria de este plugin para Wordpress. Por lo tanto, dejo un par de problemas y cómo resolverlos.

Antes que nada, debe tener habilitado los módulos mime y rewrite. Para consultar qué módulos tiene habilitado nuestro servidor Apache, podríamos usar el comando a2dismod. La función de este comando es para deshabilitar módulos, pero para deshabilitarlos nos pide que elijamos qué módulo deshabilitar y nos muestra una lista de los módulos habilitados, con lo cual nos sirve para consultar qué módulos hay habilitados. Por ejemplo.


# a2dismod
Your choices are: alias auth_basic authn_file authz_default authz_groupfile authz_host authz_user autoindex cgi dav deflate dir env mime negotiation php5 rewrite setenvif status
Which module(s) do you want to disable (wildcards ok)?

En este caso tengo habilitados dichos módulos, pero sino es su caso, bastará el siguiente comando.


# a2enmod rewrite mime
Enabling module rewrite.
Enabling module mime.
Run '/etc/init.d/apache2 restart' to activate new configuration!

Y para que los cambios tengan efecto, como nos indica la salida del comando, debemos reiniciar el servidor.

Mi principal problema con WP Super Cache, fue que al crear/editar .htaccess con las reglas que me indicaba el plugin y entrar al blog, el servidor me devolvía un error 403, forbidden. Básicamente ¡no tenía permisos para acceder al blog!


Forbidden

You don't have permission to access /wp-admin/options-general.php on this server.

Esto lo pude solucionar editando el archivo de configuración de los sitios virtuales en el servidor, estos archivos se deberían alojar en /etc/apache2/sites-available/. Fue necesario sólo agregar las siguientes opciones FollowSymLinks y SymLinksIfOwnerMatch. Dejo un fragmento de mi archivo para guiarlos.


NameVirtualHost *:8089

   ServerAdmin webmaster.infosofia@gmail.com
   ServerName infosofia.blogdns.com
   Options Indexes +FollowSymLinks MultiViews Includes +SymLinksIfOwnerMatch

…
FollowSymLinks
Permite que el servidor siga los enlaces simbólicos del directorio en donde fue definido.
SymLinksIfOwnerMatch
Permite que el servidor siga aquellos enlaces donde el objeto apuntado pertenezca al mismo usuario del enlace.

Nota: El signo + indica que se aplique esa opción a todos los directorios anidados al directorio en donde se efectuó la declaración.

Eso sería lo más importante, espero que le pueda servir a alguien.

Hello world!

July 4th, 2008

Welcome to WordPress. This is your first post. Edit or delete it, then start blogging!

Coloreado de sintaxis en MediaWiki

July 3rd, 2008

Para lograr colorear la sintaxis de las fuentes que incluyamos en nuestras páginas en Mediawiki, existe una extensión que facilita enormemente esta tarea. La extensión se llama SyntaxHighlight GeSHi.

Instalación

La extensión se encuentra en un repositorio de Subversion, por lo tanto necesitaremos un cliente Subversion para obtenerla. En caso de que no tengan algún cliente instalado, en este post explico cómo instalarlo.

Luego hay que ir a la carpeta extension, la cual se encuentra dentro del directorio donde tengamos instalado el wiki. Podríamos suponer que se encuentra en /var/www/wiki/extension/.

Dentro de la carpeta extension, utilizaremos el cliente subversión para bajar la extensión. Ejecutando el siguiente comando:


# svn co http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/SyntaxHighlight_GeSHi

Adicionalmente necesitaremos bajar actual de GeSHi, la cual también se encuentra disponible en un repositorio Subversion. La extensión sería recomendado bajarla dentro de la carpeta extension/SyntaxHighlight_GeSHi/.


# cd SyntaxHighlight_GeSHi
# svn co http://geshi.svn.sourceforge.net/svnroot/geshi/branches/RELEASE_1_0_X_STABLE/geshi-1.0.X/src/ geshi

Habilitar la extensión

Ahora indicaremos al wiki sobre la nueva extensión, para esto debemos editar el archivo LocalSettings.php, que se debería encontrar en la raíz del directorio del wiki (ej. /var/www/wiki/). La edición consiste en agregar estas dos líneas al final del archivo.


require_once("extensions/SyntaxHighlight_GeSHi/SyntaxHighlight_GeSHi.php");
require_once( '/var/www/wiki/extensions/SyntaxHighlight_GeSHi/geshi/geshi.php' );

Nota: En el caso del segundo require_once, es necesario que especifiquen la ruta en donde se localiza geshi. De acuerdo a este ejemplo, la ruta que especifico es correcta, pero no podría ser en su caso.

Verificación de la instalación

Para verificar que realmente tenemos la extensión funcionando, podemos revisar la página Especial:Version (deben ser administradores del wiki para poder ver ésta página), en donde debería describir (dentro de otras cosas) las extensiones instaladas. Pueden ver la imagen de como luciría la descripción de la extensión

Página Especial:Version

Uso

Hay que utilizar la etiqueta source y a través de la propiedad lang especificamos el tipo de fuente que vamos a escribir. Acá dejo un pequeño ejemplo como se vería un fragmento de XHTML.


<source lang="xml">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 <title>XHTML 1.0 un ejemplo</title>
 </head>
 <body>
 <p>Esto es una muestra de la extensión<p>
 </body>
</html>
</source>

El código anterior se vería como la siguiente imagen.

Sintaxis coloreada por la extensión SyntaxHighlight GeSHi en MediaWiki

Los parámetros que se le pueden pasar a la etiqueta source son los siguientes:

lang
Define el lenguaje
line
Habilita la numeración de lineas en el código.
start
Número con que comenzará a numerar las líneas.
enclose
Coloreado especial para etiquetas que envuelven el código.
strict

En la tabla de abajo presento los valores que puede tomar la propiedad lang.

lang Lenguaje
abap ABAP
actionscript ActionScrip
ada Ada
apache Apache Log
applescript AppleScript
asm ASM
asp Active Server Pages (ASP)
autoit AutoIt
bash Bash
basic4gl Basic4GL
blitzbasic Blitz BASIC
bnf Backus-Naur Form
c C
c_mac C (Mac)
caddcl AutoCAD DCL
cadlisp AutoLISP
cfdg CFDG
cfm ColdFusion
cpp-qt C++ (Qt toolkit)
cpp C++
csharp C#
css Cascading Style Sheets (CSS)
d D
delphi Delphi
diff Diff
div DIV
dos DOS batch file
dot DOT
eiffel Eiffel
fortran Fortran
freebasic FreeBASIC
genero Genero
gml Game Maker Language (GML)
groovy Groovy
haskell Haskell
html4strict HTML
idl Uno IDL
ini INI
inno Inno
io Io
java Java
java5 Java(TM) 2 Platform Standard Edition 5.0
javascript JavaScript
latex LaTeX
lisp Lisp
lua Lua
m68k Motorola 68000 Assembler
matlab MATLAB M
mirc mIRC scripting language
mpasm Microchip Assembler
mysql MySQL
nsis Nullsoft Scriptable Install System (NSIS)
objc Objective-C
ocaml-brief OCaml
ocaml Ocaml
oobas OpenOffice.org Basic
oracle8 Oracle 8 SQL
pascal Pascal
per per
perl Perl
php-brief PHP
php PHP
plsql PL/SQL
python Python
qbasic QBasic/QuickBASIC
rails Rails
reg Windows Registry
robots robots.txt
ruby Ruby
sas SAS
scheme Scheme
sdlbasic SdlBasic
smalltalk Smaltalk
smarty Smarty
sql SQL
tcl Tcl
text Plain text
thinbasic thinBasic
tsql Transact-SQL
vb Visual Basic
vbnet Visual Basic .NET
vhdl VHDL
visualfoxpro Visual FoxPro
winbatch WinBatch
xml XML
xpp X++
z80 ZILOG >80 Assembler

Bibliografía

Instalación y configuración de un Wiki semántico

July 1st, 2008

Logotipo de semantic MediaWiki

Para darle semántica a nuestro wiki, sólo es necesario instalar la extensión Semantic MediaWiki, esta extensión es sólo para MediaWiki, por lo tanto necesitamos tener instalado un wiki con MediaWiki.

Introducción

Semantic MediaWiki (SMW), ayuda a la búsqueda, organización, evaluación y muestra de tags y también ayuda a compartir los contenidos del wiki. Esta extensión posibilita que los textos de nuestro wiki puedan ser interpretados por las máquinas y no sólo por personas, dando pie a la futura Web semántica.

Instalación

Para facilitar la instalación (y la explicación) será necesario tener instalado un cliente de subversión. En caso de no tener instalado el cliente, es necesario instalar el paquete subversion, en Debian o Ubuntu (u otros forks) aptitude install subversion.

Luego hay que ir a la carpeta extension, la cual se encuentra dentro del directorio donde tengamos instalado el wiki. Podriamos suponer que se encuentra en /var/www/wiki/extension/.

Dentro de la carpeta extension, utilizaremos el cliente subversión para bajar la extensión. Ejecutando el siguiente comando:


# svn checkout http://svn.wikimedia.org/svnroot/mediawiki/trunk/extensions/SemanticMediaWiki/

Habilitar la extensión

Una vez que se descargue el código, debemos indicar al wiki que habilite la extensión, para esto debemos ir editar el archivo LocalSettings.php, que se debería encontrar en la raíz del directorio del wiki (ej. /var/www/wiki/). La edición consiste en agregar estas dos líneas al final del archivo.


include_once('extensions/SemanticMediaWiki/includes/SMW_Settings.php');
enableSemantics('example.org');

Nota: Hay que reemplazar el string example.org, por su dirección http del wiki, por ejemplo versatil.org/wiki/ o por la dirección IP.

Actualización de la base de datos

Por último falta actualizar la base de datos. Esto se puede realizar a través de la página “Special:SMWAdmin” (ver imagen), por ejemplo http://versatil.org/wiki/index.php/Especial:SMWAdmin. Para poder tener acceso a está página tienen que estar logeados como un usuario administrador del wiki.

Página Special:SMWAdmin

Una vez en la página Special:SMWAdmin, deben presionar el botón que dice Initialise or upgrade tables. Si al presionarlo no apareció ningún error, significa que la actualización de la base de datos se ejecuto sin problemas.

Verificación de la instalación y configuración

Para verificar que realmente tenemos la extensión funcionando, podemos revisar la página Especial:Version, siguiendo con el ejemplo en http://versatil.org/wiki/index.php/Especial:Version. En esa página salen las extensiones instaladas en nuestro wiki, ahí debería estar la extensión Semantic MediaWiki (ver imagen).

Página Especial:Version

Palabras finales

Una vez instalada la extensión, pueden colaborar con el proyecto dándose de alta en un registro de wiki semánticos. Dicho registro es para recolectar datos que faciliten futuras implementaciones.

Bibliografía

Instalación y configuración de memcached en MediaWiki

June 30th, 2008

A continuación presento como instalé y configuré memcached en MediaWiki, sobre un Ubuntu 7.04.

¿Qué es memcached?

Memcached es un sistema de cache, que almacena objetos en memoria. Estos objetos son las consultas que se van realizando a la base de datos. La cache que utiliza es una tabla hash, que puede ser distribuida entre varias máquinas.

Beneficios del uso de memcached

Aumento en el rendimiento y disminución en la carga de la base de datos. Al estar cacheada las consultas, se puede “armar” más rápido las páginas que se sirven a los usuarios. Además se reduce considerablemente los accesos a la base de datos.

Requerimientos

  • PHP debe estar compilado con la –enable-sockets
  • libevent1
  • memcached

Para verificar que tenemos PHP compilado con esa opción podemos verificarlo con phpinfo (creando un página PHP con <?phpinfo();?>). En la figura podemos ver que tenemos compilado PHP con esa opción.

Socket habilitado en phpinfo

Para satisfacer los otros dos requerimientos, basta ejecutar un aptitude install memcached libevent1.

Verificación de funcionamiento

Podemos ver si está funcionando, verficando si efectivamente memcached está escuchando en su puerto.


$ netstat -tap
Conexiones activas de Internet (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:53856                 *:*                     LISTEN     5409/rpc.statd
tcp        0      0 localhost:2208          *:*                     LISTEN     4983/hpiod
tcp        0      0 *:nfs                   *:*                     LISTEN     -
tcp        0      0 *:11211                 *:*                     LISTEN     2
9248/memcached

Esta verificación es redundante ya que las dependencias de memcached son resueltas por aptitude, pero útil si han compilado memcached.


# cd /usr/bin
/usr/bin# ldd memcached
        linux-gate.so.1 =>  (0xffffe000)
        libevent.so.1 => /usr/lib/libevent.so.1 (0xb7edc000)
        libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7d9b000)
        /lib/ld-linux.so.2 (0xb7ef9000)

Configuración de memcached en MediaWiki

Hay que editar el archivo LocalSetting.php y modificar las variables wgMainCacheType y wgMemCachedServers.

La variable wgMainCacheType toma como valor una constante. La siguiente lista contiene las constantes que pueden ser asignadas, no voy a entrar en detalle en el uso específico de cada una.

  • CACHE_ANYTHING
  • CACHE_NONE
  • CACHE_DB
  • CACHE_MEMCACHED
  • CACHE_ACCEL
  • CACHE_DBA

$wgMainCacheType = CACHE_MEMCACHED;
$wgMemCachedServers = array( "127.0.0.1:11211” );

Para poder asignar el valor correcto en wgMemCachedServers, necesitamos saber porque puerto está escuchando memcached. Esta información se encuentra detallada en /etc/memcached.conf. Dejo un fragmento del archivo.


# Default connection port is 11211
-p 11211

# Run the daemon as root. The start-memcached will default to running as root if no

Bibliografía

Cambios “al vuelo” en páginas Web

June 24th, 2008

Me pasaron un interesante enlace[cs.washington.edu], en donde se menciona un estudio realizado por un grupo de investigadores de CSE e ICSI. En dicho estudio demuestran que aproximadamente 1% de 50.000 usuarios, reciben las páginas web modificadas. Esta modificación “al vuelo”, se produce mientras la página deja el servidor y antes de llegar al browser del usuario. Las modificaciones consisten en inyectar anuncios, producidos en gran medida por agentes externos a los usuarios, por ejemplo los firewall de los ISP. Esto puede producir errores y vulnerabilidades.

Para poder medir estos cambios, desarrollaron un programa llamado web tripwires, que tiene la habilidad de detectar los cambios producidos en las páginas Web. Esta desarrollado en JavaScript y básicamente detecta cambios textuales en la página HTTP, reportandolos al usuario. Acá hay un ejemplo de cómo funciona, son dos páginas web con tripwire incluido.

Web tripwire está disponible para bajar.

Problemas con tex4ht en Ubuntu

June 22nd, 2008

Al tratar de compilar un documento .tex con tex4ht me producía el siguiente error.


Transcript written on document.log.
----------------------------
tex4ht.c (2006-09-13-14:27 kpathsea)
tex4ht -f/document
  -i/usr/share/texmf/tex4ht/ht-fonts/
--- warning --- Can't find/open file `tex4ht.env | .tex4ht'
--- error --- Illegal storage address
----------------------------
t4ht.c (2006-09-13-14:28 kpathsea)
t4ht -f/howto-repositorios
--- warning --- Can't find/open file `tex4ht.env | .tex4ht'
--- warning --- Can't find/open file `document.lg'

Luego de buscar por un buen rato, llegué a una solución. Hay que ejecutar en línea de comando, como superusuario, lo siguiente.


# texhash
no
texhash: Updating /var/lib/texmf/ls-R-TEXMFMAIN...
texhash: Updating /var/lib/texmf/ls-R-TEXMFDIST-TETEX...
texhash: Updating /var/lib/texmf/ls-R...
texhash: Done.

Nota: Texthash lo que hace es actualizar un índice de paquetes Latex instalado, de esta manera el resto de las aplicaciones saben cuales paquetes están instalados.

Bibliografía


Debian Changelog tex4ht (20080228-1)[packages.debian.org]

Sanción de Ley para la prohibición de centrales nucleares

June 21st, 2008

Logo de Eco Acción Mendoza

A vista de los eventos (especialmente lo sucedido el 16 de julio)que ocurrieron en la planta Kashiwazaki de Japón. Eco-Acción Mendoza se dispone a comenzar una campaña para que se sancione una Ley para la prohibición de centrales nucleares en Mendoza.

Eco-Acción Mendoza organiza todos los sábados a las 16hs reuniones
en el auditorio de radio nacional en Emilio Civit 460 de Ciudad.

Dejo aquí el comunicado emitido para dicha campaña

[descargar]

Speedy, navegando en una laguna

June 21st, 2008

En un post anterior, comenté el “regeneramiento” de la línea, que al final de cuenta resultó ser una mentira disfrazada de “solución”.

En estos momentos el servidor de infosofía:=0×69AEE7 se encuentra en
el rango de ips dentro de la subred 190.172.0.0 de speedy. Además un
compañero mio también con speedy se encuentra en el rango 190.48.0.0,
con su servidor web. Ahora si quiero entrar a su servidor no puedo y el
tampoco a infosofía, incluso metiendole “regeneración” (y apagando el
modem) en ambos servidores.

Por lo cual ambos llamamos al servicio técnico de speedy
(0800-333-7733, opción 0 y después 2). En definitiva la serie de
llamadas terminaron en ninguna solución y en la mayoría de las llamadas
fuimos cortados, o sea, sino pueden solucionar algo te cortan ¡y listo!

Además el servicio técnico de speedy sólo tiene soporte para Windows
(ojo, también dan soporte para Windows 95 y 98 :-P), por lo cual no
podían ayudarnos. Pero éste problema , es un problema mero de ruteo de
speedy y no involucra al cliente.

Otra cosa que vale la pena comentar es que el servicio técnico
tampoco tiene “soporte de red”, o sea, por ejemplo aquí tengo una
pequeña red privada, la cual salé a internet por NAT. Toda persona con conocimientos mínimos en redes, sabe que la red privada conectada a un NAT desde internet se ve como una única máquina, pero ese conocimiento es algo desconocido para el servicio técnico, diciéndome: “Señor, no podemos ayudarlo en su problema por que tiene más de una máquina conectada a internet”
Vuelvo a repetir que el problema no es del cliente, es de speedy. Por
lo tanto esta excusa no tiene fundamento al igual que la anterior.

También pudimos sacar una conclusión de estas llamadas, y es que el
servicio técnico no sabe absolutamente nada de nada, por ejemplo unas
de las personas que habló conmigo no sabía cual era la diferencia entre
una página web y un servidor web; otros no sabían que era la IP
pública, confundiendo la ip de mi máquina con la ip con la que salgo
hacia Internet; etc. Realmente una desilusión.

Este es un problema con TCP, ya que si hago ping (ICMP) al servidor
que está en 190.48.0.0 me responde, pero si utilizo algo que funcione
sobre TCP no veo a la otra máquina. Por ejemplo es imposible hacer
conexiones web, FTP o consultar una base de datos remota…

Creo que esto es algo que debería de quejarse todo usuario de speedy, ya que nos venden un servicio con el cual podemos navegar sin límites, y en realidad estamos limitados a navegar por ciertos ip’s. Aquí dejo algunos consejos a la hora de quejarse:

  • Al llamar pedir número de reclamo, de esta manera tenemos la
    identificación del llamado, para después hacer cualquier tipo de
    denuncia (ya que supuestamente graban todos los llamados). Estos
    números pueden ser útiles para obtener descuentos en la facturación de
    la línea :-P
  • Pedir el nombre y apellido del que nos toma el reclamo
  • Y lo más importante, decir que: “por favor no corten la llamada, porque sino tendré que hacer una denuncia”.

Aquí les dejo unas pruebas que muestran el filtrado que realiza speedy


$ traceroute 190.48.32.14 80
traceroute to 190.48.32.14 (190.48.32.14), 30 hops max, 80 byte packets
 1  192.168.2.1 (192.168.2.1)  1.366 ms  0.831 ms  0.906 ms
 2  192.168.1.1 (192.168.1.1)  1.250 ms  1.431 ms  1.480 ms
 3  200.51.241.221 (200.51.241.221)  13.279 ms  15.543 ms  65.523 ms
 4  200.51.233.140 (200.51.233.140)  13.997 ms  15.538 ms  14.449 ms
 5  200.51.233.140 (200.51.233.140)  56.170 ms  38.127 ms  12.758 ms
 6  200.51.233.141 (200.51.233.141)  17.054 ms  30.646 ms  14.812 ms
 7  * * *
 8  * * *
 9  * * *
10  * * *
...
30  * * *

Ahora si vuelvo hacer un trace, pero en vez de usar paquetes UDP, utilizo ICMP ECHO; se ve lo siguiente


$ traceroute -I 190.48.32.14 80
traceroute to 190.48.32.14 (190.48.32.14), 30 hops max, 80 byte packets
 1  192.168.2.1 (192.168.2.1)  3.581 ms  0.833 ms  0.834 ms
 2  192.168.1.1 (192.168.1.1)  1.752 ms  1.038 ms  1.008 ms
 3  200.51.241.221 (200.51.241.221)  88.064 ms  92.143 ms  23.622 ms
 4  200.51.233.140 (200.51.233.140)  12.996 ms  13.763 ms  14.313 ms
 5  200.51.233.140 (200.51.233.140)  14.262 ms  116.797 ms  12.750 ms
 6  200.51.233.141 (200.51.233.141)  13.483 ms  13.176 ms  15.324 ms
 7  190-48-32-14.speedy.com.ar (190.48.32.14)  198.036 ms  104.146 ms  380.376 m

Increíble, esto demuestra que el router 200.51.233.141 está filtrando las conexiones. Ahora hagamos un ping


$ ping 190.48.32.14
PING 190.48.32.14 (190.48.32.14) 56(84) bytes of data.
64 bytes from 190.48.32.14: icmp_seq=1 ttl=248 time=63.7 ms

Ahora tratemos de obtener una pagina web del servidor


$ nc 190.48.32.14 80
HEAD / HTTP:1.0

Creería que eso es suficiente para mostrar que realmente es un
problema de speedy (especialmente sus router) y no del cliente. Espero
que esto se solucione de una buena vez, porque fastidia y mucho.

Poderes de super vaca

June 21st, 2008

En
una de mis eufóricas búsquedas por internet me tropiezo ante este
paquete de Debian, el cual nos ofrece configurar una vaca
hablante/pensante; jaja, si correcto una VACA. Para probarlo


# aptitude install cowsay

Básicamente es un programa en Perl que genera una vaca en ASCII, la cual dice o piensa lo que el usuario le pase como argumento.


$ cowsay infosofía:=0x69AEE7
 ______________________
< infosofía:=0x69AEE7 >
 ———————-
        \   ^__^
         \   (oo)\_______
             (_ _)\            )\/\
                   | |—-w  |
                   | |        ||

O aquí tenemos la versión pensante de la vaca


# cowthink Como a caído el nivel de los post...
 _______________________________________
( Como a caído el nivel de los post... )
 ---------------------------------------
        o   ^__^
         o   (oo)\_______
              (_ _)\            )\/\
                     | |----w  |
                     | |        ||

Para finalizar, vale la pena mencionar que se puede cambiar el
aspecto de la vaca según su estado físico/emocional. Este se debe
especificar como parámetro al programa. Aquí dejo algunos:

-b
Vaca en modo Borg
-g
Modo codicioso
-d
Aparece muerta
-p
Estado de paranoia
-s
Petrificada
-t
Está cansada
-w
Lo contrario de -t
-y
Aspecto juvenil