Por fin me llego mi {Heroes Community Launch Kit}

silhouette_1_thumb

 

Luego de varias semanas de espera, por fin he recibido el {Heroes Community Launch Kit} y asi poder ser un {Heroe} mas de las comunidades Microsoft.

Dicho Kit contiene:

1 {Exclusive} Windows Server 2008 Deep technical “event-in-a-box”

– 5 Windows Server 2008 Enterprise Edition DVDs

– 5 Visual Studio Standard DVDs

– 5 SQL Server 2008 CTP5 DVDs and a NFR voucher for SQL Server 2008 Enterprise redeemable when SQL Server 2008 is Generally Available (GA)

– 2 Full bit DVDs of Vista Ultimate SP1 NFR 

– 3 Vouchers for a Free 1 year subscription to TechNet Plus

– 1 WS08 Application Readiness Resource kit enhanced with Solutions Accelerator modules

– Microsoft Learning Solutions 40% off Exam Vouchers

– 1 SQL Server 2008 Technical Readiness kit 

– 1 .NET 3.5 Dev Resource Kit

– 1 AMD “Virtualization for Dummies” Handbook

– 40% off TechNet Plus Subscriptions with Full Bit/No Technical Time Bomb Product Download/Eval for All of your attendees

– Heroes {Community} Launch Poster

– CPLS  Certification Poster

 

Luego publicaremos los lugares en la Republica Dominicana donde se daran los eventos para poder repartir el material, dichos eventos seran impartidos por la nueva comunidad de desarrollo que vamos a lanzar que se llamara DotNetLab.

Saludos

  photo-01 photo-02 photo-03

¿Estas contento con Windows Vista SP1? Pues elimina los archivos basura

windows-vista-logo-1

Cuando uno instala el Service Pack 1 en nuestras computadoras,  este no elimina algunos archivos de la antigua version de Windows Vista de nuestro disco duro. Esto es a causa de que estos archivos podrian ser requerido en caso de que decidamos desinstalar el Service pack 1.

Logicamente estos archivos ocupan un importante espacio en nuestro disco duro, en mi caso personal 1.2 GB, entonces si estas sastifecho (como yo) con los resultados obtenidos con el Service Pack 1 y no tienes interes alguno en un futuro de desinstalarlo, entonces porque no reclamas el espacio que estos archivos ocupan en tu disco duro.

Para reclamar este espacio basta solamente seguir los siguientes pasos:

  1. Inicio -> Abrir el command prompt escribiendo cmd en el start search
  2. En el command prompt escribir vsp1cln.exe (Vista SP1 Cleaner).

Estos nos tomara algunos minutos (dependiendo de la maquina) para remover los archivos de la antigua version

  vsp1cln
Esta accion hace que el Windows Vista Service pack 1 se quede de forma permanente en tu computadora. Y el espacio extra nos sirve para ocuparlo con archivos importantes.

Para ejecutar el Vista Sp1 Cleaner no necesitas estar conectado a internet y no podras en un futuro eliminar el Service pack 1, asi que si lo ejecutas es bajo riezgo propio.

Espero que le sea de utilidad.

Agregar un simple Trigger para auditar tu base de datos SQL Server

Despues de pasar muchas horas pensando, debuggiando y buscandole la vuelta a una solucion que consistia en hacerle una auditoria a una base de datos SQL 2005, pudimos desarrollar una herramienta llamada SQLTableHistory esta herramienta nos da la facilidad de que podemos seleccionar las tablas que queremos auditar.

Pero navegando me encontre con una excelente solucion hecha por Jon Galloway, en la cual consiste en crear un solo script y que este se encarge de crear los triggers necesarios para cada tabla de la base de datos seleccionada, la diferencia con SQLTableHistory es que con nuestra herramienta podemos seleccionar las tablas que queremos que se le haga su respectiva auditoria y con la solucion presentada en este blog.

Aqui un ejemplo de como se verian los datos con la solucion de Jon Galloway

 

Con esta informacion podemos hacer reportes de una manera sencilla tales como:

  • Cuales tablas han sufridos cambios recientemente.
  • Cuales tablas no sufrieron cambios el pasado año.
  • Cuales tablas jamaz han sufrido cambios.
  • Mostrar todos los cambios a las tablas por un usuario y periodo especifico.
  • Mostrar las tablas mas activas en un determinado periodo.

    Con estas herramientas es posible volver al estado anterior de la tabla y volver en un punto especifico, claro esta ya depende de las nuevas extensiones que ustedes le hagan.

    Aqui os dejo el script completo que crea la tabla de auditoria y corre el script para crear los triggers a todas las tablas de la base de datos.

    USE MYDATABASE–Ponerle el nombre de la base de datos que va hacer auditada

    GO

     

    IF NOT EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME= ‘Audit’)

    CREATE TABLE Audit

    (

    AuditID [int]IDENTITY(1,1) NOT NULL,

    Type char(1),

    TableName varchar(128),

    PrimaryKeyField varchar(1000),

    PrimaryKeyValue varchar(1000),

    FieldName varchar(128),

    OldValue varchar(1000),

    NewValue varchar(1000),

    UpdateDate datetime DEFAULT (GetDate()),

    UserNamevarchar(128)

    )

    GO

     

    DECLARE @sql varchar(8000), @TABLE_NAMEsysname

    SET NOCOUNT ON

     

    SELECT @TABLE_NAME= MIN(TABLE_NAME)

    FROM INFORMATION_SCHEMA.Tables

    WHERE

    TABLE_TYPE= ‘BASE TABLE’

    AND TABLE_NAME!= ‘sysdiagrams’

    AND TABLE_NAME!= ‘Audit’

     

    WHILE @TABLE_NAMEIS NOT NULL

     BEGIN

    EXEC(‘IF OBJECT_ID (”’ + @TABLE_NAME+ ‘_ChangeTracking”, ”TR”) IS NOT NULL DROP TRIGGER ‘ + @TABLE_NAME+ ‘_ChangeTracking’)

    SELECT @sql =

    create trigger ‘ + @TABLE_NAME+ ‘_ChangeTracking on ‘ + @TABLE_NAME+ ‘ for insert, update, delete

    as

     

    declare @bit int ,

    @field int ,

    @maxfield int ,

    @char int ,

    @fieldname varchar(128) ,

    @TableName varchar(128) ,

    @PKCols varchar(1000) ,

    @sql varchar(2000),

    @UpdateDate varchar(21) ,

    @UserName varchar(128) ,

    @Type char(1) ,

    @PKFieldSelect varchar(1000),

    @PKValueSelect varchar(1000)

     

    select @TableName = ”’ + @TABLE_NAME+ ”’

     

    — date and user

    select @UserName = system_user ,

    @UpdateDate = convert(varchar(8), getdate(), 112) + ” ” + convert(varchar(12), getdate(), 114)

     

    — Action

    if exists (select * from inserted)

    if exists (select * from deleted)

    select @Type = ”U”

    else

    select @Type = ”I”

    else

    select @Type = ”D”

     

    — get list of columns

    select * into #ins from inserted

    select * into #del from deleted

     

    — Get primary key columns for full outer join

    select@PKCols = coalesce(@PKCols + ” and”, ” on”) + ” i.” + c.COLUMN_NAME + ” = d.” + c.COLUMN_NAME

    fromINFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,

    INFORMATION_SCHEMA.KEY_COLUMN_USAGE c

    where pk.TABLE_NAME = @TableName

    andCONSTRAINT_TYPE = ”PRIMARY KEY”

    andc.TABLE_NAME = pk.TABLE_NAME

    andc.CONSTRAINT_NAME = pk.CONSTRAINT_NAME

     

    — Get primary key fields select for insert

    select @PKFieldSelect = coalesce(@PKFieldSelect+”+”,””) + ”””” + COLUMN_NAME + ””””

    fromINFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,

    INFORMATION_SCHEMA.KEY_COLUMN_USAGE c

    where pk.TABLE_NAME = @TableName

    andCONSTRAINT_TYPE = ”PRIMARY KEY”

    andc.TABLE_NAME = pk.TABLE_NAME

    andc.CONSTRAINT_NAME = pk.CONSTRAINT_NAME

     

    select @PKValueSelect = coalesce(@PKValueSelect+”+”,””) + ”convert(varchar(100), coalesce(i.” + COLUMN_NAME + ”,d.” + COLUMN_NAME + ”))”

    from INFORMATION_SCHEMA.TABLE_CONSTRAINTS pk ,   

    INFORMATION_SCHEMA.KEY_COLUMN_USAGE c  

    where  pk.TABLE_NAME = @TableName  

    and CONSTRAINT_TYPE = ”PRIMARY KEY”  

    and c.TABLE_NAME = pk.TABLE_NAME  

    and c.CONSTRAINT_NAME = pk.CONSTRAINT_NAME

     

    if @PKCols is null

    begin

    raiserror(”no PK on table %s”, 16, -1, @TableName)

    return

    end

     

    select @field = 0, @maxfield = max(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName

    while @field < @maxfield

    begin

    select @field = min(ORDINAL_POSITION) from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION > @field

    select @bit = (@field – 1 )% 8 + 1

    select @bit = power(2,@bit – 1)

    select @char = ((@field – 1) / 8) + 1

    if substring(COLUMNS_UPDATED(),@char, 1) & @bit > 0 or @Type in (”I”,”D”)

    begin

    select @fieldname = COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME = @TableName and ORDINAL_POSITION = @field

    select @sql = ”insert Audit (Type, TableName, PrimaryKeyField, PrimaryKeyValue, FieldName, OldValue, NewValue, UpdateDate, UserName)”

    select @sql = @sql + ” select ””” + @Type + ””””

    select @sql = @sql + ”,””” + @TableName + ””””

    select @sql = @sql + ”,” + @PKFieldSelect

    select @sql = @sql + ”,” + @PKValueSelect

    select @sql = @sql + ”,””” + @fieldname + ””””

    select @sql = @sql + ”,convert(varchar(1000),d.” + @fieldname + ”)”

    select @sql = @sql + ”,convert(varchar(1000),i.” + @fieldname + ”)”

    select @sql = @sql + ”,””” + @UpdateDate + ””””

    select @sql = @sql + ”,””” + @UserName + ””””

    select @sql = @sql + ” from #ins i full outer join #del d”

    select @sql = @sql + @PKCols

    select @sql = @sql + ” where i.” + @fieldname + ” <> d.” + @fieldname

    select @sql = @sql + ” or (i.” + @fieldname + ” is null and  d.” + @fieldname + ” is not null)”

    select @sql = @sql + ” or (i.” + @fieldname + ” is not null and  d.” + @fieldname + ” is null)”

    exec (@sql)

    end

    end

    SELECT @sql

    EXEC(@sql)

    SELECT @TABLE_NAME= MIN(TABLE_NAME) FROM INFORMATION_SCHEMA.Tables

    WHERE TABLE_NAME> @TABLE_NAME

    AND TABLE_TYPE= ‘BASE TABLE’

    AND TABLE_NAME!= ‘sysdiagrams’

    AND TABLE_NAME!= ‘Audit’

    END

     

    Para mas informacion:

  • Jon Galloway
    SQL Server 2005’s DDL triggers
    Nigel Rivett’s SQL Server Auditing triggers

    Espero que les sea de utilidad!!!

    What’s new in Internet Explorer 8 Beta 1

    Ayer Microsoft anuncio al mundo en la conferencia MIX08 en las vegas la publicacion del primer Beta de Internet explorer 8 para desarrolladores y diseñadores Web. Este primer Beta no trae muchos cambios en la apariencia pero si introduce un nuevo motor de renderizado basado en normas y estandares de la industria entre otras caracteristicas. Entre la que se destacan nuevas herramientas para los desarrolladores , activities y webslides.

    Como pueden ver la UI del explorer no han habido cambios significativos, la primera vez que corremos el explorer nos saldra la ventana de Setup para configurar nuestro explorer.

    firsttime

    Activities

    Activities son nuevas vias que nos brinda internet explorer 8 a los desarrolladores para usar servicios de otros portales web eliminando asi la necesidad de copiar y pegar informacion hacia otro website, me explico anteriormente uno necesitaba copiar una direccion y encontrar la localizacion de dicha direccion en live maps, ahora con activities en IE8 simplemente seleccionamos el texto que contiene la direccion, entonces nos saldra un menu donde estaran las opciones posibles que podriamos hacer con el texto seleccionado, en este caso seleccionamos "Map with live maps" y esta nos brinda un preview del resultado de la opcion seleccionada. Microsoft nos brinda tambien la posibilidad de agregar nuevos activity providers para mas info http://ie.microsoft.com/activities/en-en/Default.aspx

    activities

    Video

    Webslides

    Los Webslides es otra de las nuevas caracteristicas de IE8 permitiendo esta suscribirse a las actualizaciones de un website. Una de los casos donde es bastante util es en ebay. Con los webslides podemos ver de manera facil y si estar actualizando la ventana de ebay los cambios que esta teniendo el producto al cual nos hemos suscribido. La misma caracteristica tambien se puede usar en facebook y otros portales.

    Video

    Este primer beta del internet explorer esta orientado mas como dije al principio a diseñadores y desarrolladores web, muchos portales no se podran ver de manera correcta debido a los cambios en el motor de renderizacion que nos trae IE8. Gracias a Dios y a Microsoft se creo la opcion para emular el IE7 y usar el motor anterior al IE8. Asi que hay que esperar los nuevos cambios y retos que nos traera microsoft con el internet explorer y no desesperarze y juzgar antes de tiempo como han hechos muchos que ya han catalogado al internet explorer 8 como una decepcion total, al parecer se les ha olvidado el significado de Beta y se dejan llevar por el odio despiadado hacia microsoft dejando asi de ser objectivos :P, espero que tambien analizen otras compañias donde a mi entender tienen una pecera de Pez Beta estando casi todos sus productos por mas de 2 y 3 años en fase beta.

    Saludos y bendiciones!!! 😉