Blog de Abelardo Jara Berrocal: Ubuntu, electronica y software libre

Noviembre 24, 2007

Programacion con C#: Windows Forms con Mono en Ubuntu

Archivado en: Programacion en C Sharp con Mono — Abelardo Jara @ 11:17 pm

Para ver como compilar un codigo con Windows Forms en C# en Ubuntu, primero debemos instalar las librerias de Windows Forms. No estan completamente implementadas pero son usables.

apt-get install libmono-winforms1.0-cil libmono-winforms2.0-cil

Ahora si podemos crear un primer programa:

gedit ejemplo1.cs

Tipeamos lo que sigue:

using System;
using System.Windows.Forms;

public class ejemplo1
{
public static void Main(string[] args)
{
MessageBox.Show(“Hello World!”);
}
}

Despues de grabar compilamos el programa:

gmcs Main.cs -r:System.Windows.Forms -out:programa.exe

Finalmente lo ejecutamos con:

mono programa.exe

Listo, deberia aparecernos una ventanita de bienvenida :)

Si quieren algo mas sofisticado, puedenprobar con este codigo mas complejo que les pongo abajo:

using System;
using System.Windows.Forms;

namespace HelloClickWorld {
public class Hello : Form {
public static void Main (string[] args) {
Application.Run (new Hello ());
}

public Hello ()
{
Button button = new Button ();
button.Text = “Click…”;
button.Click += new EventHandler (Button_Click);
Controls.Add (button);
}

private void Button_Click (object sender, EventArgs e)
{
MessageBox.Show (“Hello Click World!”);
}
}
}

Usar Stopwatch para medir performance de Mono y C# en Ubuntu

Archivado en: Programacion en C Sharp con Mono — Abelardo Jara @ 11:13 pm

En .NET 2.0 y disponible tambien en Mono tenemos la clase System.Diagnostics.Stopwatch que nos permite medir con milisegundos el tiempo transcurrido en un periodo.

Ejemplo:
System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch();
watch.Start();
System.Threading.Thread.Sleep(100);
watch.Stop();
System.Console.WriteLine(“Transcurrido: {0}”, watch.ElapsedMilliseconds);

Realmente util no? Hace tiempo habia implementado uno para medir los tiempos de ejecucion pero este esta sencillo y practico.

Si queremos compilar este codigo en Ubuntu debemos instalar mono-gmcs

Con ello tendremos el compilador gmcs que soporta Mono 1.1 y 2.0

Si instalamos mono-mcs solo podremos compilar Mono 1.1

Creando un programa “Hola Mundo” con C# en Linux con Mono

Archivado en: Programacion en C Sharp con Mono — Abelardo Jara @ 10:51 pm

Vamos a ver como instalar Mono (compilador y maquina virtual) para correr un programa en C# en Ubuntu Linux.

Primero instalamos mono:

apt-get install mono mono-mcs mono-gmcs

mono-mcs es el compilador para .NET 1.1 y mono-gmcs es el compilador para .NET 2.0. Recomiendo usar gmcs.

Luego creamos nuestro programa:

gedit helloWorld.cs

Y ponemos como codigo:

using System;
namespace helloWorld
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine(”Hello World!”);
}
}
}

Guardamos el codigo, luego compilamos y corremos nuestra aplicación.

$gmcs helloWorld.cs
$mono helloWorld.exe
Hello World!

Si no nos gusta ver archivos con terminación “*.exe” en nuestro linuxito Gutsy, renombramos el archivo recién generado.

$mv helloWorld.exe helloWorld
$mono helloWorld
Hello World!

Un pequeño consejo final acerca de IDE’S para programar aplicaciones mono: SharpDevelop en Windows. Me parece muy bueno. No recomendaria Monodevelop en Linux (esta en desarrollo y es muyyy lento).

Exportar una base de datos Access a SQL Lite

Archivado en: Bases de datos — Abelardo Jara @ 8:09 pm

Razón: Muchas veces necesitamos hacer búsquedas y no nos sirve usar bases de datos en mysql, un ejemplo puede ser un programa en Java que querramos que sea portable (que toda la aplicacion este en un archivo .jar incluida la base de datos).

Un caso comun es que la persona que vaya a usar nuestro programa no tenga MySQL instalado o no sepa configurarlo, instalarlo, etc. SQLite nos soluciona el problema, pues es un fichero que puede ser adjuntado con el programa, y nos aporta las ventajas de las bases de datos, aunque en un nivel menos, pues no soporta todas las opciones que nos puede dar mysql. Podríamos guardar los datos en un archivo de texto o binario, pero a la hora de recuperar los datos, sqlite es mucho mejor que un archivo.

Como empezar: Para trabajar con las bases de datos de Access necesitamos el paquete mdbtools, y para trabajar con sqlite el paquete sqlite3, así que pasamos a instalarlos:
sudo apt-get install sqlite3 mdbtools

Una vez que tenemos los paquetes, pasamos a exportar del archivo mdb a sentencias sql, lo haremos en dos pasos, primero el esquema (CREATE …) y luego los datos (INSERT INTO ….) . Para exportar el esquema usaremos el siguiente comando:
mdb-schema master.mdb > esquema.sql

El primer parámetro sera el nombre de la base de datos y el segundo el archivo con las sentencias sql. Si vemos el archivo vemos que uno de los campos se llama P/T y que hay dos campos de tipo Memo/Hyperlink (255), pues bien, sqlite no permite poner “/” en los nombres de los campos, y no existen campos de ese tipo, así que con kate, editaremos el archivo y pondremos de nombre del campo PT y el tipo de datos Text(255).

Ahora pasaremos a por el archivo de los datos, para ello, usaremos el comando:

mdb-export -H -I master.mdb Cards > datos.txt

Con esto exportamos los datos con las sentencias INSERT ya incluidas. En mi caso, Cards es el nombre de la tabla, podemos verlo con mdb-tables master.mdb. Pero tenemos dos problemas que hay que solucionar, el primero es que en los INSERT nos ha puesto el campo P/T, y lo hemos cambiado por PT, y el segundo problema es que las sentencias insert no terminan en “;”. Para arreglar eso echaremos mano de sed.

cat datos.txt | sed -e ’s/”)/”);/g’ > datos.temp

Con esto añadimos el ; al final de cada sentencia insert, y para cambiar P/T por PT, basta con:

cat datos.temp | sed -e ’s/P\/T/PT/g’ > datos.sql

Estupendo, ya tenemos todo lo necesario para crear las tablas en sqlite, el proceso es muy sencillo. ejecutamos estas sentencias:

josu@cyrusnet:$ sqlite
SQLite version 2.8.17
Enter “.help” for instructions
sqlite> .read esquema.sql
DROP TABLE Cards;
SQL error: no such table: Cards
sqlite> .read datos.sql
sqlite> .output insert.sqlite
sqlite> .dump
sqlite>

El nombre del archivo se puede cambiar, pero da lo mismo, porque aun no tenemos la base de datos, pero ya solo queda un último paso, que es:
sqlite cartasMagic.db < insert.sqlite

Una pega que tiene esto, es que el archivo mdb ocupaba 7 megas y el sqlite ocupa 25.

Ya esta, ahora solo queda demostrar que podemos ejecutar consultas sql, por ejemplo vamos a buscar las cartas que se llamen Fireball y sean de quinta edición:

josu@cyrusnet:~/downloads$ sqlite cartasMagic.db “SELECT * FROM Cards WHERE Edition=’5E’ AND Name =’Fireball’”

Resultado:
Fireball|R|C|5E||0.8300|Sorcery|XR|Mark Tedin|Pay for each target beyond the first: Fireball deals X damage divided evenly, rounded down, among any number of target creatures and/or players.||||5E\Fireball.jpg|1||NF

Exportar de Microsoft Access a MySQL con MDB Tools

Archivado en: Bases de datos, Linux Ubuntu Administracion — Abelardo Jara @ 7:50 pm

Si seguís el post siguiente “Exportar a SQLite” veréis todos los pasos con explicaciones. Para los impacientes los 4 pasos a seguir diréctamente:

$ aptitude install mdbtools
$ mdb-schema BD.mdb mysql > BD_esquema_mysql.sql
$ mdb-tables -S -1 BD.mdb > BD.txt
$ for tabla in `cat BD.txt`; do mdb-export -Q -I BD.mdb “${tabla}”; done > datos.sql

Instalar SQLLite en Windows

Archivado en: Bases de datos — Abelardo Jara @ 5:55 pm

Googling “sqlite3 windows” gives you wrong instructions, so here is my attempt to provide some updated and correct instructions. FYI this is how you install SQLite3 to be usable with Ruby on Rails on Windows XP (as of December 2005)…

1. Install SQLite3 for Windows by downloading the following 2 zip files and unzipping them into /WINDOWS/system32

http://www.sqlite.org/sqlite-3_2_7.zip

http://www.sqlite.org/sqlitedll-3_2_7.zip

If those don’t work try the official download site here
2. gem install sqlite3-ruby
3. Select option 1 to get the latest win32 driver

Acceder a una base de datos SQLite con Java

Archivado en: Programacion en Java — Abelardo Jara @ 5:52 pm

En este pequeño tutorial explicaré la forma de conectar a una base de datos SQLite desde Netbeans con Java.

El primer paso es bajarse el driver JDBC del SQLite de esta pagina web (bajen el que no diga nativo, sino el que esta hecho para Java en general: Nested JVM)

http://www.zentus.com/sqlitejdbc/

Luego instalen en driver dentro del Netbeans (con este paso tambien pueden instalar drivers para MySQL o Postgres)

Vayan al menu “Tools”, “Library Manager”

En la ventana que les aparece elijan “Add Library”

En el nombre que le pongan pueden poner cualquier cosa, en mi caso yo puse “SQLite”

Una vez creada la libreria, hay que añadir el driver.

Con la libreria seleccionada vayan a la derecha y elijan “Add JAR/Folder” y busquen el archivo JAR del driver.

Luego pongan aceptar.

Ahora ya pueden crear un proyecto en Netbeans que tenga acceso a una base de datos SQLite. Sin embargo para que tu proyecto puede usar de la libreria que has creado, tienes que en el Administrador de Proyecto (la pestaña donde dice Project), ir a la carpeta Libraries y hacer click derecho.

En el menu que aparece elije “Add Library” y añades la libreria SQLite que acabas de crear.

Con eso ya podras crear aplicaciones con acceso a SQLite:

Aqui les pongo de ejemplo un programa en Java:

import java.sql.*;

public class Test {
public static void main(String[] args) throws Exception {
Class.forName(“org.sqlite.JDBC”);
Connection conn = DriverManager.getConnection(“jdbc:sqlite:test.db”);
Statement stat = conn.createStatement();
stat.executeUpdate(“create table people (name, occupation);”);
stat.executeUpdate(“insert into people values (‘Gandhi’, ‘politics’);”);
stat.executeUpdate(“insert into people values (‘Turing’, ‘computers’);”);
stat.executeUpdate(“insert into people values (‘Wittgenstein’, ’smartypants’);”);

ResultSet rs = stat.executeQuery(“select * from people;”);
while (rs.next()) {
System.out.println(“name = ” + rs.getString(“name”));
System.out.println(“occupation = ” + rs.getString(“occupation”));
}
rs.close();
conn.close();
}
}

Blog de WordPress.com.