on miércoles, 21 de diciembre de 2011
En el trabajo me encargaron que diseñara e implementara una clase para enviar correos para visual studio 2010 en el lenguaje de C#, veamos como la fui armando, primero que nada, haremos una clase llamada

                                                          ManejadorDeCorreoElectronico

una vez tengamos nuestra clase, vamos agregar la siguiente referencia:

                             using System.Net;
                             using System.Net.Mail;


Esto es para poder utilizar las clases siguientes:

                             MailMessage, SmtpClient y Attachment


Estas clases cuentan con los metodos y propiedades necesarias para poder enviar correos electronicos, la clase MailMessage trae propiedades como Subject, Body, Priority entre otras mas.

La clase SmtpClient cuenta con propiedades basicas propias del ambito de un cliente Smtp, como lo es el puerto y el host.

Creando clase ManejadorDeCorreoElectronico:



using System;
using System.Net.Mail;
using System.Net;

namespace Utilerias
{
    public class ManejadorDeCorreoElectronico
    {
        private MailMessage CorreoElectronico;

        private SmtpClient Smtp;    
     

        // nota: el constructor por defecto utilizara el cliente Smtp de gmail
        public ManejadorDeCorreoElectronico()
        {
         
            CorreoElectronico = new MailMessage();
            Smtp = new SmtpClient("smtp.gmail.com", 587);          
            Smtp.EnableSsl = true;          
            CorreoElectronico.Priority = MailPriority.Normal;
            CorreoElectronico.IsBodyHtml = false;
        }

        public ManejadorDeCorreoElectronico(string host, int port)
        {
            CorreoElectronico = new MailMessage();
            Smtp = new SmtpClient(host, port);
            Smtp.EnableSsl = true;
            CorreoElectronico.Priority = MailPriority.Normal;
            CorreoElectronico.IsBodyHtml = false;
        }
     

 public void EnviarCorreo(string correoFuente, string passowrd,string nombreYapellidos, string Correodestinatario, string subject, string body)
        {
            try
            {
                Smtp.Credentials = new NetworkCredential(correoFuente, passowrd);
                CorreoElectronico.Subject = subject;
                CorreoElectronico.Body = body;
                CorreoElectronico.From = new MailAddress(correoFuente, nombreYapellidos);
                CorreoElectronico.To.Add(new MailAddress(Correodestinatario));
                Smtp.Send(CorreoElectronico);              
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

        public void EnviarCorreo(string correoFuente, string passowrd, string nombreYapellidos, string                                     Correodestinatario, string subject, string body, string fileName)
        {
            try
            {
                Smtp.Credentials = new NetworkCredential(correoFuente, passowrd);
                CorreoElectronico.Subject = subject;
                CorreoElectronico.Body = body;
                CorreoElectronico.From = new MailAddress(correoFuente, nombreYapellidos);
                CorreoElectronico.To.Add(new MailAddress(Correodestinatario));
                CorreoElectronico.Attachments.Add(new Attachment(fileName));
                Smtp.Send(CorreoElectronico);              
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }

    }
}


El método EnviarCorreo esta sobrecargado, uno para enviar un simple correo y otro para agregar un attachment.

Tambien el constructor esta sobrecargado, ya que el constructor pordefecto, esta configurado con el host y el puerto de gmail.

y el otro constructor, recibe el host y el puerto de un determinado servidor de correos.


Ahora bien, veamos como implementamos nuestra clase.

1.- crear una aplicacion windows form, y agregar un boton y le damos doble click:


         private void button1_Click(object sender, EventArgs e)
        {
            ManejadorDeCorreoElectronico correo = new ManejadorDeCorreoElectronico();


            try
            {
                correo.EnviarCorreo("user@gmail.com", "password", "Fernando Hoyos", "userDestino@dominio.com", "correo                       prueba", "este es un correo de prueba enviado por c#, no te malviajes");
                MessageBox.Show("ya se armo el correo");
            }
            catch (Exception ex)
            {
                MessageBox.Show("no se armo ni maiz" + ex.Message);
            }      
         }



Enjoy =)
on martes, 20 de diciembre de 2011
El día de hoy, unos compañeros de trabajo me pasaron este software, sin duda, lo que me hacia falta, este software te permite hacer un seguimiento de tus actividades diarias y clasificar cada actividad de acuerdo a lo que estés haciendo.

otro compañero comento que era algo obsesivo estar midiendo cada actividad incluso el ir al baño, tal ves lo sea, pero nos da una pauta de cuanto tiempo estamos invirtiendo en un proyecto, incluyendo las necesidades fisiológicas como ir al baño.

Enseguida viene la imagen de la pantalla principal de hamster time tracking.

Hamster time tracking

Otra de sus funcionalidades principales es que tiene estadísticas, primero tendrá que pasar una semana para hacer una comparación del tiempo que invertiste en tu día de trabajo.

Cuenta con un overview que te permite ver el tiempo invertido en un dia de trabajo, cosa que en lo personal me parece interesante.

Cabe mencionar que es open source, y esta disponible para windows, originalmente se creo para correr bajo gnome, pero hay una versión para windows.

Este software lo pueden descargar directamente de del siguiente link: http://howle.org/hamster-setup.exe

Tambien pueden visitar el sitio donde se sigue paso a paso el desarrollo de dicho programa para la versión de windows: https://bugzilla.gnome.org/show_bug.cgi?id=541316#c6

Que tal, se me presento la oportunidad con firebird y .net, y la primer duda es como armar un connection string para firebird en .net, navegando por la web me tope con una pagina  http://www.connectionstrings.com.

el connection string de firebird para .net es el siguiente:

User=SYSDBA;Password=masterkey;Database=SampleDatabase.fdb;DataSource=localhost; Port=3050;Dialect=3; Charset=NONE;Role=;Connection lifetime=15;Pooling=true; MinPoolSize=0;MaxPoolSize=50;Packet Size=8192;ServerType=0;


enjoy =)
on domingo, 18 de diciembre de 2011
por Fernando Hoyos y Omar Alanis:




Requerimientos:
          Instalación de Ubuntu 11.04 



Requisitos:


  • Actualización de los repositorios de Ubuntu 11.04

                                   apt-get install update


  • Instalación de Apache 2

                                   sudo apt-get install apache



  • Probamos el Servidor Apache

                                  Iniciamos apache : /etc/init.d/apache2 start

En el navegador probamos el servidor con la dirección local 127.0.0.1 



Screenshot


Instalación


  • Subversión y Herramientas

                           sudo apt-get install subversion subversion-tools


  • Verificamos los módulos dav y dav_svn

                          a2enmod dav

cuando activamos dav, estamos asegurando que solo usuarios autorizados por subversión puedan accesar al repositorio.

Si no están instalados, los instalamos

                         sudo apt-get install libapache2-svn

Para asegurar los cambios reiniciamos Apache

                         /etc/init.d/apache2 restart



Configuración:

sin duda la parte mas difícil es la configuración, si no tenemos cuidado podemos pasar por un mal rato.

Agregamos un grupo para la subversión

                       sudo groupadd subversion

es muy importante crear un grupo especial para subversión por cuestión de los permisos de los usuarios que estén autorizados.


Ahora creamos el archivo que contendrá un password para el administrador de subversion

                       sudo htpasswd -c /etc/apache2/dav_svn.passwd user

aqui estamos creando un usuario y ademas con la cerradura -c estamos creando a su vez el archivo dav_svn.passwd, que es el que contendrá los usuarios autorizados a su vez que sus contraseñas, obviamente encriptadas por cuestión de seguridad.

Luego creamos el repositorio donde se versionara nuestro proyecto en los directorios correspondientes

                cd/var/www
                mkdir repos
               svnadmin create repositorioejemplo
               cd  repositorioejemplo (entramos al repositorio)

Despues de esto le damos los permisos necesarios que necesita el repositorio para que los usuarios de subversion puedan accesar sin problemas.

vamos a utilizar el comando chown que sirve para agregar permisos a un determinado usuario o grupo o ambos para que puedan accesar al repositorio

               sudo chown -R www-data:subversion /var/www/repos/repositorioejemplo 

               sudo chmod -R 770 /var/www/repos/repositorioejemplo

Tal ves nos pueda sacar de onda la cerradura -R, pero lo unico que hace es que asigne los permisos y herede a todos los archivos o subcarpetas del repositorio.

aqui estamos asignando permisos al repositorio que el usuario de apache (www-data) y al grupo subversión para que todos los usuarios que accesen via web se autentiquen con su usuario del grupo subversión.

Hay que tener mucho cuidado ya que si asignamos de forma errónea los permisos no nos dejara accesar al repositorio.


si todo a salido bien, nos debe de aparecer la siguiente imagen.




repositorioejemplo


y si algo salio mal, nos debería de aparecer la siguiente imagen:





error

Importar nuestro primer proyecto al repositorio.


Una vez que tenemos configurado nuestro repositorio, ahora lo que tenemos que hacer es importar nuestro proyecto.


para esto, lo primero que tenemos que hacer es crear una carpeta, no importa en la posicion que estemos.


             mkdir proyecto1


Accesamos al folder proyecto1


           cd proyecto1
   
y luego lo que tenemos que hacer es crear un archivo y ponerle una descripción de ejemplo.
   
    nano ejemplo


nano


ahora si ya tenemos nuestro primer proyecto, lo que tenemos que hacer ahora es hacer el primer import al repositorio:




           sudo svn import proyecto1/ file:///var/www/repos/repositorioejemplo/proyecto1


tambien lo podemos hacer por el protocolo http:




           sudo svn import proyecto1/ http://localhost/svn/repositorioejemplo/proyecto1












import


Hecho esto, veremos en la consola que ya se hizo el primer commit:


addIngCommit


creo que es necesario aclarar que existen varios protocolos para utilizar svn, uno de ellos es el file:/// este protocolo solo se utiliza localmente en el servidor.


tambien tenemos el protocolo http:// este protocolo es el que nosotros utilizaremos con dav, para accesar via web.


tambien existe el protocolo https:// este protocolo es que se utiliza con encriptacion ssl, este no lo utilizaremos, tal ves en una chance me anime a realizar una instalacion y configuracion usando certificados ssl.


tambien contamos con el protocolo svn, pero no lo e utilizado.


Ya una vez hecho el import, es necario darle permisos, por que vemos que pasa cuando intentamos accesar al repositorio una vez hecho el import local.


vemos que pasa si no cambiamos los permisos en el repositorio.


primero que nada, accesamos via url: 127.0.0.1/svn/repositorioejemplo/proyecto1
y nos autenticamos.


autenticar


una vez autenticados, nos saldra este error:


error


pero pues no hay que preocuparnos, la solucion es darle nuevamente los permisos al repositorio.




         sudo chown -R www-data:subversion /var/www/repos/repositorioejemplo 

         sudo chmod -R 770 /var/www/repos/repositorioejemplo




Tengo que confezar que tardamos como 5 dias para resolver este error.


Ahora solamente necesitamos volver a accesar al repositorio.


Y veamos que nos sale:


revision1



on viernes, 18 de noviembre de 2011
Lo unico que tenemos que hacer es abrir una terminal e ingresar el siguiente comando:

sudo passwd root


hecho esto, nos autenticamos como administrador del sistema e ingreamos el nuevo password de super usuario root.


Listo!!!

 

on martes, 25 de octubre de 2011

Que tal, ahora vamos a ver la forma de como graficar cuadros en c sharp.


  • Lo primero que necesitas es crear un nuevo proyecto de tipo windows form

  • Una vez que tenemos creado nuestro proyecto, agregamos un menuStrip en nuestra forma y agregamos un elemento llamado Generar cuadro.

menuStrip
  • Ahora vamos a ver como crear un cuadro en c#.
lo primero que necestamos saber, es que en c-sharp tenemos la clase Graphics, la cual nos permite hacer una instancia en base a una instancia de la clase Form.

 Graphics grafics = this.CreateGraphics();

Aquí estamos creando una instancia de la clase Graphics, notese que no se usa la palabra reservada new para hacer la instancia, si no que la forma o cualquier clase que herede de Form tiene un metodo llamado CreateGraphics(); que nos permite generar una instancia de un objeto Graphics.

Una vez teniendo nuestro objeto Graphics, es necesario saber como dibujuar un cuadro. Para eso es necesario un método llamado GraficarCuadro(int x, int y, int width, int height, Color color), y lo agregamos al archivo .cs de nuestra forma.

        private void GraficarCuadro(int x, int y, int width, int height, Color color)
        {
            Graphics grafics = this.CreateGraphics();
            Rectangle rectangulo = new Rectangle(x, y, width, height);
            SolidBrush brush = new SolidBrush(color);
            Pen pluma = new Pen(brush);
            grafics.FillRectangle(brush, rectangulo);
        }

Con este método podemos graficar cuadros y rectángulos de un determinado tamaño y color. pero lo que nos interesa a nosotros es como generar una cantidad aleatoria de cuadros en la pantalla, para esto, es necesario introducir el siguiente código en nuestro evento onclick de nuestro elemento del menuStrip, en mi caso, el nombre del item del menuStrip se llama generarCuadrosALoEstupido.

        private void generarCuadrosALoEstupidoToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Random random = new Random(DateTime.Now.Millisecond);

            for (int i = 0; i < 50; i++) // nota1
            {
                GraficarCuadro(random.Next(10, this.Width), random.Next(10, this.Height), 
                random.Next(1, 200), random.Next(1, 200),
                Color.FromArgb(random.Next(0, 256),random.Next(0, 256),random.Next(0, 256)));
                Thread.Sleep(300);
            }
        }

nota1: notese que la cantidad de cuadros que se graficaran sera de 50, aqui se le puede cambiar de manera que el usuario indique cuantos cuadros se necesitan graficar.


  • El programa en tiempo de ejecución:

generarCuadrosAloEsutpido
on sábado, 15 de octubre de 2011
Que tal, en esta ocasión vamos a crear una clase llamada Matriz, la cual va a ser una plantilla para cualquier tipo de dato en c-sharp.

Dicha clase va a tener un arreglo bidimensional de registros, el numero de renglones y de columnas.

Aquí les dejo el código:

//--------------------------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.Text;

public class Matriz<T>
{
    private T[,] registros;

    private int numeroRenglones;

    public int NumeroRenglones
    {
        get { return numeroRenglones; }
        set { numeroRenglones = value; }
    }

    private int numeroColumnas;

    public int NumeroColumnas
    {
        get { return numeroColumnas; }
        set { numeroColumnas = value; }
    }

    public Matriz(int renglones, int columnas)
    {
        NumeroRenglones = renglones;
        NumeroColumnas = columnas;
        this.registros = new T[renglones, columnas];

    }

    public T this[int renglon, int columna]
    {
        get
        {
            return registros[renglon, columna];
        }
        set
        {
            registros[renglon, columna] = value;
        }
    }
}
//-----------------------------------------------------------------------------------------

Lo interesante de esta clase es la forma de asignación al objeto Matriz, para asignar directamente al objeto un registro, se hace uso del método "public T this[int renglon, int columna]", veamos un ejemplo de como usar esta clase:

Matriz<bool> tableroBooleano = new Matriz<bool>(8, 8);
tableroBooleano[0,0] = false;

Un Saludo...

Buena Vibraaaa!!!!
on miércoles, 12 de octubre de 2011
Que tal, en esta ocasión vamos a trabajar en la graficacion de un simple tablero de ajedrez en c sharp.

1.- Primero que nada necesitamos crear un nuevo proyecto de tipo windows form


2.- Ahora en nuestra forma, agregamos un MenuStrip


3.- Implementación del código necesario para graficar un tablero de ajedrez.


        public void DibujarTableroDeAjedrez(Form forma)
        {
            bool blanco = true;
            int anchoCuadricula = 30;
            int x = 40, y = 40;
            for (int i = 0; i < 8; i++)
            {
                for (int j = 0; j < 8; j++)
                {
                    if (blanco)
                    {
                        FxTools.GraficarCuadro(forma, Color.FromArgb(0, 255, 0), x, y, anchoCuadricula);
                        blanco = false;
                    }
                    else
                    {
                        FxTools.GraficarCuadro(forma, Color.FromArgb(0, 0, 0), x, y, anchoCuadricula);
                        blanco = true;
                    }
                    x +=31;
                }
                if (blanco)
                    blanco = false;
                else
                    blanco = true;
                x = 40;
                y += 31;
            }
        }

//-----------------------------------------------------------------------------------------------------------
este es el código necesario para graficar un tablero de ajedrez, como ven, tenemos de una bandera que nos servirá cuando pintar un cuadro de color blanco y cuando no, tenemos un ancho de cuadricula, que por defecto es 30 (por fines didácticos se estableció hardcode los valores de "anchoCuadricula", "x" y de "y".

Contamos con dos bucles que nos servirán para recorrer la cuadricula, la dimensión de un tablero de ajedrez es de 8 x 8, que nos da un total de 64 casillas.

en cada casilla se establecerá un color, ya sea blanco o negro, todo esto va a depender de la bandera "blanco", para obtener el color blanco, lo podemos obtener de varias formas, en esta ocasión se obtiene por medio del método estático  FromArgb de la clase Color


En el caso de graficar el color, para el color blanco se opta poner el color verde (0,255,0) y en el caso de las casillas oscuras, el color negro (0,0,0)


4.- creando la clase FxTools e implementando el metodo GraficarCuadro



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


namespace EjemploBlog
{
    class FxTools
    {
        public static void GraficarCuadro(Form forma, Color color, int x, int y, int ancho)
        {


            SolidBrush solidBrush = new SolidBrush(color);
            Graphics g = forma.CreateGraphics();
            g.FillRectangle(solidBrush, x, y, ancho, ancho);
        }
    }
}


5.- accesando al metodo DibujarTableroDeAjedrez(Form forma)


Ya para terminar con este ejemplo, vamos a mandarlo llamar de nuestro MenuStrip:



        private void tableroDeAjedrezToolStripMenuItem_Click(object sender, EventArgs e)
        {
            DibujarTableroDeAjedrez(this);
        }



6.- el programa en tiempo de ejecución 



tableroDeAjedrez
on lunes, 3 de octubre de 2011

Actitud proactiva.
la primer cualidad que todos debemos de tener, en lo personal, el exito de nuestro proyecto depende de tener buena actitud. Afrontar las adverisdades de una manera efectiva, no dejarnos consumir por la presión abrumadora. Tener siempre una sonrisa en el rostro, al final de cuentas estamos haciendo lo que mas nos gusta... “Software”.

Estandarización de nombres de variables, métodos y clases.
supongamos que tenemos que revisar el código de algún colega de trabajo, con lo cual tenemos que revisar sobre lo que ha estado trabajando. analizando el código llegamos a la cuenta de que no sabemos lo que se hace, ya que solo encontramos nombres de variables mal definida,por ejemplo: valor1, valor2, valor3, cantidad1, cantidad2, cantidad3, resultado2, col1, col2, col3. Estoy de acuerdo de que nuestro colega encuentra una manera clara de ver el significado al nombre de sus variables, pero ese código debe de ser completamente legible por otros desarrolladores. Es por lo cual se tiene que hacer una estandarización de nombres de variables, métodos y clases. sin olvidar seguir la estandarización de cada lenguaje de programacion. en el caso de java, los métodos siempre comienzan con minúscula. en c# .net  los métodos comienzan siempre con mayúscula.
En cuanto a los métodos, es recomendable que se asigne un nombre significativo y completamente claro. por ejemplo:

“GenerarFacturaElectronica(Factura factura); “
al leer este método, nos queda claro de que se va a generar una factura electronica que recibe como argumento a un objeto de la clase Factura; Ademas que no hace falta poner comentarios de lo que hace dicho metodo.

Adoptar el paradigma Orientado a Objetos.
con el paradigma orientado a objetos tenemos la ventaja de reutilizar codigo, todo esto con el fin de aprovechar al máximo los pilares de la programación orientada a objetos
  • Abstracción
  • Encapsulacion
  • Herencia
  • Polimorfismo
  • Introspección
  • Reflexión  
Diseñar e implementar patrones de diseño en todos los proyectos que lo ameriten.
los patrones de diseño nos pemiten la venteja de resolver problemas complejos de programacion que tienen una cierta conducta, en base a esta peculiaridad podemos concretar en un mejor diseño, abstrayendo la escénica en un patron.

Identar el código.
Es muy importante tener identado nuestro código. Con esto se cumple un estándar entre
los programadores de software. Asi cuando alguien vea tu código, este se familiarizara           mucho mas fácil con el código. Ademas de aportar belleza en la estructura del codigo.

Versionar
Versionar nuestro software con herramientas de servidor de versiones como tortoise.
Con estas herramientas nos olvidamos de la preocupación de los respaldos, haciendo esto mas ágil el proceso de desarrollo.

Generar herramientas
Es muy buena practica ir armando nuestra colección de clases que nos permitan hacer el trabajo de una manera mas rápida y eficiente.
Mientras nos encontremos en un proceso de generación de herramientas, debemos adquirir la buena practica de ir acomodando nuestras clases en librerías (dll). Esto con el fin de poder exportar nuestras herramientas de un determinado lenguaje a otro.

Imaginacion.
Desarrollar software, tocar guitarra, pintar al oleo, escribir un libro, escribir poesia, entre muchas cosas mas. Sin la imaginacion no se llegara muy lejos en nuestra vocacion.


fuentes:
Experiencia personal y experiencia de otros desarrolladores que me han ayudado en adoptar buenas                      tecnicas de programacion
on domingo, 11 de septiembre de 2011
que tal, aqui les tengo un pequeño video tutorial sobre como manipular imagenes con extension .bmp




aqui les pongo una liga donde pueden obtener los fuentes del proyecto:
http://www.mediafire.com/?bc0ve8kixfhv55w