June 2009 - Artículos
Hola que tal? ya habíamos hablado sobre JQuery + ASP.NET , y un día antes de la charla que tuve que dar sobre Gadget y Win7 , pensé “y que tal JQuery?”, y claro que si, se puede utilizar JQuery en Gadget, en este Post vamos a revisar como conectarnos a un WebService desde el Gadget mediante JQuery, el esquema sería el siguiente:
Para este ejemplo vamos a crear un WS el cual va a retornar un número aleatorio entre 0 y 100, de manera de servir como un indicador, en el escritorio, de algún proceso con acceso a recursos de servidor, además el WS va a tener un retardo de tiempo, esto con la intención de programar un “Cargando” en nuestro Gadget.
Para revisar como conectarse a un WS desde JQuery, te invito a revisar mi Post:
http://geeks.ms/blogs/gperez/archive/2009/05/13/invocando-asp-net-webservices-desde-jquery-con-notaci-243-n-json.aspx
El Código del Servicio Web
<WebMethod(Description:="Numero Aleatorio entre 0 y 100 ")> _ Public Function ObtNumero() As Integer
System.Threading.Thread.Sleep(3000)
Dim i As New System.Random
Return i.Next(0, 100)
End Function
Diseño del Gadget
El Gadget tiene un diseño Básico, en donde mostramos en un <span> el porcentaje (devuelto por el WebService) y un <span> en donde muestra el estado (cargando), junto a un gif animado que nos presenta un ajax loading.
El primer paso es configurar el Manifiesto XML, si quieres saber más sobre los manifiestos de Gadget puedes visitar:
http://msdn.microsoft.com/es-es/library/aa965879(VS.85).aspx
La idea del manifiesto setear los parámetros del Gadget, como nombre, descripción, imágenes, namespace, página htm de interfaz de usuario del gadget entre otras cosas.
Ahora veamos el código del Gadget
<script src="jquery-1.3.2.js" type="text/javascript"></script>
<script language="javascript">
$(document).ready(function() {
$("#estado").show();
cargaWS();
});
function cargaWS() {
$("#estado").show();
$.ajax({
type: "POST",
url: http://localhost:3568/Service1.asmx/ObtNumero",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(msg) {
AjaxOK(msg);
},
error: AjaxError
});
}
function AjaxOK(result) {
$("#texto").show();
$("#estado").hide();
texto.innerHTML = "<b>" + result.d + "%</b>";
setTimeout(cargaWS, 5000);
}
function AjaxError(result) {
$("#texto").show();
$("#estado").hide();
texto.innerHTML = " - Error – ";
setTimeout(appendDateToBody, 30000);
}
</script>
Utilizamos JQuery para la conexión al WS y para mostrar/ocultar los span según corresponda. Utilizamos setTimeout para realizar la llamada al WS cada cierto tiempo (5 segundos si esta todo bien, 30 segundos si hay un error). Puedes ver un muy buen artículo sobre setInterval y setTimeout aca:
http://weblogs.asp.net/bleroy/archive/2009/05/14/setinterval-is-moderately-evil.aspx
Vista del Diseño del Gadget (desarrollado con Visual Web Developer Express)
Como decíamos, es simplemente una página web, y vamos a dejar dentro de una tabla los span para mostrar la información al usuario.
Y Listo!, ya tenemos nuestro Humilde Gadget conectándose a un WS y con un indicador de carga!
Si quieres el código e imágenes del Gadget lo puedes descargar acá:
Puedes buscar más artículos relacionados en este blog sobre gadget pinchando:
http://geeks.ms/blogs/gperez/search.aspx?q=gadget
Espero que te sirva!
Saludos,
Gonzalo
Hola!
Acabo de ver en
http://www.microsoft.com/latam/windows/7x7/
Que ya está publicado mi ScreenCast, se me enredó un poco el habla, jejejej y como anécdota, como mi casa estaba en remodelación, estaba sentando en el suelo ya que esa mesa no tiene mas de 45 cm de alto, con una cámara al frente me ponía más nervioso, entonces me equivoqué varias veces (trabado de habla), una vez que lo logre (yo muy feliz), mi esposa se dió cuenta que la mesa estaba llena de polvo (de la remodelación), por lo que tuve que hacerlo nuevamente…(fail!) jjejeje.
Échale un vistazo a 7x7 ya que se van a estar presentando 7 videos por 7 semanas, lo que dan 49 videos en donde vas a conocer las nuevas características de Windows 7.
Si quieres ver mi ScreenCast (que lo hice con mucho empeño), visita :
http://www.mslatam.com/latam/mediacenter/default.aspx?v=13fbd60a-3b1f-4bf8-a4ba-2a24f5ecc8c9
Nos vemos!!!!
(y recuerda votar por mi blog en : http://www.blogit.ms/)

Esta es una muy buena noticia, si quieres participar en el concurso, solo debes registrar tu blog (yo ya registré el mío)

Puedes votar por mi blog pinchando acá:
A concursar (y no te olvides de pinchar mi aviso!)
Saludos,
gonzalo
Hola que tal, hace unos días buscando buscando por la red, encontré un código y tras unas modificaciones me sirvió bastante para hacer imágenes de Sustitución, (Sorry por la palabra en ingles, a algunos les molesta).
La idea es tener una función que haga la precarga de las imágenes y que cuando se pase el mouse por encima de ella, se reemplace, esto es lo lógico, pero veamos la forma de hacerlo de manera más eficiente (por lo menos eso creo yo)
Código:
<script src="jquery-1.3.2.js" type="text/javascript"></script> <script language="jscript" type="text/jscript">
$(document).ready(function() {
$(".roll").each(function() {
rollsrc = $(this).attr("src");
rollON = rollsrc.replace(/.jpg$/ig, "_over.jpg");
$("<img>").attr("src", rollON);
});
$(".roll").mouseover(function() {
imgsrc = $(this).attr("src");
matches = imgsrc.match(/_over/);
if (!matches) {
imgsrcON = imgsrc.replace(/.jpg$/ig, "_over.jpg");
$(this).attr("src", imgsrcON);
}
});
$(".roll").mouseout(function() {
$(this).attr("src", imgsrc); });
});
</script>
Lo primero que hacemos es realizar la precarga de las imágenes que están marcadas con el atributo Class=”roll” estoy es muy importante para el ejemplo , debido a que, al hacer mouseover sobre la imagen marcada con nav y contenga un link(a) lo que vamos a hacer es reemplazarla por una imagen que tenga el el mismo nombre, pero termine en _over.jpg
Aunque no se note mucho la imagen de la derecha es más clara, (para el efecto rollover), recuerda el tag de la imagen (class):
<a href="SituacionesApendizaje.aspx"><img class="roll" src="images/menu4_docente.jpg"
Ahora puedes tener seteado en tu carpeta imágenes las img normales y las over, y setear tu class =roll y automágicamente vas a tener tu Rollover sin mucho esfuerzo. :)
Espero que te sea de ayuda, ahhh y otra cosa, te pido un favor grande, en varios post vas a ver este logo:
Me puedes ayudar en este concurso?, mil gracias!
Súper Interesante este post sobre mejores prácticas
http://net.tutsplus.com/tutorials/javascript-ajax/24-javascript-best-practices-for-beginners/
Espero que lo disfruten tanto como yo!, me di cuenta que en algunas cosas, tengo malas prácticas! jejeje
Saludos,
Gonzalo
 |
Alguien me podrá decir que es un post viejo, que no sirve, pero la experiencia de bloggero me dice que los tips más sencillos, son los más vistos, así que me decidí a postear este tip.
Mucha gente busca una librería que le permita generar pdfs programáticamente y de manera fácil (sin utilizar Crystal Reports), bueno, es ahí cuando una vez me tope con Report.NET |
Paso 1
Descárgalo!
http://sourceforge.net/project/showfiles.php?group_id=58374&package_id=83913&release_id=463074
Paso 2
Agrega la Referencia
Paso 3 A Mover los dedos programado( casi nada!)
El Diseño(aspx) es algo parecido a esto:
En seguida, en el botón agregamos el código al botón:
(acá está todo el código)
Imports Root.Reports
Partial Class _Default
Inherits System.Web.UI.Page
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim report As New Report(New PdfFormatter())
Dim fd As New FontDef(report, "Helvetica")
Dim fp As FontProp = New FontPropMM(fd, 25, Drawing.Color.Red)
Dim page As New Page(report)
page.AddCB_MM(80, New RepString(fp, tx_texto.Text))
RT.ViewPDF(report, "MiInforme.pdf")
End Sub
End Class
Paso 5
A Probarlo!!!
Súper Sencillo!
Ejemplos en la página del Autor:
http://report.sourceforge.net/
Están en C# si los quieres en VB.NET te recomiendo utilizar el convertidos de Código de telerik:
Convertidor de Código Fuente
http://converter.telerik.com/
Espero que te sea de utilidad!.
Saludos,
Gonzalo
Soy fanático de HP Lovecraft, y hace años encargué que hicieran la figura de Cthulhu en madera, de ciprés de más de 100 años de antigüedad. Hubiese sido genial que el artesano hubiese muerto grotescamente sobre la estatua, le abría dado un toque preciso, bueno eso no ocurrió, y de hace unos años Cthulhu se ha portado bien, no destruye nada y adorna el comedor de la casa.
"Que no está muerto lo que yace eternamente,
y con el paso de los evos, aun la muerte puede morir".
Gracias HP Lovecraft por tantas bizarras historias que tanto inquietan!!!
Si quieres comenzar a leer sus historias te recomiendo que vayas a:
http://www.hplovecraft.com/
![[lovecraft.jpg]](http://3.bp.blogspot.com/_9MywP1UeBhg/SeShak-a2iI/AAAAAAAABbk/mefn_Ka7g2w/s1600/lovecraft.jpg)
Bueno, no todo debe ser 10101010 verdad?
Saludos y gracias por leer este post mega super off-topic!!!
Saludos,

O como tener muchas visitas en el blog en poco tiempo, pero recopilando info (tratando de acelerar un poco más Visual Studio para no entrar en un día de furia) encontré estos consejos:
Primero, instala del HotFix de VS2008 (enfocado a acelerar el diseñador web)https://connect.microsoft.com/VisualStudio/Downloads/DownloadDetails.aspx?DownloadID=10826
Luego mira los consejos de este Post (vale la pena)
http://labs.episerver.com/en/Blogs/Steve-Celius/Dates/112266/6/Speed-up-Visual-Studio/
Si todo esto no hace ni pio en tu VS2008, trata cambiando tu disco duro a uno más rapido (si estás en un portátil) o puedes ver este post, en donde el autor cuenta sus historias con los discos ssd, tarjetas de memoria y algunas otras ideas.
http://www.clikear.com/Acelera_Visual_Studio_18845.aspx
Para VS2005:
http://tehdevs.net/2007/11/19/speed-up-visual-studio-2005/
Actualizado:
1)Pueden tambien utilizar un pendrive que tenga un tiempo de acceso relativamente corto (como los Crossair) para utilizar ReadyBoost, a mi me ha dado buen resultado.
2) Desactivar Aero, no lo vas a utilizar si estas desarrollando o no?
Si todo esto no sirve, puedes mirarte al espejo y lucir de esta manera:
Si tienen más consejos compartámoslos , por que esta foto me la saqué hoy…
;)
Saludos,
Gonzalo
Así es! y por que Santiago no es Chile, tenemos este evento en Concepción, la agenda del evento:
Viernes 19 de Junio 2009
Charlas:
9:00 a 10:00 “Bienvenida a Install Fest y Demo Windows 7”, Alejandro Pacheco y Violeta Arévalo, Microsoft Chile
10:00 a 11:00 “Modo XP de Windows 7”, Pablo Campos
11:00 a 12:00 “Desarrollando videojuegos con Microsoft XNA” Matías Salgado, Pablo Salgado y Juan Muñoz
Break (Coffee + sorteos )
14:00 a 15:00 “Desarrollo de Gadget en Windows 7”, Gonzalo Pérez
15:00 a 16:00 “Windows 7 + IE8, una experiencia de usuario más segura.”, Maximiliano Marín Bustos
16:00 a 16:15 Cierre Evento y Sorteo Final
Install Fest de Windows 7
10:00 a 11:00 Install Fest Windows 7 RC Horario 1
11:00 a 12:00 Install Fest Windows 7 RC Horario 2
12:00 a 13:00 Install Fest Windows 7 RC Horario 3
13:00 a 14:00 Install Fest Windows 7 RC Horario 4
14:00 a 15:00 Install Fest Windows 7 RC Horario 5
15:00 a 16:00 Install Fest Windows 7 RC Horario 6
Lugar : Universidad Andrés Bello, Sede Gran Concepción- Autopista Concepción – Talcahuano 7100
|
IMPORTANTE
|
|
Si vas a traer tu equipo, asegúrate de respaldar toda la información que te es relevante, ya que se van a realizar instalaciones limpias, es decir, se va a formatear el equipo, si tenias Windows Vista , trata de traer los controladores (drivers) de tu equipo para acelerar el proceso de puesta a punto de tu pc, puedes traer Notebooks, Netbooks, PC de Escritorio, etc.
Si traes tu computadora de escritorio, nosotros te facilitamos monitores, pero los demás periféricos, como teclados, mouse, webcams, incluyendo cables de poder, por favor tráelos .
|
Espero que puedan asistir a las charlas o al install fest! , nos vemos allá
Saludos,
Gonzalo
No es que me esté pegando cabezazos contra la pared, ya que soy cabeza dura y la podría romper, pero es no había prestado toda la atención al Control ScriptReferenceProfiler y de como me iba a ayudar en optimizar las cargas dinámicas de los JS generador por Microsoft ASP.NET AJAX.
Veamos el problema primero
Vamos a hacer una pequeña aplicación aprovechando el ColorPicker del Ajax Control Toolkit, el escenario sería algo así:
Ahora bien, tenemos el ScriptManager, un UpdatePanel, un TextBox al cual le agregamos la extensión.
Ahora a ejecutarlo:
Se ve bastante bien, pero veamos que es lo que sucede haciendo una inspección a la generación de Script dinámicos por parte del ScriptManager, para esto vamos a utilizar Firebug.
Fíjate en la gran cantidad de “pedidos” javascript y cuando se van demorando en cargar cada uno de ellos, cada pedido tiene un retardo de tiempo, por lo que se puede pensar que haciendo menos llamadas para obtener los Script, nos ayudará en disminuir el tiempo de carga de la página.
ScriptReferenceProfiler al rescate!
ScriptReferenceProfiler es un control que nos ayuda a obtener por pantalla para poder “consolidar” nuestros Script , se realiza mendiante la etiqueta CompositeScript del Scriptmanager (es una mejora de ASP.NET 3.5 sp1).
Este control se puede descargar desde acá
Ahora lo vamos a agregar a la página(no te preocupes si marca error el diseñador, este control no está construido para la UI )
Ahora ejecutamos y ….
Ahora me indica las referencias encontradas en mi página, entonces, lo que vamos a hacer es un copy-paste de esta información y agregarla en la etiqueta CompositeScript del ScriptManager.
Se ve en la imagen anterior que copié y pegué las referencias que tenía en mi página, luego borro el control ScriptReferenceProfiler debido a que ya cumplió su utilidad y ejecuto nuevamente la página para examinar su comportamiento,ahora optimizado. (vamos a ver si es verdad)
Te puedes dar cuenta el cambio, ahora solo hace un request a las Scripts, con un tiempo considerablemente menor, optimizando la carga de Scripts y por consiguiente tu aplicación.
Espero que te sirva!
Saludos,
Gonzalo.
 | Hola, hace unos días estoy tratando de encontrar info objetiva si es que un disco duro de 7200 rpms en un notebook vale realmente la inversión, si es realmente un cambio que se percibe con facilidad de migrar de un disco de 5200 rpm, algunos me dicen que otros que no se nota, en mi caso, utilizo mi notebook como herramienta de productividad, me y me dije a mi mismo “oye mismo, para que vas a cambiar el portátil, para tener un cpu más potente, si tu cpu anda al 50% promedio utilizado?, el cuello de botella es el disco duro” …y vi este aviso: |
http://www.rigam.cl/catalogo/index.php?act=viewProd&productId=2327
Sin embargo la mejor fuente de información es la experiencia de los que han tenido y trabajado con estos discos duros.
Si postean sus opiniones, muchas gracias! (igual gracias por leer esto!)
Saludos,
gonzalo
Lugar: Universidad Federico Santa María , sede Talcahuano
Fecha : Sabado 13 de Junio
19:00 – 19:50 ........ .NET ( Gonzalo Pérez | MVP Microsoft ) && Mono ( Jose Pino | MonoHispano team )
URL: http://www.charlausm.ed00m.sinaltec.cl/
Y me voy con todo hablando de las tecnologías OS que rodean a ASP.NET , como ELMAH, NUnit, JQuery, SQL Lite (junto a Elmah). También vamos a hablar de MONO y sus alcances.
Esta charla la daré nuevamente junto a JOIL, espero que todo resulte bien y pueda salir vivo nuevamente, jejejeje. Esta vez van desarrolladores, así que todo bien, de hecho fui invitado hace unos días a participar en un proyecto OS bajo Linux, y como hay JQuery entre medio, me metí :).
Digo que todo bien si hay devs ya que hace poco fui a una charla en donde un tipo del OS (que no vale la pena nombrarlo) dijo que el software no se podía vender, que es como vender una fórmula, las formulas no se venden, que solo se podía vender el medio en donde estaba el Sw, entonces pensé, para que hago sw todo el día, mejor me dedico a vender cds en blanco, ganaría lo mismo según si mirada, jajaja. Bueno, es un tremendo disparate, si no desarrollas software, si no vives del desarrollo y de tu código, mejor no opines tonteras, espero que no sea contagioso y a algunos se les abra la idea de que los mecánicos no deberían cobrar por arreglar el coche, por que ese conocimiento esta en un manual, o que los carpinteros no cobren por hace una casa….

Saludos,
Gonzalo
Hola que tal, hace poco leyendo un post de Scott Hanselman, y me llamó la atención ELMAH
ELMAH: Error Logging Modules and Handlers for ASP.NET (and MVC too!)
¿Qué es ELMAH?
Es un plugin para el registro persistente de errores , se puede agregar a una aplicación ASP.NET en ejecución o a todas las aplicaciones Web ASP.NET en un equipo, sin necesidad de recompilar.
Una vez que ELMAH esté instalado y configurado adecuadamente permite:
- Registro de las excepciones no controladas
- Una página web para ver el registro de todas las excepciones de manera remota
- Una página web para ver el detalle de cada excepción registrada
- En muchos casos , vas a poder revisar la pantalla original de la excepción,incluso si customErrors mode esta en off
- Posibilidad de enviar notificaciones de cada excepción por email en el momento que ocurren
- Contar con un fuente RSS con los últimos 15 errores del log.
Más características Cool
Posibilidad de registrar el log generado en:
Revisa el website oficial para revisar todas las excelentes características que nos brinda
http://code.google.com/p/elmah/
Manos a la Obra
Una vez descargado ELMAH, hice referencia a los ensamblados, en el caso del ejemplo , hice ref. a todos (para hacer el pruebas).

Ahora a modificar el WebConfig, es bastante sencillo, viene todo explicado en la aplicación de ejemplo que viene junto a los ensamblados.
En el siguiente website puedes ver la documentación sobre estas opciones y cuando implementarlas, yo quiero dar una ayuda rápida de instalación simplemente.
http://code.google.com/p/elmah/wiki/DotNetSlackersArticle
Paso 1 Agregar:
<configSections>
<sectionGroup name="elmah">
<section name="security" requirePermission="false"
type="Elmah.SecuritySectionHandler, Elmah" />
<section name="errorLog" requirePermission="false"
type="Elmah.ErrorLogSectionHandler, Elmah" />
<section name="errorMail" requirePermission="false"
type="Elmah.ErrorMailSectionHandler, Elmah" />
<section name="errorFilter" requirePermission="false"
type="Elmah.ErrorFilterSectionHandler, Elmah" />
</sectionGroup>
</configSections>
Paso 2 Agregar:
<httpHandlers>
<add verb="POST,GET,HEAD" path="elmah.axd" type="Elmah.ErrorLogPageFactory, Elmah" />
</httpHandlers>
Paso 3 Agregar
<system.web>
<httpModules>
<add name="ErrorLog" type="Elmah.ErrorLogModule, Elmah" />
</httpModules>
</system.web>
Ahora bien para almacenar la info de log en los distintos tipos de almacenamiento vamos a agregar en el WebConfig:
En un archivo XML
<elmah>
<errorLog type="Elmah.XmlFileErrorLog, Elmah" logPath="~/App_Data" />
</elmah>
En Memoria
Muy rápido, pero limitado, obviamente no persiste.
<elmah>
<errorLog type="Elmah.MemoryErrorLog, Elmah" size="50" />
</elmah>
En SQL Lite
Si no sabes lo que es Sql Lite, te cuento que es un pequeño motor de base de datos, muy muy liviano y eficiente para tareas sencillas.
<connectionStrings>
<add name="Elmah.SQLite" connectionString="data
source=~/App_Data/Elmah.SQLite.db" />
</connectionStrings>
<elmah>
<errorLog type="Elmah.SQLiteErrorLog, Elmah" connectionStringName="Elmah.SQLite" />
</elmah>
Te recomiendo el livianisimo SQL Lite Administrator para administrar tu BD de SQL Lite. Es muy simple, portable y light. En la imagen siguiente vemos la vista de la BD que guarda el log, tu no tienes que hacer absolutamente nada, me refiero a que no tienes para que crear la base, ELMAH lo hace por tí.
En SQL Server
La aplicación de ejemplo se adjunta con un Script SQL para que generes la estructura necesaria para dar soporte a ELMAH. Esta es la mejor opción para entornos corporativos.
<connectionStrings>
<add name="Elmah.Sql"
connectionString="Data Source=.;Initial Catalog=ELMAH;Trusted_Connection=True" />
</connectionStrings>
<elmah>
<errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="Elmah.Sql" />
</elmah>
¿Y si no quiero todos las excepciones registradas?
Puedes filtrar programática o declarativamente. Teniendo en cuenta la estructura de la clase y su funcionamiento,
La propiedad Dismissed indica si la excepción ha sido desestimada o no, mientras que la propiedad de Excepción contiene la excepción no manejada.
El método Dismmiss marca la excepción que no vamos a “estimar”, impidiendo que ser bien enviado por correo o registrado en el log.
Ejemplo:
void ErrorLog_Filtering(object sender, ExceptionFilterEventArgs e)
{
if(e.Exception.GetBaseException() is FileNotFoundException)
e.Dismiss();
}
Lo anterior, elimina (descarta) la notificación para la excepción FileNotFoundException.
Hay muchas otras opciones que te invito a revisar en:
http://code.google.com/p/elmah/wiki/DotNetSlackersArticle
Y ahora F5 en mi Aplicación!!!
Para botar la aplicación tengo una división por Cero en el botón.
y al presionarlo:
y ahora al visitar:
http://localhost:53257/pruebaLog/elmah.axd
tenemos a ELMAH en acción: (espero que se alcance a notar, quize pegar toda grilla para que se vean los campos.
Nos da una lista de las excepciones, con información relevante y además podemos ver el detalle de cada una.
Si ves el menú superior vamos a ver:
Podemos suscribir RSS :), entonces, por que no suscribirnos a la fuente RSS desde el gadget de Windows 7

Y ahora tenemos nuestro “sistema de monitoreo” de nuestra aplicación corriendo en el escritorio de Windows.
Espero que te sirva, a mi me gustó mucho :)
Saludos,
Gonzalo
Aunque es un poco “vieja” la noticia pero igual lo quiero comentar, existen nuevos contenidos para la estrella Platino,
:: Platino Plus NET Framework 3.5 Enhancements Kit ::
Los contenidos, todos con Slides, Demos y Videos abarcan:
ASP.NET MVC, ASP.NET Dynamic Data, ASP.NET AJAX History, ASP.NET Routing, ADO.NET Data Services, ADO.NET Entity Framework, WCF 3.5 SP1, y .NET Framework Client Profile.
Mi recomendación aprovechar esta oportunidad de aprender contenidos nuevos y en español, como siempre, estudiar estudiar estudiar!

Recuerda que la dirección es www.dce2005.com
Saludos,
gonzalo