martes, 22 de marzo de 2011

Proyectos Opensource de Adobe

Talvez pocos son los que conocen de la existencia de una rama opensource en la empresa Adobe. Para sorpresa de algunos Adobe tambien apuesta por el software libre pero asu manera.
Algunos de estos proyectos libres personalmente los uso para el desarrollo de aplicaciones Flash, Air.
Uno de esos proyectos que mas uso es Alchemy que me permite convertir librerias escritas en ANSI C en codigo actionscript 3, ademas flex sdk que me permite desarrollar aplicaciones flash.
La web opensource de adobe
La lista completa de sus proyectos opensource
Publicare algunos ejemplos sobre alchemy en algun nuevo post ya que me parece el mas interesante de sus proyectos.

domingo, 20 de marzo de 2011

Silenciar el pitido que emite la computadora

Aveces es molestoso escuchar el pitido que emite el parlante de la computadora cuando se esta en un terminal y se esta usando el tabulador o se cometio algun error al digitar.
Con este par de comandos(para modo consola y entorno grafico) se silencia el pitido:

setterm -blength 0
xset -b

sábado, 19 de marzo de 2011

Variables de entorno para instalaciones personalizadas

Si esta copilando e instalando nuevas librerias y programas pero no quiere que estas sobreescriban versiones existentes en su sistema operativo Unix. Puede crear una nueva estructura de directorios para instalarlas ahi por ejemplo:
mkdir $HOME/cualquierpath
mkdir $HOME/cualquierpath/bin
mkdir $HOME/cualquierpath/sbin
mkdir $HOME/cualquierpath/lib
mkdir $HOME/cualquierpath/etc
mkdir $HOME/cualquierpath/share
mkdir $HOME/cualquierpath/include

Ahora puede copilar su libreria indicandole donde tiene que instalarlo, para ello es necesario que tenga generado el archivo configure y pasarle la variable siguiente:
./configure --prefix=$HOME/cualquierpath
make ; make install
Para la ejecucion del nuevo programa instalado es necesario modificar la variable de entorno PATH y LD_LIBRARY_PATH
PATH=$HOME/cualquierpath/bin:$PATH
LD_LIBRARY_PATH=$HOME/cualquierpath/lib miprograma

viernes, 18 de marzo de 2011

Drupal 7 y mongodb

Drupal 7 no trae por defecto integracion con la base de datos no relacional mongodb, en el proceso de instalacion solo son mostrados mysql, postgres entre otras, pero en ningun momento de la instalacion aparece mongodb.
La unica forma de poder usar mongodb en drupal 7 es atravez del modulo mongodb pero solo permite la sustitucion de algunas tablas/registros de las bases de datos relacionales como "_watchdog" como lo indica su documentacion:

  • D7: mongodb_cache: Store cache items in mongodb.
  • D7: mongodb_field_storage: Store the fields in mongodb.
  • D7: mongodb_session: Store sessions in mongodb.
  • D6/D7: mongodb_watchdog: Store the watchdog messages in mongodb. Note this needs a core patchapplied or it will create a separate collection for every 404 message. It breaks some unimportant functionality, read the issue on why it was rolled back.
  • D6/D7: mongodb: support library for the other modules
  • D7: mongodb_block: Store block information in mongodb. Very close to the core block API.
  • D7: mongodb_queue: DrupalQueueInterface implementation using mongodb.
No se puede sustituir completamente mysql por ejemplo con mongodb y ademas es un problema tener en funcionamiento al mismo tiempo 2 bases de datos ya que perjudica el rendimiento en el servidor.


Fastcgi en apache

Para poder ejecutar programas o scripts en el servidor apache mediante el modulo fastcgi debe tener en cuenta algunas recomendacion.
Dependiendo de la version del servidor apache que este usando , es necesario activar el modulo mod_fcgid.so y configurar los virtual host en la configuracion de apache para poder ejecutar fastcgi.
En este caso solo se programara en C el ejemplo, tambien se puede usar otros lenguajes de programacion por ejemplo java, perl, tcl, etc.
Existen varios ejemplos que se pueden encontrar por internet pero la gran mayoria no funcionan, es necesario tener instalado la libreria fcgi lo puede obtener atravez de la herramienta que le proporciona su distribucion de linux o puede obtener el codigo fuente en este link http://mirror.star4u.org/ubuntu/pool/universe/libf/libfcgi/libfcgi_2.4.0.orig.tar.gz , en el codigo fuente existe ejemplos que solo hay que copilarlo y hacerlo funcionar.
Por ejemplo echo.c
/*****************************/

/*
* echo.c --
*
* Produce a page containing all FastCGI inputs
*
*
* Copyright (c) 1996 Open Market, Inc.
*
* See the file "LICENSE.TERMS" for information on usage and redistribution
* of this file, and for a DISCLAIMER OF ALL WARRANTIES.
*
*/
#ifndef lint
static const char rcsid[] = "$Id: echo.c,v 1.5 1999/07/28 00:29:37 roberts Exp $";
#endif /* not lint */

#include "fcgi_config.h"

#include

#ifdef HAVE_UNISTD_H
#include
#endif
extern char **environ;
#include "fcgi_stdio.h"


static void PrintEnv(char *label, char **envp)
{
printf("%s:
\n
\n", label);
for ( ; *envp != NULL; envp++) {
printf("%s\n", *envp);
}
printf("

\n");

}

int main ()
{
char **initialEnv = environ;
int count = 0;

while (FCGI_Accept() >= 0) {
char *contentLength = getenv("CONTENT_LENGTH");
int len;

printf("Content-type: text/html\r\n"
"\r\n"
"FastCGI echo"
"

FastCGI echo

\n"
"Request number %d, Process ID: %d

\n", ++count, getpid());


if (contentLength != NULL) {
len = strtol(contentLength, NULL, 10);
}
else {
len = 0;
}

if (len <= 0) {
printf("No data from standard input.

\n");

}
else {
int i, ch;

printf("Standard input:
\n
\n");
for (i = 0; i <>
if ((ch = getchar()) <>
printf("Error: Not enough bytes received on standard input

\n");

break;
}
putchar(ch);
}
printf("\n

\n");

}

PrintEnv("Request environment", environ);
PrintEnv("Initial environment", initialEnv);
} /* while */

return 0;
}
/*****************************/


Para copilarlo:
gcc -o echo.fcgi echo.c -lfcgi
Tenga en cuenta la extension del archivo (.fcgi) generado debe ser la que se configuro en el apache para poder ejecutar fastcgi.
Lo puede ejecutar en una consola el binario obtenido le mostrara una salida formateada en html, pero la forma correcta es atravez de un navegador web, ejecute http://midominio.com/echo.fcgi

Si tiene alguna duda, consulte la documentacion de fastcgi http://www.fastcgi.com/drupal/node/6



jueves, 17 de marzo de 2011

Shapado: Preguntas y respuestas un mar de bugs

Tenia que instalar en un VPS un sistema web de preguntas y respuestas, busque varios soluciones libres disponibles despues de testear varias opte por shapado hecho en ruby.
No se programar en ruby creo que este a sido un problema al tratar de hacer funcionar shapado, pero al final funciono pero no en la forma como queria.
Cuando se quiere programar en php al instalarlo en el servidor sus dependencias considero que son pocas, pero con ruby la cosa cambia radicalmente , desarrollar una aplicacion web si es que no se tiene experiencia puede ser un dolor de cabeza.
Recuerdo que tenia que instalar una gran cantidad de dependencias de ruby on rails lo cual a generado que ocupe mas espacio en disco y en un VPS puede traer problemas ya que hay limitacion de disco.
La integracion con el servidor apache es algo confuso no hay mucha documentacion, hay que instalar varios programas para que una aplicacion hecha en ruby funcione correctamente integrada con el servidor.
Lo interesante de Shapado es que usa una base de datos no relacional que es mongodb, bueno lo interesante acaba en la base de datos, ya que si se quiere que funcione shapado en el menor tiempo posible hay que ser un experto en este tema, su documentacion tambien es algo limitada, para hacerlo funcionar este tiene su propio servidor integrado y ademas tiene modos de funcionamiento segun recuerdo "desarrollo", "produccion" y otro mas .
Creia que en el modo de "produccion" era el que obviamente se tenia que usar para ponerlo en linea pero resulta que no es asi es parecido al mode de "desarrollo". En modo "produccion" genera logs innecesarios y ademas las respuestas del servidor son demasiados lentas.
Para ser usado realmente en "produccion" se debe de integrar con el apache y en este condiciones su funcionamiento trae menos problemas.
Shapado tiene varios bugs que ya estan documentados hace un buen tiempo pero no lo han corregido en sus ultimas versiones, como por ejemplo:
El manejo de tags , se debe de revisar los logs para darse cuenta que la sugerencia de tags no funciona y hay que parchar el codigo.
Cuando agregue los tags a su pregunta poner al final la coma correspondiente, si solo es un tag y no hay coma esta no sera procesada correctamente.
Su buscador no pagina bien , muestra los mismos resultados en cualquier pagina (1,2,3,4..).
Bajo ciertas condiciones shapado no concluye la peticion que esta solicitando el usuario y provoca un error 500 en el apache.
Si tiene la fortuna que su primera pregunta se ha colocada correctamente en la base de datos eso indica que se ahorro otro problema , shapado una vez instalado y funcionando no procesa correctamente la primera pregunta que se le agregue, aveces es necesario colocar preguntas y respuestas en modo "desarrollo" para que en modo "produccion" funcione correctamente.
De todos los bugs que he enumerado considero que el mas grave es cuando el servidor web envia un error al usuario indicando que hay problemas en la web.
En un VPS la memoria y espacio en disco son limitados(de acuerdo al plan que tenga) shapado consume en memoria entre 150 y 200 megas sin incluir el consumo de los demas procesos generados.

Wt C++ Web toolkit: Creando aplicaciones web con C++

Cuando se desarrolla aplicaciones web aveces no se toma en cuenta el rendimiento de la aplicacion , recien se considera este punto cuando nuestra web comienza a tener muchas visitas y se genera varios problemas en el servidor, peor aun si es un hosting compartido.
Decidi investigar como mejorar las aplicaciones web, para optimizar su uso de memoria y uso de la cpu y encontre este framework WT hecho completamente en C++.
Despues de leer su manual, compile y por fin logre tener un "Hola Mundo" que hice funcionar en el servidor web apache en Linux , el resultado fue algo fustrante , el famoso "Hola Mundo" hecho en WT ocupaba en promedio 64Kbytes , la respuesta del servidor web era algo lenta y lo mas problematico es que la aplicacion provocaba fallos en memoria "segment fault" y el proceso generado quedaba en estado "Zombi" lo cual le era imposible al apache eliminarlo y quedaba el proceso ocupando recursos del servidor.
Una pequeña aplicacion hecha en WT podia ocupar mas de 1mega y ademas sus dependencias como el boost consumian mas recursos y la poca estabilidad de estas aplicaciones podian provocar inestabilidad al servidor.
Solo realize pocas pruebas pero el resultado final no era lo que esperaba, no recomendaria WT para el desarrollo de aplicaciones web.