[MISC] Noticias mias y yapas...
Hola, como están? Yo muy bien, como les comenté antes rendí el examen 70-536. Ese día estaba contento, pero hoy recibí otra sorpresa, un mail donde me dan mi MCP ID y también acceso a sitio para todos los que somos Microsoft Certified Professional.
Les cuento, en ese sitio los MCP podemos ver nuestro historial, crear logos con las certificaciones obtenidas, comprar cosas en el MCPeShop, suscribirmos al MCP Flash y acceder a numerosos recursos.
Por ahora solo soy MCP, todavía no soy MCTS que es mi objetivo asi que el único logo que estoy habilitado a usar es este:
De todas formas estoy mas que contento ;)
Ahora si les dejo unos videitos muy buenos de nuevas cosas que está haciendo Microsoft.
Wednesday, June 04, 2008
Wednesday, May 28, 2008
[Células.NET] Células.NET Córdoba en Facebook
Facebook esta de moda, no hay con que darle. Es divertido, está lleno de gente, miles de juegos para divertirse entre amigos y no nos podemos quedar afuera. Los programadores también tenemos que divertirnos, jaja ni yo me lo creo diciendo esto, pero bueno, hay que cambiar algunas cosas. Es por esto que creé un grupo en Facebook llamando Células.NET Córdoba para que, aparte de capacitarnos en tecnologías Microsoft, también nos divirtamos.
Acá les dejo el logo del grupo:
[NET 2.0] Un paso mas cerca...
Es es un post de felicitación :), felicitación a mi mismo ;) por haber rendido exitosamente el examen: Exam 70–536: TS: Microsoft .NET Framework 2.0 - Application Development Foundation
lo que me coloca a un paso de obtener la certificación MCTS: .NET Framework 2.0 Web Applications.
Aprovecho el post para explicar como se obtiene esta certificación. MCTS son las siglas de Microsoft Certified Technology Specialist y se puede ser especialista en algunas de estas 3 tecnologías:
- Web Applications
- Windows Applications
- Distributed Applications
- Exam 70–528: TS: Microsoft .NET Framework 2.0 - Web-Based Client Development, esta es la que estoy buscando yo.
- Exam 70-526: TS: Microsoft .NET Framework 2.0 – Windows-Based Client Development.
- Exam 70–529: TS: Microsoft .NET Framework 2.0 – Distributed Application Development.
Les dejo link a una imagen mas explicativa del plan que estoy siguiendo yo:
http://www.mediafire.com/imgbnc.php/6b720bd0175d99e42c8ad79a375058e86g.jpg
Thursday, May 15, 2008
[Conferencias] EVENTO TÉCNICO EN CÓRDOBA
por Ing. Juan Pablo Ibañez
http://ing.juanpablo.googlepages.com
Amigos, en esta oportunidad quiero contarles que por suerte y por fin se realiza en Córdoba un evento del MUG.
Aquí les dejo los temas, horarios y link para registrarse.
Particularmente creo que va a estar bueno ya que los oradores son muy buenos. Eugenio creo que la mayoría lo debe conocer es un grande y Matías Iacono, colega mío en la UTN tambíen es un groso.
Martes, 20 de Mayo de 2008
Lugar: Auditorio de Radio Nacional - General Paz Esq Santa Rosa, Córdoba Capital
Jornada de actualización profesional con la presentación de las novedades 2008 en tecnología Microsoft. Por primera vez juntos tres de los mas reconocidos profesionales cordobeses.
Evento gratuito. Vacantes limitadas.
16:15 hs - Acreditación
16:45 hs - Inicio de las Conferencias
La Seguridad en Windows Server 2008 - Enrique Dutra (MVP)
- Conoce el nuevo firewall de Windows 2008.
- Redes Seguras. Conexion segura mediante NAP.
- Bitlocker
Introducción a SQL Server 2008 - Matías Iácono (MVP)
- Evolución de las versiones de SQL Server
- Entorno de administración de SQL Server
- Conceptos de gestión de SQL Server
Visual Studio 2008 - Eugenio Serrano (MVP)
- Creando la siguiente generación de aplicaiones Web con mayor productividad
- Diseñador HTML y CSS, AJAX, WLS, JS Debugging e INtellisense
22:00 - Fin del evento - Sorteos
Para registrarse, este es el link:
http://www.mug.org.ar/registracion.aspx?idevento=3004
Friday, May 09, 2008
[AJAX] Carga dinámica de páginas ASPX con AJAX Enabled WebService
por Ing. Juan Pablo Ibañez
http://ing.juanpablo.googlepages.com
Con la aparición de AJAX, ahora podemos cargar ciertas partes de una página ASPX sin tener que recargar toda la página. El problema surge cuando en una página queremos incluir diferentes funcionalidades que habitualmente están en páginas separadas. Si intentamos incluir todas las funcionalidades en nuestra página e ir cargándolas mediante AJAX, nuestra página comienza a hacerse demasiado grande para poder albergar todo el código que permite cambiar las partes y mostrar las distintas funcionalidades sin recargar toda la página. Hay aplicaciones grandes que requieren utilizar otro enfoque, como ser cargar páginas ASPX dentro de páginas ASPX pero sin hacer PostBack de la página contenedora. La técnica explicada en este artículo nos permite tener nuestra aplicación dividida en todas las páginas ASPX que necesitemos, y cargarlas dentro de una página contenedora usando AJAX, lo cual nos permite dividir mejor la funcionalidad, distintos equipos pueden trabajar independientemente en cada página ASPX, nuestra aplicaciones está mas desacoplada, prolija y demás beneficios.
En el siguiente ejemplo voy a mostrar como cargar diferentes ASPX dentro de otra página ASPX haciendo uso de AJAX WebServices. La imagen [Imagen1] que vemos a continuación es un esquema de lo que se pretende hacer.
[Imagen1]
La página contenedora tiene 1 div donde se insertará mediante AJAX el HTML de las páginas ASPX que se quieran cargar dinámicamente dentro de la página contenedora. Si nuestras ASPX que queremos cargar tiene elementos que hacen PostBack, debemos cargarlas dentro de un iframe, de lo contrario, por ejemplo, al presionar un Button en la página que se cargo dentro de la contenedora, se hará un PostBack que recargará también nuestra contenedora y la idea es que la contenedora nunca se recargue completamente.
Nuestra solución entonces deberá tener al menos los componentes que se muestran en la siguiente imagen [Imagen2].
- Default.aspx, nuestra página contenedora.
- Default.js, código Javascript para hacer la llamada al WebService y cargar el contenido que este devuelve en nuestro div.
- Page1.aspx, una de las páginas que queremos cargar dentro de Default.aspx
- Page2.aspx, otra de las páginas que queremos cargar dentro de Default.aspx
- PageLoader.asmx, el WebService que devuelve el HTML que vamos a cargar dentro del DIV de Default.aspx
- web.config, configuración para hacer uso de las librerías de AJAX ASP.NET y configuración para usar AJAX ASP.NET WebServices.
- ajax-loader.gif, imágenes que mostramos mientras se cargan las páginas interiores.
[Image2]
La idea es que nuestra página Default.aspx tenga un DIV donde cargar el HTML de las páginas que queremos cargar, haga una llamada a un AJAX Enabled WebService y mientras se carga la página interior muestre un Loading...
La estructura de nuestra página Default.aspx sería algo así:
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
<Scripts>
<asp:ScriptReference Path="Default.js" />
</Scripts>
<Services>
<asp:ServiceReference Path="PageLoader.asmx" />
</Services>
</asp:ScriptManager>
<div align="center">
<h2>Página Contenedora</h2>
<input id="btnLoadPage1" type="button" value="Cargar Página 1" onclick="return btnLoadPage1_onclick()" />
<input id="btnLoadPage2" type="button" value="Cargar Página 2" onclick="return btnLoadPage2_onclick()" />
<br />
<hr />
<br />
<div id="Loading" style="display: none">
<table style="width: 200px; height: 200px">
<tr>
<td align="center" valign="middle">
<img id="Img1" src="Images/ajax-loader.gif" alt="loading..." />
</td>
</tr>
</table>
</div>
<div id="Target">
</div>
</div>
</form>
</body>
Tenemos un ScripManager configurado para tener acceso a nuestro código JavaScript:
<Scripts>
<asp:ScriptReference Path="Default.js" />
</Scripts>
y también le configuramos el path a nuestro WebService para que pueda crear automáticamente el proxy que vamos a usar desde nuestro código JavaScript:
<Services>
<asp:ServiceReference Path="PageLoader.asmx" />
</Services>
También tenemos 2 HTML Buttons, uno para llamar a Page1.aspx y otro para Page2.aspx y además 2 divs, uno para mostrar la imagen de Loading mientras se carga la página interior y otro para cargar el HTML que devuelve el WebService.
Al presionar cualquiera de los botones se hace una llamada al AJAX Enabled WebService como vemos en el siguiente código:
function btnLoadPage1_onclick()
{
ret = PageLoader.LoadPage("Page1.aspx", OnComplete, OnTimeOut, OnError);
document.getElementById('Loading').style.display = 'block';
return(true);
}
function btnLoadPage2_onclick()
{
ret = PageLoader.LoadPage("Page2.aspx", OnComplete, OnTimeOut, OnError);
document.getElementById('Loading').style.display = 'block';
return(true);
}
function OnComplete(args)
{
document.getElementById('Target').innerHTML = args;
}
function OnTimeOut(args)
{
alert("Service call timed out.");
}
function OnError(args)
{
alert("Error calling service method.");
}
PageLoader es el proxy creado por el ScriptManager y LoadPage es el [WebMethod] expuesto por nuestro WebService. La llamada es asíncrona por lo que nos pide que especifiquemos la función que se va a llamar cuando se haya completado la petición, la función que se llama si se produce un time out y la función que se llama si se produce un error.
O sea que las funciones de los botones hacen 2 cosas: la petición y mostrar la imagen de Loading.Una vez que el AJAX Enabled WebService devuelve el HTML, cargamos este dentro del div "Target" en la función OnComplete.
Lo que queda ahora es ocultar el Loading, esto lo hacemos desde la página interior, por ejemplo, Page1.aspx, en el evento onload en el body:
<body onload="parent.document.getElementById('Loading').style.display='none';" style="margin:0px;">
<form id="form1" runat="server">
<table style="width:200px;height:200px;">
<tr>
<td valign="middle" align="center" style="background-color:Blue;color:White">
Page1.aspx
</td>
</tr>
</table>
</form>
</body>
Solo quedaría ver el WebService, que lo que hace basicamente es devolver un HTML con un IFRAME con la página que le pasamos como parámetro, de esta forma si nuestra Page1.aspx o Page2.aspx hacen un PostBack, este no afecta a la página contenedora.
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.Web.Script.Services.ScriptService]
public class PageLoader : WebService
{
[WebMethod]
public string LoadPage(string pageName)
{
return @"<iframe frameborder='0'
scrolling='no'
marginheight='0'
marginwidth='0'
height='200px'
width='200px' id='frame' src='" + pageName + "' runat='server'></iframe>";
}
}
Es importante destacar la siguiente línea que es la que permite que el hacer AJAX Enabled al WebService:
[System.Web.Script.Services.ScriptService]
El siguiente gif animado muestra el ejemplo funcionando:
Tuesday, May 06, 2008
En esta oportunidad quiero comentarles sobre Células.Net, un programa
académico de Microsoft para estudiantes que estén interesados
en aprender mas sobre tecnologías Microsoft. Córdoba se está
convirtiendo en un gran foco de grupos de estudios y tengo el agrado de comentarles
que estoy formando parte como profesor guía de 3 de estos grupos. Quiero
darles la bienvenida a estas personas que se han puesto por objetivo aprender
mas sobre tecnologías Microsoft formando parte de esta comunidad. Les
presento las células:
Nombre Clave: Developnet
Blog: http://developmentnet.blogspot.com

Nombre Clave: Hibridos
Blog: http://hibrides.blogspot.com

Nombre Clave: Antares
Blog: http://antarescell.blogspot.com
En este proyecto estoy junto
a Matías Iácono quien es profesor guía de otro conjunto
de células. Para el manejo de todas las células que tenemos entre
los 2 hemos creado una lista de distribución, usando los grupos de Google.
Los interesados pueden ver los avances de estas células en: http://groups.google.com.ar/group/celulasnetcordoba
Saludos a todos.
Wednesday, March 26, 2008
[Conferencias] 1ras Jornadas de Actualización Informática en el ISIPE
Hola, les comento que voy a participar de las primeras jornadas de actualización informática en el ISIPE. Voy a estar disertando sobre como mejora la productividad ASP.NET 2.0.
Les dejo el anuncio que mando la gente del ISIPE.
| ||||
| ||||
|
Tuesday, March 25, 2008
[NET2.0] Usando WMI (Windows Management Instrumentation) technology
por Ing. Juan Pablo Ibañez
http://ing.juanpablo.googlepages.com
Esta tecnología nos permite recuperar toda la información que deseemos de cualquier sistema operativo Windows ya sea local o remoto. Información como cuales son los adaptadores de red, la memoria RAM, los discos fijos y removibles, la CPU, etc. de nuestra PC puede ser obtenida programáticamente mediante WMI.
La definición de WMI es:
Instrumental de administración de Windows (WMI) es un componente del sistema operativo Windows que permite obtener acceso mediante programación a información de administración en un entorno empresarial. WMI en .NET Framework se basa en la tecnología WMI original y permite el mismo desarrollo de aplicaciones y proveedores, además de las ventajas que ofrece la programación en .NET Framework.
WMI en .NET puede ser utilizada mediante una serie de objetos lo cual nos facilita mucho su uso. Estos objetos se encuentras agrupados dentro del namespace System.Management. WMI utiliza una sintaxis muy parecedida a la de SQL para armar "queries" sobre los componentes de los cuales queremos obtener información.
Más información teórica sobre WMI puede ser encontrada en http://msdn2.microsoft.com/es-es/library/ms257353(VS.80).aspx. Microsoft nos proporciona también un software llamado WMI Code Creator v1.0 para generar código (VBScript, C# y VB.NET) que use WMI.
Nada mejor para entender WMI que llevarlo a la práctica. Supongamos que quisieramos obtener información sobre los discos fijos que tenemos en nuestra PC.
Primero debemos definir un objeto ManagementScope que representa un ámbito (espacio de nombres) para las operaciones de administración.
ManagementScope scope = new ManagementScope(ManagementPath.DefaultPath);
Por último crear un instancia de la clase ManagementObjectSearcher que recupera una colección de objetos de administración basándose en una consulta especificada. Esta clase es uno de los puntos de entrada más utilizados para recuperar información de administración. Se puede utilizar, por ejemplo, para enumerar todas las unidades de disco, adaptadores de red, procesos y muchos otros objetos de administración del sistema, o para saber qué conexiones de red están activas, qué servicios están detenidos, etc.
El método Get de este objeto nos devuelve el resultado de la consulta en una colección de objetos del tipo ManagementObjectCollection.
ManagementObjectCollection drives = searcher.Get();
{
Console.WriteLine("Drive Name: " + drive["Name"]);
Console.WriteLine("Drive Size: " + drive["Size"]);
}
Console.ReadLine();
class Program
{
public const string IP_Enabled = "IPEnabled";
public const string IP_Address = "IPAddress";
public const string IP_Subnet = "IPSubnet";
public const string DNS_Hostname = "DNSHostName";
public const string DNS_Domain = "DNSDomain";
static void Main(string[] args)
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapterConfiguration");
ManagementObjectCollection networks = searcher.Get();
foreach (ManagementBaseObject network in networks)
{
Console.WriteLine("-----------------------------------------------------");
Console.WriteLine("Description: " + network["Description"]);
Console.WriteLine("MacAddress: " + network["MacAddress"]);
if (Convert.ToBoolean(network[IP_Enabled]))
{
string[] ips = (string[])network[IP_Address];
string[] subnets = (string[]) network[IP_Subnet];
Console.WriteLine("DNS Hostname: " + network[DNS_Hostname]);
Console.WriteLine("DNS Domain: " + network[DNS_Domain]);
Console.WriteLine("IP: " + ip);
Console.WriteLine("Subnet: " + subnet);
}
}
Console.ReadLine();
}
}
Tuesday, March 04, 2008
[Conferencias] LINQ to SQL
por Ing. Juan Pablo Ibañez
http://ing.juanpablo.googlepages.com
Estoy organizando una conferencia sobre LINQ to SQL en el Colegio de Ingenieros Especialistas de Córdoba, ya que desde el año pasado tengo el agrado de formar parte la Comisión de Informática. El disertante es el Ing. Matías Iácono (MVP).
Les dejo el flyer que mandamos con la gente del CIEC.
Saludos.
Estimado/a El Colegio de Ingenieros Especialistas de Córdoba informa la realización de la:"CONFERENCIA: LINQ TO SQL" Esta contará con la disertación del profesional Ing. Matías Saúl Iacono Dagatti Licenciado en Ingeniería de Sistemas Aprobado con Honores, en la certificación en ASP.net 2.0 (Whidbey), otorgado por Microsoft MVP Academy. Certificado en C# nivel 100 otorgado por Microsoft MVP Academy. Miércoles 19 de Marzo de 2008 18.30 a 21.30 (Coffee Break de 15 minutos) PROGRAMA
"NOS HONRARA CONTAR CON SU GRATA PRESENCIA" Lugar: Auditorio Ciec Jujuy 441 Centro Coordina el evento: Ing. Juan Pablo Ibañez SIN CARGO Se requiere pre-inscripción por capacidad limitada INFORMES E INSCRIPCION Colegio de Ingenieros Especialistas de Córdoba - Jujuy 441- 5000 - Córdoba- Tels: 0351-4220046 - 4220081 - 4236074 Cel: 155-553410 Email: ciec@ciec.com.ar
|
Sunday, February 24, 2008
[ASP.NET2.0] Extendiendo ASP.NET Server Controls
por Ing. Juan Pablo Ibañez
http://ing.juanpablo.googlepages.com
Muchas veces, al comienzo de nuestra carrera profesional, en la desesperación por programar, nos pasa que nos olvidamos de pensar un poco mas allá de lo que tenemos que hacer justo en este momento y terminamos haciendo las cosas mas de una vez, en otras palabras nos olvidamos de pensar en "reusar". Código duplicado, funcionalidad aquí y allá, nos cuenta mas tiempo y esfuerzo, por lo cual, cuando identificamos una funcionalidad que consideramos que puede ser reusada, lo que debemos hacer es crear un componente que pueda ser usado mas de una vez, documentarlo y agregarlo a nuestra librería de componente.
Para lograr esto, muchas veces lo que debemos hacer extender la funcionalidad de un control de servidor ASP.NET. Por ejemplo, tenemos el control Calendar, pero nos gustaría que cuando pasamos el mouse sobre un día este se pinte de otro color para destacarlo. Esta funcionalidad no la provee el control Calendar clásico de ASP.NET. Podríamos programar la funcionalidad en la misma página donde tenemos agregado el control o podríamos crear un control nuevo con toda la funcionalidad y reusarlo.
Para crear este nuevo control debemos extender la funcionalidad del control Calendar usando el modelo de herencia de ASP.NET.
Lo primero que tenemos que hacer es abrir VisualStudio y crear un proyecto del tipo ASP.NET ServerControl.
Luego dos propiedades, una para el BackColor, la cual llamaremos DayHoverStyleBackgroundColor y otra para el ForeColor, la cual llamaremos DayHoverStyleForeColor, del día sobre4 él cual el mouse esta parado.
Tenemos que tener en cuenta que el valor de estas dos propiedades no sobrevive entre postbacks por lo cual tenemos que guardar estos valores en el ViewState.
El atributo DefaultValue especifica el valor predeterminado de una propiedad.
Ahora lo que debemos hacer es registrar código Javascript para que sea ejecutado cuando se produzcan los eventos onmouseover y onmouseout de cada una de las celdas del calendario.
Cuando el mouse esta sobre un día del calendario el día se debe renderizar con los colores seleccionados en las propiedades DayHoverStyleBackgroundColor y DayHoverStyleForeColor y cuando el mouse sale del día en que estaba se deben volver a renderizar con los coroles que tenia anteriormente.
Para hacer esto nuestro Javascript guarda en 2 variables los colores que tiene el día, renderiza los nuevos y al salir vuelve a cargar los colores guardados en las variables.
Este es el Javacript que necesitamos:
Bueno, con esto tendríamos nuestro control listo.
