NavarraDotNet – Desarrollar software no es solo picar código





   Evento: Desarrollar software no es sólo picar codigo

Día y hora:
jueves 15 de mayo de 18:30 a 21:00 
 
Lugar:
Centros de Excelencia Software. Salón de Actos. Polígono Industrial Mocholi, Plaza Cein. 31110 Noáin. Navarra

Unai Zorrilla Castro. Plain Concepts. Microsoft MVP Compact Framework
(http://geeks.ms/blogs/unai/Default.aspx)
Carlos Segura Sanz. NavarraDotNet. Microsoft MVP SharePoint Server
(
http://www.ideseg.com)

Agenda:

18:30 – 19:00. Reunión del grupo de usuarios navarraDotNet. Orden del día: nuestros saraos
19:00 – 21:00. Desarrollar software no es sólo picar codigo. Unai Zorrilla y Carlos Segura.


Se hará un repaso por todos los procesos implicados en Integración Continua como pilar de desarrollo,
testeos unitarios, cobertura de pruebas, construcciones de software y seguimiento de los procesos.
Hablaremos de las herramientas que utilizamos: Cruise Control, Visual Studio Team System,
NUnit, Xunit, Subversion, NCover, NMock


Entrada libre previo registro en:


http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032376398&Culture=es-ES

www.navarradotnet.com


 

MDA para dummies, y sorpresas

El viernes tuvimos una charla en el grupo de usuarios llamada “MDA para dummies”, en la que David Marzo de Solnatec, nos explico varias cosas sobre la arquitectura dirigida por modelos, hasta aquí,  todo normal y corriente, una charla bien organizada y dada por alguien que controla, ¿Qué más se puede pedir?.

Pero lo excepcional, es que David, lleva trabajando durante años en su propio sistema MDA, sistema que permite definir modelos mediante archivos XML y ser procesados para generar código,  algo similar a lo que hace CodeSmith, con la salvedad de que el modelo no parte de la Base de datos, si no que se define en un lenguaje basado en XML que el mismo ha diseñado y que pude ser extendido.

A través de este lenguaje, podemos declarar un modelo (podriamos decir que son una variación de los lenguajes especificos de dominio) que, después es procesado por un generador de código, el cual admite diversas plantillas (cartuchos) en función de lo que deseemos generar.  Por supuesto el tiene sus propias plantillas que usa a diario para su trabajo, algo similar a lo que hace nTier, combinado con CodeSmith.

Pero el sistema es mucho más flexible, pudiendo se adaptar a un sin fín de problemáticas con las que nos encontramos a diario programando.

Lo que realmente me asombra, es que en el poco tiempo que llevamos en NavarraDotNet, y apenas sin rascar, nos hemos encontrado gente como Iñaky Ayucar, con su simulador de conducción SIMAX que sin duda es espectacular, y ahora a David Marzo, que lleva años trabajando en su MDA, (posiblemente esto no sea tan espectacular como el simulador) pero sin duda es un proyecto de gran nivel y merece todo el reconocimiento a su esfuerzo. 

No sé si a vosotros os pasa, pero a mí se me pone la carne de gallina, cuando estas con gente como esta, ilusionada, trabajadora y que cree en lo que hace.

Solo pensar en los proyectos que habrá por ahí si rascamos un poquito… cosas como estas hacen que un grupo de usuarios sea algo más.

NavarraDotNet – Próximos Saraos …

Evento:  “MDA para Dummies, continuación…”
 
Día: 18 de abril 2008, hora: 18:30-20:30
 
Lugar: Sistema Formacion. Plaza Pintor Paret, 1. 31008 Pamplona
 
Colaboran: Sistema Formación, Masbytes, Solnatec, navarraDotNet, MSDN
 
Ponente: David Marzo. Solnatec, navarraDotNet
 
Agenda:
18:30 – 19:00: Reunión de navarraDotNet. Orden del día: nuestros saraos
19:00 – 20:30:  “MDA para Dummies, continuación…”. David Marzo. Solnatec. (http://www.solnatec.com)
 Demostración de uso de una herramienta MDA en el día a día de un desarrollador.


Entrada libre previo registro en:


http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032376397&culture=es-es   


Evento: Desarrollar software no es sólo picar codigo


Día y hora:
jueves 15 de mayo de 18:30 a 21:00
 
Lugar:
Centros de Excelencia Software. Salón de Actos. Polígono Industrial Mocholi, Plaza Cein. 31110 Noáin. Navarra


Colaboran:
Centros de Excelencia Software, Acciona Energía, Masbytes, PlainConcepts, MSDN,  navarraDotNet
 
Ponentes:
Unai Zorrilla Castro. Plain Concepts. Microsoft MVP Compact Framework
(http://geeks.ms/blogs/unai/Default.aspx)
Carlos Segura Sanz. NavarraDotNet. Microsoft MVP SharePoint Server
(http://www.ideseg.com)


Agenda:
18:30 – 19:00. Reunión del grupo de usuarios navarraDotNet. Orden del día: nuestros saraos
19:00 – 21:00. Desarrollar software no es sólo picar codigo. Unai Zorrilla y Carlos Segura.
Se hará un repaso por todos los procesos implicados en Integración Continua como pilar de desarrollo,
testeos unitarios, cobertura  de pruebas, construcciones de software y seguimiento de los procesos.
Hablaremos de las herramientas que utilizamos: Cruise Control, Visual Studio Team System,
NUnit, Xunit, Csubversion, NCover, NMock


Entrada libre previo registro en:


http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032376398&Culture=es-ES

CC.Net FxCop – tip …

Dentro del proceso de integración continua que uso, los proyectos que no tienen un archivo FxCop, los proceso usando una plantilla a la que añado mediante una tarea en el MsBuild, los targets necesarios para después poder ver si hay algo muy cantoso …

La cosa es que en el resto de proyectos mantengo un archivo FxCop, en el que voy excluyendo algunas de esas cosas cantosas tras revisar el código.  El problema viene cuando en el build server, se ejecuta el FxCop, y genera el informe, ya que en este informe aparecen todas las incidencias, incluidas las que yo he excluido. (grrr)

De modo que he decidido acabar de una vez con el problemilla.. lo que hago ahora es procesar el informe de FxCop con el XSL (que os dejo abajo) para que cuando el CC, haga el merge, solo estén las activas.



<?xml version=»1.0″ encoding=»utf-8″?>
<xsl:stylesheet version=»1.0″ xmlns:xsl=»http://www.w3.org/1999/XSL/Transform»
    xmlns:msxsl=»urn:schemas-microsoft-com:xslt» exclude-result-prefixes=»msxsl»>
    <xsl:output method=»xml» indent=»yes»/>
 
    <xsl:template match=»@* | node()»>
        <xsl:copy>
            <xsl:apply-templates select=»@* | node()»/>
        </xsl:copy>
    </xsl:template>
 
  <xsl:template match=»//Message»>
    <xsl:if test=»self::node()/@Status=’Active'»>
      <xsl:copy-of select=»self::node()» />
    </xsl:if>
  </xsl:template>
 
</xsl:stylesheet>



Para procesar el XML, podéis usar la tarea XSLT del Community.Tasks, para MSBuild.



<Exec Command=»$(FxCopExe) /project:$(FxCopProject)/out:$(ArtifactPath)$(FxCopReport)temp» />          
<Xslt Inputs=»$(ArtifactPath)$(FxCopReport)temp»        
      Xsl=»$(FxCopActive)»
      Output=»$(ArtifactPath)$(FxCopReport)» />



Y listo ..

SharePoint – NTLM vs Kerberos

En todas las instalaciones hay un punto crítico, esa pregunta que no tenemos muy clara  y que en ocasiones va acompañada de un texto recomendando una de las opciones, por si no sabemos muy bien qué es lo que estamos haciendo. MOSS no es una excepción.

La pregunta en cuestión llega cuando tenemos que decidir sobre la seguridad, la instalación de MOSS nos da a elegir entre sí usaremos NTLM ó Kerberos.

Como todos sabemos y Microsoft dice NTLM funciona para casi todo. De modo que suele ser la opción preferida de todos.  No hay que configurar nada y funciona. (http://support.microsoft.com/kb/832769)

Kerberos por el contrario es un sistema de autentificación un poco más complejo, pero  también más seguro y más rápido (motivos por los cuales ya de por sí, debería ser la opción predilecta de todos)

Kerberos, es más rápido por que guarda en una cache (vales) la información del cliente después de que este se ha autentificado en el sistema, de modo que no tiene que estar comprobando las credenciales una y otra vez.

Otra de las características importantes de Kerberos es la Delegación, La delegación nos permite pasar las credenciales del cliente desde nuestro servidor front-end (SharePoint)  a nuestros servidores back-end (SQL Server etc..).

Cuando usamos NTLM, y deseamos acceder a recursos que están fuera de nuestro alcance, podemos suplantar al cliente (impersonate)  y usar la cuenta de suplantación para realizar las tareas necesarias.

¿Pero qué ocurre cuando tratamos de usar recursos que no están en la misma máquina que nuestro servidor web?, entonces la suplantación no es suficiente. Y se produce el efecto llamado Double-Hop (http://support.microsoft.com/default.aspx?scid=kb;en-us;329986)

Imaginemos que hemos realizado una solución para SharePoint que usa un servicio web o una conexión a un servidor SQL que se encuentra en una máquina distinta, y deseamos acceder usando la seguridad integrada (Integrated Security=SSPI) .

Al realizar la conexión nuestro servidor web debe ponerse en contacto con nuestro servidor SQL y este no es capaz de autentificar al usuario.

De modo que recibiremos un mensaje como:

Login failed for user ‘NT AUTHORITYANONYMOUS LOGON’.


Como mencionaba anteriormente, esto es debido a que la suplantación no es válida, necesitamos algo más; Delegación.

Y esa delegación aunque cueste un poquito más configurarla es la que nos ofrece Kerberos.

Este escenario se produce en multitud de instalaciones de MOSS en donde usamos servicios de Excel, para recuperar datos de los servicios de análisis de SQL.

NavarraDotNet -Teclear no es sustituto de pensar

NavarraDotNet te invita

Este evento esta diseñado para alumnos de 2º curso del ciclo de
Desarrollo de Aplicaciones Informáticas del I.E.S. Maria Ana Sanz, pero dado que vamos a
reflexionar sobre cuestiones de diseño orientado a objetos, cohesión, acoplamiento, refactoring, etc.,  creemos
que puede ser interesante también para los profesionales del desarrollo
de software.

Además será muy enriquecedor para los chavales tener la
posibilidad de escuchar las opiniones de profesionales y expertos.


Anímate y ven : – )


Aquí tenéis el link del registro, para que no tengáis que teclear ni la url recortada, ale:

http://msevents.microsoft.com/CUI/EventDetail.aspx?culture=en-US&EventID=1032367945


De la prueba al hecho – xUnit

James W. Newkirk, uno de los co-autores de NUnit, trabaja desde el año pasado junto con Brad Wilson en un framework para realizar «pruebas» llamado xUnit.

Lo he seguido con cariño y finalmente lo he adoptado para un nuevo proyecto en el que estoy trabajando, dejando mi querido MbUnit.

El cambio de NUnit a MbUnit, lo hice debido a que este último incorporaba RowTests, posibilitando el ejecutar un mismo test usando distintos valores, lo cual acortaba el número de pruebas a escribir sustancialmente.

xUnit va más allá, según explica James, entre las lecciones aprendidas con NUnit, una de las más importantes fue el hecho de mantener el código de las pruebas tan simple como fuera posible, eliminando las duplicidades.

Se han eliminado atributos como [TestFixture] para indicar que se trata de una clase que contiene tests, y el [Setup] y [TearDown] quedan enmascarados en el código de la clase, de manera que el atributo [Setup] equivaldría al  constructor y si la clase implementa IDisposable el método Dispose hará las funciones del atributo [TearDown].

Obviare aquí la discusión sobre el uso de estos dos atributos…  Más, [TestFixtureSetup] y [TestFixtureTearDown] también desaparecen, como alternativa, nuestra clase pude implementar el interface ITestFixture.

Otro de los atributos que desaparece es [ExpectedException] volviendo al clásico estilo de JUnit aprovechando los delegados anónimos de c# 2.0, esto como sabéis podía llevar a error en algunas de las pruebas debido a que otro método distinto al probado lanzara la excepción. La lectura del test no deja lugar a dudas sobre lo que se está probando.

Assert.Throw(typeof(ArgumentNullException), delegate { clase.Metodo(null); });

ó

Assert.Throw<ArgumentNullException>(delegate { clase.Metodo(null); });


Desaparece también [Test], que pasa a llamarse [Fact], este pequeño matiz  puede desconcertar, pero el HECHO, es que viene de la propia naturaleza de xUnit que tiene el propósito de ser usado más como herramienta para el desarrollo dirigido por pruebas a ser otra de las herramientas de pruebas. Si no dando por HECHO un comportamiento que debe cumplirse.

En cuanto a las aserciones, puede que sean un conjunto más reducido (o priori menos expresivo) que en otros frameworks, pero hace un uso intenso de los genéricos dotándoles de la expresividad necesaria para que la lectura de las mismas no sea un problema. A mi desde luego me encanta.

Hasta aquí xUnit, no es más que otro framework de pruebas con las peculiaridades que hemos visto, sencillo y simple.

Y de esa naturaleza, surgen las Extensiones (más para el que quiera más)  Y YO QUERIA MÁS.

Las extensiones de xUnit, son una pasada. Añaden una serie de atributos al framework que para mí las hacen indispensables.

El atributo [Theory], nos permite hacer pruebas dirigidas por datos, similar en parte al atributo [RowTest] de MbUnit. Los datos pueden escribirse en línea [InlineData], venir de una hoja de cálculo [ExcelData], de una fuente OleDb [OleDbData] o de Sql server [SqlServerData], y usando [PropertyData] podremos hacer que los datos provengan de una propiedad de nuestra clase. (yo creo que ya no puedo vivir sin esto)

Otro de los atributos incluidos en las extensiones es [AutoRollback], que es exactamente igual al [RollBack] de MbUnit, mete todo en una transacción y deshace los cambios al terminar la prueba, con lo cual la base de datos se queda como estaba.

El atributo, [FreezeClock], nos permitirá bloquear el reloj para poder realizar pruebas que utilizan la hora del sistema. No lo he probado pero se me ocurren algunas cosas interesantes a probar con WF. 

Con [AssumeIdentity] podemos cambiar la identidad del usuario que está ejecutando el ensamblado (con esto estoy jugando … )

Y por último un par más como [Trace] que añade una entrada en DebugView o cualquier otro listener, y [RunWithNUnit] que nos permitirá ejecutar pruebas también con NUnit.

Todavía tengo que probar algunas de las cosas que trae, pero por el momento se queda. Además incluye un plugin para el Resharpher.

Más:

http://www.codeplex.com/xunit
http://www.codeplex.com/xunitext/Release/ProjectReleases.aspx?ReleaseId=8103


James ha escrito tres libros, yo tengo un par Test-Driven Development in Microsoft .NET (Microsoft Professional) y Extreme Programming in Practice, recomiendo el primero.

Y el año pasado publico Visual Studio Team System: Better Software Development for Agile Teams (Microsoft .Net Development).

Programacion y piedras en el zapato

Llevas una hora caminando con una piedra en el zapato y finalmente la sacas cuando ya no puedes más, entonces dices .. buff que alivio .. ¿Por qué no habré sacado la piedra antes?

Una piedra, unas llaves en el bolsillo de atrás, dejar la mochila cuando estas parado hablando con alguien por 30 minutos… son innumerables  la cantidad de ejemplos que podíamos citar aquí.

La cuestión es que las el paso de una pequeña molestia a una gran molestia y de una gran molestia a decidirnos resolver el problema un tanto incierto, y con casi toda seguridad intervienen un montón de factores en cada situación.

Dentro de esas gran cantidad de ejemplos, y como no ciñéndonos a la programación, cuantas veces os han pasado cosas similares, compilas y ves algo que no está bien, pero no es urgente .. Sigues, una y otra vez, hasta que tomas la decisión de erradicarlo por completo para no verlo más, no porque sea el momento de hacerlo si no, porque ya molesta, vamos nos está tocando la moral. Vuelves a compilar y bufff que alivio, es como la dichosa piedra del zapato.

Hay que ver qué tontería (por que estas cosas suelen ser tonterías que generalmente no cuestan nada solucionar) pero pienso que tenemos en la cabeza otro problema, algo que es más urgente de programar o hacer y que es realmente lo importante, hasta el punto de que mientras la piedra ó el errorcillo tonto, no sea capaz de desconcentrarnos de lo que estamos haciendo, no tienen cabida resolverlo.

La cosa esta en cuál sería la mejor manera de codificar algo similar, evidentemente no sería un problema usando threads, uno resolviendo el problema principal y el otro comprobando si alguien te toca los Eggs hasta el umbral necesario para interrumpir el proceso principal y resolver el problema.  ¿Se podría hacer sin usar hilos?

Todo esto en principio era para poner un pequeño script con el que he resuelto una piedrilla de esas,  en fin, me he puesto filosófico y …

La cosa es que cuando en el proceso de generación que uso para mis aplicaciones de SharePoint, siempre cuando cambio el modo entre Debug y Release, tengo que andar tocando uno de los archivos de configuración e indicarle de donde ha de coger la DLL que irá en el archivo de instalación. (Esa era mi particular piedrilla)

Evidentemente ya se me había pasado por la cabeza incluir en la pre-compilación  el invocar algún tipo de utilidad que hiciera el cambio de rutas pertinente, pero siempre he descartado esto porque no me parecía muy bien incluir la susodicha utilidad dentro del proyecto y como tal que esta fuera a parar al repositorio.

Sin embargo hoy me ha venido a la cabeza el usar un pequeño script de visual basic script que realice el cambio.

De modo que en la pre-compilación podemos pasarle una plantilla del archivo, en esta plantilla indicamos una serie de variables que serán reemplazadas.

cd «$(ProjectDir)»
cscript toolsreplace.vbs «$(ProjectDir)template.ddf» «$(ProjectDir)makecab.ddf» «[DIR]» «$(OutDir)»

Reemplazará [DIR] por el directorio en donde estamos generando la DLL

El script tontorrón …

strFileIn = Wscript.Arguments(0)
strFileOut = Wscript.Arguments(1)
strOldText = Wscript.Arguments(2)
strNewText = Wscript.Arguments(3)
 
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFile = objFSO.OpenTextFile(strFileIn, 1)
 
strText = objFile.ReadAll
objFile.Close
strNewText = Replace(strText, strOldText, strNewText)
 
Set objFile = objFSO.OpenTextFile(strFileOut, 2, True)
 
objFile.WriteLine strNewText
objFile.Close

SharePoint – Cut Copy Paste for Document Libraries

From WSS2 I was looking for a solution to do the Document Libraries a bit more Explorer like, time ago I wrote some WebParts to try solve the problem.


• csegDocLibTools


After the migration to MOSS 2007 the first thing that my users asked for was where is the copy and paste feature??  And where is the explorer like functionality??  Is it a new version of SharePoint?

What happened here… When the users have a characteristic that they are using continually it’s important that they have it in a new version otherwise the IT people are all incompetent. Yes, it’s normal. (I don´t speak here about the new office 2007 Ribbon bar, only to remember
that my users still hate me, as if it were my fault) 

Now they are using the SPSProfessional cut copy & paste feature and the navigation webparts… both work on WSS3 and MOSS 2007.  You can see some images here, and here

1er Aniversario de NavarraDotNet

Este viernes, 25 de enero, de 16.00 a 21.00 h. en la Universidad Pública de Navarra, celebramos el primer Aniversario de NavarraDotNet


Agenda:


16:00: Microsoft Team Foundation Server.
          Rodrigo Corral, MVP Team System, PlainConcepts


17:00: LINQ
          Unai Zorrilla, MVP Compact Framework, PlainConcepts

18:00: Merienda (gentileza de Biko2)

18:30: MDA para dummies
          David Marzo, Solnatec, NavarraDotNet


19:00: The Yahoo! User Interface Library (YUI)
          Rubén Bernárdez, Desarrollador Net, Biko2, NavarraDotNet


19:30: Descanso


19:45: Aplicaciones ricas en internet, Microsoft Silverlight ,
          J. Babuglia , Senior Software Architect, Biko2, NavarraDotNet


20:15: Test Driven Development,
          David Gil, Director Informática, Biko2 , NavarraDotNet


20:45: Conclusiones

21:00: ¡Sigue la fiesta! y ¡nos vamos de cena!


Organiza:


NavarraDotNet con la colaboración de:


Departamento de Ingeniería Matemática e Informática de la Universidad Pública de Navarra, PlainConcepts , Biko2, Masbytes y CES.


Registrate YA:


Id. de evento: 1032366400  Apúntate aquí
Registrarse por Teléfono en el 902 197 198