3ENGINE  programmer :-)

miércoles 27 de mayo de 2009

F#

¿Qué es el lenguaje F#?

Es un lenguaje de programación, que proporciona la mejor combinación de seguridad, rendimiento y script, con todas las ventajas de ejecutarse en un runtime moderno. Se ejecuta sobre el Framework de .NET

Un lenguaje de programación de script, funcional, imperativo, orientado a objetos que es una base fantástica para realizar diversidad de tareas dentro de la programación

Enlaces:

Ejemplo de un programa en F#
Lenguaje F#
F# tutorial
Recursos F#

Etiquetas: ,




viernes 13 de marzo de 2009

Clonar or not clonar: that is the question

Programando yo el otro día en c#... necesitaba realizar un copia integra de un objeto, pero duplicando direcciones de memoria, es decir un objeto completamente nuevo pero que contenga los mismos datos... me interesaba que fuera una rutina universal que me sirviera para copiar cualquier objeto independientemente de su tipo.


A partir del artículo de Christian Bigentini descubrí que utilizando técnica de serialización y deserialización podia hacer lo que me proponia.

Pero por otro lado, me interesaba que el método que realiza una copia de mi objeto estuviera de algun modo asociado al tipo... para esto, lo mejor es utilizar las extensiones, una técnica que c# ha incluido a partir de la versión 3.0.

El código resultante es éste:




public static class MyExtensions
{
public static MiTipo Copia(this MiTipo plugin)
{
MemoryStream ms = new System.IO.MemoryStream();
BinaryFormatter bf = new BinaryFormatter(null,
new StreamingContext(StreamingContextStates.Clone));
bf.Serialize(ms, plugin);
ms.Seek(0, SeekOrigin.Begin);
MiTipo copia = (MiTipo)bf.Deserialize(ms);
ms.Close();
return copia;
}
}

Un ejemplo de su uso:




using espacio.nombres.declaracion.extensiones
...
MiTipo objeto1 = new MiTipo();
objeto1.propiedad = "hola";
MiTipo objeto2 = objeto1.Copia();
...

Etiquetas:




miércoles 4 de marzo de 2009

Datasets: La propiedad NullValue y DefaultValue

Un truco para ahorrar código y quebraderos de cabeza cuando trabajamos con datasets de .NET es la propiedad NullValue que se encuentra en de la definición de las columnas de un DataTable. Si quieres mas detalles sobre DefaultValue y NullValue, lee éste artículo .

Pero en resumen, para 'NullValue' se trata de ahorrar la comprobación si el valor de la columna es nulo o no de modo que si la propiedad 'NullValue' la dejamos en blanco, de esto:

if (!row.IsObservacionesNull())
obs = row.Observaciones;
else
obs = “”;


sólo necesitaremos hacer esto:

obs = row.Observaciones;

Con DefaultValue, la idea es que al dar a ciertas columnas valores por defecto, al insertar una nueva fila al Dataset sólo nos tendremos que preocupar por dar un valor a los campos que nos interese.

Etiquetas: ,




MSLinqToSQLGenerator: Unspecified error

Cuando añades una partial class a una clase "Linq to SQL" de LINQ tienes todos los números que en un momento u otro acabe saliendo un error "'MSLinqToSQLGenerator' failed. Unspecified error" ¡incluso aunque tengas instalado el SP1 de Visual Studio 2008!. Gracias a éste enlace pude solucionar el problema.

1º paso: los using debe estar dentro del "namespace". Es decir de esto:


using System.Linq;
using System.Collections.Generic;
using System.Data;

namespace SIRAMcenter.Datos.Plugins
{
partial class PluginInstanceDataContext
{
public IEnumerable<string> GetNombreClasePluginsNoIControl(int idCentro)

debes pasar a esto:

namespace SIRAMcenter.Datos.Plugins
{
using System.Linq;
using System.Collections.Generic;
using System.Data;

partial class PluginInstanceDataContext
{
public IEnumerable<string> GetNombreClasePluginsNoIControl(int idCentro)
{



2º paso: Ejecutar explicitamente la herramienta personalizada(MSLinqToSQLGenerator) de nuevo:




3ºpaso: limpia el proyecto y vuelve a compilar.

Etiquetas: , ,




martes 3 de marzo de 2009

LINQ con WCF: de carga diferida a explícita

LINQ por defecto utiliza la consulta diferida. Cuando "navegamos" entre las clases de un LINQ to SQL (.dbml) éste en background va generando las consultas y de este modo nos ahorramos consultas inutiles.

El problema viene cuando queramos devolver una clase que forma parte de un .dbml como resultado de un método marcado como [OperationContract].

Es necesario modificar el comportamiento por defecto de consulta diferida a una consulta forzada. Ejemplo:


PluginInstanceDataContext pluginsContext = new PluginInstanceDataContext();

var orderloadOption = new System.Data.Linq.DataLoadOptions();
DataLoadOptions dlo = new DataLoadOptions();
dlo.LoadWith(p => p.PluginParametro);
dlo.LoadWith(p => p.PluginTipoControl);
pluginsContext.LoadOptions = dlo;

var consulta = from plugins in pluginsContext.Plugin
where plugins.IdCentro == idCentro
select plugins;


Sino lo hacemos así nos encontraremos que las "clases hijas" no contienen datos.

Etiquetas: , , ,




miércoles 25 de febrero de 2009

Cómo habilitar .dbml de LINQ para WCF

Vale, de acuerdo es una ""tonteria"" pero una tonteria que me ha hecho perder unas cuantas horas. Si utilizas LINQ y requieres que un método WCF marcado con atributo [OperationContract] devuelva una clase de un fichero .dbml necesitas que se serialize correctamente para viajar al cliente correctamente, para ello necesitas poner Serialization mode = unidirectional


Etiquetas: , ,




jueves 19 de febrero de 2009

LINQ Dynamic Query

Si quieres hacer algo como esto en LINQ:


var query =
db.Customers.
Where("City = @0 and Orders.Count >= @1", "London", 10).
OrderBy("CompanyName").
Select("new(CompanyName as Name, Phone)");


lo llevas claro... ya que .NET no permite realizar LINQ dinámico. Para solucionarlo existe una libreria que añadiendola a tu proyecto podras hacer cosas como la del ejemplo.
Para descargar la libreria y unos ejemplos éste es el enlace o este.

Artículo original: Dynamic LINQ(Parte 1: Usando la librería de LINQ Dynamic)

Etiquetas: , ,




lunes 6 de octubre de 2008

Trac. control de versiones y mas.

Siguiendo con las misma temática que una entrada anterior . He buscado alguna solución free que integre, ademas de un control de versiones, otras herramientas útiles para llegar a buen puerto en el desarrollo de un proyecto. Una muy interesante es Trac (2): tiene un Wiki, acceso visual al control de versiones subversion, sistemas de tickets (bugs, mejoras,etc..), timeline, roadmap, etc.

Aparte, no hay excusa para no utilizar subversion, ya que existe por ejemplo el plugin TamTam SVN (2) que por 10$ hacer que VS soporte casi todas las operaciones que son necesarias (check-in, check-out, commit, abrir soluciones o proyectos, conexión con repositorios, ver histórico, comparar diferencias…).

Etiquetas: ,




viernes 26 de septiembre de 2008

Control de versiones.

Para la gestion de proyectos para .NET, Microsoft ofrece TFS que aparte de venir de "serie" con un sistema de control de versiones ofrece muchas mas cosas y por lo visto es lo que Microsoft esta potenciando.

Si sólo necesitas control de versiones puedes optar por Visual Source Safe que es compatible con VS 2005 y 2008, aunque por lo visto Microsoft lo esta dejando algo de lado y me apostaria que a la larga dejara de dar soporte.

Otro sistema es CVS o subversion, que son software libre, existen plugins para VS 2005 y 2008, como AnkhSVN, tortoise o uno de pago pero mas completo que se llama visualsvn, en este enlace el autor explica su experiencia.

Etiquetas: ,




jueves 9 de noviembre de 2006

versión 3.0 del framework .NET



Microsoft acaba de hacer pública la versión 3.0 del framework .NET.

anuncio y enlaces
laboratorio virtual

Etiquetas:




   

Categorias

Archivos

 
Feed Blog suscrbete!      Contacto     Terminos & Condiciones © 3ENGINE 2007