23 mayo 2010

Ideas para proyectos propios (I) y (II)


Utilizando C sharp haré una aplicación que transfiera archivos de un teléfono móvil a un ordenador a través de bluetooth y viceversa.

Y luego, haré otra para realizar copias de seguridad de la agenda del teléfono a una base de datos dl ordenador. Así mismo esta copia podrá ser exportada al télefono.

Estos dos links me servirán de algo:

Transferring files and monitoring Bluetooth ports in C#

Scanning for bluetooth devices

Importante libreria: http://www.desarrollomobile.net/devmob/BluetoothLibrary/tabid/54/Default.aspx

A ver cuánto tardo.

10 mayo 2010

Cómo hacer práctico un Pen drive para que se puedan guarrdar archivos "grandes"

Es fácil.

1. Vamos a las propiedades de MI PC (pinchando con el botón derecho).
2. Tras esto clicamos en Administrador de dispositivos.
3. Seleccionamos Unidades de Almacenamiento, pinchamos sobre USB.
4. Luego, nos salen sus propiedades, y de ahí escogemos Directivas. Entonces de las dos opciones OPTIMIZAR PARA RENDIMIENTO es la buena.
5. Aceptamos.
6. Fotmateamos el pen drive.

Y listo.

02 mayo 2010

En C#: Cómo montar un navegador en un TreeView ( 2º versión)

Para desarrollar esta segunda versión, que sustituye, mejorando a "Más código en C#: Cómo montar un navegador en un TreeView", cree una clase. La llamé "SuperTreeNode" y hereda todo de la clase "TreeNode" perteneciente a System.Windows.Forms.

Código de la clase SuperTreeNode:

class SuperTreeNode:TreeNode //los dos puntos preceden a la clase superior
{
private string ruta;

public SuperTreeNode()
: base()
{
this.ruta = "";
}
public SuperTreeNode(string ruta)
: base()
{
this.ruta = ruta;
}
public SuperTreeNode(string texto, string ruta):base(texto)
{
this.ruta = ruta;
}
public string Ruta
{
get { return ruta; }
set { ruta = value; }
}

}



El código de la clase donde se realizan las funciones relativas a la carga de los directorios, en esta versión, se cargan cuando se procede a utilizarlos, resolviendo asi el problemas con la memoria RAM, que antes se veia afectada.

Código de la clase del formulario principal, donde uso System.IO;:

public partial class Form1 : Form
{
SuperTreeNode NodoRaiz;

public Form1()
{
InitializeComponent();
NodoRaiz = new SuperTreeNode();

NodoRaiz.ImageIndex = 0;
NodoRaiz.Text = "MI PC"; //doy un texto al nodo primario

TreeVArboleda.Nodes.Add(NodoRaiz); //el nodoprimario lo agrego al arbol
}

private void Form1_Load(object sender, EventArgs e)
{

Inicio();

TreeVArboleda.ExpandAll();
}

public void Inicio()
{
//lo primero, sacar las unidades.
DriveInfo[] drivers = DriveInfo.GetDrives();//se obtienen todos los drivers
foreach (DriveInfo driver in drivers)
{
try
{
//de cada driver se obtiene el nombre y el fullname y se convierte a nodo. El nodo se agrega al principal
SuperTreeNode nodo = new SuperTreeNode();
nodo.Text = driver.Name; //nombre
nodo.Ruta = driver.RootDirectory.FullName; //ruta

NodoRaiz.Nodes.Add(nodo);

StateLblInformacion.Text ="";

}
catch (Exception ex)
{
StateLblInformacion.Text = ex.Message;
}
}

}

private void TreeVArboleda_AfterSelect(object sender, TreeViewEventArgs e)
{
SuperTreeNode nodo = (SuperTreeNode)e.Node;

TxtRutaActual.Text = nodo.Ruta; //obtengo la ruta seleccionada

try
{
//obtengo el contenido (subdirectorios) del directorio de la ruta
DirectoryInfo unDirectorio = new DirectoryInfo(TxtRutaActual.Text);

DirectoryInfo[] subdirectorios = unDirectorio.GetDirectories();
nodo.Nodes.Clear();

foreach (DirectoryInfo directorios in subdirectorios)
{
try
{
//por cada subdirectorio cro un nodo llamado hijo al que anclo al nodo creado al principio
SuperTreeNode hijo = new SuperTreeNode(directorios.Name, directorios.FullName);

nodo.Nodes.Add(hijo);

StateLblInformacion.Text = "";

}
catch (Exception ex2)
{

StateLblInformacion.Text = ex2.Message;
}
}
}
catch (Exception ex)
{
StateLblInformacion.Text = ex.Message;
}


}
}
}

Saludos.

17 abril 2010

Cómo en C# obtener el tamaaño de un directorio

Esta misma función la escribí en el post anterior, pero creo necesario volverla a escribir porque puede ser útil al márgen de la otra utilidad que le dí.

private long ObtenerPesoDirectorioEnBytes(DirectoryInfo d)
{

long pesoDir = 0;

try
{

// Totalizar tamaño de archivos

FileInfo[] fis = d.GetFiles();

foreach (FileInfo fi in fis)
{

pesoDir += fi.Length;

}

// Totalizar tamaño sub-directorios

DirectoryInfo[] dis = d.GetDirectories();

foreach (DirectoryInfo di in dis)
{

pesoDir += ObtenerPesoDirectorioEnBytes(di);

}

}

catch (Exception exp)
{

// Código para la excepción va aquí

}

return pesoDir;

}


Por su puesto, gracias a quién colgó por internet este código, del que yo no he cambiado nada.

Saludos

Más código en C#: Cómo montar un navegador en un TreeView

Para implementar este código utilicé una clase, que llamé ExploradorLocal. Para su programación he usado clase IO y Windows.Forms, donde la primera se usa para el manejo de archivos y directorios. Y la otra sirve para manipular TreeView y TreeNode, clases que usaremos para el árbol, donde la segunda, es obviamente la que crea nodos dependientes del árbol.

Esta clase cuenta cobn un objeto ArrayList que es Contenedor y que contiene el contenido del directorio. También trabajo con la clase ContenidoDirectorio, la cual tiene como variables nombre, tipo, ultima fecha de acceso y peso. Las tres primeras del tipo string, y la cuarta long. En el ArrayList se meterá cada componente conforme se vaya leyendo el contenido del directorio, y esto sucede enla tercera de la funciones (métodos si usamos la nomenclatura de POO).

La primera función, ExtraerEstructuraUnidades() , devuelve un objeto TreeView, donde ya se "cargaron" todas las ramificacones del arbol. Esta función se ocupa de encontrar las unidades (drivers).

public TreeView ExtraerEstructuraUnidades()
{
/*Extrae las unidades*/
try
{

oTree.Nodes.Clear();


DriveInfo[] TodosLosDrivers = DriveInfo.GetDrives();
foreach (DriveInfo driver in TodosLosDrivers)
{
TreeNode node = new TreeNode();

node.Text = driver.Name;
oTree.Nodes.Add(node);
ExtraerEstructuraDirectorios(driver.Name, node, 0);
}
}
catch (Exception ex)
{
ex.ToString();
}
return oTree;
}

La siguiente, que es recursiva tiene por finalidad, extraer los directorios que cuelgan de la ruta especificada. Superior es el nodo superior, y nivel es una variable que hace de tope, impidiendo el bucle infinito.

private void ExtraerEstructuraDirectorios(string ruta, TreeNode superior, int nivel)
{
/*Extrae el contenido de cada unidad (solo directorios)*/
try
{
nivel++;
if (nivel == 4)
return;
DirectoryInfo dir = new DirectoryInfo(ruta);
if (!dir.Exists)
Console.WriteLine("No se puede acceder a: " + ruta);
foreach(DirectoryInfo dirInfo in dir.GetDirectories())
{
TreeNode child = new TreeNode();
child.Text = dirInfo.Name;
superior.Nodes.Add(child);
ExtraerEstructuraDirectorios(child.FullPath, child, nivel);
}

}
catch (Exception ex)
{
Console.WriteLine("Ha surgido un problema: " +ex.Message);
}
}

En esta tercera función se extrae el contenido del directorio actual, aarchivos y subdirectorios, para luego, y aunque aquí no se vea, cargar su información en un objeto GridView.

public void ObtenerContenidoDirectorio()
{
/*Extrae el contenido de cada directorio (subdirectorios y ficheros)*/
Contenedor.Clear(); //borrado del arraylist
try
{
// miro si la ruta existe
DirectoryInfo dir = new DirectoryInfo(rutaSeleccionada);
if (!dir.Exists)
Console.WriteLine("El directorio " + rutaSeleccionada + " no existe.");

// lista del contenido
foreach (DirectoryInfo di in dir.GetDirectories())
{
//se obtiene el peso en bytes del subdirectorio
long peso = ObtenerPesoDirectorioEnBytes(di);
//oContenido contiene un elemento del directorio
Clases.ContenidoDirectorio oContenido = new Proyecto .Clases.ContenidoDirectorio(di.Name, "Subdirectorio", Convert.ToString(di.LastWriteTime), peso);
//Contenedor contiene muchos oContenido
Contenedor.Add(oContenido);
}

// fill the Files listbox
foreach (FileInfo fi in dir.GetFiles())
{
Clases.ContenidoDirectorio oContenido = new Proyecto.Clases.ContenidoDirectorio(fi.Name, fi.Extension, Convert.ToString(fi.LastWriteTime), fi.Length);
Contenedor.Add(oContenido);
}

}
catch (Exception ex)
{
ex.ToString();

}


}

En esta cuarta función se extrae el peso en bytes de un directorio (pasado por parametro).

private long ObtenerPesoDirectorioEnBytes(DirectoryInfo d)
{

long pesoDir = 0;

try
{

// Totalizar tamaño de archivos

FileInfo[] fis = d.GetFiles();

foreach (FileInfo fi in fis)
{

pesoDir += fi.Length;

}

// Totalizar tamaño sub-directorios

DirectoryInfo[] dis = d.GetDirectories();

foreach (DirectoryInfo di in dis)
{

pesoDir += ObtenerPesoDirectorioEnBytes(di);

}

}

catch (Exception exp)
{

// Código para la excepción va aquí

}

return pesoDir;

}


Para realizar este proyecto, cuya idea es imitar a Filezilla, estoy utilizando código encontrado pr Internet, así pues gracias a aquellos que me ilustran.

Saludos

16 abril 2010

C#: Insertar datos en un GriedView sin origen en base de datos

Fue fácil pero apunto esto para un futuro y para el que lo necesite. ste es un ejemlo, de cómo cargar un objeto GridView se carga sin etar enlazado a una Base de datos de atos, en este caso pertenecientes a un ArrayList.


/*Se carga una rejilla a traves de los datos del ArrayList Peliculas*/

Pelicula unaPeli = new Pelicula(TxtTitulo.Text, TxtGenero.Text);
//objeto de Tipo Pelicula
Peliculas.Add(unaPeli); //Peliculas es un arryList


/*Creación del objeto otabla en donde se van a ir agregando uno a uno los elementos del ArrayList*/
DataTable oTabla = new DataTable(); //objeto DataTable
DataColumn oColumTitulo= new DataColumn("Titulo"); //objeto DataColumn
DataColumn oColumGenero = new DataColumn("Genero"); //objeto DataColumn

oTabla.Columns.Add(oColumTitulo); //se añaden esas columnas
oTabla.Columns.Add(oColumGenero);


int tam = Peliculas.Count; //Arrayist
for (int i = 0; i <>
{
unaPeli = (Pelicula) Peliculas[i];
string[] strFila = new string[2];
strFila[0] = unaPeli.Titulo;
strFila[1] = unaPeli.Genero;
oTabla.Rows.Add(strFila); //se añad una nueva fila
}


GrdVPeliculas.DataSource= oTabla; //se le asigna el origen
GrdClmTitulo.FieldName= oColumTitulo.ColumnName;
GrdClmGenero.FieldName = oColumGenero.ColumnName;


Espero no ser muy ilegible, jejejej.

Saludos.

Cómo en C# se ordena el código

Lo vi en un compañero del curro y me gustó mucho. Utilizar regiones es la clave. Habrá regiones para cada ámbito de archivo (clases, códigos de formularios, etc.), por ejemplo: para las variables, constructores, eventos, funciones, propiedades, y así según hagan falta.
En C Sharp las rgiones comienzan escribiendo #region nombre_de_la_región y terminan escribiendo #endregion. En las líneas de enmedio se esrcirbe el código ejecutable.
Dividir en regiones resulta ventajoso pues el código encasillado se ve a simple vista, al mismo tiempo que si se quiere se puede ocultar con un simple click en la cruz que se dibuja nada más se abre la región.

Saludos de este Victor.

15 abril 2010

Los hilos en C#, breve presentacion


Partiendo de que se cónoce qué es un hilo (thread), voy a comentar cómo se usan en este lenguaje.

Lo primero: importar Threading, using System.Threading;
Después, si ya se tiene hecha la función (procedimiento) que se quiere ejecutar en background, se hace esto: Thread hilo = new Thread(nmbre_procedimiento) Bien, las funciones no pueden tener parámetros, o al menos, aún no he visto un ejemplo donde se ejecute un hilo cuya función los tenga. Además los hilos no pueden trabajar con controles de diseño. Así que hay que ser pillo y quebrarse la cabeza con trucos.
En tercer lugar se indica que se desarrollará es Background: hilo.isBackground=true;
Cuarto, el hilo se pone en marcha con el metodo Start();
Quinto, para provocar intervalos sin actividad: Hilo.Sleep(num_milisegundos);


Y hasta aquí una resumida introducción.


Saludos.

08 abril 2010

Quireo mi pc limpio de polvo y paja


Eso, y estar con mi Claudia, siempre, bien.

Pasos para cepillarme el Windows XP de mi ordenador, para volver a reinstalarlo, pero habiendo formateado:

1. Entonces es facil, solo necesitas un disco de windows xp y los drivers para instalarlos despues de formatear y volver a instalar windows.

2. Metes el disco de windows xp nada mas encender el pc, y en la configuracion de la bios, el orden de booteo lo tienes que tener para que lea primero el cd y luego ya el discoduro miras que este eso bien, se reinicia y despues se mete directamente en el arranque del cd de windows.

3. Te cargan unas cuantas cosas y te salen las particiones que tienes y cuanta capacidad tiene cada particion y en el mismo sitio te dice como eliminar particiones, como crear nuevas y como instalar windows. Si no hay particiones, entonces solo te saldra una, con la capacidad total del disco duro...

4. Luego puedes hacer dos cosas, eliminarla y volver a crearla(eso se suele hacer si quieres mas de una particion) o directamente darle a intro y despues te salen las opciones de formateo...le das a ntfs normal(porque tambien te sale el rapido) y ya solo se encarga de formatear e instalar windows una vez que termina de instalar, que es lo que mas tarda.....ya cuando estes en el escritorio con el ordenador limpio de mierda, le metes los drivers de la placa base, tarjeta grafica, sonido, etc.... y ya esta.

Estos pasos me los ha dado mi compañera de ASI Esther.



Anexo anexado a los dos días de haber catado "Eureka!" :

En caso de que surja un error en la detección de disco duro, particiones, al ir a instalar Windows XP de nuevas, se debe hacer esto:
1. Entrar en la BIOS (para poder acceder hay que pulsar "como loco" mientras el sistema arranca F2, en mi caso.
2. Ya dentro, hay que desabilitar el RAID pues seguramente el fallo se produjese porque en el CD de instalación no van incorporados los drivers para manejar discos SCSI
.
3. Reniciar y cruzar los dedos para que ahora si se pueda lograr el objetivo.

Este consejo se lo debo a mi colega Miguel

1 abrazo

29 marzo 2010

Cómo grabar TDT



Uno de mis mejores amigos de infancia fue mi video VHS pues la otra amiga era la televisión, porque gracias a ellos no perdí memorables episodios de mis series favoritas antes de que el Utorrent existiera, ni el historico Mallorca - Lazio del 1999. Asi que cuando hoy mi madre me dijo que el apagón analógico había llegado a San Pedre, cogí, etre en Mozilla y tecleé Google.es. Y tan pronto se dice "Clint Eastwood es grande", encontré este enlace. Y lei que es sencillo poder grabar los canales del TDT en mi video VHS (y sin comprar un nuevo TDT). Sin embargo lo que el Experto comenta que, parece fácil aún no lo hice.

El Experto dice que el Euroconector del TDT tiene que ser en el que pone TV. Intercalando el video entre el TDT y la tele. Esa es la parte resumida, pues la parte detallada es esta: "el cable coaxial es para ver los analogicos y funcionan a si: de la toma de la pared al (IN) del tdt y del (OUT) del tdt al (IN del video) del OUT del video al televisor, con esto todo canal que sea analogico o en modo RF como el video se vera por la tele. si del tdt mediante euro conector lo enchufas al video y encuentras el canal para grabar al mismo tiempo deberas de localizar este canal en el televisor con lo que veras el tdt en le tele, el problema es cuando graves que no podras ver otro canal del tdt. " Y esto ya lo copio exactamente, así pues disculpe la ofensa, si la provoco. Y gracias de antemano.


Saludos-

22 marzo 2010

Máscara de formato para Emails

Tras mucho calentarnos la cabeza, descubrimos que la máscara de formato de un TextBox para la configuración de emails es así:


EDIT MASK: 0-9.a-zA-Z*\@0-9.a-zA-Z*\.a-zA-Z+{2,}
MASK TYPE: RegEx
AUTOCOMPLETE MODE: Optimistic
IGNORES MASK BLANK: True
SHOW PLACEHOLDERS: True

La imagen muesta el editos para máscaras y cómo debe de configurarse, no fuese a haber dudas, jejej.


Por si acaso, la máscara buena es la que hay en rojo, no la de la imagen, que se tomó antes de dar con la buena tras unas depuraciones.

Atentamente El autor



20 marzo 2010

Cómo solucionar que los teclados USB funcionen desde que el ordenador se enciende



El mayor problema que plantean es que hay muchas placas que no habilitan el teclado USB en el POST, por lo que no lo podemos utilizar hasta que no estamos dentro de Windows. No obstante son muchas las placas que si que pueden habilitar el teclado USB directamente en el arranque, normalmente mediante una opción en el SETUP (que suele ser una opción con un texto parecido a Enable USB Keyboard).

Esto lo encontré aquí.

14 marzo 2010

Cómo en C # obtener la ruta del proyecto

Así es la línea de código, que devuelve un string. Para hacer uso de esta linea deberemos importar la libreria IO, que pertenece a System:

System.IO.Directory.GetCurrentDirectory();


Bye

13 marzo 2010

Conexión a una base de datos Access con C# mediante código


El ejemplo lo extraje de aquí, y como reza el título, conecta el programa a una base de datos Access del Office.

En este ejemplo, seutiliza la base de datos Neptuno que se instala Trader (opcionalmente) con Microsoft Access. El programa es una aplicación de consola que simplemente carga un conjunto de datos de la tabla Clientes de la base de datos. Luego, recorrer los registros, la impresión del campo CustomerName a la pantalla.

using System;
using System.Data;
using System.Data.OleDb;

namespace csbook.ch15 {

class Example15_2 {

static void Main(string[] args) {
string conString =
@"Provider=Microsoft.JET.OLEDB.4.0;"
+ @"data source=c:\data\Northwind.mdb";


// create an open the connection
OleDbConnection conn = new OleDbConnection(conString);
conn.Open();

// create the DataSet
DataSet ds = new DataSet();

// create the adapter and fill the DataSet
OleDbDataAdapter adapter =
new OleDbDataAdapter("Select * from Customers", conn);
adapter.Fill(ds);

// close the connection
conn.Close();

DataTable dt = ds.Tables[0];
foreach (DataRow dr in dt.Rows) {
Console.WriteLine(dr["CompanyName"].ToString());
}
}
}
}

Gracias a http://en.csharp-online.net/

05 marzo 2010

Enlaces utiles para particionar Windows Vista



Enlaces utiles para particionar Windows Vista y así, si todo sale chachy del Paraguay, disfrutar de Suse 11.2 en mi portatil, sin haberme cepillado el Windows Vista, del que sólo me gusta su programa para utiliuzar la Web cam que incorpora el propio pc. Ahí van:
1. Administrar particiones en Windows Vista.
2.Como realizar una Partición en Windows Vista (Solucionado)
3.Crear y Eliminar Particiones en Windows Vista
4.Crear particiones en windows vista sin USAR NINGUN PROGRAMA

Suerte

03 marzo 2010

Genius driver: genial gestor de drivers




Datos Técnicos
Driver Genius Professional Edition v9.0.0.180 Retail Español
Spanish | Medicina Incl. | 13.2 MB

Descripción
¡Mantén los drivers de tu sistema siempre actualizados!

* Encuentra automáticamente los drivers necesarios para tu PC
* Más de 30.000 drivers disponibles en la base de datos
* Elimina los drivers no válidos y sin utilizar
* Guarda tus drivers en un archivo ejecutable
* Driver Genius Professional es “EL programa” de administración de controladores y de diagnóstico de tu equipo.

Si reinstalas regularmente tu sistema, sabes que puede ser difícil y tardado encontrar los controladores adecuados para tu sistema. Gracias Driver Genius, puedes guardar todos tus drivers en tu PC y restaurarlos una vez que haz reinstalado el sistema. ¡Olvídate de perder tiempo en la instalación y encontrando los controladores que necesitas!

Con Driver Genius

* Mantén actualizados tus drivers gracias a la función automática de sincronización
Base de datos con más de 30.000 drivers para todo tipo de material: tarjeta de video, tarjeta de sonido, tarjeta de red, MODEM, ratón, teclado, cámara de foto digital, tarjeta de adquisición video…
* Guarda una copia de tus drivers creando un archivo ejecutable
* Restáuralos automáticamente y en un abrir y cerrar de ojos



Ventajas
Con Driver Genius puedes:

* Crear una copia de seguridad. Puedes crear una copia de todos los controladores instalados en tu sistema. Dicha copia estará comprimida en un archivo ejecutable EXE
* Reinstalar los controladores. Sólo tienes que hacer doble clic en el archivo ejecutable
* Actualizar tus controladores. A través de Internet para tener siempre la última versión
* Obtener más detalles sobre tu sistema. Procesador, memoria, unidades de disco, etc.
* Acceder a opciones ocultas de tu tarjeta gráfica NVIDIA, para ello deberás disponer de una tarjeta con dicho chip



Novedades en la versión 9

* Nuevo Descarga tus drivers de forma más rápida y confiable
* Driver Genius 9 detecta y se conecta automáticamente al servidor de descargas más rápido.
* Nuevo Detecta automáticamente el mejor servidor para incrementar la velocidad de descarga
* En el caso de una falla en la descarga, Driver Genius 9 cambia directamente a otro servidor de descarga. Nuevo El asistente de Instalación de Drivers te ayuda para que la instalación sea sencilla Ya no es necesario buscar uno por uno todos los controladores que has instalado en tu PC para reinstalarlos. Con el botón “instalar” extrae e instala todos los controladores necesarios directamente desde Driver Genius.
* Nuevo El enlace ‘Ver detalles’ te da informacion sobre los drivers que necesitan actualizarse
* Actualizado La base de datos incluye miles de drivers nuevos para los más modernos equipos
* Mejorado Gracias a la interfaz maneja de forma conveniente y más fácil tus drivers
* FASTER Respaldo de tus drivers
* Mejorado El Escaneo de Driver te permite actualizarlos más rápidamente
* Mejorado Soporta Windows Vista
* Nuevo Soporta Windows 7 y Windows Server 2008 (incluye 64-bits de soporte para los dos)

Requerimientos del Sistema

* Sistema Operativo: Windows 98, Windows Millenium, Windows 2000, Windows Server 2003, Windows XP, Windows XP 64-bit, Windows Vista 32-bit, Windows Vista 64-bit, Windows 7.

La información la he tomado de Tarriga.

Estoy del Windows Vista hasta .... los cojinetes


Estoy de Windows Vista hasta ...... los cojinetes (de mi bici),.....Y no suelto tacos por educacion, no sea que el destino ponga a una tia buena a leer este blog, vaya y se enamore de mi y deje de estarlo cuando descubra que hablo mal. Y no me refiero a mi pronunciación, que ambién es regular, siendo optimitas.


A lo que vamos, que me aburro del Vista de los cojintes: de sus preguntas, porque aunque mi ex novia me llame muñeco, hace tiempo que superé la edad de aprender a leer, entonces sé lo que hago; me canso ya de que la interface esté en inglés, porque aunque sea una de las lenguas de Sudáfrica (tierra de mi héroe Mandela), a mi se me da mejor el castellano, porque yo no pasé del aprobado en el bachiller, ni en la ESO, y ni siquiera en el cole asi que cuando me salta algun mensajito de más de tres palabras, me despisto. Además me tiene frito el Office 2007 y sus licencias, ya que aún dando la clave, que pilla bien, me machaca con errores. Creo que lo único molón de este pastel envuelto en producto guay es la web cam ya lista. aprendí a usarla tarde, ya no tenía novia. Otra cosa que me fastidia, hay más, por ejemplo no poder guardar las fotografias donde me venga en gana, poque por narices tienen que ir a la carpeta Imagenes, es ... a ver si me acuerdo... es la edad.... -y esto también me lo dice mi ex-novia, que me quiere mucho-, es que mucho programas que en Windows XP van en Vista no lo hacen, por ejemplo JBuilder 5, por ello tuve que creearme una máquina virtual donde instalé el XP, -¡un follón!-. ¡Ajá1 Recordé: odio qu baste con pasar el pntero del ratón sobre una opción para que se ejecute y eso e detstable, mas para mi dada mi discapacidad, porque el SS.OO entiende que quieres hacer cosas cuando no es verdad.



Aquí un enlace con soluciones (una de las ideas que le dan es qu reinstale el XP compartiendo PC con Ubuntu, es la distribución Linux más similar al hijo de Bill Gates) que plantean a una chica más fastidiada que yo con su PC con programas preinstalados. Aún así no es tan fácil, de echo en informática qué es fácil. Ni apagar el ordenador a veces, ... jeje Así pues formatear e instalar XP no es pan comido,... ¿Porque así que me haya cepillado el Sistema Operativo incial e donde saco los drivers pues me vendieron el ordenador sin cd's? Si, si, existen las páginas oficiales, pero te puedes morir....Entonces es cuando recuerdo un consejo de mi amigo Omar Espinoza (Pythoniso): en desarrollo todo tiene olución. Y no te asustes, en tio Google hay respuestas para todo.


Sin embargo, me pasaré a Windows 7. Tomaré los drivers que me vinieron con el Vista, y los gestionaré con el Genius Driver haciendo una copia de respaldo para luego usarlos al instalar el 7. Pero antes de lanzarme a ello, voy a verificar que mi PC es compatible con Windows Seven, usando este programilla: Windows 7 Updrague avisor.


Dessenme suerte.


Saludos

28 febrero 2010

Cómo configurar Suse 11.2 (en máquina virtual) para acceder a Internet (en máquina real)



El título mismo dice que es lo que quiero hacer, así pues manitas a ello. En Internet encontré estas instrucciones, y como mejor no se pueden explicar (yo sólo he numerado los pasos), las tomo prestadas. El autor es Henry Miler, al que espero no ofender.
1º Vamos a Yast.
2º Dispositivos de red. Ajustes de la red.
3º En opciones globales, la dejkas como IFUP, no como networkmanager, habilitado ipv6, luego en nombre del host a enviar como AUTO. Después en las opciones que puedes editar, te recomiendo que dejes la red como hotplug, para que si se ce, se active automaticamente, del mismo modo, si el modem estuviese encendido se conectaría por si sólo.
4º Tras configurar la red, marchas a la casilla ADSL y le pones añadir -> conexión habilitada por no administrador. En los proveedores pones Speedy y tu nombre de usuario y contraseña. Luego, en la siguiente casilla tickeas: llamada bajo demanda, modificar DNS al conectar y reconexión automática. Puedes agregar los servidores de télefonica.
5º Los servidores de Teléfonica son: 200.28.4.130 y 200.28.4.129, sin embargo creo que funcionan para Ámerica Latina y no en España. Todo es probar

Saludos

12 febrero 2010

C#: Uso de propiedades.


El concepto de propiedad:


Una propiedad es una mezcla entre concepto de campo y el concepto de método. Externamente se accede a ella comoo si de un campo normal se tratase, pero internamente es posible asociar código a ejecutar een cada asignación o lectura de su valor. Este código puede usarse para comprobar que no se asignen valores inválidos, para calcular su valor sólo al solicita su lectura, etc.

Una propiedad no almacena datos, sino sólo se utiliza como si los almacenase. En la práctica lo que se suele hacer escribir como código a ejecutar cuando se le asigne un valor, código que controle que ese valor sea correcto y que lo almacene en un campo privado si lo es; y como código a ejecutar cuando se lea su valor, código que devuelva el valor almacenado en ese campo público. Así se simula que se tiene un campo público sin los inconvenientes que estos presentan por no poderse controlar el acceso a ellos.

Definición de propiedades:

Para definir una propiedad se usa la siguiente sintaxis:



Java no cuanta con esta utilidad, al menos que yo lo sepa, pero si C#, asi que hay que aprovvecharla. Pues abarata código.

Ejemplo de propiedad:

public string Servidor

{
set { servidor = value; }
get { return servidor; }
}
El ejemplo da nombre a un servidor (tipo string) con el método set, y con get lo retorna. Las propiedades tilizan por defecto el tipo String, enttonces si se usan variables de otro tipo, se deverá hacer un casting.

03 febrero 2010

En C#: Subir un archivo a un sitio FTP

Mi primera tarea como programador, a sueldo, en Telesoft, fue buscar en internet cómo usando C#, desde Monodeveloped se puede hacer una copia de ficheros a un sitio FTP. Entonces vi que es así de fácil al mirar Ftp con c# (Upload) Subir un Fichero del blog Eureka Digital.

Este es el código:

private bool SubirArchivoAFTP(string server, string user, string pass, string origen, string rutadestino, string nombredestino)
{
try
{
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(server + rutadestino + “/” + nombredestino);
request.Method = WebRequestMethods.Ftp.UploadFile;
request.Credentials = new NetworkCredential(user, pass);
request.UsePassive = true;
request.UseBinary = true;
request.KeepAlive = true;
FileStream stream = File.OpenRead(origen);
byte[] buffer = new byte[stream.Length];
stream.Read(buffer, 0, buffer.Length);
stream.Close();
Stream reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Flush();
reqStream.Close();
return true;
}
catch(Exception ex)
{
return false;
}

}

30 enero 2010

Algunas frases buenas I


He aqí un puñado de conclusiones:


1. Un buen trabajo es aquel hecho por un hombre contento.


2. Imprescindible anticiparse, y echar imaginación.



3. No dejar para mañana lo que puedas hacer hoy.

4. Si apuestas ganas, si no lo haces no ganas.

5. Nunca des por sentado lo que te diga nadie, ni siquiera el jefe. Comprueba, verifica, o llámalo X, pero no te tragues nada de lo que te digan. Ni siquiera si pusieron su mano sobre una Biblia mientras juraban ser fieles a la verdad. ¿Por qué? Porque en programación, como en cualquier trabajo, el tiempo es oro, y no se puede perder cumpliendo con la mentira o el fallo de otros.




6. Lánzate a leer el mensaje de error con lógica.

7. Los agobios son malos, pero dormirse en los lareles es peor.

8. Complcáte la vida narrando una historia policiáca, pero programando trabaja la simpleza, Siempre.

9. Al trabajo se va a trabajar. Los amigos se ttratan en fin de semana o por Messenger.

10. Piensa en la novia antes de entrar a trabajar, mientras almuerzas y al salir de la ofiicina. De echo, en cuanto te pones el abrigo ya puedes hacerlo.

11. No hagas la contra al jefe, excepto si sabes que llevas razón tras verificar.

12. Si tu superior critica tu trabajo, calla y aprende. O calla. O aprende. Pero mejor la prmera opción.


13.
Ayer me di cuenta, todo gracias al toque de atención de mi jefe, de que en el puesto de trabajo uno debe de ir a lo práctico cuando escribe código y no a lo politicamente correcto.

14.
Al menos si programas en el centro de trabajo, es la de códificar escalonadamente, y esto significa: ante una tarea lo suficientemente grande como para ver caramente subtareas, tomar la idea, de dividir la gran tarea en conjunto de acciones más pequeños, para controlar mejor si se produce un errror. Entonces al corroborar que la subtarea se ejecuta con éxito, se pasará a codificar la siguiente.

15. Al mal timpo, buena cara. Las solucins en desarrollo siempe llegan.




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

¿Alguna vez quisieron que su aplicación tuviera un acceso en la bandeja de sistema (system tray) , a la izquierda del reloj, si están en Windows? Pues bien, el código que escribo a continuación, si programan con C#, hará que al minimizar la ventana, apareczca un acceso en la anterioremente nombrada bandeja. Mas cuando restauren la ventana, desaparecerá.

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;
}

}

Así quedará la aplicación cuando la ventana sea minimizada (el mapa de España es el icono).


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

Tras echar un ojo en Google y encontrar http://facundoduran.wordpress.com/2008/02/29/como-hacer-un-instalador-en-visual-studio-2008 sólo me tuve que poner a seguir los pasos que Facundo Duran dictaba y acabé dándome cuenta de la sencillez de la operación.

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

public void CrearFiltros()

{

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

Sencillamente expondré unas claves que harán caer en picado la popularidad de los Arrays, de toda la vida, por su evolucionado sucersor: El ArrayList.

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.
Estas y algunas más son las razones por las que utilizar objetos ArrayList en lugar de arrays de tipo básico que, se me han aparecido durante este fin de semana en el que me reencontré con esta herramienta que, conocí en mi aprendizaje de Java.

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