Buscar

Cargando...

jueves 19 de enero de 2012

Como usar AjaxPro con JQuery

En uno de mis proyectos tengo configurado AjaPro con ASP.Net, ya es tiempo de actualizar dicho código, pues tiene más de tres años, así que me dí a la tarea de configurar la versión más reciente que pudiera encontrar de AjaxPro y JQuery.

Requerimientos:
  • AjaxPro: el proyecto está un poco descuidado y en su sitio en codeplex, el autor no ha hecho actualizaciones desde el 2009. La última versión estable es la 9.2.17.1 al momento de redactar este post.
  • JQuery: la versión más reciente al momento es la 1.7.1
  • ASP.Net (.Net Framework): Estoy usando la versión 3.5 del .net framework para este proyecto.

Pasos para usar AjaxPro con JQuery en ASP.Net:
1. Descargamos AjaxPro desde aquí, los descomprimimos y lo agregamos al proyecto ASP.Net.

2. Creamos una clase sensilla para probar por ejemplo las siguiente:



3. Creamos una pagina aspx para probar que lo anterior funciona bien, a continuación un ejemplo:

 Nota: estoy usando head.js para cargar jquery.

Si todo está bien, deberemos ver una alerta mostrando el mensaje "Hello World!".


Algunas páginas que consulté y me ayudaron a hacer funcionar todo son esta y esta otra.
Les recomiendo también el siguiente enlace, donde pueden ver las características principales de AjaxPro y por supuesto el sitio de jquery.

Hasta la próxima.

miércoles 11 de enero de 2012

Metodos de extension en C#

Hace algún tiempo que vengo trabajando con C# y he visto algo que en mi opinión es bastante útil y se llama métodos de extensión. Por medio de estos métodos podemos hacer algo como lo que ofrece Ruby y extender las interfaces de las clases que vienen incluidas como parte del .Net framework.

Veamos algunos ejemplos donde esto puede ser útil.
1. Extendiendo linq, supongamos que queremos calcular el hash de una cadena, podemos definir un método de la siguiente forma para obtener el hash md5


2.  Leer los AppSettings (xml) de una aplicación.


¿Qué hay de malo con los ejemplos?
Como estos son ejemplos simples no mucho en realidad, pero en ejemplo 1 se podría reusar la lógica de conversión de byte a hexadecimal y en el ejemplo 2 en todos lados donde se use la función GetAppSetting debemos saber exactamente que cadena hay que pasar como parámetro para obtener el setting deseado y si por si acaso alguien escribe mal la llave (key) la aplicación fallará pues la función GetAppSetting retornará null.

Pues bien mejoremos el código
Voy a crear una sola clase con mis métodos de extensión, sin embargo ustedes pueden separar todo en varias clases según sea necesario.

Nota: Del ejemplo anterior pueden ver que tengo una clase y un enum definidos. La clase define los métodos de extensión mientras que el enum es usado para simplificar el código de acceso a las configuraciones, veamos como quedan las las funciones que vimos antes:

Ejemplo 1:

Nota: Como pueden ver aquí, la función en si misma se hace más simple y de ahora en adelante donde sea que tengamos una instancia de IEnumerable podemos llamar al método ToHexString .
Muchas cosas puede usarse como instancias de IEnumerable, un arreglo, una lista, una colección (ICollection), etc.

Ejemplo 2:

Nota:  Ahora en la función delegamos el acceso a los AppSettings a nuestro enum, de esta forma existe un solo lugar donde se leen los mismo y eliminamos la necesidad de mantener una cadena o una constante  aparte solo para el nombre de una configuración. Ademas con esta solución podemos usar el autocompletado de nuestro IDE favorito.

Administrando e investigando problemas en ubuntu one

Tratando de hacer que una pc sincronice varios archivos con Ubuntu One (U1) me topé con problemas, los archivos no se estaban cargando, por lo que decidí buscar una forma de vigilar el trabajo de sincronización y ver la causa del problema.

Despues de buscar un rato encontré en askubuntu un par páginas con información muy útil:
  1. http://askubuntu.com/questions/16592/how-can-i-tell-whether-ubuntu-one-file-sync-is-working-and-what-progress-it-is
  2. http://askubuntu.com/questions/61471/ubuntu-one-state-still-processing-process-sleeping-not-transfer-uploads-downlo
De lo anterior me parece muy interesante que existe una herramienta para manejar U1 desde la consola llamada u1sdtool  y que los archivos de log de  U1 están en la carpeta
~/.cache/ubuntuone/log/
Para más detalles sobre como usar u1sdtool pueden consultar el manual:
man u1sdtool

Revisando el log ~/.cache/ubuntuone/log/status.log vi varios mensajes indicando que la conexión era adquirida y luego perdida. Sospecho que algo no se cargó bien, quizás como actualicé la pc el servicio de  U1 necesita reiniciarse:
u1sdtool --quit
u1sdtool --start

Luego ejecuté el siguiente comando para ver el estatus de U1:
u1sdtool --status
Del comando anterior veo una respuesta parecida a los siguiente,  que indica que todo funciona correctamente :
State: QUEUE_MANAGER
    connection: With User With Network
    description: processing the commands pool
    is_connected: True
    is_error: False
    is_online: True
    queues: WORKING
Y revisando el archivo ~/.cache/ubuntuone/log/status.log veo el siguiente mensaje:
2012-01-11 10:48:21,814 - ubuntuone.status - DEBUG - notification shown: «PICT0127.JPG» y 3513 archivos más se se están subiendo a su nube personal.
En ell archivo ~/.cache/ubuntuone/log/syncdaemon.log podemos ver con más detalle el progreso de la sincronización

Ahora sí todo funciona como debería.

Espero que esto les sirva de algo si tienen problemas con su U1 en algún momento.

Hasta la próxima.