viernes, 21 de agosto de 2009

Actualizados los HOLs de WF para C# y VB.NET

Microsoft publicó hace unos días la última actualización de sus HOL (Hands On Labs) sobre Microsoft Windows Workflow Foundation (WF) para C# y VB.NET.

Los laboratorios están preparados tanto para Microsoft .NET Framework 3.0 como para Microsoft .NET Framework 3.5.

En el caso de Microsoft .NET Framework 3.0, necesitaremos las extensiones de Windows Workflow Foundation para Visual Studio, mientras que en el caso de Visual Studio 2008 (.NET Framework 3.5), no serán necesarias estas extensiones.

Las descargas oscilan entre 16.4 Mb y 11.5 Mb según queramos los HOL para Microsoft .NET Framework 3.0 o para Microsoft .NET Framework 3.5.

Referencias:

Acceso a la página de descarga de Microsoft de los HOL.


Fuente: http://geeks.ms/blogs/jorge/archive/2009/08/20/actualizados-los-hols-de-wf-para-c-y-vb-net.aspx

Ventana Pop Up con ASP.NET

Desde que las paginas web se han convertido en un estandar de la internet, como el medio principal para interectuar con los usuarios de computadora alrededor del mundo. El documento html a evolucionado fuertemente dando entrada a temas como los lenguaje de interpretado y plataforma de desarrollo web dinamico.

Mucha paginas web adoptan caracteristicas similar a la interfaz de un aplicación windows incluso a nivel de interación de ventanas. entonce el presente articulo tiene como finalidad dar focar al aspecto de llamada de ventanas web emergentes en diferentes modalidades .

En ASP.NET tiene excelente capacidades en relación con javascript estandares para logra atractivo comportamiento de las ventanas web emergente con las paginas aspx.

Acontinuación se meciona algunos JavaScript de interes para este proposito:

  • open : Abre una ventana nueva y carga el documento web especificado por una URL determinada.
  • opener : Establece o recupera una referencia a la ventana que creó la ventana actual.
  • showModalDialog : Crea un ventana dialogo modal que muestra el documento web especificado.
  • ShowBrowserUI : Abre el cuadro de diálogo Explorador especificada.
  • showModelessDialog : Crea un cuadro de diálogo no modales que muestra el documento HTML especificado.
  • showHelp : Muestra un archivo de ayuda. Este método puede utilizarse con ayuda de HTML de Microsoft.
  • show : Muestra una ventana emergente en la pantalla.

Para mayor información acerca del uso de estos metodos consulte los Metodos DHTML

Ahora se menciona pasos breve para logra que cualquier paginas ASP.NET se comporte como pagina cargada en ventana del explorador tipo emergente.

  1. Se inicia visual studio 2005 o superior, luego seleciona un proyecto de aplicación web en lenguaje deseado. para fines de este articulo se usa el lenguaje Visual Basic.
  2. Ahora se habla de tres modalidad de ventana Emergente web para este articulo (open, showModalDialog, showModelessDialog) de ahi su concepto son Auto descriptible.
  3. Se agrega de inmediato un elemento nuevo del tipo JavaScript (script.js), el cual contendra los javascript clave que se estaran usando de forma centralizada, cuyo metodos y parametros son los siguientes:
    • UpdateTexto(idname,valor) : Metodo para fijar valor en un objeto de entrada (caja de texto).
    • OpenCatalago(idname, postBack, Ancho, Alto, PaginaWeb) : Metodo para abrir ventana del navegador emergente cargando determinada pagina aspx desde otra pagina aspx la cual es la principal.
    • SetDatos(formName, idname, newData, postBack) : Metodo para fijar valor en un objeto perteneciente a una pagina aspx principal donde se invoco la otra pagina aspx en formato navegador emergente.
    • VentanaDialogoModal(url,Arg,Ancho, Alto, idname) : Metodo para Invocar pagina aspx en una ventana de dialogo modal emergente del navegador .
    • VentanaDialogoNoModal(url,Arg,Ancho, Alto, idname) : Metodo para Invocar pagina aspx en una ventana dialogo no modal emergente del navegador.
    • idname : nombre identificador del objeto html contenido en la pagina.
    • valor : valor especifico para un objeto html
    • postBack : valor booleano para establecer postBack de la pagina
    • Ancho : Ancho de la ventana del navegador donde carga determinada Pagina aspx.
    • Alto : Alto de la ventana del navegador donde carga determinada Pagina aspx.
    • PaginaWeb : Nombre de la pagina aspx
    • newData : Nuevo dato para fijar en objeto de destino.
    • Arg : Argumento que puede representar un valor o estructura de objeto.
  4. Entonce se agraga 3 paginas ASPX :
    • WebVentana.aspx ->open,
    • WebVentana2.aspx ->showModalDialog,
    • WebVentana3.aspx ->showModelessDialog
  5. Se incluye una referencia del javascript (script.js) en cada pagina del proyecto:
    • <head runat=”server”>
      <title>Popup en ASP.NET</title>
      <script type=“text/javascript” src=“script.js” ></script>
      </head>
  6. En la pagina default.aspx vamos agregar una caja de texto y tres botones del tipo HTML, el cual sera convertido en objeto del lado del servidor.
  7. En las paginas Web: WebVentana.aspx , WebVentana2.aspx se agrega una caja de texto y un boton del tipo HTML y en WebVentana3.aspx se agrega un Caja de texto y tres botones del tipo HTML. Todos ellos sera tambien convertido en objetos del lado del servidor.
  8. Una vez construido el esqueleto del proyecto, en la pagina default.aspx vamos programar en el evento load los respecitvos enlaces javascript con los objectos HTML de lado del servidor.
    • Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
      If Not Me.IsPostBack Then
      Button1.Attributes.Add(”Onclick”, “javascript:OpenCatalago(Text1, false ,515, 400,WebVentana.aspx)”)
      Button2.Attributes.Add(”Onclick”, “javascript:VentanaDialogoModal(WebVentana2.aspx,Text1.value,400,400,Text1);”)
      Button3.Attributes.Add(”Onclick”, “javascript:VentanaDialogoNoModal(WebVentana3.aspx,window,400,400,Text1);”)
      End If
      End Sub

Una vez más se encuentra una forma versátil de generar sitio web ASP.NET con capacidades especiales de ventana emergente del explorador, para centrar todo los proceso de operación en un pagina principal sin necesidad de desplazarla.

Para mayor detalle, anexo codigo fuente en visual studio 2005 Codigo fuente ASP.NET Popup

Fuente: http://jorgepedraza.wordpress.com/2009/07/16/asp-net-popup/

Convertir pagina HTML a ASP.NET

Uno de los escenarios web que se puede encontrar cualquier desarrollador de página Web dinámica como es el caso ASP.NET; es tratar de crear, mantener y entregar sitio ASP.NET atractivos y funcionales acorde con requerimientos específicos. Y todo esto basado en organizaciones (Compañía de Software) Heterogénea, donde existe equipos de desarrollo (ASP.NET), equipos de diseñadores grafico (Plataforma y Herramientas de diseño de Tercero) así como coordinadores de proyecto separado geográficamente.
Dado a esta situación el desarrollador ASP.NET va depender primeramente de la aprobación de la estructura del sitio web; posteriormente la elaboración y entrega del arte (Plantilla web HTML) por parte del equipo de diseño grafico y finalmente es donde dicho desarrollador web dinámico (ASP.NET) genera todo la ingeniera de código web dinámico relacionado con el sitio.
Entonces el presente artículo tiene como finalidad básica de exponer una forma sencilla y directa de convertir cualquier sitio web estático (Páginas Web HTML) a proyecto ASP.NET (Pagina Dinámica).

Para fines de este articulo, se va utilizar un proyecto web ASP.NET 2.0 con lenguaje Visual Basic 2005, ademas de un plantilla web de prueba que se puede encontrar en sitios web gratis o pago; una vez claro con estas pautas se comenta los siguientes:

  1. Establecemos la plantilla web para el supuesto cliente. Un ejemplo de esto puede ser:plantillas-gratis-014.
  2. Creamos un proyecto del tipo Aplicación Web ASP.NET, el cual llamaremos ASPNETCasinoOnline.
  3. Por defecto en el proyecto ASP.NET encontramos basicamente dos archivos (default.aspx y Web.Config), del cual podemos prescindir de default.aspx, pulsando boton derecho sobre èl desde el explorador de soluciones y luego click en delete o eliminar.
  4. Ahora explico una forma rapida y sencilla para que la plantilla web con todo su contenido forma parte del proyecto ASP.NET en Cuestion: y es simplemente copia todo el contenido relacionado con la plantilla incluyendo la pagina html en la caperta del proyecto ASP.NET creado previamente; notando que la ubicación exacta sea donde esta el archivo Web.Config.
  5. Volvemos a Visual Studio y buscamos en el explorador de soluciones, y nos situamos en la opción mostrar todos los Archivos o Show All files, en algunos casos solo se actualiza:SESAF, luego debe aparecer las información relacionado con la plantilla y es ahi donde por cada elemento debemos incluir en proyecto o Include in Project: ESIP y finalmente se completa como:ListoSE.
  6. Se procede a cambiar la extensión de index.html a index.aspx.
  7. Se agrega un elemento nuevo del tipo Class.vb con el siguiente nombre index.aspx.vb; posteriormente en su contenido se reemplaza con: Public Class index Inherits System.Web.UI.Page End Class.
  8. Se agrega un elemento nuevo del tipo Class.vb con el siguiente nombre index.aspx.designer.vb; posteriormente en su contenido se reemplaza con: Partial Public Class index Protected WithEvents form1 As Global.System.Web.UI.HtmlControls.HtmlForm End Class
  9. Se pulsa boton derecho sobre index.aspx y se da click vista de marcado o view Markup
  10. Se anexa en la primera linea del documento HTML: <%@ Page Language=”vb” AutoEventWireup=”false” CodeBehind=”index.aspx.vb” Inherits=”ASPNETCasinoOnline.index” %>
  11. Se busca y modifica lo siguiente:
    form1” name=”form1” method=”post” action=”"> a form1″ runat=”server>
  12. Ahora se pone en juego hacer que cada elemento HTML de interés se convierta en un objeto de lado del servidor insertando dentro de la etiqueta html la palabra clave runat=”servery además un nombre especifico para el Id de la etiqueta. Ejemplo: <a href=”" id=”linkDownloadrunat=”server >Downloada>. Luego ya tenemos visibilidad de los objetos html de lado de servidor con relación al codigo de programación .net.

Una vez entendido estas series de pasos sencillos; se puede utilizar de forma analoga para cualquier objeto del tipo html y plantilla relacionada. incluso se puede aprovechar esta plantilla para crear un MasterPage.

En conclusión encontramos una forma ideal para trabajar alineado con algunos escenarios de desarrollo web aplicado en Organización heterogénea, el cual permitirán sacar mayor partido de la solución Planteada, junto con las herramientas de desarrollo web de Microsoft.

Para Mayor Información Anexo POnlineCasino y ASPNETCasinoOnline


Fuente: http://jorgepedraza.wordpress.com/2009/07/20/convertir-pagina-html-a-asp-net/

C# – la palabra clave volatile, explicación y ejemplos

La palabra clave volatile es una de esas palabras clave muy pocas veces comprendidas, la documentación presente en msdn permite concluir que hay que utilizarla siempre que se manejen hilos, pero esto no siempre es así. Sin embargo lograr identificar que es lo que hace realmente esta palabra clave es una labor complicada así que dedicaré este artículo a explorar esta funcionalidad y a crear un ejemplo práctico que permita entender su verdadera naturaleza.

La documentación msdn

En msdn encontramos la siguiente definición de la palabra clave volatile:

La palabra clave volatile indica que varios subprocesos que se ejecutan a la vez pueden modificar un campo. Los campos que se declaran como volatile no están sujetos a optimizaciones del compilador que suponen el acceso por un subproceso único. Esto garantiza que el valor más actualizado está en todo momento presente en el campo

información completa

Debemos resaltar dos aspectos importantes de ese texto:

  1. Se menciona que los campos volatile no son susceptibles de optimizaciones por parte del compilador. Cuales optimizaciones?
  2. Dice que esto garantiza que el valor más actualizado siempre esta presente en el campo. No se supone que esto es así siempre?

A continuación revisaremos estas dos preguntas.

Optimizaciones del compilador

Siempre que compilamos un programa hecho con C# el compilador se encarga de convertir ese código C# en código de lenguaje IL, bueno realmente en OpCodes de IL. Esto es así de sencillo, pero resulta que cuando compilamos nuestro código en la configuración release o más específicamente cuando se marca la casilla de Optimizar código en el proyecto (ver imagen) el compilador realiza una revisión general del código par determinar que cosas puede hacer funcionar de una manera mejor a la que codificó el programador inicialmente o incluso como puede cambiar las cosas en el ejecutable que no están en manos del programador ni del propio lenguaje para que a la hora de ejecutarse el programa sea más eficiente.

image

Estas optimizaciones son calculadas por el compilador haciendo uso de un complejo juego de reglas algunas de las cuales dependen de la arquitectura del procesador ( x86, x64, IA64, etc) y algunas otras del modelo de memoria que se esta trabajando. Los modelos de memoria son un tema complejo incluso desde sus fundamentos si bien no es algo imposible de aprender, pero quien quiera puede profundizar un poco más al respecto puede leer el libro de Sistemas Operativos Modernos de Andrew Tanembaum y desde luego buscar referencias adicionales en internet.

Adicionalmente a las optimizaciones realizadas por el compilador de C# tenemos una segunda etapa de compilación y optimizaciones realizadas por el JIT al momento de ejecutarse el programa, las cuales tiene su propio conjunto de reglas algunas de las cuales también están influenciadas por la arquitectura del procesador y el modelo de memoria.

El Valor Actualizado

Parte de las optimizaciones realizadas por el compilador pueden evitar que en algún momento determinado los campos de memoria donde se encuentran las variables no sean actualizados con su valor más reciente, porque?

Cada vez que el procesador hace una operación necesita colocar el valor de las variables en uno de sus registros, de tal forma que si tenemos por ejemplo un bucle con una suma de esta manera:

int i = 0;
while (condicion)
{
i = i + 1;
}

El procesador enviaría el valor de “i” a uno de sus registros y el valor ”1” en otro registro, al obtener el valor de la suma el procesador debe colocar este valor de nuevo en memoria en la variable “i” de tal forma que al continuar el bucle todo el proceso se repite.

Esta secuencia sin embargo puede ser optimizada por el compilador ya que se hace innecesario que el valor de “i” sea copiado de los registros de la CPU a la memoria y viceversa tantas veces como dure el bucle, así que el compilador genera un código ejecutable que permite que los cálculos sean hechos en su totalidad en los registros de la CPU y solo hasta salir del bucle estos datos serian copiados de nuevo a la memoria.

Este tipo de optimizaciones que usan ”cache” trae una mejora considerable en la ejecución de procesos intensivos a nivel matemático y funcionan bastante bien en la mayoría de los escenarios.

Optimizaciones de cache y el problema de los hilos

Cuando el compilador esta realizando las optimizaciones analiza (de acuerdo a los estándares) todo lo que pueda hacer referencia a las variables en el contexto de ‘subproceso’ actual ( realmente en la mayoría de sistemas operativos no se ejecutan los procesos sino los subprocesos y se le llama proceso a un grupo de subprocesos que comparten la memoria ), así que con base a lo analizado realiza las optimizaciones, por ello el problema surge cuando un hilo trata de acceder a una variable que esta siendo modificada por un objeto que se ejecuta en un hilo diferente, ya que es posible que el hilo dueño de la variable se encuentre en medio de un proceso optimizado para funcionar por cache en los registros y al no estar verificando el valor de la variable en memoria pues no vera los cambios realizados, de hecho los sobrescribirá al finalizar. Así que en escenarios donde existan múltiples hilos lo ideal es bloquear este tipo de optimizaciones y estar muy atento a los casos donde no sea conveniente inactivarlas pues hay casos para todo.

El Ejemplo

Bien después de la teoría veamos la práctica, veremos ejemplos donde volatile no sirve para nada ( y creo que son la mayoría de casos en el mundo real – al menos en CPUs x86 ya que en IA64 al parecer el tema es muy diferente), y finalmente un caso que de acuerdo a la teoría que acabamos de ver funcionara perfectamente desde que lo compiles para x86.

Sobra decir que para probar los ejemplos lo debes hacer con la versión Release del ejecutable.

Ejemplo 1

Este es el ejemplo típico, donde todos usamos volatile porque así lo dice la documentación pero la realidad es que en estos casos no sirve de NADA.

using System.Threading;
using System;

static class BackgroundTaskDemo
{
//volatile
static int i = 0;
private static bool stopping = false;

static void Main ()
{
new Thread(EfectuarTrabajo).Start();
Thread.Sleep(5000);
stopping = true;


Console.WriteLine("Main exit");
Console.ReadLine();
}

static void EfectuarTrabajo()
{
i++;
Console.WriteLine("Valor de i="+i);
Console.WriteLine("EfectuarTrabajo exit " + i);
}
}

Podríamos ponerle a “i” como volatile pero no habría diferencia puesto que básicamente el código no necesita ni tiene como ser optimizado. Así que volatile no bloquearía ninguna optimización.

Ejemplo 2

Este es el ejemplo tampoco sirve de NADA, si bien en el bucle se ve la necesidad de optimizar el rendimiento del código evitando que se copie el valor de “i” o de “stopping” de los registros de la CPU a la memoria y viceversa resulta que al convertir “i” a string estamos forzando al compilador a que no utilice el cache dado que necesita el valor mas reciente de “i” en la memoria para poder llamar el método ToString() y al método WriteLine, adicionalmente al llamar a alguno de esos métodos se requiere colocar en los registros de la CPU los valores necesarios para cambiar de contexto y para poder ejecutar las operaciones internas de dichos métodos, así que no hay manera de optimizar nada.

using System.Threading;
using System;

static class BackgroundTaskDemo
{
//volatile
private static bool stopping = false;

static void Main ()
{
new Thread(EfectuarTrabajo).Start();
Thread.Sleep(5000);
stopping = true;


Console.WriteLine("Main exit");
Console.ReadLine();
}

static void EfectuarTrabajo()
{
int i = 0;

while (!stopping)
{
i++;
Console.WriteLine("Valor de i=" + i.ToString());
}
Console.WriteLine("EfectuarTrabajo exit " + i);
}
}

Nuevamente podríamos ponerle a “i” como volatile pero no habría diferencia puesto que básicamente el código no necesita ni tiene como ser optimizado. Así que volatile no bloquearía ninguna optimización.

Ejemplo 3

En este SI que funcionan las optimizaciones, ya que el compilador optimizara el uso de “i” para que se apoye en los registros del procesador de principio a fin, eso es perfecto!, pero por otro lado “stopping” también es optimizado, trayendo como resultado que siempre este en uno de los registros y por tanto nunca se entere en que momento “stopping” cambio de valor para que saliera del bucle.

using System.Threading;
using System;

static class BackgroundTaskDemo
{
private static bool stopping = false;

static void Main ()
{
new Thread(EfectuarTrabajo).Start();
Thread.Sleep(5000);
stopping = true;


Console.WriteLine("Main exit");
Console.ReadLine();
}

static void EfectuarTrabajo()
{
int i = 0;

while (!stopping)
{
i++;
Console.WriteLine("Valor de i=" + i.ToString());
}
Console.WriteLine("EfectuarTrabajo exit " + i);
}
}

Al ejecutar la version release para x86 de este programa veremos como, aunque en codigo parece que todo saldra bien, al ejecutarse el programa este nunca terminara pues el hilo nunca se entera que “stopping” cambio su valor. En pantalla veriamos perpetuamente

Main Exit

Y nada más :(

Ese es el ejemplo perfecto de la funcionalidad de volatile, así que podemos ahora marcar el campo “stopping” como volatile, compilar y ejecutar la versión release… y AHORA SI FUNCIONA COMO DEBERIA DE SER!!!

using System.Threading;
using System;

static class BackgroundTaskDemo
{
private volatile static bool stopping = false;

static void Main ()
{
new Thread(EfectuarTrabajo).Start();
Thread.Sleep(5000);
stopping = true;


Console.WriteLine("Main exit");
Console.ReadLine();
}

static void EfectuarTrabajo()
{
int i = 0;

while (!stopping)
{
i++;
Console.WriteLine("Valor de i=" + i.ToString());
}
Console.WriteLine("EfectuarTrabajo exit " + i);
}
}

Ahora si en pantalla veríamos

Main Exit
EfectuarTrabajo exit xxxxxxxx

:)

Ejemplo 4

Este es el mismo ejemplo un poco mas elaborado haciendo uso de algunas operaciones de System.Math las cuales son suceptibles de optimización:

using System.Threading;
using System;

static class BackgroundTaskDemo
{
//volatile
private static bool stopping = false;

static void Main ()
{
new Thread(EfectuarTrabajo).Start();
Thread.Sleep(5000);
stopping = true;


Console.WriteLine("Main exit");
Console.ReadLine();
}

static void EfectuarTrabajo()
{
int i = 0;
int j = 2;

while (!stopping)
{
i++;
j = 100 + (int)Math.Sin((double)i * 10d);
}
Console.WriteLine("EfectuarTrabajo exit " + i);
}
}

Prueben quitando y poniendo volatile y verán la diferencia.

Eso es todo.

Hasta pronto.


Fuente: http://juank.black-byte.com/c-explicacion-ejemplo-volatile/

Microsoft Touch Pack for Windows 7

Ultimamente he estado leyendo mucho de Windows 7 ya que esta nueva version del sistema operativo de Microsoft me tiene bastante interesado por la gran cantidad de mejorias y nuevas caracteristicas en comparacion son su predecesor.

Pero hay una caracteristica que me parece muy interesante y es Windows Touch que es la integracion de la tecnologia de Microsoft Surface en Windows 7 la cual incluira un paquete de aplicaciones adicionales llamado Windows Touch Pack, el cual es es un conjunto de seis aplicaciones y juegos que están diseñados para mostrar realmente la capacidad de Windows Touch en Windows 7. Se compone de 3 juegos casuales, y 3 aplicaciones de Microsoft Surface que se han creado para Windows 7.

A continuacion algunas imagenes del Windows Touch Pack



Microsoft Surface Globe, con esta aplicacion se puede tener el mundo en la palma de las manos,pueden ver el funcionamiento en este video, anteriormente he tenido la oportunidad de probar esta aplicacion en un Microsoft Surface y su funcionalidad es bastante interesante asi como su facilidad de uso.


Microsoft Surface Collage! Aplicacion para el manejo de imagenes usando como base Microsoft Surface.

Microsoft Surface Lagoon es un salvapantallas que puede interactuar con el uso del Touch Screen. Este salvapantallas recrea el entorno natural de un lago y un banco de peces.
Realmente estas aplicaciones nos dan una idea de lo que sera el futuro con Windows touch, si desean pueden ver el articulo completo en el blog del equipo de Windows 7

Fuente: http://mundomoss.blogspot.com/2009/06/microsoft-touch-pack-for-windows-7.html

Sharepoint 2010 Primera Mirada

Desde el dia de hoy ya se encuentra disponible desde el blog oficial del product team y en la pagina oficial del producto una mirada SharePoint 2010 que incluye 3 videos muy interesantes sobre algunas de las nuevas funcionalidades del producto, estos 3 videos que les menciono se dividen en un overwiew general de la herramienta asi como un video orientado a los IT Professional y otro orientado a los desarrolladores.( Les recomiendo que vean los 3)

Adicionalmente en la pagina encontraran informacion sobre como estar preparados para la nueva version del producto y que necesitamos para poder migrar nuestra plataforma una vez que se de el lanzamiento de Sharepoint y por ultimo pero no menos imporante en la pagina encontraran la nueva version de la famosa rueda o circulo de Sharepoint 2007 (la cual ya conocemos bastante), de la cual les paso una imagen


Espero que esto no haya sido mas que un aperitivo o abrebocas de todo lo que tiene para mostrarnos Sharepoint 2010, ya que no falta mucho tiempo para el Sharepoint Conference en donde habra muchisima informacion sobre esta nueva version.

Fuente: http://mundomoss.blogspot.com/2009/07/sharepoint-2010-primera-mirada.html

Windows 7 para Desarrolladores


No es el tema comun de este blog pero me parecio interesante para todos los desarrolladores y es el nuevo training kit para developers en Windows 7 que ya se encuentra en version RTM (Ready to manufacture), a continuacion les dejo el post official de Microsoft Learning

To help you get your application on Windows 7 as soon as possible, we updated the Windows 7 Training Kit for Developers for the RTM version and gave it a n=ew look and better functionality. You can still find all existing topics such as: Taskbar, Sensor and Location, Libraries and Shell, DirectX, Multi-touch, Ribbon, etc.

No dev was left behind! The kit is built for both native Win32 C++ developers and .NET developers, so now most topics have multiple labs.We also added 6 new Application Compatibility labs: Version Checking, Data Redirection, UIPI, Installer Detection, Session 0 Isolation, and High DPI, to help you get over the most common application compatibility issues.

All the topics in the training kit include additional information like whitepapers, links to MSDN, and links to videos from Channel 9.

Fuente: http://mundomoss.blogspot.com/2009/08/no-es-el-tema-comun-de-este-blog-pero.html

Video Introductorio a Que es Sharepoint?



A los que trabajamos en Sharepoint a menudo nos sucede que la gente que conoces que no tiene relacion con la tecnologia te pregunta en que trabajas? y cuando les dices que eres Consultor en Sharepoint, la pregunta que casi siempre sigue es Que es eso? para que sirve? etc etc.

Asi que para solventar un poco estre problema que a menudo nos aqueja les paso un video bastante explicativo y muy sencillo sobre lo que es Sharepoint, les dejo el link en you tube y en MSN:


Espero que esto les ayude a poder explicarle finalmente a todas sus amistades no relacionadas con tecnologia en que trabajan en el dia a dia.

Fuente: http://mundomoss.blogspot.com/2009/08/video-introductorio-que-es-sharepoint.html

Creando contenido dinámico en PHP para Silverlight

Introducción

Como mencionábamos en el artículo anterior, Silverlight puede ser hospedado en prácticamente cualquier tecnología Web del lado del Servidor. Asimismo podemos utilizar las características de la tecnología que estemos utilizando para poder crear Xaml de manera dinámica y enviar dicho contenido a la aplicación Silverlight ya sea a través de parámetros de inicialización (parámetro InitParams en ) o a través de un endpoint que podamos descargar por medio de un objeto de tipo WebClient. Es este último caso el que usaremos en este artículo para crear contenido dinámico con PHP.

Creación del proyecto

Siguiendo los mismos pasos que usamos en el artículo anterior para la creación de un Sitio Web en IIS y una aplicación Silverlight, crearemos un nuevo proyecto de tipo Silverlight Application en Visual Studio .NET con el nombre PHPDynamicXaml. Inmediatamente después de haber creado el proyecto borraremos los archivos Default.aspx y PHPDynamixXamlTestPage.aspx y sus archivos relacionados, dejando únicamente el archivo .html.

Agreguemos ahora un archivo llamado Content.php usando la plantilla de Archivo de Texto disponible al seleccionar la opción “Agregar nuevo elemento” en el menú contextual del proyecto. La siguiente figura muestra la ventana de Solution Explorer y la Solución actual:

Será en el archivo Content.php en donde escribiremos el código necesario para la creación dinámica de contenido Xaml. En nuestro ejemplo el contenido será una serie de rectángulos, el cual su número será definido por medio de un parámetro en el Querystring llamado r. El siguiente fragmento ejemplifica el código de PHP necesario para la construcción dinámica de contenido en Xaml:

 

header('Content-Type: text/xaml');

 

$cuantos = 0;

 

if ($_GET["r"]!=null)

  $cuantos = $_GET["r"];

 

echo "";

for ($i=1; $i<=$cuantos; $i++)

{

  echo " . $i * 10 . "' Canvas.Left='" . $i * 10 . "' Width='30' Height='30' Fill='Red' Stroke='Black' />";

}

echo "";

?>

Es importante resaltar en especial la siguiente línea:

header(’Content-Type: text/xaml’);

la cual establece que el tipo de contenido que regresará la página .php será de tipo Xaml (también funciona con el content type text/xml ya que Xaml no es más que Xml). Lo anterior es de suma de importancia ya que estamos redefiniendo el comportamiento predeterminado que tiene PHP de regresar HTML.

Ahora bien, como podrán darse cuenta el código obtiene el número de rectángulos a crear por medio del parámetro r del Querystring. Lo que hacemos es simplemente hacer un bucle for para la creación dinámica del Xaml que represente el número buscado de rectángulos. Recuerden que cuando generamos Xaml dinámico es necesario incluir el xmlns por default en el contenedor raíz, si es que interpretaremos este código Xaml utilizando XamlReader.Load().

Lo que resta será escribir el código necesario en nuestra aplicación Silverlight para ejecutar la página php y obtener el resultado de su ejecución (lo cual será efectivamente contenido Xaml). El siguiente código muestra el manejador del evento Loaded del UserControl MainPage:

public partial class MainPage : UserControl

{

    public MainPage()

    {

        InitializeComponent();

 

        this.Loaded += new RoutedEventHandler(MainPage_Loaded);

    }

 

    void MainPage_Loaded(object sender, RoutedEventArgs e)

    {

        WebClient client = new WebClient();

        client.DownloadStringCompleted += (s, a) =>

        {

            if (a.Error == null)

            {

                string result = a.Result;

                var newElement = XamlReader.Load(result) as UIElement;

                LayoutRoot.Children.Clear();

                LayoutRoot.Children.Add(newElement);

            }

        };

        

        int r = 0;

        try

        {

            if (HtmlPage.Document.QueryString["r"] != null)

            {

                r = int.Parse(HtmlPage.Document.QueryString["r"]);

            }

        }

        catch (Exception)

        {

 

            r = 0;

        }

        string url = string.Format("/Content.php?r={0}", r);

        client.DownloadStringAsync(new Uri(url, UriKind.RelativeOrAbsolute));

    }

}

La propiedad HtmlPage.Document.QueryString (parte del Puente HTML) permite leer el parámetro r que puede establecer el usuario en la página .html y que a su vez será utilizado para la invocación de la página Content.php. El resto del código se encarga de obtener el resultado de la descarga del endpoint (Content.php) e interpretar el resultado por medio del método XamlReader.Load().

La siguiente figura muestra el resultado de ejecutar la siguiente página:

http://localhost:9050/PHPDynamicXamlTestPage.html?r=12

Lo anterior demuestra que PHP, además de permitirnos hospedar las aplicaciones Silverlight, lo podemos usar para la creación dinámica de contenido Xaml.


Fuente: http://rdiazconcha.com/?p=342

Recursos de Seguridad para SQL Server

Home

Hola quiero compartir con ustedes unos recursos de seguridad para SQL Server que encontré y que creo que les serán de gran utilidad, aquí el detalle:

  • Common SQL Server Security Issues and Solutions: Have you found yourself inadvertently in charge of a SQL Server database and don’t know all the best practices for making it secure? Get a quick overview of the top 10 security areas you should worry about, common problems, and solutions.
  • Securing SQL Server: Securing SQL Server can be viewed as a series of steps, involving four areas: the platform, authentication, objects (including data), and applications that access the system. Get detailed, step-by-step guidance on how to create and implement an effective security plan.
  • SQL Server 2008 Replication Security: Get guidance to help you protect the replication scenarios that you deploy in SQL Server 2008 from malicious attacks and improve the security of your data.
  • How Do I: Defend Against Truncation-Based SQL Injection Attacks?: This video demonstrates how this property of truncation may be used by an attacker to circumvent the above mentioned mitigation, resulting in a SQL injection attack. Various options for fixing SQL injection issues are also discussed.
  • Microsoft Source Code Analyzer for SQL Injection: This static code analysis tool for finding SQL Injection vulnerabilities in ASP code will scan ASP source code and generate warnings related to first-order and second-order SQL Injection vulnerabilities. It will also provide annotation support that can be used to improve the analysis of the code.
  • Tuning Microsoft Forefront Client Security Database Components: Microsoft Forefront Client Security uses SQL Server for collection and reporting databases. When you are choosing the SQL Server edition and the hardware on which it will run, take the topics discussed in this article into consideration.

Saludos


Fuente: http://blogs.msdn.com/mvplead/archive/2009/08/18/recursos-de-seguridad-para-sql-server.aspx