Archive for the ‘programación’ Category

Hoy he actualizado la versión de mi apache 2.2.4 a 2.2.8 en Windows Vista. La versión 2.2.8 fue lanzada en enero 19 de 2008. El procedimiento que seguí fue el siguiente:

  • Hacer un backup del fichero de configuración.
  • Des instalación del apache 2.2.4.
  • Instalación de apache 2.2.8. (Este procedimiento tal cual no instala adecuadamente el servicio de apache). La versión que me instalé es la que soporta ssl.

La instalación la hice desde una consola DOS de administrador ejecutando el instalador, para evitarme algún inconveniente como los sufridos en la primera instalación.

Como el servicio no se instaló correctamente, lo instalé de forma manual usando el comando:

c:’…’apache2.2’bin’httpd.exe -k install -n Apache2.2

Una vez instalado el servicio, intenté usar el monitor (que ahora si se ejecuta, el de la versión 2.2.4 daba un error) pero como sorpresa me llevo que tengo que ejecutarlo como administrador para poder parar y activar el servicio. . Así que por ahora voy a ponerle privilegios en el enlace simbólico que pone en el menú de inicio para que arranque el monitor. Si me da pegas al iniciar la máquina lo quito porque la verdad no lo necesito pues mantengo el servidor el 100% activo.

Nota: Hice esta instalación, porque vi en los logs de mi equipo varias entradas de caídas del apache. Espero que todo vaya bien.

Anuncios

Al utilizar Tinymce en PHP tenia un inconveniente al utilizar los enlaces y las imágenes que se creaban desde el editor avanzado. Con un poco de reingenieria me di cuenta que al sacar el contenido de la BD las url me quedaban con in "’" antes de las dobles comillas, aunque en la BD se encontraran sin la misma. Por ello, al sacar el contenido el editor se la pegaba.

Pasando el texto a la función stripcslashes de PHP, se eliminan estos backslash y el editor funciona de maravilla. Lo mismo que las imágenes. La versión de editor que uso es la 3.0.1 con el compresor de PHP.

Estoy un poco decepcionado o con mi capacidad de instalar y configurar las cosas de manera rápida o porque efectivamente algunas aplicaciones no van bien del todo.

Primero, phpGrouware, me instalé la última versión para debian y nada, da un error que no está documentado ni resuelto en ningún lado. Luego eGroupware, lo mismo, intento instalarlo en un debian y nada. Luego, ayer con el Gregarius, suena muy bien la aplicación, pero intenté instalarla con la configuración que tengo de php + mysql y solo me crea un conjunto de tablas a medias.

Por último, hoy intentando usar el wiki de eGroupware que tenemos en la oficina, no encuentro una forma práctica de colocar enlaces internos usando el editor avanzado. No me quiere deshabilitar el editor avanzado para hacerlo con sintaxis wiki y por último, intento probar las noticias y no van… esto es una locura. Estoy aburrido.

No pongo los enlaces porque no me apetece mucho

El control AdRotator de CSharp (C#) es una herramienta muy útil para generar publicidad rotativa de manera rápida. Se puede enganchar a una fuente de datos, configurarse dinámicamente o tomar los datos desde un fichero XML que cumpla con el esquema especificado para los ficheros de publicidad.

El único inconveniente que he encontrado hasta el momento es que si colocas varios controles seguidos con un conjunto de imágenes muy pequeño, enganchados desde la misma fuente de datos, los banners se repiten. Es decir, no tiene un mecanismo que guarde una memoria de la publicidad que se ha desplegado en la imagen a partir de la misma fuente de información.

Intenté modificar o cambiar dinámicamente los enlaces pero no he conseguido hacerlo. Si se construyen directamente en el código no hay un método que me permita recuperar la imagen asociada al banner una vez asignada la fuente. La única alternativa podría ser utilizar el evento de creación donde sí se recupera la imagen y la url asociada, pero si tengo que leer el fichero XML para cambiar la imagen y llevar el control manual de los que ya he sacado creo que puedo pasar del AdRotator. Si alguien sabe como "Agruparlos" los consejos serán bienvenidos.

La versión nueva de la clase HASH de Prototype 1.6R1C ha sido modificada, esta versión no es compatible con la usada en las versiones anteriores. Un caso práctico es lo relacionado con la creación y asignación de valores almacenados en una clase HASH. En mi caso, usaba la siguiente forma (Prototype 1.5.1)

var ph=new Hash({operacion:1,gm_modulo:0,gm_selectName:""});
//Inicializamos los valores a enviar
//reemplazar por los valores correspondientes
ph["operacion"]=1;
ph["gm_modulo"]=modulo;
ph[’gm_selectName’]=’listaFicheros’
En la nueva versión, hay que hacerlo así:

var ph=new Hash({operacion:1,gm_modulo:0,gm_selectName:""});
//Inicializamos los valores a enviar
//reemplazar por los valores correspondientes
ph.set"operacion",1);
ph.set"gm_modulo",modulo);
ph.set’gm_selectName’,’listaFicheros’

Usando los métodos set, get y unset de la clase para fijar (crear), obtener y quitar un elemento de la tabla HASH.

Lista de cambios.
Descargar Prototype 1.6R1C

TinyMCE Comprimido

En un desarrollo que estoy haciendo estoy usando TinyMCE un editor web avanzado de texto usado ampliamente en aplicaciones opensource. El tamaño de carga de la página midiendo solo los ficheros JS era de 489KB medida en el firebox mediante el plugin firebug, el cual sea del paso para mi es una herramienta fundamental para cualquier desarrollador de aplicaciones web.

Dado que el tinyMCE ocupaba un tamaño considerable decidi buscar la versión comprimida (aqui). Siguiendo unas sencillas instrucciones incorporé el script comprimido y el tamaño total de carga se redujo a 363KB, una reducción impresionante (un 26% menos). Haciendo un análisis de los ficheros, he encontrado que al cargar tiniMCE sin comprimir este carga los siguientes ficheros:

  • TinyMCE.js 147KB
  • Theme/es.js 5KB (no coloco todo el path)
  • TinyMCE/es.js 3K
  • editor_plugin.js 4K
  • advimage.js 2K

Al utilizar el compresor, se pone todo en un solo fichero llamado tiny_mce_gzip.js de tan solo 5KB. Se gana en menor tamaño y menos operaciones http.

La cuestión es muy simple, ejecutar Microsoft Visual Estudio 2005 como un usuario normal no vale para depurar, para ello toca ejecutar VS como administrador. Esto se llama…Tocarle los …. a los desarrolladores. Porque además, si estas como un usuario normal y silvestre el Visual Estudio te deja pone el botón de depuración, le das y pasa de todos los puntos de ruptura que pongas.

Para evitarse problemas de olvidarse a la hora de arrancarlo, asignele permisos de administrador a la aplicación, con eso te sigue preguntando luego… "Este programa necesita privilegios para ejecutarse"…. jolines.. no tiene memoria el Vista, si yo mismo se los di, para que me pregunta. :-).

A continuación una lista de las aplicaciones que he probado instalar en vista y se instalan correctamente desde línea de comandos desde una consola de administrador.

  • Mysql
  • apache 2
  • WinMerge.
  • DBDesigner.

Para ejecutar la consola en modo administrador vaya al menú de inicio de Vista, seleccione Accesorios, y pulse el botón derecho sobre la opción "simbolo del sistema" y seleccione la opción "Ejecutar como administrador". Luego, busque el binario de instalación y ejecútelo.

XnView es una herramienta de captura y conversión de imágenes excelente y muy útil para desarrolladores web. Es una aplicación que se ofrece como Freeware para uso privado con carácter no comercial o con propósitos educacionales o para organizaciones sin ánimo de lucro. Es una herramienta realmente sencilla de manejar y muy útil para realizar capturas de pantalla para incorporar a manuales de usuarios, wikies o blogs. Soporta mós de 400 formatos de imagen ofrece algunas utilidades como reescalado, rotación y cortado de imagen, etc. Xnview se ejecuta en Windows, MacOS X, Linux x86, Linux ppc, FreeBSD x86, OpenBSD x86, NetBSD x86, Solaris sparc, Solaris x86, Irix mips, HP-UX, AIX.

Captura

XnView puede ser descargado desde esta página y se instala fácilmente. La funcionalidad que más me gusta es la de captura de pantalla, para lo cual hay que hacer click en la imagen de la cámara y pulsar F10, Luego, con el mouse puedes seleccionar un área de la pantalla capturada y guardarla con el formato que desees. (Excelente para hacer documentación). Para los usuarios de windows vista, deben bajarse la última versión, porque la versión anterior se cuelga aunque la ejecute como distribuidor.

En esta página (http://mckoss.com/jscript/object.htm) pueden encontrar un buen tutorial sobre javascript orientado a objetos . En mi poca experiencia programando con orientación a objetos en javascript me he dado cuenta de la gran potencia que tiene y sobretodo para aquellos que realizamos programación OO en otros lenguajes como PHP, C# o Java, es muy adecuado seguir el mismo paradigma en la parte de cliente. Además, hoy en dia, muchas librerías de javascript como prototype, scriptaculous y otras vienen orientadas a objetos, con lo cual, si nuestra aplicación es OO, especificar la misma en diagramas UML es muy fácil.

De manera resumida, para programar una clase javascript lo primero que hay que elegir es el nombre (Ej. Usuario), definir una función para el constructor con el mismo nombre, y agregar los métodos y atributos. Para la creación de los métodos tres formas de hacerlo. La primera, declarar las funciones anidadas en la declaración de la función de la clase, la segunda, declarar una variable por cada función usando this.variable y asignarle una función existente, y la última, asignar los métodos a través del atributo prototype. Aqui pongo dos ejemplos básicos.

Declaración anidada de métodos

function Usuario(){

this.crear=function crear(nombre){

//codigo de la función

}

}

Métodos mediante atributos.

function Usuario(){

this.crear=crearUsuario;

}

function crearUsuario(nombre){

//codigo de la función

}

Declaración mediante prototype.

function Usuario(){

}

Usuario.prototype.crear=function crearUsuario(nombre){

//codigo de la función

}

Mis preferidos son: Declaración anidada de métodos cuando la cantidad de métodos no es mucha y en general son cortos. Y la tercera, para cuando la clase es demasiado grande.