28 diciembre 2009
En C#: Función que devuelve la fecha actual en formato DateTime
La función que abajo uso sirve para inicializar con la fecha del momento un objeto DateTimePicker:
private DateTime getFechaActual()
{
int anio, dia, mes;
DateTime dtFecha;
anio=DateTime.Today.Year;
mes=DateTime.Today.Month;
dia=DateTime.Today.Day;
dtFecha = new DateTime(anio, mes, dia);
return dtFecha;
}
No más dificil será para adjudicar la hora, los minutos y los segundos.
22 diciembre 2009
Minimizar una aplicación hecha en C# mostrando su icono en la bandeja de sistema
Para ello habrán de llevar al diseño del formulario la herramienta NotifyIcon. Cuando la tengan, podrán cambiarle la propiedad Icon cn un icono que exista en el disco duro. Entoncesese será el icono que aparezca en la bandeja del sistema.
Marcando el objeto notifyIcon1, en eventos, cliquen en DoubleClick, así meteran código en el evento. Este será el código:
private void notifyIcon1_DoubleClick(object sender, EventArgs e)
{
//Hacemos visible el formulario
this.Show();
this.WindowState = FormWindowState.Normal;
//Ocultamos el icono de la bandeja de sistema
notifyIcon1.Visible = false;
}
Con esto aún no tenemos resuelto el objetivo. Ahora se programará el evento Resize del formulario:
private void Form1_Resize(object sender, EventArgs e)
{
//Si el estado actual de la ventana es "minimizado"...
if (this.WindowState == FormWindowState.Minimized)
{
//Ocultamos el formulario
this.Visible = false;
//Hacemos visible el icono de la bandeja del sistema
notifyIcon1.Visible = true;
}
}

Esto lo hee sacado de la web http://www.locualo.net/programacion/minimizar-bandeja-del-sistema-system-tray-net/00000090.aspx
Saludos
Cómo hacer un instalador en Visual Studio 2008
Yo no seré tan explicatvo como él, mi paciencia es menor, o eso creo.
Entonces diré, les explicaré la operación con el proyecto EnviarEmails, que hay que ir hasta Generar-> Publicar EnviarEmails
Entonces les saldrá este formulario donde habrán de indicar la ubicación donde quieren que quede guardado el programa de instalación.

El segundo paso será indicar a partir de dónde descargar la aplicación. Normalmente usremos la última opción.

El tercer paso pregunta por dónde irá a buscar las actualizaciones. En mi caso pondré que de ningún sitio (última opción) porque no las habrá.

Lueg ya se finaliza.
Entonces habrá que ir hasta la carpeta donde se guardó el programa instalador y ejecutar Setup que ejecutará la aplicación que lleva por nombre el mismo nombre del proyecto. En este caso EnviarEmails.
Para desinstalar la aplicación deben de ir a la opción Agregar o quitar programas de Panel de control.

Saludos
Inno Setup 5: herramienta para crear instaladores para aplicaciones programadas con Visual Basic 6.0

¿Alguna vez han querido hacer, a partir de un ejecutable de un programa desarrollado en Visual Basic 6, un instalador que les permita instalar esa aplicación en cualquier ordenador, Windows, por supuesto? Yo si, pero no fue hasta hace unos días cuando me lancé a ello, entonces en Internet localicé a alguien que recomendaba Inno Setup 5. Y la verdad es genial. Su uso es sencillo y en un momento, y leyendo bien las opciones, porque aparece en inglés, puee generar un instalador de tus aplicaciones. Incluye selector de idiomas, la posibilidad de lanzar la aplicación tras instalarlo, la posibilidad de crear un acceso directo, de dar un icono al archivo (para que no sea el habitual de un pc y un disco al lado), de generar una aplicación de desinstalación... Y todo paso a paso.
17 diciembre 2009
Filtrando con Filechooserwidget
{
Gtk.FileFilter filtro2 = new Gtk.FileFilter();
filtro2.Name="Imagenes DICOM";
//filtro2.AddMimeType("image/dicom");
filtro2.AddPattern("*.DCM");
filechooserwidget2.AddFilter(filtro2);
Gtk.FileFilter filtro1= new Gtk.FileFilter();
filtro1.Name="Todos los ficheros";
filtro1.AddPattern("*");
filechooserwidget2.AddFilter(filtro1);
}
Lo que este código hace es un filtro del objeto filechooserwidget2 de la clase Filechooserwidget. Este objeto tiene el siguiente aspecto:

Entonces con las lineas de arriba lo que hago es una filtración, para no poder seleccionar los archivos que no cumplan con el filtro indicado en esos momentos.
Nota: los archivos que no tengan extensión explicita sólo serán vistos desde la opción *.*, que permite la selección sin filtración.
05 diciembre 2009
Usar los ArrayList descartando los arrays básicos
Para hacer uso de los ArayList, en Java se debe escribir la línea import Java.Utils.ArrayList; que importará la clase ArrayList de la que se declará un objeto que luego se instanciara. Y en C# habrá que importar la clase Collections que existe dentro de System usando la palabra clave using. Luego, igual que en Java, se declará un objeto y se instanciará.
¿Pero cuáles son las ventajas de un objeto ArrayList sobre una variable array de cualquier tipo?
- Un ArrayList colecciona objetos, un array colecciona dtos de un mismo tipo, que además es básico.
- Su tamaño. Es decir, cuando declaras un array debes indicar su tamaño al instanciarlo. Y si quieres incuir más valores para los que en origen se creó, deberás redimensionarlo, pero al hacer esto los valores introducidos con anterioridad sepierden. Esto no sucede con los ArrayList porque uno de sus constructores, los construye con tamaño indeterminado, por lo que no hay límite.
- El catálogo de métodos que tiene un objeto de ArrayList, de los que obviamente carece un array, que si se necesitan deberán programarse. Por ejemplo, a los arrays le faltan la funcionalidad de ordenar descendente y ascendentemente, de eliminar un item según un valor coleccionado, de limpiar su contenido a traves de una función, sin tener que realizar un bucle. Para saber si un array cuenta con un dato tendrás que recorrerlo entero. Sin embargo un ArrayList te devuelve el objeto que en la colección tiene ese valor.
27 noviembre 2009
Google Wave

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
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.
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:
- Mono-Project.com, Página principal del proyecto, en inglés.
- Mono.Hispano.org, Página de la Comunidad de Mono de habla castellana.
- MonoDevelop.com, IDE de desarrollo, en ♦.
- Mono Remoting
- SharpDevelop2, IDE de desarrollo para Windows con soporte para compilación con Mono
- Aplicaciones con GUI en Mono: ¿Gtk# o Windows Forms?
- Programación en Mono con C#
Planetas:
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:
Enlaces de interes:
- Mono-Project.com, Página principal del proyecto, en inglés.
- MonoDevelop.com, IDE de desarrollo, en inglés.
- MonoDevelop.com/Download, Área de descargas, en inglés
- Características de MonoDevelop 0.14
- mono-live.com,LiveCD con aplicaciones desarrolladas en Mono. Incluye el IDE MonoDevelop
- mono-hispano.org, Página de la comunidad de desarrolladores bajo Mono de habla Castellana.
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#)

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
28 octubre 2009
Breve anotación de XML

XML, siglas en inglés de Extensible Markup Language (lenguaje de marcas extensible), es un metalenguaje extensible de etiquetas desarrollado por el World Wide Web Consortium (W3C). Es una simplificación y adaptación del SGML y permite definir la gramática de lenguajes específicos (de la misma manera que HTML es a su vez un lenguaje definido por SGML). Por lo tanto XML no es realmente un lenguaje en particular, sino una manera de definir lenguajes para diferentes necesidades. Algunos de estos lenguajes que usan XML para su definición son XHTML, SVG, MathML.
XML no ha nacido sólo para su aplicación en Internet, sino que se propone como un estándar para el intercambio de información estructurada entre diferentes plataformas. Se puede usar en bases de datos, editores de texto, hojas de cálculo y casi cualquier cosa imaginable.
XML es una tecnología sencilla que tiene a su alrededor otras que la complementan y la hacen mucho más grande y con unas posibilidades mucho mayores. Tiene un papel muy importante en la actualidad ya que permite la compatibilidad entre sistemas para compartir la información de una manera segura, fiable y fácil.
Paramás información, visitar La Wikipedia
Actualmente me devano los sesos cosdificando en C# el acceso, creación, lectura y escritura en archivos de este formato.
Ya escribiré cómo lo resolví. Pero mientras tanto incluyo un enlace muy bueno sobre el tema http://www.forosdelweb.com/f78/agregar-nodo-xml-c-720764/ Y a seguir indagando.
25 octubre 2009
Cómo ser un buen programador según Pythoniso (Omar Espinoza)
2. Un ultimo consejo, no te hagas el programador del mañana, evítalo a toda costa. Habrá veces que no podrás evitarlo, pero intenta siempre no ser así. Con gusto te defino, un "programador del mañana" es aquel que dice que todo quedará para mañana...aquí en Monterrey, esos programadores no tienen cabida.
3. concéntrate en tu trabajo, y siempre se optimista, recuerda que todos los problemas en un desarrollo se solucionan, no tengas miedo de nuevos desafíos, si esta fuera de tu conocimiento, se optimista que para eso esta Google.

La pic fue sacada de GOGLE
22 octubre 2009
Ray Tomlinson y Martin Cooper: Premios principes de Asturias a la innovación tecnologíca
Ray Tomlinson (nació el 1941). Graduado en ingeniería eléctrica del Masachusetts Institute Tecnology (MIT). A poco de recibirse en 1967 ingresó a la empresa BBN (Bolt, Beranek and Newman), la cual recibió el encargo de trabajar para la red de computadoras "ARPANET" (Advanced Research Projects Agency Network) con un sistema de inter-comunicación militar. Una vez integrado al equipo de trabajo, desarrollaron un programa llamado SNDMSG para enviar mensajes entre las distintas terminales de una misma computadora.
Al inicio de la década de 1970, los usuarios militares o de grandes empresas, utilizaban mayormente la informática mediante "terminales tontas o bobas" (una pantalla y un teclado, sin la capacidad de procesamiento ni almacenamiento), conectados a un servidor.
En septiembre de 1971, cuando la BBN ya estaba conectada al ARPANET, Tomlison adaptó el programa SNDMSG de forma tal que sirviera para enviar mensajes entre diferentes usuarios conectados a una red más amplia, pero sin que sean conocidos (Lo que hoy día se conoce como correo electrónico o e-mail). Allí fue que se le ocurrió utilizar un símbolo, el @ (arroba), con este método uniría el nombre del usuario y del servidor.
La idea era utilizar un símbolo que estuviese en todos los teclados pero que no apareciera en los nombres propios de las personas o empresas ni de los servidores. El @ estaba en los teclados pero no tenía utilidad alguna, por lo que no entraba en conflicto con nada estipulado anteriormente.
Tomlison sigue trabajando en BBN, ha realizado también otros desarrollos importantes con el diseño de computadoras, arquitectura de redes, protocolos en la red y síntesis digital.
Ha sido galardonado con el Premio Príncipe de Asturias de Investigación Científica y Técnica 2009, compartido con Martin Cooper, inventor de la telefonía móvil.Martin Cooper (nacido en 1928, en Chicago, Illinois) es considerado el padre del teléfono móvil. Cooper es el CEO y fundador de ArrayComm, una compañía que trabaja en la investigación de antena inteligente y la mejora de la tecnología inalámbrica redes, y fue el director corporativo de Investigación y Desarrollo de Motorola. Recibió su licenciatura en ingeniería eléctrica del Instituto Tecnológico de Illinois en 1950 y recibió su título de maestría de la misma institución en 1957.
En 1995, Cooper recibió el Wharton Infosys Business Transformation Award por sus innovaciones tecnológicas en el ámbito de la comunicación. Martin Cooper también es miembro de Mensa.
Cooper ha confesado que fue viendo al Capitán Kirk usar su comunicador en la serie Star Trek lo que le inspiró para desarrollar el teléfono móvil[1]
Ha sido galardonado con el Premio Príncipe de Asturias de Investigación Científica y Técnica 2009, compartido con Ray Tomlinson, inventor del correo electrónico.[219 octubre 2009
Los falsos antivirus ahora secuestran e inutilizan el ordenador
PandaLabs ha identificado una tendencia mucho más agresiva de venta de los llamados falsos antivirus o rogueware. Hasta ahora, cuando un PC era afectado por un malware de estas características, se limitaba a enseñar mensajes de alerta de infección invitando al usuario a comprar. Ahora, están combinando estas tecnologías con el secuestro –literal- del ordenador y su inutilización, lo que conocíamos hasta la fecha como ransomware.
Una vez infectado el ordenador, la víctima experimenta una gran frustración al ver cómo al intentar ejecutar cualquier programa, abrir un documento, etc., el ordenador no responde y sólo aparece un mensaje informando al usuario (falsamente) que todos los archivos están infectados y que la única solución es comprar el falso antivirus.
Esta falsa aplicación, llamada Total Security 2009, la venden por 79,95 €. Además ofrecen servicios de soporte técnico premium por 19.95€ adicionales. Una vez pagado, el usuario recibe un número de serie que, al introducirlo en la aplicación, libera todos los ficheros y ejecutables y deja trabajar y recuperar la información. Dicha falsa aplicación, sin embargo, sigue instalada.
Hace un par de meses, PandaLabs publicó un informe sobre el lucrativo negocio que supone la venta de falsos antivirus. “Este movimiento hacia el secuestro del ordenador nos hace pensar que o bien los usuarios han empezado a reconocer estas amenazas o bien que los fabricantes de seguridad estamos cerrando el cerco. Por eso, se ven obligados a ser todavía más agresivos en la forma en que fuerzan a los usuarios a comprar”. Dicho estudio está disponible en: http://www.pandasecurity.com/img/enc/El%20Negocio%20de%20los%20falsos%20antivirus.pdf
Los números de serie así como un vídeo demostrando cómo funciona se pueden encontrar en: http://pandalabs.pandasecurity.com/archive/Rogueware-with-new-Ransomware-Technology_2221_.aspx
La noticia ha sido sacada, literalmente, de http://www.lawebdelprogramador.com/
03 octubre 2009
Aprendiendo C#

C# (pronunciado "si sharp" en inglés y "c sostenido" o "c almohadilla" o "cesar", o chochál en español) es un lenguaje de programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que después fue aprobado como un estándar por la ECMA e ISO.
Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma.NET el cual es similar al de Java aunque incluye mejoras derivadas de otros lenguajes (entre ellos Delphi).
La creación del nombre del lenguaje, C#, proviene de dibujar dos signos positivos encima de los dos signos positivos de "C++", queriendo dar una imagen de salto evolutivo del mismo modo que ocurrió con el paso de C a C++.
C#, como parte de la plataforma.NET, está normalizado por ECMA desde diciembre de 2001 (ECMA-334 "Especificación del lenguaje C#"). El 7 de noviembre de 2005 salió la versión 2.0 del lenguaje que incluía mejoras tales como tipos genéricos, métodos anónimos, iteradores, tipos parciales y tipos anulables. El 19 de noviembre de 2007 salió la versión 3.0 de C# destacando entre las mejoras los tipos implícitos, tipos anónimos y LINQ (Language Integrated Query -consulta integrada en el lenguaje).
Aunque C# forma parte de la plataforma.NET, ésta es una interfaz de programación de aplicaciones (API); mientras que C# es un lenguaje de programación independiente diseñado para generar programas sobre dicha plataforma. Ya existe un compilador implementado que provee el marco de DotGNU - Mono que genera programas para distintas plataformas como Win32, UNIX y Linux.
Tipos de datos:
C# contiene dos categorías generales de tipos de datos integrados: tipos de valor y tipos de referencia. El término tipo de valor indica que esos tipos contienen directamente sus valores.
C# define ocho tipos de enteros, a saber:
Tipo de datos de enteros | |||
---|---|---|---|
Tipo | Ancho en bits | Rango | Significado |
byte | 8 | De 0 a 255 | Entero sin signo de 8 bits |
sbyte | 8 | De -128 a 127 | Entero con signo de 8 bits |
short | 16 | De -32.768 a 32.767 | Entero corto |
ushort | 16 | De 0 a 65.535 | Entero corto sin signo |
int | 32 | De -2.147.483.648 a 2.147.483.647 | Entero medio |
uint | 32 | De 0 a 4.294.967.295 | Entero medio sin signo |
long | 64 | De -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807 | Entero largo |
ulong | 64 | De 0 a 18.446.744.073.709.551.615 | Entero largo sin signo |
Los tipos de punto flotante pueden representar números con componentes fraccionales. Existen dos clases de tipos de punto flotante; float y double. El tipo double es el más utilizado porque muchas funciones matemáticas de la biblioteca de clases de C# usan valores double. Quizá, el tipo flotante más interesante de C# es decimal, dirigido al uso de cálculos monetarios. La aritmética de punto flotante normal está sujeta a una variedad de errores de redondeo cuando se aplica a valores decimales. El tipo decimal elimina estos errores y puede representar hasta 28 lugares decimales.
Tipo de datos de punto flotante | |||
---|---|---|---|
Tipo | Ancho en bits | Rango | Significado |
float | 32 | De 1,5E-45 a 3,4E+38 | Punto flotante corto |
double | 64 | De 5E-324 a 1,7E+308 | Punto flotante largo |
decimal | 128 | De 1E-28 a 7,9E+28 | Punto flotante monetario |
Los caracteres en C# no son cantidades de 8 bits como en otros muchos lenguajes de programación. Por el contrario, C# usa un tipo de caracteres de 16 bits llamado Unicode al cual se le llama char. No existen conversiones automáticas de tipo entero a char.
Tipo de datos de carácteres | |||
---|---|---|---|
Tipo | Ancho en bits | Rango | Significado |
char | 16 | De 0 a 65,535 (código Unicode) | Carácter |
No existe una conversión definida entre bool y los valores enteros (1 no se convierte a verdadero ni 0 se convierte a falso).
Tipo de datos lógicos | |||
---|---|---|---|
Tipo | Ancho en bits | Rango | Significado |
bool | 1 | true or false, no se usa 1 ó 0 ya que no hay conversión definida | true or false |
Las constantes en C# se denominan literales. Todas las constantes tienen un tipo de dato, en caso de ser una constante entera se usa la de menor tamaño que pueda alojarla, empezando por int. En caso de punto flotante se considera como un double. Sin embargo se puede especificar explícitamente el tipo de dato que una constante deberá usar, por medio de los sufijos:
Sufijo | Tipo de dato | Ejemplo |
---|---|---|
L | long | 12L |
UL | ulong | 68687UL |
F | float | 10,19F |
M | decimal | 9,95M |
En ocasiones, resulta más sencillo usar un sistema numérico basado en 16 en lugar de 10, para tal caso C# permite especificar constantes enteras en formato hexadecimal, y se hace empezando con 0x. Por ejemplo: 0xFF equivale a 255 en decimal.
C# tiene carácteres denominados secuencias de escape para facilitar la escritura con el teclado de símbolos que carecen de representación visual. Estos son:
Secuencia de escape | Descripción |
---|---|
\a | Alerta (timbre) |
\b | Retroceso |
\f | Avance de página |
\n | Nueva línea |
\r | Retorno de carro |
\t | Tabulador horizontal |
\v | Tabulador vertical |
\0 | Nulo |
\' | Comilla sencilla |
\" | Comilla doble |
\\ | Diagonal invertida |
C#, al igual que C++, es compatible con el tipo de constante cadena de caracteres. Dentro de la cadena de caracteres se pueden usar secuencias de escape. Una cadena de caracteres puede iniciarse con el símbolo @ seguido por una cadena entre comillas, en tal caso, las secuencias de escape no tienen efecto y además la cadena puede ocupar dos o más líneas.
Variables:
Toda variable se debe declarar antes de ser utilizada. La forma en que se declara una variable en C# es la siguiente:
tipo nombre_variable;
Para asignar un valor a una variable:
nombre_variable = valor
Las conversiones de tipo de variables en C# se representan en la siguiente tabla en donde la fila es el origen y la columna el destino. Los significados de las letras son: A (Conversión automática o implícita), E (Conversión explícita), I (Conversión incompatible).
- Toda conversión implícita no ocasiona pérdida de información, truncamientos o redondeos.
- Es posible (mas no siempre ocurre) que en una conversión explícita haya pérdida de información, truncamientos o redondeos.
- En toda conversión implícita el tipo de dato destino es mayor que el tipo de dato origen.
- La conversión explícita se realiza de la siguiente forma:
(tipo-destino) expresion
.
Además de realizarse dentro de una asignación, las conversiones de tipos también tienen lugar dentro de una expresión, pues en cada operación ambos operandos deben de ser del mismo tipo. Si la conversión es del tipo implícito se efectúa el siguiente algoritmo en dicho orden:
- Si un operando es decimal, el otro operando se transforma a decimal.
- Si un operando es double, el otro operando se transforma a double.
- Si un operando es float, el otro operando se transforma a float.
- Si un operando es ulong, el otro operando se transforma a ulong.
- Si un operando es long, el otro operando se transforma a long.
- Si un operando es uint, y si el otro operando es de tipo sbyte, short o int, los dos se transforman a long.
- Si un operando es uint, el otro operando se transforma a uint.
- Si ninguno de los casos anteriores, los dos operandos se transforman a int.
Operadores:
C# tiene cuatro clases generales de operadores: aritméticos, a nivel de bit, relacionales y lógicos.
Operadores | ||
---|---|---|
Operador | Significado | Tipo |
+ | Suma | Aritmético |
- | Resta | Aritmético |
* | Producto | Aritmético |
/ | División | Aritmético |
% | Módulo (residuo entero) | Aritmético |
++ | Incremento | Aritmético |
-- | Decremento | Aritmético |
== | Igual que | Relacional |
!= | Distinto que | Relacional |
> | Mayor que | Relacional |
< | Menor que | Relacional |
>= | Mayor o igual que | Relacional |
<= | Menor o igual que | Relacional |
& | AND | Lógico y a nivel de bits |
| | OR | Lógico y a nivel de bits |
^ | XOR y de nivel de bits | Lógico |
|| | OR de cortocircuito | Lógico |
&& | AND de cortocircuito | Lógico |
! | NOT | Lógico |
~ | Complemento a uno | A nivel de bits |
<< | Desplazamiento a la izquierda | A nivel de bits |
>> | Desplazamiento a la derecha | A nivel de bits |
- Los operadores aritméticos funcionan igual que en C y C++.
- El resultado de los operadores relacionales y lógicos es un valor bool.
- Los operadores de cortocircuito evalúan el segundo operando solo cuando es necesario.
- Los operadores a nivel de bit no se pueden aplicar a tipos bool, float, double o decimal.
Instrucciones de control:
- La instrucción if-else es básicamente igual que en C, C++ y Java.
- La diferencia de la instrucción switch con la versión de C, C++ y Java es que todo cuerpo perteneciente a un case debe de toparse con un break o un goto antes de toparse con otro case, a menos que dicho cuerpo esté vacío.
- La instrucción for es básicamente igual que en C, C++ y Java.
- La instrucción while es básicamente igual que en C, C++ y Java.
- La instrucción do-while es básicamente igual que en C, C++ y Java.
- La instrucción foreach realiza un ciclo a través de los elementos de una colección (grupo de objetos). El formato de esta instrucción es:
foreach(tipo variable in coleccion) instruccion;
. En este ciclo se recorre la colección y la variable recibe un respectivo elemento de dicha colección en cada iteración. - Al igual que en C y C++, la instrucción break permite forzar la salida de un ciclo omitiendo el código restante en el cuerpo del ciclo.
- Al igual que en C y C++, la instrucción continue permite forzar la repetición temprana de un ciclo omitiendo el código restante en el cuerpo del ciclo.
- La instrucción return es básicamente igual que en C, C++. Se utiliza para devolver un valor y salir de un método.
- La instrucción goto se sigue utilizando en C# a pesar de toda la polémica que esto conlleva.
- Todo método debe de ser parte de una clase, no existen métodos globales.
- De forma predeterminada, los parámetros se pasan por valor (se copia dicho valor).
- El modificador ref fuerza a pasar los parámetros por referencia en vez de pasarlos por valor.
- El modificador out es similar al modificador ref con una excepción: sólo se puede utilizar para pasar un valor fuera de un método. El método debe de asignar un valor al parámetro antes de que el método finalice.
- Cuando ref y out modifican un parámetro de referencia, la propia referencia se pasa por referencia.
- El modificador params sirve para definir un número variable de argumentos los cuales se implementan como una matriz. Ejemplo:
public int maxVal(params int[] nums){...}
, esta función se podría llamar así:maxVal(23,3,a,-12);
. - Un método debe tener como máximo un único parámetro params y éste debe de ser el último.
- Un método puede devolver cualquier tipo de datos, incluyendo tipos de clase.
- Ya que en C# las matrices se implementan como objetos, un método también puede devolver una matriz (algo que se diferencia de C++ en que las matrices no son válidas como tipos de valores devueltos).
- C# implementa sobrecarga de métodos, dos o más métodos pueden tener el mismo nombre siempre y cuando se diferencien por sus parámetros.
- El método Main es un método especial al cual se refiere el punto de partida del programa. Tiene la siguiente sintaxis:
public static int Main(string[] args){...}
.
Clases y objetos:
Varios puntos a tener en cuenta en C# con respecto a clases y objetos son los siguientes:
- Una variable de objeto de cierta clase no almacena los valores del objeto sino su referencia (al igual que Java).
- El operador de asignación no copia los valores de un objeto, sino su referencia a él (al igual que Java).
- Un constructor tiene el mismo nombre que su clase y es sintácticamente similar a un método.
- Un constructor no devuelve ningún valor.
- Al igual que los métodos, los constructores también pueden ser sobrecargados.
- Si no se especifica un constructor en una clase, se usa uno por defecto que consiste en asignar a todas las variables el valor de 0, null o false según corresponda.
- Para crear un nuevo objeto se utiliza la siguiente sintaxis:
variable = new nombre_clase();
. - Un destructor se declara como un constructor, aunque va precedido por un signo de tilde ~.
- Se emplea una desasignación de memoria de objetos no referenciados (recolección de basura), y cuando esto ocurre se ejecuta el destructor de dicha clase.
- El destructor de una clase no se llama cuando un objeto sale del ámbito.
- Todos los destructores se llamarán antes de que finalice un programa.
- La palabra clave this es un apuntador al mismo objeto en el cual se usa.
- La palabra clave static hace que un miembro pertenezca a una clase en vez de pertener a objetos de dicha clase. Se puede tener acceso a dicho miembro antes de que se cree cualquier objeto de su clase y sin referencias a un objeto.
- Un método static no tiene una referencia this.
- Un método static puede llamar sólo a otros métodos static.
- Un método static sólo debe tener acceso directamente a datos static.
- Un constructor static se usa para inicializar atributos que se aplican a una clase en lugar de aplicarse a una instancia.
- C# permite la sobrecarga de operadores con la palabra clave operator.
- En C# las matrices se implementan como objetos.
- Para crear una matriz se utiliza el siguiente formato:
tipo[] nombre_matriz = new tipo[tamaño];
- Se puede crear una matriz inicializada así:
tipo[] nombre_matriz = { val1 , val2 , val3 , ... , valN };
- Los índices de las matrices comienzan en 0.
- Para crear una matriz bidimensional se utiliza el siguiente formato:
tipo[,] nombre_matriz = new tipo[filas,columnas]
- Para referirse a un elemento de una matriz bidimensional no se usa la forma
matriz[fila][columna]
(la cual usa C++), si nomatriz[fila,columna]
. - Ya que C# implementa matrices como objetos, cada matriz tiene asociada una propiedad Length que contiene el número de elementos que puede alojar cada matriz.
Cadenas de carácteres:
- El tipo de dato cadena se llama string.
- Realmente la palabra clave string es un alias de la clase System.String de la plataforma .NET.
- En C# las cadenas son objetos y no una matriz de caracteres, aun así, se puede obtener un carácter arbitrario de una cadena por medio de su índice (mas no modificarlo).
- La forma más común de construir una cadena es por medio de una literal o constante:
string str = "Una cadena";
- El operador == determina si dos referencias hacen referencia al mismo objeto, pero al usar dicho operador con dos operandos tipo string se prueba la igualdad del contenido de las cadenas y no su referencia. Sin embargo, con el resto de los operadores relacionales, como < o >= se comparan las referencias.
- Se pueden concatenar (unir) dos cadenas mediante el operador +.
- Las cadenas son inmutables, una vez creadas no se pueden modificar, solo se pueden copiar total o parcialmente.
- Las cadenas se pueden usar en las instrucciones switch.
Métodos comunes de control de cadenas | |
---|---|
Método | Descripción |
static string Copy(string str) | Devuelve una copia de str. |
int CompareTo(string str) | Devuelve menor que cero si la cadena que llama es menor que str, mayor que cero si la cadena que llama es mayor que str, y cero si las cadenas son iguales. |
int IndexOf(string str) | Busca en la cadena que llama la subcadena especificada por str. Devuelve el índice de la primera coincidencia, o -1 en caso de error. |
int LastIndexOf(string str) | Busca en la cadena que llama la subcadena especificada por str. Devuelve el índice de la última coincidencia, o -1 en caso de error. |
string ToLower | Devuelve una versión en minúsculas de la cadena que llama. |
string ToUpper | Devuelve una versión en mayúsculas de la cadena que llama. |
Compiladores:
En la actualidad existen los siguientes compiladores para el lenguaje C#:
- Microsoft.NET framework SDK incluye un compilador de C#, pero no un IDE.
- Microsoft Visual Studio .NET, IDE por excelencia de este lenguaje, versión 2002, 2003, 2005, 2008 y 2010(beta).
- #develop, es un IDE libre para C# bajo licencia LGPL, muy similar a Microsoft Visual C#.
- Mono, es una implementación GPL de todo el entorno .NET desarrollado por Novell. Como parte de esta implementación se incluye un compilador de C#.
- Delphi 2006, de Borland Software Corporation.
- dotGNU Portable.NET, de la Free Software Foundation.
Metas del diseño del lenguaje:
El estándar ECMA lista las siguientes metas en el diseño para C#:
- Lenguaje de programación orientado a objetos simple, moderno y de propósito general.
- Inclusión de principios de ingeniería de software tales como revisión estricta de los tipos de datos, revisión de límites de vectores, detección de intentos de usar variables no inicializadas, y recolección de basura automática.
- Capacidad para desarrollar componentes de software que se puedan usar en ambientes distribuidos.
- Portabilidad del código fuente
- Fácil migración del programador al nuevo lenguaje, especialmente para programadores familiarizados con C y C++.
- Soporte para internacionalización
- Adecuación para escribir aplicaciones de cualquier tamaño: desde las más grandes y sofisticadas como sistemas operativos hasta las más pequeñas funciones.
- Aplicaciones económicas en cuanto a memoria y procesado.
Enlaces externos:
En castellano:
- Centro de desarrolladores de Visual C#
- Programación con C# Libro digital sobre programación en .NET con C#
- Desarrollo de Software en C# Comunidad virtual para el intercambio de información en castellano sobre desarrollo de software en C# para profesionales practicantes, docentes y estudiantes.
- Devjoker - C# en español. Tutoriales y foros.
- Geeks.ms Blogs sobre desarrolladores en plataforma.Net y C#
- C# Online.NET - su enciclopedia libre de C# y.NET en español.
- Kit de desarrollo de software (SDK) de Microsoft.NET Framework 2.0 (x86), (x64) e (IA64)
- Mono para la comunidad de habla hispana
- ElBruno
Esto fue sacado de la WIKIPEDIA donde el articulo es más grueso.