27 noviembre 2009

Google Wave

Esta tarde me ha llegado la invitación de mi amigo Omar para el acceso al maravilloso mundo de Google Wave. De este mundo se puede saber más en este link. Pero aquí os dejo una imagen por aquello de que vaklen más que mil palabras.

Pero, no seré vago, y les comentaré por encima que, este nuevo producto se presenta como el fúturo para las nuevas tecnologías en el mundo de la comunicación. Es la unión de todos los prioductos Google: imagine Maps, Email, Blogger, Chat, y todo en tiempo real.

De Wave gusta:
Con la demostración se puede pensar en una alternativa al email, una opción diferente de comunicación que integra muchas de las herramientas que utilizamos en la actualidad de forma dispersa, como los mapas, vídeos, contactos, imágenes, chats, compartir documentos en una misma herramienta.

Apartado técnico:
  • Han lanzado el Protocolo Wave que hasta cierto punto propone lo que hace el SMTP y permite que sea distribuido e interoperable entre diferentes proveedores. El protocolo es abierto y se puede colaborar con su desarrollo. Revisen los principios de la comunidad, el draft del protocolo y más documentación de la arquitectura.
  • La plataforma busca empujar la masificación de HTML 5 como estándar
  • Un “wave” es una conversación, un documento, donde una o varias personas pueden comunicarse y trabajar compartiendo cualquier tipo de contenido y servicio de Google, así como de terceros (vimos integración de twitter por ejemplo)
  • Toda la plataforma es extendible por extensiones y robots que pueden ayudarte a automatizar tareas y procesos
  • El codename del proyecto es Walkabout y nace de Where 2 Tech, fundado por Jen y Lars Rasmussen y que fue adquirido por Google. Este producto les ayudó al desarrollo de Google Maps. También es interesante enterarnos que todo este proyecto nace de las oficinas de Google Australia

24 noviembre 2009

Los ficheros con extensión .csproj

Los ficheros cuya extensión es .csprioj guardan con formato XML las referencias a ficheros externos, así como la estructura del proyecto.

Entonces no bastará para suprimir un fichero del proyecto abierto, ir hasta el apartado Files y suprimirlo con la opción Delete File del propio apartado. Porque para completar la acción de borrado, y que al compilar no salten errores, con el discurso "no se encuentra el archivo blablabla.bla", habrá que ir hasta el fichero con extensión csproj y suprimir la línea que a él se refiere.

22 noviembre 2009

¿Cómo acceder a Internet mediante VMWare y Linux?


Tengo por sistema operativo Windows XP con internet mediante ADSL por router, y en él una máquina virtual Suse, pues bien, quiero configuurar los respectivos pc's para disponer de Internet en la máquina virtual.

Entonces, en el momento de instalación, usando VMWare, escojo la opción NAT. Esto también es válido en modo edición.


Si existiera problema, o sea, desde el real al virtual no se puede estableecer comunicación haciendo ping [ip], entonces averiguo si mi módem tiene más de 2 salidas para Internet. Esto lo hago así:

Con la máquina virtual, entro en la cuenta del usuario root, tecleo el password y abro una terminal. Entonces escribo ifconfig y pulso Enter.

Me aparecerán las tarjetas de red.

En mi caso cuando vi que no existia eth0, verifiqué que mi modem sólo tiene una salida, pues sino me hubiese dado la 0 en vez de la 1, cuyo estado era UP, y sin embargo no podía acceder a Internet.

Usando Suse: ¿cómo modificar el idioma del teclado?


Para modificar el teclado de Suse por defecto en inglés americano, hay que ir hasta YaST, teclear el password necesario (mono en mi caso), ir a Keyboard Layout y elegir el layout correspondiente (Spain para mi). Para asegurarnos de que tenemos la configuración correcta, antes de pulsar OK, testeamos en la caja de texto. Luego damos a OK y respondemos Save a la primera pregunta y OK a la segunda y última. Si aún asi el teclado sigue sin ser español, volvemos a Keyboard Layout y en Additional Layouts marcamos Spain tras buscarlo.

17 noviembre 2009

Usando Monodeveloped: agregar referencias a un proyecto.

Para agregar referencias en Monodeveloped no hay que complicarse tanto la vida como dicen por ahí. De echo basta con ir al panel Solution/References/Nombre del proyecto/Refereces. De ahí se escoge la opción Edit References. Entonces solo te bastará con marcar la que te valga. Y pulsar OK. Tras ello, ya en la vista codigo del formulario con el que trabajas, tecleas: Using ubicación.nombre; Y lista para usar, pero ¡OJO! no todo será igual a C# en el IDE Visual Studio .NET. Si a caso, ya contaré ciertas diferencias que, me han vuelto loco en un grado más.

15 noviembre 2009

Proyecto Mono



Mono es el nombre de un proyecto de código abierto iniciado por Ximian y actualmente impulsado por Novell (tras la adquisición de Ximian) para crear un grupo de herramientas libres, basadas en GNU/Linux y compatibles con .NET según lo especificado por el ECMA.

Mono posee importantes componentes útiles para desarrollar software:

  • Una máquina virtual de infraestructura de lenguaje común (CLI) que contiene un cargador de clases, un compilador en tiempo de ejecución (JIT), y unas rutinas de recolección de memoria.
  • Una biblioteca de clases que puede funcionar en cualquier lenguaje que funcione en el CLR (Common Language Runtime).
  • Un compilador para el lenguaje C#, MonoBasic (la versión para mono de Visual Basic), Java y Python.
  • El CLR y el Sistema de tipos común (CTS) permite que la aplicación y las bibliotecas sean escritas en una amplia variedad de lenguajes diferentes que compilen para byte code
  • Esto significa que si, por ejemplo, se define una clase que realice una manipulación algebraica en C#, ésta pueda ser reutilizada en cualquier lenguaje compatible con CLI. Puede crear una clase en C#, una subclase en C++ e instanciar esa clase en un programa en Eiffel.
  • Un sistema de objetos único, sistema de hilos, bibliotecas de clases y sistema recolector de memoria pueden ser compartidos por todos estos lenguajes.
  • Es un proyecto independiente de la plataforma. Actualmente Mono funciona en GNU/Linux, FreeBSD, UNIX, Mac OS X, Solaris y plataformas Windows.

Existe un proyecto similar, llamado Portable.NET, es parte del proyecto dotGNU.

Historia:

Tan pronto como Microsoft publicó los documentos que especifican la arquitectura .NET en diciembre de 2000, Miguel de Icaza (cofundador de la empresa Ximian y de la GNOME Foundation) comenzó a interesarse en ellos.

GNOME siempre había luchado por proporcionar facilidades al programador, y una de las características más conocidas es que existen multitud de bindings para poder utilizar cualquier lenguaje de programación para desarrollar aplicaciones. Pero la elaboración de dichos bindings era tremendamente laboriosa y cada vez que se realizaba un cambio en la interfaz original, era necesario cambiar todos y cada uno de los bindings.

Para intentar mejorar y facilitar la reutilización de código se realizó una implementación de componentes, llamada Bonobo, utilizando CORBA. Pero tampoco ha tenido éxito, ya que era necesario que todo el software utilizase esa característica y eso no fue así. Por tanto, con .NET se abre una nueva puerta para conseguir hacer de GNOME en un futuro un escritorio mejor y más atractivo tanto para usuarios como para programadores. Con esta tecnología por fin se consigue lo que el proyecto GNOME siempre había buscado, independencia del lenguaje para programar en dicho escritorio.

Miguel de Icaza, después de analizar el intérprete del byte code, advierte que no existen especificaciones. En febrero de 2001 comienza a indagar por dicha información en las listas de correo de .NET y al mismo tiempo comienza a trabajar en un compilador C# en cooperación con Rhys Weatherley y Jay Freeman, el mismo fue programado en C# como un ejercicio para demostrar su potencia.

En abril de 2001, la ECMA publica el formato de archivos faltante y en GUADEC (6 al 8 de abril de 2001) Icaza demuestra las habilidades de su compilador. Después de un minucioso análisis, donde claramente se concluye que es posible construir esa tecnología, Ximian reasigna recursos humanos de otros proyectos y crea el equipo Mono. Aspirando a tener una herramienta que fuese un sustituto completo de la tecnología .NET, formaron The Mono Open Source Project, el cual fue anunciado en julio de 2001, en la conferencia de O’Reilly.

Pasaron 3 años hasta que el 30 de junio de 2004 Mono 1.0 finalmente fue lanzado.

Componentes:



Bibliotecas de clase:

Las bibliotecas de clase proveen un conjunto de facilidades que ayudan al desarrollo de aplicaciones. Son escritas en primer lugar en C#, pero gracias al lenguaje común de especificación (CLS), las mismas pueden ser invocadas en cualquier otro lenguaje de .NET. Las bibliotecas de clase están estructuradas en espacios de nombres (namespaces) y puestas en producción en bibliotecas compartidas denominadas assemblies o ensamblados. Cuando hablamos del framework de .NET, nos estamos refiriendo en primer lugar a las bibliotecas de clase.[JAC]


Espacios de Nombres (namespaces) y Ensamblados (assemblies):

Los espacios de nombres son un mecanismo que permite agrupar lógicamente clases similares en una estructura jerárquica, evitando así conflictos de nombres. La estructura se implementa utilizando palabras separadas por puntos. Por ejemplo, System.IO o System.Net agrupan las clases para acceso a ficheros y para comunicaciones de red, respectivamente.

Los ensamblados son el paquete físico de las librerías de clase. Son archivos con extensión.dll, como las librerías de Windows. Ejemplos de librerías son mscorlib.dll, System.dll, System.Data.dll.

Los espacios de nombres, por lo general, están compuestos por muchos ensamblados y un ensamblado puede estar compuesto de varios archivos.

Lenguaje Común de Infraestructura (CLR):

El lenguaje común de infraestructura o más comúnmente llamado Common Language Runtime (CLR) es implementado por el ejecutable de Mono. El runtime es utilizado para correr aplicaciones compiladas en .NET. Este lenguaje común de infraestructura está definido en los estándares ECMA y ECMA-335. Para ejecutar una aplicación se deberá invocar el runtime con los parámetros adecuados.

Lenguaje Común de Especificación (CLS):

Se encuentra especificado en el estándar ECMA-335 y define la interfaz con el CLR. Por ejemplo, convenciones sobre el tipo de datos que se utilizará para implementar los enumerados. El compilador Mono genera una imagen que cumple con el CLS, esta imagen está codificada en el denominado Common Intermediate Language (CIL) o Lenguaje Intermedio Común. El runtime de Mono toma dicha imagen y la ejecuta.

Mono y las patentes de Microsoft:

La implementación de Mono de esos componentes de .NET no sometidos a ECMA para su estandarización ha levantado algunas preocupaciones por la posible violación de patentes de software durante la vida del proyecto. En particular, la discusión se desarrolló por si Microsoft podría o no destruir al proyecto mono mediante demandas sobre las patentes violadas.

En la actualidad existe un vivo debate sobre la (in)conveniencia de aceptar y usar Mono en la comunidad de desarrolladores de GNU/Linux. Los principales argumentos en contra de Mono son:

  • No está libre de patentes de software, y existe el riesgo de que Microsoft exija licencias para usar C# / CLI.[1]

Por otra parte, el proyecto Gnome está desarrollando un lenguaje alternativo, Vala, creado específicamente para desarrollar aplicaciones para Gnome, pero libre de las potenciales amenazas de Microsoft.[2]


Ver también:

Proyecto Mono Remoting

MonoDeveLop


Enlaces externos:

Planetas:


La fuennte de este artículo es la Wikipedia

Peoyecto GNOME


GNOME
es un entorno de escritorio e infraestructura de desarrollo para sistemas operativos Unix y derivados Unix como GNU/Linux, BSD o Solaris; compuesto enteramente de software libre.

El proyecto fue iniciado por los programadores mexicanos Miguel de Icaza y Federico Mena y forma parte oficial del proyecto GNU. Nació como una alternativa a KDE bajo el nombre de GNU Network Object Model Environment. Actualmente se encuentra disponible en 48 idiomas, entre ellos el español.


Para más información ver la Wikipedia

MonoDevelop



MonoDevelop es un entorno de desarrollo integrado libre y gratuito, diseñado primordialmente para C# y otros lenguajes .NET como Nemerle, Boo, Java (vía IKVM.NET) y en su versión 2.2 Python. MonoDevelop originalmente fue una adaptación de SharpDevelop para Gtk#, pero desde entonces se ha desarrollado para las necesidades de los desarrolladores de Mono. El IDE incluye manejo de clases, ayuda incorporada, completamiento de código, Stetic (diseñador de GUI), soporte para proyectos, y un depurador integrado.

MonoDevelop 2.0 puede ejecutarse en las distintas distribuciones de Linux y en Mac. En la versión de pruebas 2.2 Beta2 MonoDevelop ya cuenta con soporte completo para GNU/Linux, Windows y Mac, completando así un hito para ser un verdadero IDE Multiplataforma.


Historia:

A finales del 2003 un grupo de desarrolladores provenientes de la comunidad Mono comenzó a migrar a SharpDevelop a Linux usando las librerías GTK.

En estos momentos MonoDevelop ha sido absorbido por el proyecto Mono y está siendo activamente mantenido por Novell y la comunidad Mono. MonoDevelop se empaqueta y distribuye junto a Mono desde la segunda beta de Mono 1.0.

MonoDevelop 2.0 es la última versión de MonoDevelop, liberada el 30 de marzo del 2009.


MonoDevelop en plataformas n Linux:

MonoDevelop 2.2 ya dispone de un instalador para Windows y Mac Ofreciendo así un completo soporte multiplataforma.

MonoDevelop se distribuye junto con Mono para Mac OS X incluyendo el diseñador de interfaces gráficas para Mac OS funcionando de manera nativa. MonoDevelop es empaquetado para Solaris sobre SPARC y x86 pero es mantenido por grupos de la comunidad OpenSolaris. Finalmente, MonoDevelop es también mantenido por la comunidad FreeBSD.


Ver también:

El proyecto Mono.


Enlaces de interes:

Est ha sido sacado d la Wikipedia

Funciones que devuelven Fechas y Horas actuales convertidas en String, utilizando C Sharp



En el título ya aclaré de que va esta actualización, así que ahora sólo pondré el código de sendas funciones:


Retornar fecha:

private string GetFecha()
{
string fecha;
fecha = DateTime.Now.ToShortDateString();
return fecha;
}


Retornar hora:

private string GetHora()
{
string hora;
hora = DateTime.Now.ToShortTimeString();
return hora;
}

XML y CSharp (C#)

Quen quiera saber que es XML, que lea actualizaciones anteriores o vaya directamente a la Wikipedia. Aquí escribiré cómo desde C# se puede acceder a un archivo escribiendo en él, o para leer. Aunque mi pequeño fracaso, ¿o no?, es que no encontré modo de agregar a un archivo unnuevo registro, sin borrar el contenido actual. Por ello tuve que calentarme la cabeza, y desarrollé dos funciones, una que utilizaba un archivo auxiliar y otra que cargaba en arrays los datos actuales y luego añadia el nuevo registro.


Cómo se lee:


private void LeerFicheroXML()
{
XmlTextReader lectorXML = new XmlTextReader(strRutaDocumentoXML);
StreamReader lector = new StreamReader(strRutaDocumentoXML, System.Text.Encoding.UTF8);
lectorXML.Namespaces = false;
contador = 0;


while (lectorXML.Read())
{
switch (lectorXML.NodeType)
{
case XmlNodeType.Element:
switch (lectorXML.Name)
{
case "NombreRepositorio":
CmbListaRepositorios.Items.Add(lectorXML.ReadString());
contador++;
break;
case "Email":
CmbListaEmails.Items.Add(lectorXML.ReadString());
contador++;
break;
case "Fecha":
break;
contador++;
case "Hora":
contador++;
break;
}
break;
}

}
lectorXML.Close();
lector.Close();


}


Cómo se agregan datos utilizando arrays auxiliares:

private void AgregagandoDatos()

{
contador++;

string[] emails; // Declaración del array
emails = new string[contador]; // Instanciación del array
string[] nombreRepositorios;
nombreRepositorios = new string[contador];
string[] fechas;
fechas = new string[contador];
string[] horas;
horas = new string[contador];
for (int i = 0; i <>
{
fechas[i]="";
horas[i]="";
nombreRepositorios[i]="";
emails[i]="";
}
//declaro el lector y el escritor
XmlTextReader lectorXML = new XmlTextReader(strRutaDocumentoXML);
StreamReader lector = new StreamReader(strRutaDocumentoXML, System.Text.Encoding.UTF8);
lectorXML.Namespaces = false;

try
{
//comienzo la lectura
int ind = 0, indE=0, indN=0, indH=0, indF=0;
while (lectorXML.Read())
{
switch (lectorXML.NodeType)
{
case XmlNodeType.Element:
switch (lectorXML.Name)
{
case "NombreRepositorio":
nombreRepositorios[indN] = lectorXML.ReadString();
indN++;
break;
case "Email":
emails[indE] = lectorXML.ReadString();
indE++;
break;
case "Fecha":
fechas[indF] = lectorXML.ReadString();
indF++;
break;
case "Hora":
horas[indH] = lectorXML.ReadString();
indH++;

break;
}
break;
}

}
lectorXML.Close();
lector.Close();

//y ahora comienzo a escribir en el archivo

XmlTextWriter escritorXML = new XmlTextWriter(strRutaDocumentoXML, Encoding.UTF8);
escritorXML.Formatting = Formatting.Indented;
escritorXML.WriteStartDocument();
ind=0;
while(nombreRepositorios[ind]!="")
{
escritorXML.WriteStartElement("Repositorios");
escritorXML.WriteElementString("NombreRepositorio", nombreRepositorios[ind]);
escritorXML.WriteElementString("Email",emails[ind]);
escritorXML.WriteElementString("Hora", horas[ind]);
escritorXML.WriteElementString("Fecha", fechas[ind]);

ind++;


}
escritorXML.WriteElementString("NombreRepositorio", CmbListaRepositorios.Text);
escritorXML.WriteElementString("Email", CmbListaEmails.Text);
escritorXML.WriteElementString("Hora", GetHora());
escritorXML.WriteElementString("Fecha", GetFecha());
escritorXML.WriteEndElement();
escritorXML.WriteEndDocument();
escritorXML.Flush();
escritorXML.Close();

CmbListaEmails.Items.Add(CmbListaEmails.Text);
CmbListaRepositorios.Items.Add(CmbListaRepositorios.Text);
}
catch (Exception ex)
{
MessageBox.Show("Se produjo el siguiente error: "+ ex.Message + "\n" + ex.InnerException,"Informando", MessageBoxButtons.OK,MessageBoxIcon.Error);


}


}





07 noviembre 2009

Día glorioso en C#: Cómo se manda un correo electónico


Dado que no hay muchas fotos del logo de C Sharp, contento como estoy, aunque no más que el gran Benigni el día que su película "La vida es bella" arrasó en los Oscar's, coloco su foto.



private void BtnEnviar_Click(object sender, EventArgs e)

{
int i = 0;


MailMessage oMail= new MailMessage(); //creo un objeto mensaje



try
{
//recorro la combo, para tomar los nombres de correo seleccionados y agregarlos al campo CC del
//objeto Mail
for (i =0; i<>
{
CmbPara.SelectedIndex = i;

if (CmbPara.GetItemChecked(i))
oMail.CC.Add(new MailAddress(Convert.ToString(CmbPara.SelectedItem.ToString())));

}

}
catch (Exception ex)
{
MessageBox.Show("Se dio un error al ir agregando los cntactos. El error es:\n\n" + ex.Message + "\n\nEl InnerException es: " + ex.InnerException,"Error",MessageBoxButtons.OK,MessageBoxIcon.Error);
}
//quien lo manda y mi apodo
oMail.From = new MailAddress(TxtDe.Text, "El Terrible Malpaso", Encoding.UTF8);
//asunto
oMail.Subject=TxtAsunto.Text;
//cuerpo
oMail.Body=RchTexto.Text;

SmtpClient oClienteSMTP = new SmtpClient(); //creo el bjeto cliente
oClienteSMTP.Host = "smtp.gmail.com"; //mi host
NetworkCredential autentificar = new NetworkCredential(TxtDe.Text,"topsecret"); //mi cuenta y su contraseña
oClienteSMTP.Port = 25; //numero de puerto
oClienteSMTP.UseDefaultCredentials = false;
oClienteSMTP.Credentials = autentificar;
oClienteSMTP.EnableSsl = true;

try
{
oClienteSMTP.Send(oMail); //envio
MessageBox.Show("El mensaje ha sido enviado con éxito","¡Bien!",MessageBoxButtons.OK,MessageBoxIcon.Information);

}
catch (Exception ex)
{
MessageBox.Show("Error al envar el mensaje: \n\nMensaje: " + ex.Message + "\n\nInerException: " + ex.InnerException, "¡Error!", MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}



03 noviembre 2009

Mis saludos a la clase JOptionPane


Hoy Googleando he descubierto cómo Java muestra mensajes de opciones y mensajes con caja de texto para rellenar contestando a una pregunta. Y desde hoy sumaré un atractivo a mis aplicaciones de escritorio. La web de donde logré mis conocimientos es esta. Y yo le he sacado uso con estas sentencias:


void jButton1_actionPerformed(ActionEvent e) {

String strNuevoNombre= JOptionPane.showInputDialog(null,"Cambiate de nombre: ","Cambio de nombre",JOptionPane.INFORMATION_MESSAGE);
if (strNuevoNombre.length()>0 && strNuevoNombre.compareToIgnoreCase("maquina")!=0 && strNuevoNombre.compareToIgnoreCase("humano")!=0){
this.partida1.cambiarNombreAlJugadorHumano(strNuevoNombre);
this.jLabelNombreJugTurno.setText(partida1.getTurno().getNombre());
JOptionPane.showMessageDialog(null,"Ha actualizado correctamente tu nombre.","Cambio de nombre",JOptionPane.INFORMATION_MESSAGE);
}
else
JOptionPane.showMessageDialog(null,"Nombre incorrecto. Pruebe con otro diferente a Humano o Maquina.","Error",JOptionPane.OK_OPTION);
}

Saludos