Controla tu banshee desde tu cel con Remuco y Ubuntu
En ubuntu karmic debes seguir la siguiente receta
Agregar al repositorio las siguientes entradas (sudo gedit /etc/apt/sources.list)
deb-src http://ppa.launchpad.net/remuco-team/ppa/ubuntu karmic main
Actualizamos el repositorio:
Instalamoso el cliente Remuco para nuestro reproductor favorito (en mi caso es el banshee)
Bajamos e instalamos el cliente (midlet) en nuestro celular con soporte para aplicaciones java.
Descargamos la última versión de aquí, descomprimimos el .rar y buscamos en la siguiente ruta la aplicación .jar, en mi caso:
Enviamos por bluetooth el .jar a nuestro teléfono, aceptamos la aplicación y el Remuco queda instalado. Ahora hay que levantar el cliente en nuestro ubuntu de la siguiente forma:
Log output will be stored in /home/dennys/.cache/remuco/banshee/log
Contribute to Remuco: Please run 'remuco-report' once a client has connected, thanks!
Para no hacer el paso anterior cada vez que encendemos la compu, lo agregamos como una aplicación de inicio:
Sistemas>Preferencias>Aplicaciones de Inicio
Luego el botón Añadir y escribimos:

También tenemos que abrir nuestro Banshee y agregar canciones a la cola de reproducción, las cuales podrá “ver” el cliente Remuco en el teléfono.
¡Listo!, abre la aplicación en el teléfono y disfruta tu controlo remoto
.
Más información:
Using mobile phone as remote for linux media players is fun!
Animación orgánica con Context Free
Me quedé con la curiosidad de cómo generar una animación del programa en Context Free sin la interfaz de usuario que existe en otras plataformas como güindous y mac.
Esta es la solución que encontre:
- Suponiendo que el código fuente document.cfdg se encuentra en el directorio_actual, y que tenemos la siguiente estructura de directorios:
directorio_actual
|
+----animation
|
+-----frames - Instalar las herramientas de consola ffmpeg y convert.
- Generar los cuadros de nuestra animación, en mi caso 50, con la siguiente línea:
cfdg -w 500 -h 500 document.cfdg ./animation/art.png -a 500
- Como el cfdg solo genera imágenes png y ffmpeg (que convierte una secuencia de imágenes en video) sólo acepta imágenes jpg, realizamos la conversión de las imágenes con la siguiente línea:
cd animation
convert * ./frames/anima.jpg - Generamos el video con el comando ffmpeg:
cd frames
ffmpeg -f image2 -i anima-%d.jpg video.mpeg
sudo apt-get install ffmpeg
¡Listo!, ya tenemos una animación de nuestro programa.
Cómo escribir programas para tu graficadora TI
En el sitio oficial de TIGCC puedes encontrar todo lo que necesitas para escribir un programa en lenguaje C y compilarlo para generar un ejecutable en ensamblador. Los modelos soportados son TI-89, TI-92 Plus y Voyage200.
¿Qué es lo que hay que hacer?
- Bajar el compilador TIGCC v0.96 Beta 8 que incluye un IDE.
- Bajar el emulador TIEmu que nos permitirá probar nuestros programas antes de descargalo.
- Instalar TI Connect, el software de enlance entre la PC y la graficadora TI, de la página de Texas Instruments.
- Descargar la imagen del ROM (Voyage200_OS209.img) del modelo de tu graficadora o simplemente crear una copia de tu propio ROM.
- Antes de lanzar el emulador, la ventana “Set ROM version” aparecerá y debes añadir la imagen del ROM para que luzca como en la siguiente imagen.

En la página oficial podrás encontrar manuales, tutoriales, ejemplos y demás…
Nota: ¡un conocimiento básico del lenguage C sería de gran ayuda!
Les dejo esta implementación del algoritmo de Floyd para hallar el camino mínimo entre todos los pares de vértices de un grafo ponderado.
#define USE_TI92PLUS // Compile for TI-92 Plus
#define USE_V200 // Compile for V200
#define OPTIMIZE_ROM_CALLS // Use ROM Call Optimization
#define MIN_AMS 100 // Compile for AMS 1.00 or higher
#define SAVE_SCREEN // Save/Restore LCD Contents
#include <tigcclib.h> // Include All Header Files
#define INF 1000
int N;
void print(int (*A)[N],int k){
clrscr();
printf("It: %d\n",k+1);
int i,j;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
if (i==j)
printf(" -");
else if( A[i][j] > 500)
printf(" i");
else
printf ("%3d", A[i][j]); // print out the matrix
printf ("\n");
}
}
void _main (void)
{
clrscr ();
printf ("# de nodos: ");
scanf("%d",&N);
printf("\n");
int (*A)[N] = NULL;
int (*S)[N] = NULL;
int i,j,k;
A = calloc (N, sizeof (*A));
S = calloc (N, sizeof (*S));
//inicializacion
for (i = 0; i < N; i++){
for (j = 0; j < N; j++){
S[i][j] = j;
if (i==j)
A[i][j] = INF;
else{
printf("e[%d][%d]?",i,j);
scanf("%d",&A[i][j]);
printf("\n");
if (A[i][j] < 0)
A[i][j] = INF;
}
}
}
for (k=0; k<N; k++){
for(i=0; i<N; i++){
for(j=0; j<N; j++){
if(A[i][k] + A[k][j] < A[i][j]){
A[i][j]= A[i][k] + A[k][j];
S[i][j]= k;
}
}
}
print(A,k);
ngetchx();
}
free (A);
ngetchx();
clrscr();
print(S,-1);
free(S);
ngetchx();
}
Este es el grafo que representa un instancia del problema

D1 representa la matriz de adyacencia del grafo, dónde el símbolo de infinito y el guión indican que no existe una conexión entre el par de nodos Dij. La matriz D4 representa los pesos/distancias mínimas entre cualquier par de nodos.

Así es como se introduce la matriz de adyacencia, los infinitos se representan con -1 y la diagonal simplemente no se solicita.

El programa muestra cada una de las iteraciones del algoritmo, esta es la última de ellas.

Los ejecutables en ensamblador, que se generan en la misma carpeta del proyecto, son estos TI-89, TI-92 Plus y Voyage200.
Nota: Para realizar la sincronización y el lanzamiento del programa deberás consultar el manual de tu graficadora.
Actualiza tu WordPress 2.8.4 por seguridad
Recientemente fue descubierto un “talón de Aquiles” en el tema de seguridad de WordPress, ya que se detectó que una URL especial podía permitir al atacante, un usuario registrado del blog, pida una nueva contraseña que con un bug de seguridad en lugar que su contraseña sea reseteada, la que se resetea es la del administrador.
La nueva contraseña es enviada sólo al correo electrónico del administrador, no es un problema demasiado grave, sólo que resulta incómodo estar cambiando cada rato la contraseña y además que por este problema no se puede tener acceso remoto al blog.
Al leer esta notica del blog de byte (por cierto el podcast es muy bueno), me dí a la tarea de actualizar mi wordpress. Pensé que sería una tarea engorrosa pero al final del día se trata de unos pocos y sencillos pasos.

Suponiendo que los archivos del viejo wordpress se encuentran en la ruta httpdocs/blog/
- Descargar la nueva versión de WordPress 2.8.4 y descomprimirlo (se creará una carpeta /wordpress).
- Loguearse como administrador y desactivar todos los plugins (deberán ser reactivados uno a uno al termino de la actualización).
- Copiar el contenido (ojo, solo los archivos) de la carpeta /wordpress a la ruta del wordpress viejo /httpdocs/blog/. Tener cuidado de conservar el archivo wp-config.php.
- Eliminar lar carpetas wp-admin y wp-includes del wordpress viejo.
- Copiamos las carpetas wp-admin y wp-includes de /wordpress a /httpdocs/blog/.
- La carpeta wp-content debe tratarse con cuidado, copiamos la carpeta wp-content a /httpdocs/blog/, teniendo cuidado de mantener los viejos plugins y temas (carpetas /httpdocs/blog/wp-conten/themes/ y /httpdocs/blog/wp-content/plugins/).
Para más detalles: seguir la guía de la página oficial de WordPress.
Publica automáticamente en twitter las entradas de tu blog

¡Por fin encontré lo que estaba buscando! Twitterfeed es un sitio que te permite publicar en la cuenta de Twitter de forma automática las entradas de tu Blog. El único requisito es que el blog cuente con el servicio de RSS.
¿Cómo funciona?
1. Conectas tu cuenta de Twitter con Twitterfeed
2. Copias y Pegas el url del feed RSS en el Twitterfeed
3. Personalizas la configuración de como deseas que se publiqué en Twitter el RSS (Opcional).
Este es el panel de control:

¿Es genial no creen?
OpenGL en Ubuntu
Para compilar programas que utilicen openGL, necesité instalar primero
El build-essential instalará las cosas que necesitas para compilar c++ y usar los makefiles. Por otro lado freeglut3-dev te proporcionará las bibliotecas que necesitas para crear programas openGL.
Inspiración

Este ejemplo crea un humanoide utilizando paralelepipedos que puedes girar y escalar con las letras ‘w’, ‘a’, ’s’ y ‘z’, la combinación de cualquiera de estas letras con la tecla
//#include <Windows.h>
#include <GL/glut.h>
#include <cstdlib>
//sample input:
// {1, 1, -1},{1, 0, -1},{1, 0, 0},{1, 1, 0}
// {0, 1, -1},{0, 0, -1},{0, 0, 0},{1, 0, 0}
// We are using the Standard Template Library namespace
using namespace std;
#define VERTICES 8
#define FACES 6
float angleX = 0.0f;
float angleY = 0.0f;
float angleZ = 0.0f;
float transZ = -10.0f;
float g_fCubeCoords[8][3];
void initGraphics(int argc, char* argv[]);
void startRendering();
void reshape(int w, int h);
void keyboard(unsigned char key, int x, int y);
void display();
void dibujaCubof(float width,float height, float depth){
//calcula 8 vertices
double mid_w= width/2.0, mid_h=height/2.0, mid_d=depth/2.0;
g_fCubeCoords[0][0]= mid_w;g_fCubeCoords[0][1]= mid_h;g_fCubeCoords[0][2]= mid_d;
g_fCubeCoords[1][0]= mid_w;g_fCubeCoords[1][1]= mid_h;g_fCubeCoords[1][2]=-mid_d;
g_fCubeCoords[2][0]= mid_w;g_fCubeCoords[2][1]=-mid_h;g_fCubeCoords[2][2]=-mid_d;
g_fCubeCoords[3][0]= mid_w;g_fCubeCoords[3][1]=-mid_h;g_fCubeCoords[3][2]= mid_d;
g_fCubeCoords[4][0]= -mid_w;g_fCubeCoords[4][1]= mid_h;g_fCubeCoords[4][2]= mid_d;
g_fCubeCoords[5][0]= -mid_w;g_fCubeCoords[5][1]= mid_h;g_fCubeCoords[5][2]=-mid_d;
g_fCubeCoords[6][0]= -mid_w;g_fCubeCoords[6][1]=-mid_h;g_fCubeCoords[6][2]=-mid_d;
g_fCubeCoords[7][0]= -mid_w;g_fCubeCoords[7][1]=-mid_h;g_fCubeCoords[7][2]= mid_d;
glBegin(GL_QUADS);
/// Front face
glVertex3fv(g_fCubeCoords[0]); glVertex3fv(g_fCubeCoords[1]);
glVertex3fv(g_fCubeCoords[2]); glVertex3fv(g_fCubeCoords[3]);
/// Back face
glVertex3fv(g_fCubeCoords[4]); glVertex3fv(g_fCubeCoords[5]);
glVertex3fv(g_fCubeCoords[6]); glVertex3fv(g_fCubeCoords[7]);
/// Left face
glVertex3fv(g_fCubeCoords[0]); glVertex3fv(g_fCubeCoords[3]);
glVertex3fv(g_fCubeCoords[7]); glVertex3fv(g_fCubeCoords[4]);
/// Right face
glVertex3fv(g_fCubeCoords[1]); glVertex3fv(g_fCubeCoords[5]);
glVertex3fv(g_fCubeCoords[6]); glVertex3fv(g_fCubeCoords[2]);
/// Top face
glVertex3fv(g_fCubeCoords[0]); glVertex3fv(g_fCubeCoords[4]);
glVertex3fv(g_fCubeCoords[5]); glVertex3fv(g_fCubeCoords[1]);
/// Bottom face
glVertex3fv(g_fCubeCoords[3]); glVertex3fv(g_fCubeCoords[2]);
glVertex3fv(g_fCubeCoords[6]); glVertex3fv(g_fCubeCoords[7]);
glEnd();
}
int main(int argc, char* argv[])
{
initGraphics(argc, argv);
startRendering();
return 0;
}
void initGraphics(int argc, char* argv[])
{
glutInit( &argc, argv ); // Start GLUT with command line arguments
glutInitDisplayMode( GLUT_DOUBLE | GLUT_RGB ); // Set up the display mode
glutInitWindowSize( 500, 500 ); // Set window init size
glutInitWindowPosition( 0, 0 ); // Set window init position
glutCreateWindow( "Humanoide con cubos" ); // Create the window with the string as its name
// GLUT rendering functions
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
glutDisplayFunc( display ); // Set up pointer functions
}
void startRendering()
{
glEnable(GL_DEPTH_TEST);
// Start rendering
glutMainLoop();
}
void reshape(int w, int h)
{
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(100.0f, (GLfloat)w/(GLfloat)h, 0.1, 100);
}
void display()
{
static int i = 0;
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPushMatrix();
glTranslatef(0.0f, 0.0f, transZ);
glRotatef(angleX, 1.0f, 0.0f, 0.0f);
glRotatef(angleY, 0.0f, 1.0f, 0.0f);
glRotatef(angleZ, 0.0f, 0.0f, 1.0f);
//torso
glColor3f(.3,.9,0);
dibujaCubof(3,4,1);
//pierna izquierda
glColor3f(0.0f,0.5f,0.1f);
glTranslatef (1,-3.5,0);
dibujaCubof(1,3,1);
//pierna derecha
glTranslatef(-2,0,0);
dibujaCubof(1,3,1);
//espinillas
glTranslatef(0,-3,0);
dibujaCubof(1.5,3.5,1.5);
glTranslatef(2,0,0);
dibujaCubof(1.5,3.5,1.5);
//PIES
glColor3f(1,1,1);
glTranslatef(.25,-2,.25);
dibujaCubof(2,.5,2);
glTranslatef(-2.5,0,0);
dibujaCubof(2,.5,2);
//cabeza
glTranslatef(1.25,11.5,0);
dibujaCubof(2,2,2);
//brazos
glColor3f(0.0f,0.5f,0.1f);
glTranslatef(2.75,-2,-.25);
dibujaCubof(2.5,1,1);
glTranslatef(-5.5,0,0);
dibujaCubof(2.5,1,1);
//codos
glColor3f(1,1,1);
glTranslatef(-1.75,0,0);
dibujaCubof(1,1.4,1.4);
glTranslatef(9,0,0);
dibujaCubof(1,1.4,1.4);
//manos
glColor3f(0.0f,0.5f,0.1f);
glTranslatef(1,0,0);
dibujaCubof(1,1,1);
glTranslatef(-11,0,0);
dibujaCubof(1,1,1);
glPopMatrix();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
switch(key)
{
case 27:
exit(0);
case 'w':
angleX += 1.0f;
break;
case 'W':
angleX -= 1.0f;
break;
case 's':
angleZ += 1.0f;
break;
case 'S':
angleZ -= 1.0f;
break;
case 'a':
angleY += 1.0f;
break;
case 'A':
angleY -= 1.0f;
break;
case 'z':
transZ += 0.1f;
break;
case 'Z':
transZ -= 0.1f;
break;
default:
break;
}
glutPostRedisplay();
}
Para compilar y ejecutar el ejemplo ‘humanoide.cpp’ utilizamos este par de línea.
./humanoide
Cómo instalar Semantic Web Builder (SWB)

Lo primero que hay que hacer es visitar la página oficial de SWB y leer el manual de instalación. Este post solo pretende detallar algunos pasos de este manual.
Necesitarás instalar:
- El Kit de desarrollo de Java 1.6 (JDK por sus siglas en inglés): Java SE Development Kit 6u15.
- El Manejador de Bases de Datos Mysql.
- El Apache Tomcat 6.x.
- El archivo war SWB.
Ahora empezamos la instalación:
Creamos la base de datos que requiere swb:
mysql>>create database swb;
Descomprimos el apache-tomcat en el directorio /opt/
- Abrimos un nautilus como root
- Descomprimos el .tar en el directorio /opt/ y cambiamos los permisos como en el manual.
Configuramso los archivos server.xml y catalina.sh
- Editamos el archivo /opt/apache-tomcat-versión/conf/server.xml. Así quedo mi archivo (sin los comentarios):
- Editamos el archivo /opt/apache-tomcat-versión/bin/catalina.sh. Así quedo mi archivo (segmento del archivo):
#!/bin/sh
JAVA_HOME=/usr/jdk1.6/jdk1.6.0_15; export JAVA_HOME
CATALINA_OPTS="-Xms256m -Xmx1024m -Xss256k"; export CATALINA_OPTS
....
if [ -z "$LOGGING_MANAGER" ]; then
JAVA_OPTS="$JAVA_OPTS -DiConsultora -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager"
else
JAVA_OPTS="$JAVA_OPTS $LOGGING_MANAGER"
fi
....
<Server port="8025" shutdown="SHUTDOWN">
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- JMX Support for the Tomcat server. Documentation at /docs/non-existent.html -->
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<GlobalNamingResources>
<Resource name="UserDatabase" auth="Container"
type="org.apache.catalina.UserDatabase"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname="conf/tomcat-users.xml" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
</Host>
</Engine>
</Service>
</Server>
Configuramos el WebBuilder
- Descomprimimos el swb.war en la ruta /opt/apache-tomcat-versión/webapps/ y le damos los permisos.
- Editamos el archivo /opt/apache-tomcat-6.0.18/webapps/swb/WEB-INF/classes/db.properties. Si usamos Mysql, queda como sigue (segmento del archivo):
...
drivers=org.gjt.mm.mysql.Driver
swb.url=jdbc:mysql://localhost:3306/swb
swb.maxconn=200
swb.user=root
swb.password=tu_password
swb.idle_time=900
#drivers=org.hsqldb.jdbcDriver
#swb.url=jdbc:hsqldb:mem:swbmemdb
#swb.url=jdbc:hsqldb:file:{apppath}/WEB-INF/db/hsqldb/swb
#swb.maxconn=50
#swb.user=SA
#swb.password=
#swb.idle_time=900
...
Levantar SemanticBuilder
Basta ejecutar este para de comandos en este orden:
/opt/apache-tomcat-version/logs/tail –f catalina.out
Una ejecución correcta debe mostrar la siguiente salida:
2009-08-09 21:30:32,113 OFF - Initializing VirtualHostFilter...
2009-08-09 21:30:32,119 OFF - Initializing SemanticWebBuilder Base...
2009-08-09 21:30:32,119 OFF - -->AppicationPath: /opt/apache-tomcat-6.0.20/webapps/swb/
2009-08-09 21:30:32,120 OFF - -->Default Encoding: UTF8
2009-08-09 21:30:32,121 OFF - Initializing SemanticWebBuilder Platform...
2009-08-09 21:30:32,122 OFF - -->SemanticWebBuilder Version: 4.0.0.0
2009-08-09 21:30:32,122 OFF - -->Java Version: 1.6.0_15-b03
2009-08-09 21:30:32,122 OFF - -->Java Memory: 266403840
2009-08-09 21:30:32,134 OFF - Initializing DBConnectionManager...
2009-08-09 21:30:32,378 OFF - Initializing SemanticMgr...
2009-08-09 21:30:35,442 OFF - Initializing SemanticWebBuilder Context...
2009-08-09 21:30:35,464 OFF - Initializing SemanticWebBuilder Portal...
***********UserRepository***************
***********UserRepository***************
2009-08-09 21:30:35,504 OFF - Initializing SWBUserMgr...
2009-08-09 21:30:35,507 OFF - Initializing SWBMonitor(500,5s)...
2009-08-09 21:30:35,514 OFF - Initializing SWBResourceMgr...
2009-08-09 21:30:35,516 OFF - Initializing SWBResourceCachedMgr: 100
2009-08-09 21:30:35,518 OFF - Initializing SWBResourceTraceMgr...
2009-08-09 21:30:35,537 OFF - Initializing PFlowManager...
2009-08-09 21:30:35,544 OFF - Initializing SWBTemplateMgr...
2009-08-09 21:30:35,545 OFF - Initializing SWBServiceMgr...
2009-08-09 21:30:35,552 OFF - initializing DBAdmLog
2009-08-09 21:30:35,554 OFF - Initializing SWBMessageCenter...
2009-08-09 21:30:35,562 OFF - Initializing SWBAccessLog...
2009-08-09 21:30:35,576 OFF - Initializing SWBAccessIncrement...
2009-08-09 21:30:35,576 OFF - Initializing SWBIndexMgr
2009-08-09 21:30:35,622 OFF - SWBRuleMgr Initialized...
2009-08-09 21:30:35,779 OFF - -->Admin Files in Memory: 5446
2009-08-09 21:30:35,787 OFF - Initializing InternalServlet Distributor...
2009-08-09 21:30:35,787 OFF - Initializing InternalServlet Login...
2009-08-09 21:30:35,787 OFF - Initializing InternalServlet Login...
2009-08-09 21:30:35,821 OFF - Initializing RepositoryManagerLoader ...
2009-08-09 21:30:35,821 OFF - Adding RepositoryManager with class org.semanticwb.repository.SWBRepositoryManager ...
2009-08-09 21:30:35,837 OFF - Initializing repository with namespace http://www.semanticwb.org/repository# ...
2009-08-09 21:30:35,888 OFF - Initializing SWBOfficeManager ...
2009-08-09 21:30:35,889 OFF - Type of office content swboffice:OfficeContent Contenido Básico
2009-08-09 21:30:35,889 OFF - Initilizing SWBRepositoryManager with repository Semantic INFOTEC WebBuilder 4.0 Repository ...
2009-08-09 21:30:35,889 OFF - Initializing GatewayOffice...
2009-08-09 21:30:35,889 OFF - Adding mappingType OfficeDocument...
2009-08-09 21:30:35,889 OFF - Adding mappingType OfficeApplication...
2009-08-09 21:30:35,932 OFF - Initializing InternalServlet Upload...
2009-08-09 21:30:35,934 OFF - Initializing InternalServlet EditFile...
2009-08-09 21:30:35,936 OFF - Initializing InternalServlet UploadFormElement...
2009-08-09 21:30:35,938 OFF - Initializing InternalServlet FrmProcess...
2009-08-09 21:30:35,940 OFF - SemanticWebBuilder started...
2009-08-09 21:30:35,940 OFF - ************************************
2009-08-09 21:30:37,830 INFO - Logging using commons-logging.
2009-08-09 21:30:37,881 INFO - retrieved system configuration file: java.io.ByteArrayInputStream@e5f0d2
2009-08-09 21:30:37,900 INFO - Creator 'pageflow' not loaded due to ClassNotFoundException. This is only an problem if you wanted to use it. Cause: Beehive/Weblogic Creator not available.
2009-08-09 21:30:37,961 INFO - Creator 'script' not loaded due to NoClassDefFoundError. This is only an problem if you wanted to use it. Cause: org/apache/bsf/BSFException
2009-08-09 21:30:38,362 INFO - Found Hibernate3 class: org.hibernate.Hibernate
09-ago-2009 21:30:38 org.apache.coyote.http11.Http11Protocol start
INFO: Arrancando Coyote HTTP/1.1 en puerto http-80
09-ago-2009 21:30:38 org.apache.jk.common.ChannelSocket init
INFO: Port busy 8009 java.net.BindException: Address already in use
09-ago-2009 21:30:38 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8010
09-ago-2009 21:30:38 org.apache.jk.server.JkMain start
INFO: Jk running ID=1 time=0/28 config=null
09-ago-2009 21:30:38 org.apache.catalina.startup.Catalina start
INFO: Server startup in 7663 ms
2009-08-09 21:32:16,607 OFF - ContextPath:/swb
Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
Seam Framework: Hola Mundo
Seam es un framework web que hace el desarrollo de aplicaciones web más sencillo. Ya que se han vuelto un estándar con Java EE 5, Seam hace un extensivo uso de las anotaciones para ayudarnos a lograr este objetivo. El uso de las anotaciones en Seam no elimina por completo la necesidad de configurar archivos XML. Sin embargo, la reduce enormemente comparado con otros frameworks como Spring, Struts o JSF. Seam incluye una completa integración con la biblioteca de componentes RichFaces. RichFaces proporciona muchos componentes de interfaces de usuario.
Inspiración

- Lo primero que hay que hacer es instalar JBoss, lo bajamos de esta liga http://www.jboss.org/jbossas/downloads/, yo bajé la versión 5.0.0.GA (con el nombre JBoss-5.0.0.GA.zip). Luego descomprimimos y ejecutamos [jboss_home]/bin/run.sh en Linux.
- El segundo paso es descargar Seam de este enlace http://seamframework.org/Download (jboss-seam-2.2.1.GA.zip) y descomprimirlo.
Después modificamos el archivo [seam_home]/build.properties y agregamos la línea
jboss.home=[seam_home] - Ejecutamos una aplicación de ejemplo. Abrimos la terminal y nos pasamos a este directorio [seam_home]/examples/numberguess y escribimos ant deploy para construir la aplicación y desplegarla en el servidor.
- Por último, abrimos un navegador y escribimos la siguiente dirección http://localhost:8080/seam-numberguess.
#Fri Jun 05 16:18:54 CDT 2009
qualifier=
mavenized=false
jboss.home=/home/dennys/Escritorio/jboss-5.0.0.GA
Twitter integrado en Pidgin

El plugin microblog-purple permite integrar un cliente twitter a tu Pigdin, con el que podrás leer los mensajes más recientes y postear, todo como si se tratase de un chat.
En Ubuntu Intrepid, añadimose al repositorio (Sistema -> Administración -> Orígenes del software) la siguiente línea:
Después de recargar la lista de paquetes, instalamos con la siguiente línea:
Basado en este post
¿Cómo eliminar la contraseña de tus archivos PDF?
Solo si conoces el password del PDF del que quieres eliminarlo, puedes usar la herramienta de línea de comandos pdftops y ps2pdf para liberar tu PDF de sus cadenas.

1. Instala pdftops. En Ubuntu, puedes escribir:
2. Instala ps2pdf (parece que ya se incluye por default en Ubuntu)
3. Convierte el PDF a un archivo postscript, usando el password:
4. Convierte el postscript resultante (file.ps) de regreso a un PDF:
Post original @townx
Esta fue la forma larga, si no les funciona pueden probar con qpdf,
1. Instalan con la línea:
2. Eliminan la contraseña con:
