31 mayo 2006

Almacenamiento de conocimiento

El día de ayer explorando un directorio de mi pc, me encontre con un interesante libro electronico con cerca de 771 páginas y de curiosidad lo abri y empece a recorrer y cual fue mi sorpresa que tenia la información que hace días andaba buscando en Google, entonces llego a mi mente, en que momento descargue este libro?, como lo busque?, por que lo baje?, y lo que mas me pregunte fue, por que demonios no lo habia leido?, si se supone que lo baje por que me interesaba este tema, en fin a lo llegue fue que muchas veces andamos vagando con busquedas en Google y descargamos cualquier cosa que consideramos interesante y convertimos nuestra pc en una maquina de almacenamiento de conocimiento al cual no siempre recurrimos para buscar y mas sin embargo de nueva cuenta volvemos a saturar de preguntas al google y el nos devuelve miles de respuestas, sin pensar que en nuestro enpolvado pc tenemos ya esta valiosa información, ahora me pregunto si yo soy el unico al que le ha sucedio esto, que almacena y almacena conocimiento en su pc.

30 mayo 2006

Conversor numero a letras con c# (1)

Aqui dejo la pantalla y un poco de codigo de los avances que llevo con este conversor de una cantidad numerica a su representación en letra, el codigo aun esta un poco enredoso, pero despues de concluir dedicare una etapa a corregir y mejorar el codigo y claro a incluir los comentarios ya que por el momento no se los he puesto.

Aqui la pantalla


Y aqui les dejo el codigo, espero sus comentarios y claro sus ideas para mejorar este programita, que quizas sencillo, pero a veces muy util cuando tienes que elaborarte un presupuestillo y necesitas poner la cantidad en letra.


using System;
using Gtk;
class nletras
{
static Gtk.Window w;
static Gtk.Entry tcantidad;
static Gtk.Entry tresultado;
static Gtk.Button bconvertir;
static Gtk.Button bsalir;
static String UnoAl15(double N)
{
String[] numero = new String[17];
numero[0] = "CERO ";
numero[1] = "UN ";
numero[2] = "DOS ";
numero[3] = "TRES ";
numero[4] = "CUATRO ";
numero[5] = "CINCO ";
numero[6] = "SEIS ";
numero[7] = "SIETE ";
numero[8] = "OCHO ";
numero[9] = "NUEVE ";
numero[10] = "DIEZ ";
numero[11] = "ONCE ";
numero[12] = "DOCE ";
numero[13] = "TRECE ";
numero[14] = "CATORCE ";
numero[15] = "QUINCE ";
return numero[Convert.ToInt32(N)];
}
static void Main()
{
Application.Init();
w = new Gtk.Window("Convierte numero a letras");
w.SetDefaultSize(450,150);
w.DeleteEvent += new DeleteEventHandler(Cerrar);
Gtk.VBox panelv = new Gtk.VBox();
Gtk.HBox panelsup = new Gtk.HBox(false, 5);
panelv.PackStart(panelsup,false, false, 5);
Gtk.Label lbl1 = new Gtk.Label("Cantidad en numero ");
tcantidad = new Gtk.Entry();
bconvertir = new Button("Convertir a letras");
bconvertir.Clicked += OnButtonClickedConvertir;
panelsup.PackStart(lbl1, false, false, 5);
panelsup.PackStart(tcantidad, false, false, 5);
panelsup.PackStart(bconvertir, false, false, 5);
Gtk.Label lbl2 = new Gtk.Label("Numero en letra ");
tresultado = new Gtk.Entry();
Gtk.HBox panelres = new Gtk.HBox(false, 5);
panelv.PackStart(panelres, false, false, 5);
panelres.PackStart(lbl2, false, false, 5);
panelres.PackStart(tresultado, true, true, 5);
bsalir = new Button(Stock.Quit);
bsalir.Clicked += OnButtonClicked;
panelv.PackStart(bsalir, false, false, 5);
w.Add(panelv);
w.ShowAll();
Application.Run();
}
static void Cerrar(object o, DeleteEventArgs args)
{
args.RetVal = true;
Application.Quit();
}
static void OnButtonClicked(object o, EventArgs args)
{
Application.Quit();
}
static void OnButtonClickedConvertir(object o, EventArgs args)
{
String aux = UnoAl15(Convert.ToDouble(tcantidad.Text));
tresultado.Text = aux;
}
}

27 mayo 2006

Ya tengo algo

Comentaba ayer que no tenia nada de programación y esperaba que en el fin de semana algo me iluminara y ya esta por ahi encontre un codigo en vba para transformar un número a su representación en letra, así que me pondre a traducir este codigo a su equivalente en c# y claro si se puede lo armamos con gtk y compilado con Mono, ahora me pondre manos a la obra y les aviso.

26 mayo 2006

Avances lentos

Ultimamente creo que no he trabajado nada de programación, creo que el avance es lento en mi aprendizaje, pero en fin, que mas da despues de terminar una semana de trabajo, me inspira para planear que programa hacer y practicar un poco de c#, asi que por el momento les dejare esta triste entrada en mi blog y espero no sean muy crueles y me llenen mi buzon con mensajes.

25 mayo 2006

Un intruso sospechoso

Recientemente mi conexión de internet la note algo extraña, para decir estaba lenta, por lo que aplique un netstat -a 3 y este me arrojo una linea como esta a204-2-128-167.deploy.akamaitechnologies.com y que ademas estaba la conexión establecida, me pregunte de inmediato quien diablos es este intruso, así que meti esta línea al google y barbaro no he sido el unico, y en los foros encontre que algunos programas utilizan este servicio, pero no encontre nada concreto que me dijera si era bueno o era malo, por que pues a pesar de tener panda como cortafuegos, este no me avisaba sobre este intruso, en fin que mas da seguire investigando, para llegar a encontrar el fin que persigue este intruso.

24 mayo 2006

Desarrollo de software en México

En días pasados lei una nota publicada en el diaro el universal en su edición electronica http://www.eluniversal.com.mx/articulos/31443.html acerca de la proxima inauguración del centro de desarrollo de software en Jalisco, que en forma resumida se refiere a la construcción de instalaciones donde se alojara una agrupación de aproximadamente 500 ingenieros desarrolladores de software, y en realidad me parecio algo muy bueno para ser la punta de lanza de todos los execelentes programadores que tiene nuestro pais, y como no me quede tranquilo publique este tema en el foro de matuk http://www.matuk.com/foros/viewtopic.php?t=1779 para que alguien residente de Jalisco nos comentara que sabia al respecto y las respuestas no se hicieron esperar, y comentaron que en si ya existian estas empresas con son un grupo de pymes dedicadas al desarrollo y que estaban establecidas en otro lugar y que ahora se mudaran a este lugar, ahora despues de conocer un poco las expectativas que se tienen respecto al desarrollo del sofware en México, estaria bien seguir investigando mas para conocer realmente cual es la oferta que presenta México en cuanto a desarrollo de software y establecer las causas si la oferta fuera baja respecto a otros paises.

12 mayo 2006

Cambiando de distro Linux

En días pasados cuando empece a escribir en este blog tenia instalado en mi portatil un sistema operativo Linux, para ser preciso consegui una distribución liveCD de monoppix que ya traia todo para empezar a echar a rodar a Mono, despues de una rato de usarlo lo instale de forma definitiva en mi portatil y bueno me gustaba todo por el momento, pero de repente me empece a dar cuenta que algo andaba mal, por que? por la sencilla razon que esta distribución venia con un escritorio KDE y no con GNOME y entonces me dije por que usar KDE, así que empece a considerar en cambiar de distribución Linux, y claro tenia que considerar que distro ya que mi portatil es una compaq presario con AMDk6 y escasos 92 mb en ram, así que despues de buscar un amigo me dijo yo tengo una distribución Ubuntu 4.10 y esta viene con GNOME, y lo que comente fue pues adelante le instalamos Ubuntu, y ya esta le tumbe al monoppix y le instale Ubuntu 4.10 se que ya esta una distro mas reciente, pero como les comente mi pequeña portatil no tiene muchos recursos, la instalación fue un poco tardada pero facil y sin problemas, despues de instalarlo me restaba descargarme Mono para instalarlo, por lo que elegi descargar el paquete binario para no tener problemas, y ya esta lo instale y pues no pude esperar a meterle unas líneas de codigo aunque nomas fuera para mostrar una ventana vacia en pantalla, yo creo fue tanta mi rapidez que meti mal las instrucciones, de tal forma que al compilar todo estaba bien pero al ejecutar me tiraba una bola de patrañas que claro no era lo que esperaba, jejeje ahora me causa risa al mirar mi codigo que escribi y me pregunto si estaba ya durmiendo o en proceso de ello, aqui les dejo mi codigo y ustedes diganme si no estaba mal.

using System;
using Gtk;

class miventana
{
static void Main(String[] args)
{
Application.Quit();
Window v = new Window("Mi ventana");
v.ShowAll();
Application.Init();
}
}

Mucho ojo el codigo esta mal! jejeje

04 abril 2006

Utopo practica 1 ( I ) C#

Empezare el desarrollo de una pequeña aplicación para uso de quienes se dediquen a la topografia, claro especificamos sera con fines de practica y ya despues veremos si el tiempo lo permite ampliarlo con mas utilerias y caracteristicas.

Por el momento aqui le dejo, pero se ira publicando el codigo y pantallazos que resulte.

03 abril 2006

Me preguntaba sobre Mysql embebido y C#

Recientemente lei que se puede embeber Mysql en C para sistemas que no se desee montar un servidor de Mysql, en caso concreto como un negocio pequeño o algo asi, pero con toda la potencia de las API de Mysql, así que he dado vueltas y vueltas preguntandome como se embeberia usando C#, bueno para no cansar con este post, le buscare y si encuentro algo, lo ponemos y si fallamos en el intento pues le seguimos que mas da, pero si alguien sabe algo, pues adelante se reciben comentarios.

31 marzo 2006

Clases con C#

//Un poco de codigo usando Clases con c#

using System;
class Tabla
{
private int NumeroRenglones;
private int PosicionActual;

//Constructor
public Tabla()
{
NumRenglones = 0;
Posicion = 0;
}
public int NumRenglones
{
get
{
return this.NumeroRenglones;
}
set
{
this.NumeroRenglones = value;
}
}
public int Posicion
{
get
{
return this.PosicionActual;
}
set
{
this.PosicionActual = value;
}
}
public Boolean AgregaRenglon()
{
NumRenglones+=1;
return true;
}
public Boolean MueveAdelante()
{
Posicion +=1;
return true;
}
public Boolean MueveAtras()
{
Posicion -=1;
return true;
}
public Boolean MueveUltimo()
{
Posicion = NumRenglones;
return true;
}
public Boolean MuevePrimero()
{
Posicion = 0;
return true;
}
}
class Agenda
{
static void Main()
{
Tabla rt = new Tabla();
Console.WriteLine("Inicializacion ..... ");
Console.WriteLine("Renglones: {0}", rt.NumRenglones);
Console.WriteLine("Posicion: {0}", rt.Posicion);
Console.WriteLine("-------------------------------------");
int opcion;
do
{
Console.WriteLine("Menu");
Console.WriteLine("1.- Agregar registro");
Console.WriteLine("2.- Numero de registros");
Console.WriteLine("3.- Posicion actual");
Console.WriteLine("4.- Mover primero");
Console.WriteLine("5.- Mover atras");
Console.WriteLine("6.- Mover adelante");
Console.WriteLine("7.- Mover ultimo");
Console.WriteLine("8.- Salir");
Console.WriteLine("Elija una opcion: ");
opcion = Console.Read();
Console.Read();
switch(opcion)
{
case '1':
if(rt.AgregaRenglon())
Console.WriteLine("Agregado");
break;
case '2':
Console.WriteLine("Renglones: {0}", rt.NumRenglones);
break;
case '3':
Console.WriteLine("Posicion: {0}",rt.Posicion);
break;
case '6':
if(rt.MueveAdelante())
Console.WriteLine("Listo");
break;
}
}while(opcion!='8');
}
}

aun faltan las otras instrucciones, pero creo que es facil de implementar lo que falta.

30 marzo 2006

Un poco de Miguel de Icaza


Miguel de Icaza, creador del proyecto Mono y uno de los mejores programadores de software libre, en los años 90 estudiante de la Universidad Autonoma de México desarrolla un software para la manipulación de archivos (mid night commander) , crea el escritorio para linux gnome, y funda su empresa Ximian donde empieza a desarrollar el proyecto Mono, que es una plataforma .Net para desarrollo de software libre, actualmente vive en Boston, trabaja en Novell y sigue a cargo de la dirección del proyecto Mono.

Su blog: http://tirania.org/blog/index.html

Levantando a Mysql

En dias pasados tenia un problema con el server de Mysql, bueno en realidad creo que todavia persiste, pero encontre una solución temporal.

El error en cuestión era este:

shell>>mysql -u root -p
Enter password:

Me botaba este error

Error 2002 (HY000) Can't connect to local MySQL server through socket '/tmp'

y la verdad que era un quebradero de cabeza, así que busque como solucionarlo, y esta es hasta ahorita la manera de levantar al demonio de Mysql.

shell>>/usr/bin/mysqld --skip-grant-tables --user=root

Esto me arroja un comentario acerca de problemas creo con las tablas tipo INNODB

y despues de esto un ctrl+d

En fin esto me ha solucionado mi problema, espero les sirva en su caso.

29 marzo 2006

Acerca de la agenda

He estado pensando que en el proyecto de la agenda tenemos mucho codigo, o quizas sea el necesario, pero de lo que si estoy seguro es de que se puede modificar para que este mas optimizado, así que en los próximos días ire haciendo unas modificaciones, cuando ya lo tenga lo publicare, espero sea pronto no desesperen.

La idea es tener una forma mas general para el recorrido de los registros y despues este codigo pueda ser reutilizado en proyectos similares.

mas o menos asi:
class Mitabla
{

Private int PosicionRenglon;

public Mitabla()
{
//Aqui inicializar las variables de acuerdo a los datos de la bd
}

public MoverSiguiente()
{
this.PosicionRenglon+=1;
//Posicion+=1;
}

public int Posicion()
{
get
{
return this.PosicionRenglon;
}

set
{
this.PosicionRenglon=value;
}
}

bueno hasta aqui llevo la idea, si alguien considera algo mejor no duden en comentar

27 marzo 2006

Creacion de una ventana con Gtk

Aqui les dejo el codigo básico para crear una ventana con C# y Gtk con Mono

using System;
using Gtk;

class Miventana
{
static void Main(string[] args)
{
Application.Init();
Miventana window = new Miventana();
Application.Run();
}

public Miventana() //Constructor de la ventana
{
Gtk.Window v = new Gtk.Window("Mi ventana");
v.DeleteEvent += new DeleteEventHandler(OnDeleteWindow);
v.ShowAll();
}

static void OnDeleteWindow(object obj, DeleteEventArgs args)
{
Application.Quit();
}
}

compilar de la siguiente: mcs Miventana.cs -pkg:gtk-sharp

Ejecutar: mono Miventana.exe

Resultado que se obtiene




23 marzo 2006

Codigo C# y Gtk# agenda sencilla

//--------------------------------------------------------------------------
// Proyecto: Sencilla Agenda de contactos
// Desarrollo: gsur
// Fecha: 18/03/2006
// Compilar:
// mcs sagenda.cs -pkg:gtk-sharp -pkg:glade-sharp -r:System.Data.dll
// -r:Mysql.Data.dll -resource:vagenda.glade
// Entorno de desarrollo: Mono
// Comentarios: El borrado de contactos tiene un error, ya que no recorre el
// numero actual de contactos, falta añadir un poco mas de codigo,
// pero el borrado si lo aplica correctamente, asi que quedan
// advertidos
//--------------------------------------------------------------------------

using System;
using System.Data;
using MySql.Data.MySqlClient;
using Gtk;
using Glade;

public class Agenda
{
[Glade.Widget] Gtk.Window ventana;
[Glade.Widget] Gtk.Entry txtcontacto;
[Glade.Widget] Gtk.Entry txtdire;
[Glade.Widget] Gtk.Entry txttel;
[Glade.Widget] Gtk.Entry txtmail;
[Glade.Widget] Gtk.Label lblnregs;
[Glade.Widget] Gtk.Entry txtbusqueda;

public string sql; //Variable para las cadenas de consulta
public string connectionString;
public IDbConnection dbcon;
public IDbCommand dbcmd;
public IDataReader reader;
public int npos; //Renglon actual
public long nc; //Numero de renglones
public System.UInt32 id_contacto; //Clave primaria de los contactos
public string nombre; //Nombre del contacto
public string direccion; //Direccion del contacto
public string telefono; //Telefono del contacto
public string email; //Email del contacto
public int opcion; //Situacion actual [Insercion o Update]

public static void Main(String[] args)
{
Application.Init();
Agenda gt=new Agenda();
Application.Run();
}

public Agenda()
{
Glade.XML gxml=new Glade.XML(null, "vagenda.glade","ventana",null);
gxml.Autoconnect(this);
connectionString ="Server=localhost;" + "Database=personal;" + "User ID=rafita;" + "Password=;" + "Pooling=false";
dbcon = new MySqlConnection(connectionString);
dbcon.Open();
dbcmd = dbcon.CreateCommand();
sql = "SELECT * FROM miscontactos ORDER BY nombre_contacto LIMIT 0,1";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
leer_contacto(reader);
npos=0;
dhabilita(false);
reader.Close();
reader=null;
sql = "SELECT COUNT(id_contacto) AS ncount FROM miscontactos";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
reader.Read();
nc = (long) reader["ncount"];
lblnregs.Text="Contacto: 1 de " + nc;
opcion=0;
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
}

public void on_ventana_delete_event(object o, DeleteEventArgs args)
{
dbcon.Close();
dbcon = null;
Application.Quit();
}

public void on_bsalir_clicked(System.Object b, EventArgs e)
{
dbcon.Close();
dbcon = null;
Application.Quit();
}

public void on_bprimero_clicked(System.Object b, EventArgs e)
{
npos=0;
lblnregs.Text="Contacto: 1 de " + nc;
mover();
}

public void on_banterior_clicked(System.Object b, EventArgs e)
{
if(npos>0) {
npos-=1;
mover();
}
else
advierte("\n\nSe ha llegado al primer contacto");
lblnregs.Text="Contacto: " + (int) (npos + 1) + " de " + nc;
}

public void on_bsiguiente_clicked(System.Object b, EventArgs e)
{
if(npos<((int) nc-1)) {
npos+=1;
mover();
}
else
advierte("\n\nSe ha llegado al ultimo contacto");
lblnregs.Text="Contacto: " + (int) (npos + 1) + " de " + nc;
}

public void on_bultimo_clicked(System.Object b, EventArgs e)
{
npos=(int) (nc-1);
mover();
lblnregs.Text="Contacto: " + nc + " de " + nc;
}

public void guardar_cancelar()
{
nombre = txtcontacto.Text;
direccion = txtdire.Text;
telefono = txttel.Text;
email = txtmail.Text;
}
public void on_bnuevo_clicked(System.Object b, EventArgs e)
{
dhabilita(true);
guardar_cancelar();
txtcontacto.Text="";
txtdire.Text="";
txttel.Text="";
txtmail.Text="";
opcion=1;
}

public void on_beditar_clicked(System.Object b, EventArgs e)
{
dhabilita(true);
guardar_cancelar();
opcion=2;
}

public void on_bguardar_clicked(System.Object b, EventArgs e)
{
dbcmd = dbcon.CreateCommand();
switch(opcion)
{
case 0:
String msg;
msg="\n\nNo ha elegido alguna opcion [Nuevo/Editar]";
MessageDialog md = new MessageDialog(ventana, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok,msg);
ResponseType r = (ResponseType) md.Run();
if(r==ResponseType.Ok) {
md.Destroy();
}
break;
case 1:
guardar_nuevo();
break;
case 2:
guardar_edicion();
break;
}
opcion=0;
dhabilita(false);
}

public void guardar_nuevo()
{
sql = "INSERT INTO miscontactos(nombre_contacto, direccion_contacto, telefono_contacto, email_contacto) VALUES(";
sql = sql + "'" + txtcontacto.Text + "','" + txtdire.Text + "','" + txttel.Text + "','" + txtmail.Text + "')";
dbcmd.CommandText = sql;
dbcmd.ExecuteNonQuery();
sql = "SELECT COUNT(id_contacto) AS ncount FROM miscontactos";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
reader.Read();
nc = (long) reader["ncount"];
nc-=1;
reader.Close();
reader = null;
sql = "SELECT * FROM miscontactos ORDER BY id_contacto LIMIT " + nc + ",1";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
reader.Read();
System.UInt32 na = (System.UInt32) reader["id_contacto"];
id_contacto = na;
reader.Close();
reader = null;

sql = "SELECT * FROM miscontactos ORDER BY nombre_contacto";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
int ncont=0;
while(reader.Read() && ((System.UInt32) reader["id_contacto"]!=na)) {
ncont+=1;
}
npos=ncont;
ncont+=1;
nc+=1;
lblnregs.Text = "Contacto: " + ncont + " de " + nc;
reader.Close();
reader = null;

dbcmd.Dispose();
dbcmd = null;
}

public void guardar_edicion()
{
sql = "UPDATE miscontactos SET nombre_contacto='" + txtcontacto.Text + "',";
sql = sql + "direccion_contacto='" + txtdire.Text + "',";
sql = sql + "telefono_contacto='" + txttel.Text + "',";
sql = sql + "email_contacto='" + txtmail.Text + "' WHERE id_contacto=" + id_contacto;
dbcmd.CommandText = sql;
dbcmd.ExecuteNonQuery();
dbcmd.Dispose();
dbcmd = null;
}

public void on_bcancelar_clicked(System.Object b, EventArgs e)
{
txtcontacto.Text = nombre;
txtdire.Text = direccion;
txttel.Text = telefono;
txtmail.Text = email;
dhabilita(false);
}

public void on_beliminar_clicked(System.Object b, EventArgs e)
{
String msgdelete;
msgdelete="\n¿Desea realmente eliminar este contacto?";
msgdelete = msgdelete + "\n\nSi desea continuar pulse Aceptar, si no";
msgdelete = msgdelete + "\ndesea continuar pulse Cancelar";
MessageDialog md = new MessageDialog(ventana, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.OkCancel,msgdelete);
ResponseType r = (ResponseType) md.Run();
if(r==ResponseType.Ok) {
dbcon = new MySqlConnection(connectionString);
dbcon.Open();
dbcmd = dbcon.CreateCommand();
sql = "DELETE FROM miscontactos WHERE id_contacto=" + id_contacto;
dbcmd.CommandText = sql;
dbcmd.ExecuteNonQuery();
dbcmd.Dispose();
dbcmd = null;
dbcon.Close();
dbcon = null;
md.Destroy();
}
else
md.Destroy();
}

public void on_bbuscar_clicked(System.Object b, EventArgs e)
{
dbcmd = dbcon.CreateCommand();
sql = "SELECT * FROM miscontactos WHERE nombre_contacto LIKE '" + txtbusqueda.Text + "%'";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
if(reader.Read())
{
id_contacto = (System.UInt32) reader["id_contacto"];
System.UInt32 na = id_contacto;
txtcontacto.Text=(string) reader["nombre_contacto"];
txtdire.Text=(string) reader["direccion_contacto"];
txttel.Text=(string) reader["telefono_contacto"];
txtmail.Text=(string) reader["email_contacto"];
reader.Close();
reader = null;
sql = "SELECT * FROM miscontactos ORDER BY nombre_contacto";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
int ncont=0;
while(reader.Read() && ((System.UInt32) reader["id_contacto"]!=na)) {
ncont+=1;
}
npos=ncont;
ncont+=1;
lblnregs.Text = "Contacto: " + ncont + " de " + nc;
reader.Close();
reader = null;
}
else
{
MessageDialog md = new MessageDialog(ventana, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, "\n\nNo se enontro alguna coincidencia");
ResponseType r = (ResponseType) md.Run();
if(r==ResponseType.Ok)
md.Destroy();
}
dbcmd.Dispose();
dbcmd = null;
}

public void mover()
{
dbcmd = dbcon.CreateCommand();
sql = "SELECT * FROM miscontactos ORDER BY nombre_contacto LIMIT " + npos + ",1";
dbcmd.CommandText = sql;
reader = dbcmd.ExecuteReader();
leer_contacto(reader);
reader.Close();
reader = null;
dbcmd.Dispose();
dbcmd = null;
}

public void dhabilita(Boolean valor)
{
txtcontacto.Editable = valor;
txtdire.Editable = valor;
txttel.Editable = valor;
txtmail.Editable = valor;
}

public void advierte(String mensaje)
{
MessageDialog md = new MessageDialog(ventana, DialogFlags.DestroyWithParent, MessageType.Warning, ButtonsType.Ok, mensaje);
ResponseType r = (ResponseType) md.Run();
if(r==ResponseType.Ok)
md.Destroy();
}
public void leer_contacto(IDataReader mireader)
{
mireader.Read();
id_contacto = (System.UInt32) mireader["id_contacto"];
txtcontacto.Text=(string) mireader["nombre_contacto"];
txtdire.Text=(string) mireader["direccion_contacto"];
txttel.Text=(string) mireader["telefono_contacto"];
txtmail.Text=(string) mireader["email_contacto"];
}
}

17 marzo 2006

C# + Gtk# + Glade + Mysql

Empece con una pequeña agenda de contactos para empezar a programar en Mono, durante los proximos dias se ira publicando el desarrollo, por el momento les dejo la interfaz de la agenda, esta se elaboro con Glade.

Esta pantalla es ejecutandose en Windows


Esta otra pantalla es ejecutandose en Linux

Proyecto Mono en México

Aunque desconozco realmente el numero de desarrolladores en México que utilicen entornos de desarrollo libre, me atrevo a contarme como uno más, en este blog tratare de mostrar algunas cosillas del desarrollo con Mono.

Enlaces de interes:

http://www.monohispano.org (en español)
http://www.monohispano.es (en español)
http://www.go-mono.org (en ingles)