[Running Internet Explorer 7.0 Beta 2 without installing it.] No way !!!

Hace unos días, en el visor de RSS, vi como Scott Hanselman nos proponia una forma de probar la Beta 2 de IE7 sin tener que instalar el paquete completo.
 
Afortunadamente (¿?), yo ya la habia instalado y al dia de hoy no he tenido grandes problemas. Pero si leen un poco mas en los problemas posteriores que  sufrió Scott, veran, que todavia IE no es XCOPY compatible.
 
Saludos
 
PD: los dejo con la frase con la que cierra el post "So, seriously, now I’m sorry I even mentioned it. 😉 Your Mileage May Vary. I recommend hanging back while we learn why this is all so hard."

Visual Studio 2005 – My Blogs

He probado varias herramientas para la creación de nuevas entradas en MSN Spaces. Entre ellas WBlogger y también la publicación por mail. Sin embargo, en ninguna me siento 100% cómodo. Si el contenido del post es solo texto, por lo general utilizo el editor online de MSN Spaces, pero si quiero agregar alguna característica especial, imágenes, código, etc.; lo que suelo hacer es editar mi HTML desde VS2005 y luego copiar el HTML a mi post.

 

Hace unos días, estuve viendo un artículo en MSDN para la implementación de una nueva extensión en el Namespace My, que permitía agregar funcionalidades para trabajar con Blogs desde VB.Net. Asociado al mismo en MSDN TV, hay una serie de videos de Cris Mayo, donde se explican los datos de este ejemplo. Recomiendo leer la documentación asociada de MSDN, que realmente es muy completa, la pueden encontrar aquí.

 

Como soy un convencido que mi única herramienta de trabajo, debería ser Visual Studio 2005; supuse que podría crear un AddIn para el mismo partiendo de esta base. Mi idea es editar los contenidos en VS y luego publicarlos desde el mismo.

 

Publicación a través de un Proxy – Custom Settings VS2005

 

La primera contra con la que me encontré fue la incapacidad de poder configurar las salidas de la clase que maneja los Blogs, a través de un Proxy. Para esto necesitaba que mi aplicación pudiese configurar los datos del Proxy. Afortunadamente, esto desde VS2005, lo podemos hacer muy fácilmente. Desde las propiedades del proyecto, simplemente seleccionamos la sección Settings y definimos los datos con los que queremos trabajar.

 

 

 

Esto crea automáticamente una clase interna que permite acceder a esta información. El código se crea en el “behind” del proyecto, pero si lo editamos podemos ver algo por el estilo:

 

<Global.System.Configuration.ApplicationScopedSettingAttribute(), _

 Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _

 Global.System.Configuration.DefaultSettingValueAttribute("False")> _

Public ReadOnly Property UseProxy() As Boolean

       Get

             Return CType(Me("UseProxy"), Boolean)

       End Get

End Property

 

<Global.System.Configuration.ApplicationScopedSettingAttribute(), _

 Global.System.Diagnostics.DebuggerNonUserCodeAttribute(), _

 Global.System.Configuration.DefaultSettingValueAttribute("")> _

Public ReadOnly Property ProxyAddress() As String

       Get

             Return CType(Me("ProxyAddress"), String)

       End Get

End Property

 

De esta manera, podemos agregar un par de líneas para configurar el Proxy en las salidas afuera. Por ejemplo:

 

‘ validates proxy settings

If My.Settings.UseProxy Then

 

       Dim proxyObject As New WebProxy(My.Settings.ProxyAddress, My.Settings.ProxyPort)

 

       proxyObject.BypassProxyOnLocal = My.Settings.ProxyBypassProxyOnLocal

 

       ‘ defines the proxy user and pwd

       If My.Settings.ProxyUserName.Length > 0 Then

             client.UseDefaultCredentials = False

             Dim cred As New System.Net.NetworkCredential(My.Settings.ProxyUserName, My.Settings.ProxyUserPassword, My.Settings.ProxyUserDomain)

             proxyObject.Credentials = cred

       End If

 

       ‘ set proxy

       client.Proxy = proxyObject

 

End If

 

Automáticamente se agrega dentro del archivo de configuración, las entradas necesarias para poder manejar esta información y también la configuración del assembly que es el encargado de interpretar esta información. Por ejemplo:

 

<?xml version="1.0" encoding="utf-8"?>

<configuration>

    <configSections>

        <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >

            <section name="ElBruno.Blogs.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />

        </sectionGroup>

    </configSections>

    <applicationSettings>

      <ElBruno.Blogs.Settings>

        <setting name="UseProxy" serializeAs="String">

          <value>False</value>

        </setting>

        <setting name="ProxyAddress" serializeAs="String">

          <value />

        </setting>

       

      </ElBruno.Blogs.Settings>

    </applicationSettings>

</configuration>

 

           

Creando el AddIn

 

El siguiente paso es la creación del AddIn, cosa que haré en mi próximo tiempo libre y esperemos que algún futuro post sea directamente desde Visual Studio.

 

Saludos

MSDN Bloggers – El Bruno

Luego de varios meses inscripto en la lista de blogs de MSDN Bloggers, finalmente se empiezan a refrescar los contenidos con mis posts. El mes de febrero, y los nuevos cambios de MSN Spaces, deben influir en la funcionalidad del site.
 
Saludos

 

Actualización: Aqui esta la lista completa de actualizaciones a MSN Spaces. 

Internet Explorer 7 – Beta 2 Download

 
Está disponible para descargar la Beta 2 del IE7, la pueden encontrar en http://www.microsoft.com/windows/ie/. Realmente una interesante opción para compararla con Firefox (hoy uno de los navegadores mas comodos).
 
Saludos
 
PD: si quieren ver una presentacion de esta version, en Channel9 existe una muy buena intro.
 

Visual Studio 2005 – Automation Samples

 
 
A menudo tengo ideas y pequeños "aceleradores de código" que me facilitan en trabajo diario. En su mayoría estas aplicaciones comienzan como una buena idea y en el mejor de los casos, terminan integradas en el IDE de Visual Studio.
 
Los que han trabajado con este esquema, ahora tienen un nuevo recurso disponible con ejemplos sobre el nuevo modelo de Extensibilidad de Visual Studio, Macros, etc.
 
Se lo pueden bajar desde aqui y realmente recomiendo revisarlo un poco, ya que los ejemplos son bastante instructivos.
 
Saludos

Visual Studio 2005 – Extend My Namespace

Otra de las new features de .Net 2.0, que a medida que avanzo en el desarrollo de pequeñas aplicaciones piloto (que ya no son tan pequeñas), voy descubriendo y luego implementando.

 

En este caso, con unas pocas líneas de código, demostraré como extender las funcionalidades de la librería My de Visual Basic .Net. La misma presenta las funcionalidades más comunes con las que trabajamos en el día a día, de una manera simple y sencilla.

 

Supongamos la siguiente clase (el código y la funcionalidad se explican por si solas):

 

Public Class World

 

  Public Function HelloWorld() As String

    Return "Hello World"

  End Function

 

End Class

 

Esta clase forma parte de un proyecto más amplio Labs, en el que tengo una serie de funcionalidades que utilizo en todos los proyectos. Para poder acceder rápidamente a estas funcionalidades, me gustaría poder agregar esta librería Labs al Namespace My. Para esto puedo implementar el siguiente código:

 

‘ This property is included in the My namespace, so it will show up in IntelliSense after referencing My.

Namespace My

  ‘ The HideModuleNameAttribute hides the module name MyLabs.Labs so the syntax becomes My.Labs.  

  <Global.Microsoft.VisualBasic.HideModuleName()> _

  Module Labs

 

    Private _World As New ThreadSafeObjectProvider(Of Global.MyLabs.World)

 

    Public ReadOnly Property World() As Global.MyLabs.World

      Get

        Return _World.GetInstance()

      End Get

    End Property

 

  End Module

 

End Namespace

 

Este módulo mantiene una instancia del componente World y la publica “sobrescribiendo” el namespace My. Para lograrlo se utiliza el atributo HideModuleName, que creo q explica su funcionamiento por si solo.

 

Como resultado final, dentro de mi VS2005, al momento de escribir código, puedo acceder a mis funciones de la siguiente manera:

 

 

Espero que les sea útil. (interesante es :P)

 

Saludos

 

PD: Un par de links relacionados

 

Australian Open 2006 – Federer

Terminó el primer Grand Slam del año y nuevamente Roger Federer se ha coronado campeón. Luego de ver una gran final frente al chipriota Marcos Bagdathis, cada vez quedo más convencido del increíble nivel de juego de Federer.

Durante la primera parte del partido, se demostró que el nivel entre los 50 mejores jugadores del mundo, se define por un proceso mental. Bagdathis llegó a la final con nada que perder y mucho que ganar, y con esa actitud jugó 2 sets complicadísimos para Federer, en los que lo obligó a sacar lo mejor de sí. (Antes del abierto de Australia, el chipriota estaba ranqueado nro. 56)

Pero el suizo, demostró que ser el mejor del mundo es algo más que tener muy buena técnica. Durante 100 minutos estuvo buscando el quiebre mental de Bagdathis, y cuando finalmente lo consiguió, llegó a ganar 11 games seguidos, para definir el partido en un 5-7, 7-5, 6-6, 6-2.

Finalmente demostró que su tenis es perfecto, que en la cancha es de hielo, pero que ganar un abierto de Australia derrota a cualquiera. Durante la entrega de premios, la emoción pudo con él y unas lágrimas le impidieron agradecer a todas las personas a las que él debe su gran carrera.

Este es el Grand Slam número 7 para Federer, y si mantiene este nivel de juego, seguramente no será el último. Por mi parte, yo estoy agradecido de poder ver a este gran jugador.

 

Saludos

 

PD: Lamentablemente, no pudimos ver a ningún argentino en las etapas decisivas, ya que Bagdathis le levantó un 2-0 por debajo a Nalbandian en la semifinal y nos perdimos una revancha Federer-Nalbandian.

Office 12 – Bloggers

Después de un par de días en Paris, asistiendo a presentaciones de Office 12, todavía no he podido "digerir" toda la información de las mismas. En realidad, fueron un punto de inicio, para comenzar a comprender los cambios que plantea esta nueva plataforma (sip, plataforma).

Office 12, no es tan solo una nueva versión de la suite para oficina de Microsoft, en éste release se han integrado todas las nuevas líneas de negocio y funcionalidades dentro de la misma. Al punto tal, que existe una nueva serie de servicios para servidores llamados los “Office Servers” que integran entre otras cosas, la capacidad de Sharepoint (junto con la nueva versión del mismo VSS3), el CMS (Content Managment Server), una línea de servidores para fomularios (que trabajan con InfoPath, e integran capacidades de Workflow, por ejemplo), un servidor para documentos Excel (una de las mejores ideas de BI, creo que a futuro), etc..

Si tengo un tiempo, entre algunos temas urgentes, escribiré un poco al respecto y por ahora espero ansioso la Beta 2 de Office 12, que está prevista para Marzo de este año.

     

Saludos

     

PD: Les dejo la lista de Bloggers oficiales de MSDN de Office 12, desde la página de Erika Ehrli.

     


Topic Owner Name URL
Access 12 Erik Rucker A discussion of what’s new in Access 12 http://blogs.msdn.com/access/
Document Services (ECM) Rob Lefferts Office SharePoint Document Services (ECM) http://blogs.msdn.com/roble/
Excel 12 Dave Gainer Microsoft Excel 12 http://blogs.msdn.com/excel/
FrontPage 12 Rob Mauceri Rob Mauceri’s FrontPage Blog http://blogs.msdn.com/rmauceri/
Groove Mark Olson Marc’s blog about the integration of Groove into Office 12. http://blogs.msdn.com/marco/
InfoPath 12 Tudor Toma InfoPath 12 – Tudor Toma http://blogs.msdn.com/tudort/
Office 12 (General) Erika Ehrli Adventures in Office Development and .NET http://blogs.msdn.com/erikaehrli/
Office 12 (General) John Durant Office and a short, bald man http://blogs.msdn.com/johnrdurant/
Office 12 (General) Steven Sinofski Steven Sinofsky’s Microsoft TechTalk http://blogs.msdn.com/techtalk/
Office 12 Help Mike Kelly From my Office to Yours http://blogs.msdn.com/mikekelly/
Office 12 New User Interface Jensen Harris Jensen Harris  An Office User Interface Blog http://blogs.msdn.com/jensenh/
Office 12 New XML File Format Brian Jones Brian Jones  Office XML Formats http://blogs.msdn.com/brian_jones/
OneNote 12 Chris Pratley Chris Pratley’s OneNote Blog http://blogs.msdn.com/chris_pratley/
OneNote 12 Owen Braun Owen Braun  OneNote 12 http://blogs.msdn.com/owen_braun/
Outlook 12 Melissa MacBeth Tasks and Time Management in Outlook http://blogs.msdn.com/melissamacbeth/
Outlook 12 Michael Affronti michael affronti | microsoft outlook program manager http://blogs.msdn.com/michael_affronti/
Outlook 12 Will Kennedy Outlook 12 http://blogs.msdn.com/willkennedy/
Outlook 12 Extensibility Ryan Gregg Ryan’s Look at Outlook Programmability http://blogs.msdn.com/rgregg/
PDF Support in Office 12 Cyndy Wessling Save as PDF in Office "12" http://blogs.msdn.com/cyndy_wessling/
Presentation and Graphics Brendan Busch Brendan Busch’s blog on PowerPoint 12 http://blogs.msdn.com/brendanb/
Project 12 Dieter Zirkler Dieter’s ProjBlog http://blogs.msdn.com/dieterz/
Publisher 12 Jeff Bell On Microsoft Publisher and more http://blogs.msdn.com/jeff_bell/
SharePoint Products and Technologies Mike Fitz SharePoint Products and Technologies http://blogs.msdn.com/mikefitz/
SharePoint Products and Technologies SharePoint Team  A blog from the SharePoint Development Team http://blogs.msdn.com/sharepoint/
SharePoint Products and Technologies WCM Team Web Content Management in Office "12" http://blogs.msdn.com/wcm/
Visio 12 Eric Rockey What’s new in Visio 12 http://blogs.msdn.com/eric_rockey/
VSTO VSTO Team Microsoft Visual Studio 2005 Tools for the Microsoft Office System http://blogs.msdn.com/vsto2/
Windows Sharepoint Services PJ Hough Windows Sharepoint Services etc   http://blogs.msdn.com/pjhough/
Word 12  Joe Friend Joe Friend  Microsoft Office Word http://blogs.msdn.com/joe_friend/
XPS and Windows Digital Documents Andy Simonds My blog (Andy, GPM in Windows) about XPS and the Windows Digital Documents Team. http://blogs.msdn.com/andy_simonds/

Visual Studio 2005 – TableAdapters

Hace unos días, revisando las opciones para generar código automáticamente, me encontré con una agradable sorpresa, los TableAdapters. Este nuevo modelo, unido a un par de DataSet tipados, puede brindarnos grandes satisfacciones. Básicamente, constituyen una capa de acceso a datos en si misma, utilizando todas las primitivas de Ado.Net y aprovechando las ventajas de un editor 100% visual.

   

Antes de emitir un voto a favor, vemos en un par de pasos los puntos más interesantes a seguir.

   

  1. Dentro de VS2005, agregamos un nuevo DataSet a nuestro proyecto. En este caso trabajaremos con la base de datos Pubs, y arrastramos (Drag and Drop) la tabla Authors al diseñador de DataSet.

   

  1. Dentro del diseñador, en la sección del TableDataAdapter, podemos ver que poseemos las funciones Fill() y GetData() (la diferencia entre ambas radica en que la primera rellena un Table y la segunda retorna un Table). Si queremos agregar nuestras funciones personalizadas para trabajar directamente con los datos de la tabla Authors podemos hacer lo siguiente:
    • Botón derecho y seleccionar la opción Add Query. Esta pantalla nos presenta las opciones
    • Utilizar una sentencia SQL.
    • Agregar un store procedure.
    • Utilizar un store procedure ya existente.

 

    1. En este caso utilizaremos un Stored Procedure ya existente con el siguiente código.

   

ALTER PROCEDURE dbo.GetOneAuthor

(

       @au_id varchar(11) =

)

AS

       SELECT     au_id, au_lname, au_fname, phone,

                          address, city, state, zip, contract

       FROM         authors

       WHERE     (au_id = @au_id)

       RETURN

   

   

 

 

  1. Dentro del asistente de creación seleccionamos el procedimiento y completamos el nombre del mismo en la opción para generar los 2 tipos de funciones (Fill y GetData)

 

  1. El resultado final en el diseñador queda así:

   

 

 

 

Utilizando este mismo procedimiento, podemos optar por que el asistente cree automáticamente los accesos para el SELECT, UPDATE y DELETE con la tabla con la que estamos trabajando. En este caso, debemos tener cuidado ya que en el caso de la tabla authors, la generación automatica no reconoce algunos tipos de datos de la base de datos. El store procedure que se genera para la eliminación de un registro es el siguiente

   

   

CREATE PROCEDURE dbo.DeleteQuery

(

       @Original_au_id id,

       @Original_au_lname varchar(40),

       @Original_au_fname varchar(20),

       @Original_phone char(12),

       @IsNull_address unknown,

       @Original_address varchar(40),

       @IsNull_city unknown,

       @Original_city varchar(20),

       @IsNull_state unknown,

       @Original_state char(2),

       @IsNull_zip unknown,

       @Original_zip char(5),

       @Original_contract bit

)

AS

       SET NOCOUNT OFF;

DELETE FROM [dbo].[authors] WHERE (([au_id] = @Original_au_id) AND ([au_lname] = @Original_au_lname) AND ([au_fname] = @Original_au_fname) AND ([phone] = @Original_phone) AND ((@IsNull_address = 1 AND [address] IS NULL) OR ([address] = @Original_address)) AND ((@IsNull_city = 1 AND [city] IS NULL) OR ([city] = @Original_city)) AND ((@IsNull_state = 1 AND [state] IS NULL) OR ([state] = @Original_state)) AND ((@IsNull_zip = 1 AND [zip] IS NULL) OR ([zip] = @Original_zip)) AND ([contract] = @Original_contract))

   

   

Nota: en los parámetros, IsNull_address, IsNull_city, etc, el tipo de dato que se especifica para los mismos es unknown, por lo que este SP no se registra en la base de datos.

   

Desde aquí ya los pasos siguientes son los más simples y la verdad es que el resultado final es asombroso. Una vez que tenemos configurado nuestro DataSet con sus procedimientos que representan nuestra capa de datos, podemos utilizarlos desde nuestra aplicación.

   

Por ejemplo, si deseamos asociar a una DataGridView el resultado de la búsqueda de un autor, lo podemos hacer de la siguiente manera:

   

‘ define auid and create TableAdapter

Dim Au_Id As String = "172-32-1176"

Dim auth As New SampleTableAdapter.PubsTableAdapters.authorsTableAdapter

   

‘ get and display data

Me.DataGridView1.DataSource = auth.GetDataByAu_Id(Au_Id)

   

   

Este ejemplo, demuestra como en un par de minutos podemos crear una pequeña aplicación y definir una clase de acceso a datos en la misma. Sin embargo, un punto débil que tenían los generadores de código hasta este momento, era que en los mismos se quedaba “pegada” la cadena de conexión a la base de datos con la que se generaron los componentes. En este caso, podemos modificar esta configuración desde el archivo de configuración de la aplicación en su sección de conexiones, por ejemplo:

   

    <connectionStrings>

        <add name="SampleTableAdapter.My.MySettings.pubsConnectionString"

            connectionString="Data Source=.;Initial Catalog=pubs;Persist Security Info=True;User ID=123;Password=123"

            providerName="System.Data.SqlClient" />

    </connectionStrings>

   

   

La verdad es para pequeñas demos y aplicaciones simples, funciona de maravilla. Nunca debemos olvidar que una arquitectura más robusta debe pensar en un ejemplo, que utilice un Framework para la creación de aplicaciones, como por ejemplo Enterprise Library. Pero para un pequeño paso a paso en .Net, es interesante.

   

Saludos

 

 

PD: Pueden encontrar mas informacion en http://www.microsoft.com/spanish/msdn/articulos/archivo/141105/voices/tableadapters.mspx