Persistencia de Objetos con XPO

Julio 29, 2010 :: Posted by - Emilio Torrens :: Category - , , ,

Estos dĂ­as estoy probando varias soluciones de persistencia de Objetos ya que estoy pensando seriamente dejar de usar Deklarit porque van muy lentos con las versiones.

El primero que he probado ha sido XPO de DevExpress, es bastante potente y fácil de usar aunque el generador de clases desde una BD existente es un poco pobre, no te genera las relaciones ni las tablas cuya PK este compuesta por varios campos, eso tendremos que solucionarlo a mano, aquí podéis ver como.

El tema de PK por mĂşltiples campos se soluciona creando una estructura donde definimos la clave primaria y luego en la clase que mapeamos a la tabla definimos esa estructura como PK

public struct MyTablePK

{

    [Persistent("Field1")]

    public string FieldKey1;

    [Persistent("Field2")]

    public string FiledKey2;

}


[OptimisticLocking(false)]

[Persistent("Table")]

public class MyTable : XPBaseObject

{

    [Key(), Persistent()]

    public MyTablePK PK;

    public string Field3;

    public string Field4;

    public MyTable(Session session) : base(session) { }

    public MyTable() : base(Session.DefaultSession) { }

    public override void AfterConstruction() { base.AfterConstruction(); }

}

El tema de la relaciones se soluciona utilizando el atributo [Association] en la propiedad donde definimos la colección de objetos hijos indicándole el nombre que le hemos dado en el SQL al FK

[OptimisticLocking(false)]

[Persistent("Table")]

public class MyTable : XPBaseObject

{

    [Key(true)]

    public int PK;

    public string Field1;

    public string Field2;


    [Association("Table-ChildTable", typeof(MyChildTable)), Aggregated]

    public XPCollection Childs

    {

        get { return GetCollection("MyChildTable"); }

    }


    public MyTable(Session session) : base(session) { }

    public MyTable() : base(Session.DefaultSession) { }

    public override void AfterConstruction() { base.AfterConstruction(); }

}



[OptimisticLocking(false)]

[Persistent("ChilTable")]

public class MyChildTable : XPBaseObject

{

    public int FK;

    public int PK;

    public string Field1;

    public string Field2;

    public MyChildTable(Session session) : base(session) { }

    public MyChildTable() : base(Session.DefaultSession) { }

    public override void AfterConstruction() { base.AfterConstruction(); }

}

Pues nada, sigo probando cosas, ya iré comentando :)

Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter

Control Silverlight RichtTextBox

Julio 21, 2010 :: Posted by - Mario Andujar :: Category - , , ,

image

El otro dĂ­a en el trabajo me pidieron si podĂ­a crear dos controles nuevos en Silverlight para poder introducir texto formateado y poder visionarlo.

Buscando por la red encontré una opción gratuita bastante buena para lo que me pedían. El control en si se encuentra en http://www.vectorlight.net/demos/richtextbox.aspx y es un editor de texto bastante completo (tiene incluso un diccionario ortográfico para corregir errores de escritura y agregar nuevas definiciones). Solo con cambiar y poner las cuatro opciones que me pedían ya quedaron realizados estos dos controles.

Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter

Trabajar con Listas (Skip, Take y OrderBy)

Junio 30, 2010 :: Posted by - Emilio Torrens :: Category - , ,
Un poco de cĂłdigo para trabajar con listas.
 
El otro día nos llegaba, en una lista de int, las edades de los paxes y querían que ordenáramos las de los niños de menor a mayor, de eso se puede sacar un ejemplo de uso de Take y Skip, G1 seria el numero de Adultos en la lista, G2 niños y G3 Bebes.
 
int G1 = 2;

int G2 = 3;

int G3 = 1;

List<int> Valores = new List<int>() { 35, 25, 9, 4, 5, 0 };

//Cogemos los valores del segundo Grupo, los ordenamos y los metemos en 

//una nueva lista

List<int> ValoresG2 = Valores.Skip(G1).Take(G2).OrderBy(c => c).ToList();

//Creamos la lista resultado con los valores del Grupo 1, los del Grupo 2 

//Ordenado y el Grupo 3

List<int> result = new List<int>();

result.AddRange(Valores.Take(G1));

result.AddRange(ValoresG2);

result.AddRange(Valores.Skip(G1 + G2));

Ya se que se puede hacer en menos lĂ­neas, pero es un ejemplo !!!!! :)
Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter

Acortar una URL con TinyURL y PHP

Junio 23, 2010 :: Posted by - Emilio Torrens :: Category - ,
<?php

$url = $_GET['url'];

$curl = curl_init();

curl_setopt($curl,CURLOPT_URL,'http://tinyurl.com/api-create.php?url='.$url);

curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);

curl_setopt($curl,CURLOPT_CONNECTTIMEOUT,5);

$rs = curl_exec($curl);

curl_close($curl);

echo $rs;

?>

Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter

Eclipse y Team Foundation Server

Junio 22, 2010 :: Posted by - Emilio Torrens :: Category - , , ,

image Que estés usando Eclipse para unos proyectos y Visual Studio para otros no es escusa para no usar Team Foundation Server para el seguimiento de los proyectos y como Repositorio de Código ya que puedes usar “Microsoft Visual Studio Team Explorer Everywhere 2010” con Eclipse.

Para instalarlo en Eclipse solo tienes que seguir estos pasos:

  • Descargarlo desde aquĂ­, descargas el archivo (TFSEclipsePlugin-UpdateSiteArchive-10.0.0.zip)
  • En Eclipse vas a Help/Install New Software
  • OpciĂłn Add, y OpciĂłn Archive donde  seleccionas el archivo zip que has descargado.
  • Marcas la opciĂłn “Team Explorer Everywhere”
  • Next, next y reinicias Eclipse

Listo, ya lo tienes instalado:)

En el menú contextual de los proyectos te aparecerá una nueva opción “Team”, para agregar el proyecto la primera vez utilizas la opción “Share”, una vez agregado tendrás el mismo menú que en Visual Studio

La primera vez que agregues un proyecto te pedirá un serial, marcas la opción “Use a full-featured trial version of Microsoft Visual Studio Team Explorer Everywhere”

Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter

Programando para todos los móviles con Airplay

Junio 21, 2010 :: Posted by - Emilio Torrens :: Category - , , ,

image

Airplay es un SDK que nos permite desarrollar aplicaciones en C++, con el IDE que queramos (de momento soporta todas las versiones de Visual C++ y XCode para Mac), podemos debugear y hacer test con ARM o X86 y después generar resultados para todas las plataformas móviles soportadas, que creo que son casi todas ;)

AquĂ­ la lista  de Plataformas soportadas:

  • iPhone / iPod Touch
  • Android
  • Symbian
  • Windows Mobile
  • BREW
  • Maemo (Beta)
  • Palm webOS (Alpha)

Es de pago, pero el sistema de licenciamiento es bastante bueno, ya que según los "beneficios” que obtengas usándolo pagaras mas o menos.

Puedes bajar una versiĂłn de evaluaciĂłn y ver el sistema de licencia aquĂ­

Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter

Programando para Android

Junio 02, 2010 :: Posted by - Emilio Torrens :: Category - , ,

Un par de cositas a tener en cuenta cuando programamos para Android con el Eclipse.

Se te generara una clase que hereda de Activity que es donde esta el meollo, allĂ­ tenemos acceso a todos los objetos de la aplicaciĂłn y es donde pondremos el cĂłdigo.

   1: public class MyAppActivity extends Activity {

   2:     /** Called when the activity is first created. */       

   3:     

   4:     @Override

   5:     public void onCreate(Bundle savedInstanceState) {

   6:         

   7:         super.onCreate(savedInstanceState);

   8:         setContentView(R.layout.main);

   9:     }

  10: }

Los nombres (formularios, imágenes, controles en los formularios … ) son únicos para toda la aplicación, se genera una clase R.java donde tendrás campos estáticos con todos los Ids agrupados en clases:

  • layout, los ids de los formularios
  • string, los ids de los recursos
  • drawable, los ids de las imágenes
  • id, los ids de los controles.

Para cargar los formularios usaremos el método setContentView pasándole el id del formulario que tenemos en la clase R.java

   1: private void OnClickForm2() {

   2:     setContentView(R.layout.form2);

   3: }

Para acceder a los controles utilizaremos el método FindViewById, usando los ids de la clase R.java, nos devolverá un objeto y hacemos cast al control.

   1: TextView textoCabecera = (TextView) findViewById(R.id.TextoCabecera);

Para capturar los eventos en los controles tienes que hacerlo después de cargar el layout, accediendo al control por el Id.

   1: setContentView(R.layout.main);                

   2:  

   3: try

   4: {                

   5:     this.Boton1 = (Button)this.findViewById(R.id.Boton1);

   6:     this.Boton1.setOnClickListener(new OnClickListener(){

   7:         @Override

   8:         public void onClick(View v) {

   9:             OnClickBoton1();

  10:         }

  11:       });

  12:         

  13:     this.Boton2 = (Button)this.findViewById(R.id.Boton2);

  14:     this.Boton2.setOnClickListener(new OnClickListener(){

  15:         @Override

  16:         public void onClick(View v) {

  17:             OnClickBoton2();

  18:         }

  19:       });

  20: }

  21: catch(Exception ex)

  22: {

  23:     

  24: }

Y por ultimo, enviar notificaciones al usuario, aquí dejo un método para eso, lo único a tener en cuenta es el NOTIF_ID que es global y se incrementa después de cada notificación.

   1: public void Notify(String title, String text, int iconID)

   2: {

   3:     String ns = Context.NOTIFICATION_SERVICE;

   4:     NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);

   5:     int icon = iconID;

   6:     CharSequence tickerText = title;

   7:     long when = System.currentTimeMillis();

   8:  

   9:     Notification notification = new Notification(icon, tickerText, when);

  10:     

  11:     Context context = getApplicationContext();

  12:     CharSequence contentTitle = title;

  13:     CharSequence contentText = text;

  14:     Intent notificationIntent = new Intent(this, WindConditionsActivity.class);

  15:     PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);

  16:  

  17:     notification.setLatestEventInfo(context, contentTitle, contentText, contentIntent);

  18:             

  19:     mNotificationManager.notify(NOTIF_ID, notification);

  20:     

  21:     NOTIF_ID++;

  22: }

Ahora no tengo mucho tiempo para programar Android, pero bueno a medida que descubra cosas nuevas las iré publicando :)

Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter

Android y Eclipse

Mayo 21, 2010 :: Posted by - Emilio Torrens :: Category - , ,

Desarrollar aplicaciones para Android con Eclipse es relativamente sencillo, solo hay que preparar el entorno y leer un poco aquĂ­ , sigue estos pasos para preparar el entorno.

1-  Necesitas el Eclipse, si no lo tienes bájalo desde aquĂ­ (Yo uso Eclipse IDE for Java EE Developers)
2-  Necesitas el SDK de Android, bájalo desde aquĂ­
3-  Necesitas el Plugin de Android para Eclipse, mas abajo pone como instalarlo.

image Para instalar el SDK de Android, descomprimes lo que te hayas bajado directamente donde quieras que este el SDK (ya que el Manager te bajara allĂ­ los archivos) y ejecutas el SDK Setup.exe, vas a Paquetes Disponibles le das a Actualizar Todo y listo.

El único problema que me encontré en este paso fue con la conexión https, si te falla tienes que ir a Settins y marcar “Force https// … Sources”.

Para instalar el plugin en Eclipse, en Eclipse vas a “Help/Install New Software” y le das a “Add” una vez allí en Nombre pon el que quieras y en location:
https://dl-ssl.google.com/android/eclipse/ aceptas, instalas todo y listo.

Una vez instalado el plugin solo hay que configurar el path donde tienes el SDK, para eso vas a “Windows/Preferences/Android”, le pones el path donde tienes el SDK y le das a “Apply”.

Y ya esta, lo tienes listo, en “File/New/Other” ya te aparecerá la opción para crear nuevos Proyectos de Android.

image image image image
Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter

Objetos 2 byte[]

Mayo 11, 2010 :: Posted by - Emilio Torrens :: Category - ,

Estoy haciendo unas pruebas con un servicio de cache propio en el que guardamos los datos en byte[] en unos diccionarios, así que a quien pueda interesar, aquí os dejo los métodos de serializacion y desserializacion:

public static byte[] ToByteArray(Object obj)
{
    if (obj == null) return null;

    MemoryStream ms = new MemoryStream();
    BinaryFormatter b = new BinaryFormatter();
    b.Serialize(ms, obj);
    byte[] data = ms.ToArray();
    ms.Close();
    return data;
}

public static T ToObjectSerialize<T>(byte[] serializedObject)
{
    if (serializedObject == null) return default(T);

    MemoryStream ms = new MemoryStream();
    ms.Write(serializedObject, 0, serializedObject.Length);
    ms.Seek(0, 0);
    BinaryFormatter b = new BinaryFormatter();
    Object obj = b.Deserialize(ms);
    ms.Close();
    return (T)obj;
}

Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter

Tercer Aniversario

Abril 15, 2010 :: Posted by - Emilio Torrens :: Category -

Pastel_r2d2

Ayer hizo 3 años que tenemos el blog en marcha, así que como mínimo un pastel un tanto freak (que es una foto que he encontrado por la red, pero no estaría mal que un día me sorprendierais con uno) y un POST para celebrarlo.

Estaba revisando el primer POST y era sobre certificaciones de software para Windows Vista, ayer en el día del aniversario posteamos sobre Velocity, mucho mejor ….

Bueno pues nada gracias a todos los que nos visitáis y felicidades para Jordi y para … mi :)

Si te gusta compartelo ...
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks
  • DotNetKicks
  • Live
  • MySpace
  • Meneame
  • Twitter