.NET Rocks! – Rob Howard on the History of ASP.NET

Muy buen video de casi 2 horas de duracion, con un poco de la historia de Asp.Net. En particular, deja notar el camino que se esta por seguir y como se ha generado una nueva comunidad en torno a http://www.asp.net, para obtener nuevos requerimientos y un feedback mas profundo por parte de los desarrolladores.


Quick Description

Rob Howard drops in to talk to Carl and Richard about ASP.NET past, present, and future. Rob shares his insights as well as a few stories from his days on the ASP.NET team at Microsoft. He also talked about his current gig with Telligent Systems and what excites him the most about ASP.NET 2.0.

 

http://www.microsoft.com/downloads/details.aspx?FamilyID=e92e5384-9f7e-4900-838d-2a03d7f0f6b7&DisplayLang=en 

Advertisements

5000 Visitas !!!

 

 


78 Dias después de inaugurar oficialmente mi Blog …
Llegamos a las 5000 visitas


PD: Función para calcular la cantidad de días
 

Dim diff As Integer

diff = DateDiff(DateInterval.Day, CDate("14/04/2005"), Now)

MsgBox(diff)

Microsoft WS-I Basic Security Profile 1.0 Sample Application


Overview

The Microsoft WS-I Basic Security Profile 1.0 Sample Application is a preview release of the work being done by the WS-I Sample Application Working Group members to demonstrate interoperability of secure Web services. This release includes the Sample Application, which was developed using the .NET Framework version 1.1 and Microsoft Web Services Enhancements (WSE) 2.0. The accompanying documentation describes the design and implementation of the Sample Application.
 

http://www.microsoft.com/downloads/details.aspx?FamilyID=40e3d4c5-2105-47f1-ba26-9e4c29ba6990&DisplayLang=en 

Windows Desktop Search Extensibility for Partners (Beta)

News para el FileRules entre otros, Microsoft ha liberado la documentacion de la interfaz de manejo del Desktop Search. Por lo que podremos agregar nuestros contenidos personalizados al mismo.

Mas info –> http://addins.msn.com/devguide.aspx#WindowsDesktopSearchApi
–> http://desktop.msn.com/
–> http://g.msn.com/8SEURL/enusDownloadSuiteURLbdy_dshome

Remoting Helper


Usualmente cuando utilizamos componentes y los publicamos con Remoting, se dificulta mantener una configuracion coherente de las partes del sistema. He visto lugares donde se utiliza un archivo Remoting.Config para guardar la configuracion de los componentes, y luego dentro de otro archivo .config, se guarda casi el mismo dato para poder usarlo desde la aplicacion.
 
Una de las tecnicas aconsejdas por Microsoft y que por lo general da muy buen resultado, es guardar la configuracion en un archivo .Config (Remoting.Config por ejemplo) y al momento de inicializar la aplicacion cargar dinamicamente esta configuracion. En el caso de una aplicacion Windows, a esto lo podemos hacer en el evento Load del Form de la siguiente manera
 

Private Sub frmPrincipal_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

  ‘ carga la configuracion de los componentes de Remoting

  Dim remFile As String = "Remoting.config"

  System.Runtime.Remoting.RemotingConfiguration.Configure(remFile)

End Sub


 
El archivo Remoting.Config podria contener la siguiente informacion
 

<

configuration>

  <system.runtime.remoting>

  <application>

  <channels>

    <channel ref="http" useDefaultCredentials=’true’>

    <clientProviders>

      <formatter ref="binary"></formatter>

    </clientProviders>

    </channel>

  </channels>

  <client>

    <wellknown type="ICliente, ICliente" url="http://localhost/ServidorComponentes/Cliente.soap"></wellknown>

  </client>

  </application>

  </system.runtime.remoting>

</

configuration>


 
Cuando se desea crear una nueva instancia de un componente, por lo general necesitamos conocer el tipo de objeto que queremos probar y la url donde se publica el mismo. Usualmente se utiliza el objeto Activator y las lineas para inicializar un componente de Remoting son:
 

Dim urlRem As String

Dim iC As ICliente

urlRem = "http://localhost/ServidorComponentes/Cliente.soap&quot;

iC = Activator.GetObject(

GetType(ICliente), urlRem)


 
Sin embargo, si ya tenemos cargada la informacion desde el archivo .config, se puede acelerar el proceso de creacion de componentes, leyendo la informacion desde el registro local de componentes de Remoting. Para esto podemos utilizar el metodo RemotingConfiguration.GetRegisteredWellKnownClientTypes  
 

RemotingConfiguration.GetRegisteredWellKnownClientTypes (Método) 
Recupera una matriz de tipos de objetos registrados en el cliente como tipos conocidos.
[Visual Basic]
Public Shared Function GetRegisteredWellKnownClientTypes() As WellKnownClientTypeEntry()
Valor devuelto
Matriz de tipos de objetos registrados en el cliente como tipos conocidos.
Comentarios
Los tipos de objetos conocidos pueden ser llamadas únicas o singleton. Si un tipo de objeto es una llamada única, se crea una nueva instancia de él cada vez que se recibe una llamada del cliente. Todas las llamadas a un objeto singleton se controlan mediante una instancia de ese objeto.

 
Utilizando este metodo, podemos crear un helper, que cargue internamente una lista de los objetos que estan configurados y luego, permita de una manera las simple, crear los objetos Remoting. Para esto creamos una clase Helper.
 

Imports System.Runtime

Imports

System.Runtime.Remoting

 

Public Class RemotingHelper

”’ —————————————————————————–

”’ <summary>

”’ Define si se ha inicializado el diccionario shared que almacena los tipos

”’ que se pueden acceder desde remoting

”’ </summary>

”’ <remarks>

”’ </remarks>

”’ <history>

”’ [BCA] 27/06/2005 Created

”’ </history>

”’ —————————————————————————–

Public Shared mLoaded As Boolean

”’ —————————————————————————–

”’ <summary>

”’ Almacena los tipos que se pueden acceder desde Remoting

”’ </summary>

”’ <remarks>

”’ </remarks>

”’ <history>

”’ [BCA] 27/06/2005 Created

”’ </history>

”’ —————————————————————————–

Public Shared mWellKnownTypes As IDictionary

”’ —————————————————————————–

”’ <summary>

”’ Retorna un objecto, a partir del tipo del mismo. Se crea en base a la

”’ definicion de los objetos que se pueden crear remotos

”’ </summary>

”’ <param name="type">Tipo del Objeto a crear</param>

”’ <returns>New Object</returns>

”’ <remarks>

”’ </remarks>

”’ <history>

”’ [BCA] 27/06/2005 Created

”’ </history>

”’ —————————————————————————–

Public Shared Function GetObject(ByVal type As Type) As Object

Dim strExc As String

‘ inicializa el cache de objetos

If Not mLoaded Then

LoadRemTypes()

End If

‘ obtiene el tip

Dim entr As WellKnownClientTypeEntry = mwellKnownTypes(type)

If entr Is Nothing Then

strExc = "Type [{0}] not found!"

strExc =

String.Format(strExc, type.ToString)

Throw New RemotingException(strExc)

End If

‘ crea el objeto

Return Activator.GetObject(entr.ObjectType, entr.ObjectUrl)

End Function

”’ —————————————————————————–

”’ <summary>

”’ Inicializa el diccionario interno de Objetos que se pueden crear por remoting

”’ </summary>

”’ <remarks>

”’ </remarks>

”’ <history>

”’ [BCA] 27/06/2005 Created

”’ </history>

”’ —————————————————————————–

Public Shared Sub LoadRemTypes()

Dim sExcepcion As String = ""

Dim sAssName As String

mLoaded =

True

mwellKnownTypes =

New Hashtable

‘ recorre los tipos que se pueden crear

For Each entr As WellKnownClientTypeEntry In RemotingConfiguration.GetRegisteredWellKnownClientTypes()

If (entr.ObjectType Is Nothing) Then

Try

sAssName = entr.AssemblyName

Catch

sAssName = "No Assembly Name defined."

End Try

sExcepcion = "A configured type could not be found. Please check spelling. AssemblyName: [{0}]"

sExcepcion =

String.Format(sExcepcion, sAssName)

Throw New RemotingException(sExcepcion)

End If

‘ agrega el nuevo tipo

mwellKnownTypes.Add(entr.ObjectType, entr)

Next

End Sub

End Class


 
( Les debo la indentacion  ) Finalmente la creacion de un objeto a partir de un servidor de componentes Remoting, queda mucho mas simple
 

Dim iC As ICliente

iC = RemotingHelper.GetObject(GetType(ICliente))


 
Pues bien, este es un pequeño ejemplo de algo que tambien nos ayuda a programar de una forma mas simple.
 
Tb esta publicado en el Guille http://tinyurl.com/dj82z

Maite y .Net 1.1

Todd en su excelente blog (http://msmvps.com/tcrichard/archive/2005/06/28/56176.aspx) que esta dedicado a temas de tecnologia Microsoft en general, trae una frase que no conocia:
 
Todo buen Blog tiene la foto de un Gato
 
siendo fiel a esta frase, pongo la foto de mi gatito .Net 1.1 y de la gatita de mi mujer Maite.
 
 
Saludos
 
PD: El gatito .Net 1.1, es el que le siguio al .Net 1.0 que se murio hace unos años. Ahora en España, cuando pueda me actualizo una nueva mascota .Net 2.0 (BETA)

TinyUrl

Buenas,
leyendo mails, y gracias a uno de Eugenio Serrano (http://tinyurl.com/63ybf) llegue a esta url www.tinyurl.com. Este site permite convertir una url de esas que son feas de poner en un site, en una mucho mas corta.
 
Por ejemplo;
 
Saludos
 


 

TinyURL was created!

The following URL:

http://www.elguille.info/colabora/NET2005/bcapuano_Filtrar_D
atos_en_un_DataTable.htm

has a length of 84 characters and resulted in the following TinyURL which has a length of 24 characters:

http://tinyurl.com/8wgry

[Open in new window]

Note: For IE 4+ on Windows, the TinyURL is automatically copied to your clipboard and is ready for pasting (using Ctrl-V). To copy the TinyURL to your clipboard, either select the text and copy using Ctrl-C, or right click the link next to the TinyURL and select the copy link location option.

Filtrar datos dentro de un DataTable

 
Usualmente cuando trabajamos con un objeto DataTable, nos vemos en la necesidad de filtrar los datos del mismo. Para esto podemos usar un DataView, asociado al DataTable, o utilizar el metodo Select() del DataTable para retornar un set de datos, aplicandoles un criterio.
 
El unico inconveniente que posee el metodo Select(), es que retorna un Array de DataRow. La forma usual de trabajar con este metodo seria
 

Sub Sample1()

  Dim dt As DataTable

  Dim sort As String

  Dim filter As String

  Dim rows As DataRow()

  ‘ get data

  dt = getdata()

  ‘ sort and filter data

  rows = dt.Select(filter, sort)

  ‘ work with selected rows

  For Each dr As DataRow In rows

    ‘ some work

  Next

End Sub

 
Sin embargo, ya que Ado.Net nos brinda un modelo de objetos mas que poderoso, parece poco apropiado trabajar con un Array.
Una solucion que cree para este problema, fue la siguiente funcion
 

Function SelectDataTable(ByVal dt As DataTable, ByVal filter As String, ByVal sort As String) As DataTable

  Dim rows As DataRow()

  Dim dtNew As DataTable

  ‘ copy table structure

  dtNew = dt.Clone()

  ‘ sort and filter data

  rows = dt.Select(filter, sort)

  ‘ fill dtNew with selected rows

  For Each dr As DataRow In rows

    dtNew.ImportRow(dr)

  Next

  ‘ return filtered dt

  Return dtNew

End Function

 
La misma  aplica un filtro en una DataTable y con el Array de DataRows que retorna, crea una nueva tabla y la retorna. El codigo del primer ejemplo, quedaria de la siguiente manera
 

Sub Sample2()

  Dim dt As DataTable

  Dim dtNew As DataTable

  ‘ get data

  dt = getdata()

  ‘ sort and filter data

  dtNew = SelectDataTable(dt, "Filter", "sort")

  ‘ work with selected rows

  For Each dr As DataRow In dtNew.Rows

    ‘ some work

  Next

End Sub

 
Otra opcion es heredar de DataTable y agregar este metodo
 
En la nueva version de Ado.Net, este problema estara solucionado, sino podemos votarlo en http://lab.msdn.microsoft.com/productfeedback/viewfeedback.aspx?feedbackid=5421ba0b-0474-41c4-ac6f-8ce226b28ae8.
 
Saludos
 
PD: Tb lo publique en el Guille  http://tinyurl.com/8wgry
 

JavaOne en San Francisco

Mi amigo Julian esta en San Francisco, en el JavaOne. En su Blog, nos ofrece una vision, mas que interesante sobre este evento chetisimo. Lo mas interesante llega en estos dias, cuando hacen comparaciones y comentarios sobre lo nuevo de J y .Net 😀

Para mas info consulten su blog –> http://jfreesource.blogspot.com/

————————————————————————————————-

Me estoy llendo al Java One, que son las conferencias mundiales sobre la plataforma JAVA, para mas informacion hacer click aqui.
Bueno, espero disfruten de lo que cuento, tanto como yo voy a disfrutar el viaje.