jueves, 25 de octubre de 2007
Ciudad Real dotNetClub ya tiene Web
Aqui teneís la URL:
http://ciudadreal.dotnetclubs.com/
Ademas tenemos foro propio:
http://ciudadrealdotnetclub.forumcircle.com/
Algo más de información:
¿Quienes somos?
El DotNetClub de Ciudad Real es un asociación de estudiantes y profesionales que agrupa entusiastas por la tecnología .NET y está vinculado a la iniciativa DotNetClubs esponsorizada por Microsoft Ibérica.
Los objetivos de este Club son proporcionar a los miembros medios para aprender y colaborar entre nosotros los estudiantes, no sólo en nuestra propia universidad, sino también con otros estudiantes repartidos por la geografía española... ¡y más allá!
¿Cómo puedo ser miembro?
Pertenecer al Club es gratuito. Además siempre animamos a la gente a que colabore y done su conocimiento. Si eres una persona que le gusta enseñar lo que ha aprendido, relacionarse con los demás y disfrutar de la tecnología, encajas con nosotros. :D
Aquí te vamos a brindar la posibilidad de participar en proyectos, dar charlas, cursos y conferencias y sobre todo aprender algo más. Disfrutar de la facultad, ¡que no sólo se va a tratar de ir a clase!
¿Que podemos ofrecerte?
Tenemos a vustra disposición manuales, hands on labs, webcast, versiones betas de software, revistas, libros, es decir, un buen conjunto de recursos para aprender .NET. ¿A que estas esperando? ¡Pídenoslo!
Coméntanos tu proyecto y si está en nuestras manos, te ofrecemos la infraestructura necesaria para ponerlo en marcha: desde sistemas de comunicación como listas de correos hasta alojamiento, pasando por control de versiones, software, etc.
Para comunicar nuestras actividades existe una lista de correo que se describe más abajo y para resolver tus dudas técnicas hemos habilitado un foro en foros.dotnetclubs.com donde te responderán verdaderos maestros de la tecnología .NET o estudiantes como tú.
Envío de correo en Asp .net 2.0 con PassWordRecovery o CreateUserWizard
Cuando necesitamos que en nuestro sitio web, una vez que el usuario se ha creado una nueva cuenta se le envie un correo de esos de bienvenida y tal, necesitamos seguir estos pasos:
Añadir una entrada válida de smtp a nuestro Web.Config:
system.net>
2: mailSettings>
3: smtp>
4: network host="miserver" password="" userName=""/>
5: /smtp>
6: /mailSettings>
7: /system.net>
Configurar la propiedad CreateUserWizard.MailDefinition.From en la ventana de Propiedades o en el evento Page_Load, por ejemplo:
1: protected void Page_Load(object sender, EventArgs e)
2: {
3: CreateUserWizard1.MailDefinition.From = Administrador@misitio.com;
4: }
Nota: Es obligatorio definir esta propiedad como he comentado en el punto 2, no sirve el atributo from de smtp:
system.net>
2: mailSettings>
3: smtp from="Administrador@misitio.com"> NO FUNCIONA
4: network host="" password="" userName=""/>
5: /smtp>
6: /mailSettings>
7: /system.net>
Aunque la etiqueta anterior si que es válida para el control PasswordRecovery, de hecho sino esta definida esa etiqueta y no definimos la propiedad CreateUserWizard.MailDefinition.From en la ventana de Propiedades o en el evento Page_Load, nos encontraremos con esta excepcion:
Se debe especificar una dirección de correo electrónico en la propiedad From o en la sección system.net/mailSettings/smtp config.
Descripción: Excepción no controlada al ejecutar la solicitud Web actual. Revise el seguimiento de la pila para obtener más información acerca del error y dónde se originó en el código.
Detalles de la excepción: System.Web.HttpException: Se debe especificar una dirección de correo electrónico en la propiedad From o en la sección system.net/mailSettings/smtp config.
Cosa que no ocurre con el control CreateUserWizard
Ciao.
sábado, 20 de octubre de 2007
Nhibertane: Hibertane para .NET
Esta herramienta nos permite abstraernos del nivel de persistencia y centrarnos en la lógica de negocio. Además si se combina con una herramienta como Visual Paradigm podemos obtener toda la capa persistencia incluso la BD relacionada con el diagrama de clases de nuestra aplicacion.
A mayor información :
hibernate.org
Lo que más le gusta a Bill Gates de SharePoint 2007
1– Aplicaciones compuestas: la multifuncionalidad de SharePoint ha sido ampliada, pues ahora no solamente es un deposito de información, sino también una plataforma de desarrollo (aunque siempre lo ha sido) y Content Manager Server (como reemplazo del actual CMS 2002). Así que SharePoint cubre ahora todo el rango de Intranet y Extranet, con posibilidades para explotar Business Inteligencia y conexiones con todo tipo de sistemas.
2 – Búsqueda y el Catalogo de Información de Negocios: La maquina de búsqueda ha sido revisada completamente, haciéndola mas rápida, eficiente y con mas posibilidades. Ahora es posible, por ejemplo, concentrar el ámbito de búsqueda con gran precisión, hacer que elementos individuales que la maquina de búsqueda ha encontrado no sean mostrados en pantalla, y la pantalla de resultados se puede configurar y personalizar de diferentes maneras.
3 – Integración con clientes: La integración con Office 2007 es aun mayor de lo que es la versión actual. Outlook puede funcionar, por ejemplo, como un “visor avanzado” para documentos si no se esta conectado a una red (Off Line), sincronizador de eventos, etc. Visual Studio Tools for Office (VSTO) tendrá un papel cada vez mas importante en la integración entre SharePoint y Office.
4 – Excel Services: Office 2007 ya no será solamente una herramienta de trabajo local, sino que podrá ser usada como un servicio. De esta forma, una hoja de calculo almacenada en SharePoint no tendrá que ser abierta por el cliente para ser recalculada, sino que el trabajo lo realiza el servidor, y cuando el cliente abre la hoja de nuevo, los nuevos datos ya habrán sido procesados.
5 – Comunidad: Wikis, Blogs y RSS han sido integrados en SharePoint, para funcionar como herramientas de comunicación comunales. Wikis pueden ser utilizados para trabajar comunitariamente en un documento, por ejemplo, Blogs puedes funcionar como medio de distribuir información en una empresa, y con RSS es la información más actual directamente accesible para cualquier usuario.
Para más infomacion sobre Sharepoint 2007 ver:
http://www.microsoft.com/latam/technet/articulos/tn/oct06-16.mspx
Un poquito de Ajax con ASP.NET
Pues ahora quiero ver si me puedo explicar como hacer que el ComboBox sea llenado con datos desde una base de datos.
En el ejemplo de CascadingDropDown de los Control Toolkit se hace con una fuente de datos XML, y yo lo haré SQL Server 2005.
Requisitos
Empezamos con el hecho de que necesitamos ASP.NET 2.0 para poder usar estos controles con un Visual Studio 2005. En este caso utilizare el framework de Atlas aunque igualmente se podría haberse hecho con la librería de Ajax.
Debemos tener instalando el framework de Atlas que puedes encontrar en http://atlas.asp.net/
También hay que instalar el Atlas Control Toolkit y seguir estos pasos para configurar nuestros controles en Visual Studio:
Crear un nuevo website con “New”… “Website…” y seleccionar el ""Atlas" Web Site" que puedes encontrar en “My Templates”
En el Toolbox hacer click derecho y seleccionar “Add Tab” y escribir “Atlas Control Toolkit”
Adentro de este tab, dar click derecho y seleccionar “Choose Items…”
En la caja de diálogo dar click en Browse y navegar a la carpeta donde contengas el archivo "AtlasControlToolkit.dll". Encontrarás uno en donde hayas descomprimido el Atlas Control Toolkit, en SampleWebsite\bin.
Tener instalada la base de datos de prueba Northwind (disponible en Microsoft Downloads).
Ahora sí, podemos empezar con este ejercicio.
Procedimiento
Página web Atlas
Debemos crear un nuevo website (si no lo has hecho ya) y recuerda seleccionar “”Atlas” Website” de la lista de Templates disponibles.
Agregar a Default.aspx tres controles DropDownList simples y llamarlos apropiadamente, por ejemplo:
ddlEmployees
ddlOrders
ddlOrderDetails
El ScriptManager se puede dejar donde está, lo usa Atlas para su funcionamiento.
Agregar un CascadingDropDown Extender del tab de Atlas ControlToolkit:
El webservice
Sí, llenaremos los DropDown de una base de datos, pero nos resultará más sencillo si esos datos los obtenemos y proveemos con un Webservice, entonces en el Solution Explorer, en el nombre del proyecto damos click derecho y seleccionamos ”Add New Item…”, y en la caja de diálogo elegimos “Webservice” y lo nombramos:
Debemos incluir la librería de Atlas y para manejar datos:
using AtlasControlToolkit;
using System.Data;
sing System.Data.SqlClient;
El Webservice nos proveerá en realidad strings que el CascadingDropDown Extender puede manipular para llenar los DropDowns. Por lo que los Webmethods que creemos, los haremos a base de estos.
Nota importante: esta solución no es nada elegante, es sólo para efectos de muestra y el connectionString nunca hay que escribirlo así en soluciones de producción.
El primero, nos regresará simplemente los empleados:
[WebMethod] public CascadingDropDownNameValue[] GetEmployees( string knownCategoryValues, string category) {
SqlConnection connection = new SqlConnection(@"Data Source=SERVER\SQLEXPRESS; Initial Catalog=Northwind; Integrated Security=True");
SqlCommand command = new SqlCommand("SELECT * FROM Employees");
command.Connection = connection; connection.Open(); SqlDataAdapter adapter = new SqlDataAdapter(command);
DataSet dataSet = new DataSet();
adapter.Fill(dataSet);
command.Connection.Close();
ataTable tbl = dataSet.Tables[0];
List
foreach (DataRow dr in tbl.Rows) {
string sEmployee = (string)dr["FirstName"] + " " + dr["LastName"];
int iEmployee = (int)dr["EmployeeID"];
values.Add(new CascadingDropDownNameValue( sEmployee, iEmployee.ToString()));
}
return values.ToArray();
}
Nótense los parámetros string knownCategoryValues, string category, éstos deben permanecer tal cual para que el control de CascadingDropDown haga con ellos su “magia”. La parte importante está después de List
[WebMethod] public CascadingDropDownNameValue[] GetOrdersByEmployee( string knownCategoryValues, string category) {
StringDictionary kv = CascadingDropDown.ParseKnownCategoryValuesString(knownCategoryValues);
int iEmployee;
if (!kv.ContainsKey("Employee") !Int32.TryParse(kv["Employee"], out iEmployee)) {
return null;
}
SlConnection connection = new SqlConnection(@"Data Source=SERVER\SQLEXPRESS; Initial Catalog=Northwind; Integrated Security=True");
SqlCommand command = new SqlCommand("SELECT OrderID FROM Orders WHERE EmployeeID = " + iEmployee);
command.Connection = connection;
connection.Open();
SqlDataAdapter adapter = new SqlDataAdapter(command); DataSet dataSet = new DataSet(); adapter.Fill(dataSet);
command.Connection.Close();
DataTable tbl = dataSet.Tables[0]; List
foreach (DataRow dr in tbl.Rows) {
string sOrder = dr["OrderID"].ToString();
int iOrder = (int)dr["OrderID"];
values.Add(new CascadingDropDownNameValue( sOrder, iOrder.ToString()));
}
return values.ToArray();
}
El WebMethod recibe como parámetro el EmployeeID dentro de knownCategoryValues y se hace una búsqueda del identificador con el cual filtramos la sentencia SQL para obtener las órdenes.
De igual forma, se prepara lo que alimentará el próximo DropDown en la última sección donde está el foreach. El WebMethod que prepara el detalle de las órdenes se filtra por el OrderID que se seleccione y se preparan los elementos para llenar el último dropdown.
Configuración de propiedades
El código para que los CascadingDropDown trabajen se captura en la definición del control viendo la fuente HTML presionando la vista de Source:
Y las propiedades se deben llenar de la siguiente forma: (en caso de no utilizar Atlas sino la libreria de Ajax no se tiene CascadingDropDownProperties, sino añadir 3 CascadingDropDown)
%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" EnableEventValidation="false" %>
miércoles, 3 de octubre de 2007
Herramientas de testing
En este post voy a presentaros 3 herramientas que utilizo para testear mis aplicaciones. Ellas son NUnit, NUnitASP, Ncover y Web Application Stress.
Las dos primeras sirven para realizar pruebas unitarias, mientras que NCover sirve para medir la cobertura del código de la aplicación que estamos realizando. Tanto Nunit, como NCover están disponible en la versión Team System de VStudio, no obstante se tratan de herramientas de libre distribución que pueden integrarse con VS 2005.
La última de las herramientas permite medir el grado de “stress” de una aplicación web, permitiendo grabar un script que posteriormente se lanza sobre la aplicación simulando el acceso concurrente de varios usuarios durante un tiempo determinado que permite obtener tiempos de retardo y multitud de datos más
BilzTalk Server 2006
martes, 2 de octubre de 2007
La solucion a nuestros problemas...ASP .NET
lunes, 1 de octubre de 2007
Finalizo el Taller PNIS'07
A pesar del nombrecito finalizó con éxito el I Taller sobre Procesos de Negocios e Ingeniería de Software (PNIS) del que fuí Webmaster.
Pueden hecharle un vistazo a los papers aceptados incluso a las fotos de Zaragoza...
http://alarcos.inf-cr.uclm.es/pnis/
Herramientas ORM
Existen distintas formas de creación de una capa de acceso a datos: se puede crear una clase "broker" siguiendo el patrón agente de BD que actúe como único punto de acceso a nuestra BD, sin embargo, esta forma de actuar suele ser válida unicamente para aplicaciones "simples". Si queremos trabajar de una forma profesional debemos adoptar algunas de las propuestas siguientes:
Una forma es crear una clase por cada tabla en la base de datos y mapearlas una a una. Esta es la forma más sencilla y es muy válida cuando tenemos una estructura de base de datos que sea muy parecida a nuestro modelo de dominio (que no se haya optimizado con particiones horizontales o uniones).
Otra forma es respetar un modelo orientado a objetos que represente los objetos del dominio del negocio. Esta es una forma más correcta de trabajar pero se hace más complejo mapear esas clases a sus tablas correspondientes.
Para realizar esta tarea existen herramientas que se llaman ORM (Object to Relational Mapper).
Un ORM muy popular es el NHibernate, se trata de una portación al .net del Hibernate de Java. Este framework se encarga de persistir nuestros objetos del negocio, también tiene un lenguaje de consultas orientado a objetos propio y es totalmente independiente de la base de datos que usemos. Y lo bueno que tiene esto es que podemos migrar de una base de datos a otra sin tocar nuestro código (simplemente cambiamos un par de cositas en un archivo de configuración). Eso sí, hay un trabajito extra, tenemos que crear archivos de configuración xml que le van a indicar a NHibernate cómo tiene que mapear cada clase a sus respectivas tablas.
NHibernate es el framework de persistencia más completo que existe en el mercado. Soporta todos los tipos de relaciones (uno a uno, uno a muchos, muchos a muchos) y puede mapear varias tablas a una clase o al revés, también permite usar herencia, transacciones, agregaciones y muchas cosas más, practicamente podemos hacer cualquier cosa que se nos ocurra. Si buscan una herramienta que les permita crecer y hacer modificaciones sin que surgan limitaciones que no se tuvieron en cuenta, la mejor opción es NHibernate.
Si los archivos de configuración de NH les parecen muy complicados, existen muchas herramientas para facilitarnos las cosas. Una que yo he probado y que me fue muy satisfactoria fue MyGeneration, este es un generador de código opensource que dispone de varias plantillas para generar las clases de acceso a datos y los archivos de configuración de NHibernate a partir de la estructura de nuestra base de datos.
Existe otro proyecto muy interesante: CastleProject (de Brasil) que se trata de un conjunto de frameworks para implementar patrones de diseño com MVC, Inversion Of Control y ActiveRecord. El framework ActiveRecord de CastleProject nos permite implementar este patrón de diseño para el acceso a datos empleando en un nivel inferior a NHibernate por lo que estaríamos usando NHibernate para la persistencia pero encapsulado en el patrón ActiveRecord y también nos olvidamos de los archivos de configuración XML ya que con este nuevo framework sólo tenemos que poner decoradores en nuestras clases (si los nombres de las propiedades se corresponden con las columnas ni siquiera es necesario usar decoradores). Con esta herramienta se simplifica mucho usar NHibernate para la persistencia.
Si volvemos al generador de código que nombre antes (MyGeneration), el mismo creador nos brinda su propio framework de persistencia: dOOdads, para trabajar con este framawork necesitamos el MyGeneration para generar todas nuestras clases y los stored procedures para los inserts, updates y deletes. Esta herramienta genera código muy legible y con una forma muy fácil de realizar consultas.
Saludos.
RIIS: Revista Iberoamericana de IGS
http://alarcos.inf-cr.uclm.es/riis/
La revista pretende ser un foro abierto de presentación e intercambio de noticias, actividades, experiencias, desarrollos, proyectos, resúmenes, etc.; así como para la publicación de artículos científico-técnicos de calidad relevante sobre las diferentes áreas de la Ingeniería del Software.
Se pretende establecer un medio que permita una mayor intercomunicación, expansión y publicación de resultados entre distintos equipos de investigación y/o desarrollo, que permita su mayor conocimiento mutuo y potenciación. Adicionalmente, se pretende fortalecer el desarrollo de las diferentes áreas de la Ingeniería del Software y un mayor conocimiento de la misma en las diferentes universidades y centros de investigación y desarrollo. A fin de conseguir una mayor expansión y acceso a la publicación, su contenido será libremente accesible por Internet.
Los diversos contenidos relacionados con la Ingeniería del Software y tópicos tratados en la revista serán, en general, los referentes a:
- Artículos Científico-Técnicos sobre desarrollos, investigación, enseñanza, productos, etc.
- Resúmenes de seminarios, conferencias, congresos, etc.
- Monografías (números especiales sobre un tema concreto) que agrupen a varios artículos y tengan uno o más editores invitados.
- Resúmenes de tesis doctorales, tesis de maestría, proyectos de investigación, etc.
- Noticias.
Los artículos se clasificarán en diferentes secciones, adaptando las áreas temáticas que propone el SWEBOK (IEEE Computer Society, SWEBOK 2004):
- Ingeniería de requisitos
- Tecnología de procesos.
- Desarrollo de software orientado a aspectos.
- Casos de estudio en empresas.
- Patrones de diseño
- Líneas de productos software
- Calidad, Medición y estimación de productos y procesos
- Métodos formales aplicados a la Ingeniería del Software
- Generación automática del software
- Ingeniería del Software basada en componentes
- Ingeniería de modelos
- Mantenimiento software
- Prueba, verificación y validación
- Ingeniería Web
- Arquitecturas orientadas a servicios
- Cambio y evolución del software
- Arquitectura software
Esperemos que tenga un gran éxito...
OOWS (método Orientado a Objetos para Soluciones Web)
Una decisión importante a la hora de abordar un proyecto será la de qué metodología de desarrollo Software debemos utilizar y no siempre se ha de aplicar la misma para todo tipo de proyectos, sino que será conveniente realizar un análisis de las necesidades del mismo para determinar que metodología es la más apropiada.
En este post quiero presentaros una metodología propuesta en la Universidad de Valencia denominada OOWS bastante adecuada para aplicaciones WEB basadas en Servicios Web (SW) XML y donde cobra bastante importancia la presentación de la información, navegavibilidad y usabilidad de la aplicacion Web:
El desarrollo de aplicaciones Web implica gestionar esencialmente:
- Requisitos de navegación dentro de la aplicación.
- Presentación de la información.
- Gestión de la información (filtrados, búsquedas, estadísticas,etc),
- Tratamiento de usuarios: Gran cantidad de tipos de usuarios (taxonomías), adapactación/personalización, etc.
- Más los requisitos funcionales de las aplicaciones “clásicas”
Otros métodos se centran en la especificación de requisitos funcionales pero dejan a un lado los requisitos navegacionales y de presentación que en este tipo de aplicaciones son una parte bastante importante.
Cabe mencionar que lo mas importante en el desarrollo de una aplicación, es el uso adecuado de una metodología que administre y garantice el cumplimiento de los requerimientos especificados al inicio del proyecto, por medio del uso de alguna tecnología (lenguajes de programación, hardware, sistemas distribuidos, etc) apropiada.
PUD es una metodología bastante estructurada, lo cual permiten poseer un universo de documentación a cada elemento significativo del proyecto (documentos de análisis, de diseño, de construcción, de implementación). El concepto de hito en PUD es un concepto que provee de elementos tangibles (artefactos), que permiten decidir si el trabajo realizado hasta el momento es el adecuado o no, y si se han superado las necesidades de cada fase definida en la metodología.
En algunos equipos de desarrollo, el desconocimiento de dicha estructura desvía el concepto fundamental de hito, al simple hecho de cumplir con cierta documentación (ó conjunto de artefactos), lo cual implica un gasto grande de los recursos para una conjunto enorme de documentación que solo sirve para ser archivada.
Desventaja 1: Si el conjunto de documentos y artefactos no son concebidos tal y como se plantea en PUD, dicha documentación solo servirá para ser archivada lo cual no genera valor respecto a la calidad del desarrollo, y evoluciona en problemas mas complejos (aplicación que no satisface los requerimientos, diseño de la estructura no coincide con la estructura final de la aplicación, etc.)
Desventaja 2: Es necesario incluir a más personas en el equipo de desarrollo: especialistas en los diseños y evolución de casos de uso, de los modelos de análisis y diseño, de los modelos de implementación, etc.
Cabe indicar que la tendencia es a reducir cada vez más los equipos de desarrollo, y no solo por una simple política de reducción de costos, sino a la reducción de la complejidad asociada a la comunicación entre los miembros del equipo.
Desventaja 3: lo mas importante en el desarrollo de un producto informático es el propio de desarrollo, en PUD se gasta posiblemente demasiado tiempo para pasar a la fase de desarrollo.
En cuanto a XP considero que se trata de una metodología demasiado ligera y que quizá se adecuaba mejor a proyectos más simples
Este método (OOWS) aborda de forma sistemática el modelado conceptual de aplicaciones web introduciendo técnicas de especificación de requisitos funcionales y navegacionales, propone una arquitectura software multinivel basada en servicios web, e introduce un conjunto de reglas que permiten transformar las abstracciones conceptuales en cada uno los componentes software que implementan los niveles de la arquitectura, haciendo uso intensivo de patrones de diseño.
Esta metodología pretende desarrollar métodos de producción de software que permitan construir aplicaciones web complejas con comportamiento dinámico, que sean compatibles con los estándares metodológicos y notacionales más extendidos en la actualidad (en particular UML) y que establezcan cómo diseñar y desarrollar aplicaciones web basadas en SW XML para integrar aplicaciones existentes, realizar comercio electrónico y ofrecer funcionalidad a través del web.
Presentacion
Bienvenido a mi blog personal, en este espacio voy a mostrar información, ideas, ejemplos, noticias, herramientas, novedades, etc... que espero que sea útil para alquien :). En especial, tengo bastante interés por el desarrollo software y me estoy especializando en el desarrollo de aplicaciones Web con .NET.
Entre mis próximos comentarios intentaré desarrollar algunos temas y herramientas que me han parecido bastantes interesantes... acceso a datos con NHibertane, MyGeneration, AjGenesis, Ajax, Dundas charts, NAnt, Orcas, Blend, Silverlight, tortoiseSVN entre otras cosillas...pero poco a poco.