2011,jun

Para empezar a programar con Android, es lo que se recomienda por todos los sitios, se necesita el SDK de Java instalado o JDK, el IDE de Eclipse y el SDK de Android.

Instalación de JDK de Java.

Para instalar el JDK de Java, solo tenemos que descargar el programa desde la página de Oracle, solo hace falta descargar el JDK, no es necesario descargarlo junto a nada más, después seleccionamos el sistema donde lo vamos a instalar (Windows, Mac, Linux, etc) y ejecutarlo, no tiene mayor complicación. Si estamos en un sistema Linux, como por ejemplo Ubuntu, no hace falta descargar nada, solo hay que ir a los repertorios e instalarlo desde hay.

Instalación de Eclipse.

Para instalar Eclipse, descargamos el programa desde la página de Eclipse, lo descomprimimos en la carpeta que queramos y listo. No hace falta instalar nada, ya viene listo para ejecutarse directamente desde la carpeta donde se descomprime. En Linux, podemos hacerlo de dos maneras, de esta forma o desde los repertorios de Linux.

Hay mas ide’s para programar tanto en Java (para Java a mi personalmente me gusta mas NetBeans) como para programar en Android. Pero el que mejor integrado esta en estos momentos es Eclipse.

(más…)

Tagged with:  
2011,may
W

Como mandar un e-mail con c#

in Sin categoría, by admin

Para mandar un mensaje utilizando c#, deberemos añadir los siguientes “using”

   1: using System.Net;

   2: using System.Net.Mail;

Ahora tenemos acceso a MailMessage, que nos permite configurar todo lo necesario para crear el mensaje, es decir, configurar para quien es el mensaje, de que dirección se manda, el asunto, el cuerpo del mensaje, en formato texto normal o en formato html, los ficheros adjuntos que vamos a mandar con el mensaje, y demás información concerniente al mensaje. También tendremos acceso a SmtpClient donde se fija el servidor que vamos a utilizar para mandar el mensaje, y NetworkCredential donde pondremos el nombre de usuario y contraseña si el servidor que utilizamos lo requiere.

Forma de utilizar MailMessage

   1: MailMessage Mensaje = new MailMessage();

   2:

   3: Mensaje.From = new MailAddress("Direccion@QuienLoManda.com");

   4: Mensaje.To.Add(new MailAddress("Direccion@AquienSeManda.com"));

   5: Mensaje.Subject = "Asunto del mensaje";

   6:

   7: // El cuerpo del mensaje esta en formato html

   8: Mensaje.IsBodyHtml = true;

   9:

  10: // Creamos una variable para guardar el cuerpo del mensaje

  11: // Se puede cargar directamente en la variable del objeto

  12: String strHTML;

  13: strHTML = "<HTML>";

  14: strHTML = strHTML + "<HEAD></HEAD>";

  15: strHTML = strHTML + "<BODY>";

  16: strHTML = strHTML + "Cuerpo del mensaje";

  17: strHTML = strHTML + "</BODY>";

  18: strHTML = strHTML + "</HTML>";

  19: // Pasamos el cuerpo del mensaje al mensaje

  20: Mensaje.Body = strHTML;

  21:

  22: // Creamos el objeto que nos permite adjuntar ficheros al mensaje

  23: Attachment attachFile = new Attachment(tbFichero.Text);

  24: // Se lo pasamos al mensaje

  25: Mensaje.Attachments.Add(attachFile);

Configuración del servidor SMTP para enviar el mensaje

   1: SmtpClient clienteSmtp = new SmtpClient("Servidor SMTP");

   2: // Si nuestro servidor necesita identificarnos le pasamos esto

   3: // Si permite conexiones anonimas no hace falta ponerlo

   4: clienteSmtp.Credentials = new NetworkCredential("usuario", "contraseña");

   5:

   6: // Enviamos el mensaje

   7: try

   8: {

   9:     clienteSmtp.Send(Mensaje);

  10: }

  11: catch (Exception ex)

  12: {

  13:     // Si ha ocurrido un error al enviar el mensaje mostramos el erros producido

  14:     Console.WriteLine(ex.Message);

  15: }

Con esto ya tenemos un sencillo cliente para mandar e-mail.

 
2011,abr
W

Creación de hilos en c#

in Sin categoría, by admin

La creación de hilos en c# es relativamente sencillo. Lo primero que tenemos que hacer es agregar el namespace donde se encuentra las funciones de manejo de los hilos

using System.Threading;

Creamos el manejador del hilo.

Thread hilo1;

Le asignamos la funcion que queremos que funcione en otro hilo.

hilo1 = new Thread(new ThreadStart(funcion1));

Y lo arrancamos

hilo1.Start();

Si lo que buscamos es realizar una función que se ejecute en otro hilo, y que no tenga ningún tipo de interacción con el formulario o el usuario, con esto valdría. Pero como eso no es lo normal. A partir de hay es cuando se complica la cosa. Aunque una vez que se entiende el funcionamiento es relativamente sencillo su manejo.

Ejemplo de lo visto.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Threading;

namespace WindowsFormsApplication18
{
    public partial class Form1 : Form
    {

        // Funcion que queremos ejecutar en otro hilo
        private void funcion1()
        {
            for (int i = 0; 1 < 10; i++)
            {
                // Hacemos un pausa de 1 segundo (1000 milisegundos)
	        Thread.Sleep(1000);
            }
        }

        // Creamos el hilo
        Thread hilo1;

        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // Inicializamos el hilo con la funcion deseada
	    hilo1 = new Thread(new ThreadStart(funcion1));

            // Lo arrancamos
            hilo1.Start();
        }

        private void Form1_FormClosed(object sender, FormClosedEventArgs e)
        {
            // Si hemos creado el hilo
	    if (hilo1 != null)
            {
                // Si el hilo esta activo
	        if (hilo1.IsAlive)
                {
                    // Abortamos la ejecucion del hilo
		    hilo1.Abort();
                }

            }

        }
    }
}
 
2010,nov

Función que valida si el contenido de una cadena es una dirección IP correcta. Solo comprueba que el formato sea xxx.xxx.xxx.xxx, no comprueba que los numeros dentro de los bloques de la dirección esten dentro del rango de las ips (que sea mayor de 0 y menor de 256).

function IsWrongIP(ip: string): Boolean;
var
z, i: byte;
st: array[1..3] of byte;
const
ziff = ['0'..'9'];
begin
st[1]  := 0;
st[2]  := 0;
st[3]  := 0;
z      := 0;
Result := False;
for i := 1 to Length(ip) do if ip[i] in ziff then
else
begin
if ip[i] = '.' then
begin
Inc(z);
if z < 4 then st[z] := i
else
begin
IsWrongIP := True;
Exit;
end;
end
else
begin
IsWrongIP := True;
Exit;
end;
end;
if (z <> 3) or (st[1] < 2) or (st[3] = Length(ip)) or (st[1] + 2 > st[2]) or
(st[2] + 2 > st[3]) or (st[1] > 4) or (st[2] > st[1] + 4) or (st[3] > st[2] + 4) then
begin
IsWrongIP := True;
Exit;
end;
z := StrToInt(Copy(ip, 1, st[1] - 1));
if (z > 255) or (ip[1] = '0') then
begin
IsWrongIP := True;
Exit;
end;
z := StrToInt(Copy(ip, st[1] + 1, st[2] - st[1] - 1));
if (z > 255) or ((z <> 0) and (ip[st[1] + 1] = '0')) then
begin
IsWrongIP := True;
Exit;
end;
z := StrToInt(Copy(ip, st[2] + 1, st[3] - st[2] - 1));
if (z > 255) or ((z <> 0) and (ip[st[2] + 1] = '0')) then
begin
IsWrongIP := True;
Exit;
end;
z := StrToInt(Copy(ip, st[3] + 1, Length(ip) - st[3]));
if (z > 255) or ((z <> 0) and (ip[st[3] + 1] = '0')) then
begin
IsWrongIP := True;
Exit;
end;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
if IsWrongIP(eIP.Text) then
ShowMessage('No es una IP')
else
ShowMessage('Es una IP valida');
end;
 
2009,may
W

Distancia geodésica entre dos puntos

in Sin categoría, by admin

Cuando hablamos de la distancia entre dos puntos solemos referirnos a la distancia en linea recta entre esos dos puntos. Sin embargo cuando queremos calcular la distancia entre dos puntos situados sobre una esfera (en mi caso dos puntos sobre la superficie de la tierra) estamos hablando de la distancia geodésica entre esos dos puntos.

Solo pongo esta función aqui porque en el trabajo necesito calcular la distancia geodésica entre dos puntos y estaba usando una librería COM que era excesivamente lenta para lo que necesitaba (4 milisegundos frente a 1 microsegundo). No tengo ni idea de como funciona lo que pongo debajo (si tengo tiempo lo miraré más detenidamente y trataré de explicarlo (hasta donde yo se consiste en aplicar la formula de la longítud de arco de una circunferencia (aplicando además en este caso una desviación, ff, por el achatamiento de la tierra) dadas la latitud y longitud de cada punto)). La función está adaptada de un código de Visual Basic de Jay Tanner para poder usarla en Delphi.

function GetDistanceBetween(long1, lat1, long2, lat2 : Double) : Double;
var
  F,G,L : Double;
  SF, SG, SL,
  CF, CG, CL : Double;
  W1, W2 : Double;
  S, C : Double;
  O,R,D : Double;
  H1, H2 : Double;
  ff : Double;
  temp : Double;
begin
  ff := 1 / 298.257;
  F := (lat1 + lat2) / 2;
  G := (lat1 - lat2) / 2;
  L := (long1 - long2) / 2;

  SF := Sin(F*Pi/180);
  SG := Sin(G*Pi/180);
  SL := Sin(L*Pi/180);
  CF := Cos(F*Pi/180);
  CG := Cos(G*Pi/180);
  CL := Cos(L*Pi/180);

  W1 := sqr(SG * CL);
  W2 := sqr(CF * SL);
  S := W1 + W2;

  W1 := sqr(CG * CL);
  W2 := sqr(SF * SL);
  C := W1 + W2;
  O := ArcTan(Sqrt(S/C));
  R := Sqrt(S*C) / O;
  D := 2 * O * 6378.14;

  H1 := (3*R-1) / (2*C);
  H2 := (3*R+1) / (2*S);

  W1 := sqr(SF * CG) * H1 * ff + 1;
  W2 := sqr(CF * SG) * H2 * ff;

  result := D * (W1 - W2);
end;

Origen: http://www.stackframe.net/es/content/01-2009/distancia-geodesica-entre-dos-puntos