Al hilo del post anterior, si queremos evitar (bajo Windows XP) que cree el fichero Thumbs.db tendremos que realizar los siguientes pasos:
1. Abrir el explorador de archivos (botón derecho del ratón sobre el botón de inicio y pulsar sobre explorar)
2. En los menus: herramientas > opciones de carpeta
3. Activamos «No alojar en caché las vistas en miniatura».
Si desde OSX montais las unidades compartidas de vuestros alojamientos y se os crean los molestos ficheros .DS_Store no tenéis más que abrir un terminal y escribir la siguiente linea:
Investigando con el objetivo de crear una aplicación en Facebook que permita controlar una cuenta de forma offline permitiendo: escribir en su muro, crear eventos, gestionar páginas… he llegado a la conclusión que esto puede llevarse a cabo con aplicación fantasma (vacía) ya que lo importante del asunto es conseguir los permisos necesariosestos son los pasos necesarios para hacerlo de la forma sencilla:
1) Agregar aplicación Developer
Suponiendo que tenemos creada ya una cuenta en Facebook, el primer paso consiste en agregar la aplicación “Developer“ o “Desarrollador” a nuestro perfil. Todo contenido que se agrega a Facebook es una aplicación, así que para desarrollar nuevas aplicaciones es necesaria una aplicación que las contenga.
Una vez que tenemos agregada la aplicación “Desarrollador” estamos en disposición de crear aplicaciones nuevas…
2) Crear nuestra aplicación desde la aplicación developer…
La primera vez que queramos crear una aplicación se nos pedirá que introduzcamos un código que nos llega por sms al telefono móvil que tenemos configurado en la cuenta o que introduzcuamos una tarjeta de credito válida si también la tenemos configurada en la cuenta, la segunda y sucesivas aplicaciones que creemos bastará introducir un captcha como control de seguridad.
En la configuración de la nueva aplicación algunos aspectos importantes que debemos configurar son:
El tipo de canvas (contenedor de nuestra aplicación) en nuestro caso lo configuramos como IFrame, que se caracteriza porque la aplicación pasa a estar realmente en tu propia página web y Facebook simplemente muestra un IFrame (un marco) en su sistema con el que cargar tu web. Facebook, con sus últimos cambios pasa a recomendar este sistema.
La URL del Canvas: página web de nuestra aplicación.
** NOTA- en nuestro caso aunque configuramos una página en nuestros servidores, estará vacía.
El nombre de página de lona: que será la forma de referirnos a nuestra aplicación en facebook y que http://apps.facebook.com/NOMBRE_APLICACION
Para cada aplicación se generan automaticamente un conjunto de claves que utilizaremos para referir a la aplicación y autenticarnos:
Id de aplicación – identificador de la aplicación.
Clave API
Clave secreta de aplicación
3) Conseguir permisos para nuestra aplicación y un perfil concreto
Nuestra aplicación puede hacer prácticamente cualquier acción que un usuario podría hacer en su perfil, pero es necesario que el usuario de un perfil de permiso explicitamente a la aplicación incluso en nuestro caso que hemos creado la aplicación desde el propio perfil UVa.
Todo esto podría programarse directamente en la aplicación que tenemos alojada en nuestros servidores con la ayuda del javascript sdk o el PHP sdk, en cualquier caso es importante entender que cualquiera de estas dos APIs son una abstracción de la Graph API.
La API Graph es el core de la plataforma facebook, permitiendo a los desarrolladores leer y escribir datos en facebook. Provee un vista simple y consistente del Social Graph (El término Social Graph fue utilizado por primera vez por Facebook para describir las conexiones que unos usuarios mantienen con otros dentro de una red social, es decir, un mapa de sus relaciones.), donde se representan los objetos (gente, fotos, eventos, páginas) y las conexiones entre ellos (amistad, likes, etiquetas de fotos)
client_id – es el id de la aplicación, que habíamos apuntado en el paso anterior.
redirect_uri – es la página a la que redireccionar el navegador una vez hayamos dado los permisos a la aplicación.
scope – es una lista de permisos, cuyos posibles valores podemos consultar en la documentación al respecto. El permiso offline_access es uno de los más importantes: permite que el token que nos va a pasar Facebook para autenticarnos no caduque, incluso cuando el usuario esté desconectado. Si quieres interactuar con las páginas que gestiona tu usuario, en lugar, o además de con tu propia cuenta personal, necesitarás requerir también el permiso manage_pages, nosotros en principio vamos a solicitar prácticamente todos los permisos posibles.
4) Obtener el token de acceso
Ahora que ya tenemos una aplicación con permisos, cada vez que invoquemos nuestra aplicación desde nuestro perfil (aunque nuestra aplicación esté vacía y no haga nada) aparecerá un token de acceso en forma de parametro «ACCESS_TOKEN» que lleva implicitos todos los permisos que el perfil otorga a la aplicación y que se mantendrán mientras no eliminemos la aplicación de nuestro perfil.
De nuevo se puede utilizar la graph api para preguntar directamente por el token de acceso.
5) Interactuar con el perfil que dio permisos a nuestra aplicación fantasma
Ahora ya podemos publicar en el muro y las páginas que administra el perfil de la universidad desde el que hemos autorizado la aplicación, las posibilidades infinitas solo hay que construir llamadas a la API en forma URL enviando siempre como parametro el access_token que nos autoriza.
Podemos hacer una rápida prueba de concepto haciendo un pequeño script con ayuda del comando curl desde un interprete de comandos:
Puede parecer difícil pero es muy sencillo, basta con ejecutar la siguiente consulta:
SELECT table_schema "Base de Datos", sum( data_length + index_length ) / 1024 / 1024 "Tamaño en MB" FROM information_schema.TABLES GROUP BY table_schema;
Hoy nos hemos encontrado con este error en Apache que impedía su arranque:
No space left on device: mod_rewrite: could not create rewrite_log_lock
La solución, algo que no tenía que usar desde la práctica de sistemas operativos de la carrera. Borrar los semáforos del sistema.
Podemos ver los semáforos del sistema con el comando «ipsc -s»:
# ipcs -s (mostrar el listado de Semaphore Arrays, este es un ejemplo, no el mio)
------ Semaphore Arrays --------
key semid owner perms nsems
0x00000000 2686976 stas 600 1
0x00000000 2719745 stas 600 1
0x00000000 2752514 stas 600 1
Y podemos ir matando los semáforos con «ipcrm -s SEMID» siendo SEMID el identificador del semáforo obtenido con «ipsc -s».
Es importante que lo ejecutéis con suficientes privilegios por lo que os recomiendo usar el usuario «root».
La instalación de WordPress Multisite es muy sencilla desde la versión 3. Antes teníamos que bajarnos el paquete wordpress-mu pero ahora está incluída en la distribución normal.
Una vez instalado el wordpress (en un servidor con php y en una base de datos MySQL, entramos en http://SERVIDOR/CARPETA DEL WORDPRESS/wp-admin/install.php y seguimos las indicaciones) debemos editar el fichero y añadir: define('WP_ALLOW_MULTISITE', true);
Después entramos como administrador y veremos en el menú dentro de Herramientas un nuevo elemento, Red. Tendremos dos opciones pero ojo, que luego no podemos cambiar, así que es el momento de tomar la decisión.
Como subdominios. Si el sitio principal es sitio.com podemos crear los blogs automáticamente como blog1.sitio.com, blog2.sitio.com
Como carpetas. Si el sitio principal es sitio.com podemos crear los blogs automáticamente como sitio.com/blog1, sitio.com/blog2
Mi recomendación es como subdominio. Al seleccionarlo y dar a siguiente nos aparece la siguiente información:
1.Crea el directorio blogs.dir en <RUTA DEL SERVIDOR>/wordpress/wp-content. Este directorio se usa para almacenar los archivos subidos por los sitios adicionales y el servidor web, debe poder escribir en él.
2.Añade lo siguiente a tu archivo wp-config.php en <RUTA DEL SERVIDOR>/wordpress/ sobre la línea que dice /* ¡Eso es todo, no hay que editar nada más! Feliz blogging. */:
define( 'MULTISITE', true );
define( 'SUBDOMAIN_INSTALL', true );
$base = '/';
define( 'DOMAIN_CURRENT_SITE', 'blogs.uva.es' );
define( 'PATH_CURRENT_SITE', '/' );
define( 'SITE_ID_CURRENT_SITE', 1 );
define( 'BLOG_ID_CURRENT_SITE', 1 );
3.Añade lo siguiente a tu archivo .htaccess en /wordpress/, remplazando las reglas existentes de WordPress:
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
# uploaded files
RewriteRule ^files/(.+) wp-includes/ms-files.php?file=$1 [L]
RewriteCond %{REQUEST_FILENAME} -f [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^ - [L]
RewriteRule . index.php [L]
Y con esto tendremos nuestro servidor wordpress multisite funcionando.
Algo que hacemos habitualmente en un Word puede ser un poco tedioso en una Base de datos. Para ello MySQL nos proporciona REPLACE y podemos reemplazar una cadena dentro de todas las tuplas de la tabla.
Por ejemplo:
UPDATE tabla SET columna = REPLACE (columna,’cadena a buscar’,’cadena a reemplazar’);
Con esto en la tabla reemplazaremos la cadena a buscar por la cadena a reemplazar en la columna.
Supongo que alguna vez os habrá pasado. Queremos darle un dominio web a una aplicación, para que sea acceda a ella directamente sin tener que poner nada detrás, como por ejemplo que app.uva.es vaya a servidor.uva.es/app que es la ruta donde está desplegada la aplicación.
Pues es muy sencillo, en la configuración del tomcat, en server.xml definimos un nuevo host con el contextpath apuntando a la ruta donde está la aplicación, y si queremso que tenga un alias también s elo ponemos. Tenéis un ejemplo a continuación:
Hoy trabajando con WordPress-MU al copiar algunos archivos me apareció una cosa curiosa en la cabecera de la página en el Safari, algo como «Mac OS X ? 2?°??â??ATTR??“5?â˜&?˜&?com.apple.quarantine0000;4b8e31e2;Safari;|com.apple.Safar» y te quedas un poco perplejo… así que me fui raudo y veoz a la linea de comandos del terminal (uno es de la vieja escuela y le encanta en cuanto puede irse a los comandos). Con un ls -l no vi nada, pero con un ls -la encontré algo que no había visto, una «@» así que tuve que investigar.
-rw-r--r--@ 1 davidrod staff 1665458 13 ene 2009 navidad.jpg
No tardé mucho en encontrar el tema en San Google patrón de los problemas y sus soluciones. Resulta que Mac OS X desde el Leopard al menos tiene unos atributos extendidos para los ficheros, por ejemplo para usar con el Time Machine o en Cuarentena para archivos descargados de internet. Éste último era mi caso. La solución es usar el comando «xattr».
Con xattr -l fichero vemos el parámetro que tiene el fichero, en mi caso «com.apple.quarantine», y con xattr -d com.apple.quarantine fichero podemos eliminarlo. No es muy complicado hacer un scriptillo que nos lo quite de todos los ficheros de un directorio como «find . | while read file; do xattr -d com.apple.quarantine $file; done».
Supongo que conoceréis el sistema de estadísticas Awstats. Para mi es uno de los más sencillos y mejores que hay, aunque nunca lo utilizo en tiempo real, sino que genero las estadísticas por la noche tras hacer el rotado de los logs y de manera estática para no sobrecargar al servidor.
Normalmente las usamos con el servidor HTTP de apache, pero en este caso os voy a explicar cómo hacerlo sobre el servidor de Servlets Apache Tomcat.
Después de tener descargado el awstats y asegurarnos que tenemos correctamente instalado el tomcat y perl en nuestro servidor empezaremos por configurar los logs del tomcat para que nos dejen un log de los accesos a nuestro servidor. Para ello debemos encontrar en el directorio de instalación del Tomcat, en el subdirectorio conf el fichero server.xml y al final del mismo encontraremos comentado lo siguiente:
<!--
<Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="common" resolveHosts="false"/>
-->
Simplemente tendremos que descomentar este código y cambiar «common» por «combined» que nos dará una mayor información para luego realizar el procesamiento de los logs, quedando de la siguiente forma:
<Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"
directory="logs" prefix="localhost_access_log." suffix=".txt"
pattern="combined" resolveHosts="false"/>
Ahora pasamos a configurar el awstats. Podemos usar la utilidad «awstats_configure.pl» que nos irá preguntando los datos de los directorios y configuración de nuestro servidor, o directamente crear un fichero de configuración copiando el modelo que viene y cambiando los siguientes parámetros:
LogFile="[Directorio Tomcat]\logs\localhost_access_log.%YYYY-24-%MM-24-%DD-24.txt"
LogType=W
LogFormat=1
LogSeparator=" "
SiteDomain="127.0.0.1" [O el nombre DNS como www.ejemplo.es]
HostAliases="127.0.0.1 localhost www.ejemplo.es"
DirData=»[Directorio donde queremos que deje los ficheros de datos del awstats]»
AllowToUpdateStatsFromBrowser=0
A continuación debemos preparar el sistema para que ejecute el programa awstats cada día con el fin de que procese el fichero de logs de acceso y genere las estadísticas. En un equipo linux podemos usar el crontab o en windows el Task Scheduler por ejemplo. En el caso de linux tendríamos un script que generase las estadísticas en páginas html estáticas en el directorio [Directorio de los informes] como el siguiente:
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -update -showdropped -showcorrupted
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output -staticlinks > [Directorio de los informes]/index.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=alldomains -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].alldomains.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=allhosts -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].allhosts.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=lasthosts -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].lasthosts.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=unknownip -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].unknownip.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=alllogins -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].alllogins.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=lastlogins -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].lastlogins.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=allrobots -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].allrobots.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=lastrobots -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].lastrobots.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=urldetail -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].urldetail.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=urlentry -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].urlentry.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=urlexit -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].urlexit.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=browserdetail -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].browserdetail.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=osdetail -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].osdetail.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=unknownbrowser -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].unknownbrowser.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=unknownos -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].unknownos.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=refererse -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].refererse.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=refererpages -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].refererpages.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=keyphrases -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].keyphrases.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=keywords -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].keywords.html
perl [Directorio instalación awstats]/wwwroot/cgi-bin/awstats.pl -config=[Dominio www.ejemplo.es] -output=errors404 -staticlinks > [Directorio de los informes]/awstats.[Dominio www.ejemplo.es].errors404.html
Si además queremos que esté visible en la web tendremos que generar estos informes dentro de una carpeta accesible desde el tomcat y copiar la carpeta «icon» que está tentro del directorio «[Directorio del awstast]/wwwroot» a la carpeta «[Directorio instalación Tomcat]/webapps/ROOT» y renombrar «icon» a «awstatsicons».