on viernes, 17 de enero de 2014


Que tal, muy buena noche.

Últimamente me he preguntado cómo dejar de postergar las pequeñas tareas que tenemos que realizar en el día a día, he buscado en internet algunos blogs de productividad personal y me ha interesado una técnica llamada pomodoro,  esta palabra significa tomate en italiano, y se trata de un temporizador que utilizan los cocineros.



Usualmente se utilizan 25 minutos, y trata de poder capturar 25 minutos de tu tiempo y concentrarte en una sola tarea, pasados estos 25 minutos se toma un breve descanso de 5 minutos, cuando se junta un total de 4 pomodoros, se descansa 15 minutos.
Y ahora bien, ¿realmente es efectiva esta técnica?

No sé si sea efectiva, no la domino, la estoy comenzando a utilizar y realmente evitar las distracciones es un poco difícil.

Pero creo que con constancia se podría adaptar y a su vez modificar a las necesidades de cada persona.

En el trabajo realmente 25 minutos es una cantidad de tiempo pequeña, lo que hago es que suelo ponerlo de 45 minutos y con un descanso de 10 minutos.

Me ha resultado pero en un 60% de las veces me distraigo, eso suena mal, pero sinceramente mi productividad personal ha mejorado considerablemente ya que se evita la postergación y decidía y yo soy experto en postergar.

La herramienta que he estado utilizando se llama pomodroido: https://play.google.com/store/apps/details?id=net.artifix.pomodroido.free



Y la página donde saco bastante información de productividad es la siguiente: http://canasto.es/blog/


Como dato curioso, tenia mucho sin escribir y sin duda se imaginaran la cantidad interminable de veces que postergaba eso, pura decidía, y de hecho estoy en un pomodoro concentrado y en el inter fui distraído para ir a cenar, así que volví a comenzar la tarea y por fin en mas de 4 meses pude volver a escribir algo.

despues de una interrupcion para cenar, continuo buscando imagenes ilustrativas.
on martes, 1 de octubre de 2013
Muy buen día.


Hoy les comparto un pequeño programa que te permite obtener todos tus archivos con extensión .cs de una carpeta determinada.

lo que tienes que realizar, es crear un proyecto de WPF, y en el MainWindow, tienes que remplazar el codigo tanto del code behind asi como del xaml.

aqui tenemos el xaml que tienes que pegar en tu pantalla MainWindow

<Window x:Class="viwer.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="File Viewer" Height="350" Width="525">
    <Grid>
        <Button Content="Show .cs files" Height="23" HorizontalAlignment="Right" Margin="0,24,12,0" Name="btnGetFiles" VerticalAlignment="Top" Width="114" Click="btnGetFiles_Click" />
        <TextBox Height="23" HorizontalAlignment="Left" Margin="12,24,0,0" Name="txtPath" VerticalAlignment="Top" Width="359" />
        <TextBox Height="246" HorizontalAlignment="Left" Margin="12,53,0,0" Name="TxtFilesBox" VerticalAlignment="Top" Width="479" />
    </Grid>
</Window>

Y aquí tenemos el code-behind:

using System;
using System.Windows;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Documents;

namespace viwer
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void btnGetFiles_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                string path = txtPath.Text;

                string files = String.Empty;

                string[] listOfFiles = Directory.GetFiles(path);

                List<string> listOfNameOfFiles = new List<string>();

                foreach (var file in listOfFiles)
                {
                    FileInfo infoFile = new FileInfo(file);
                    if (infoFile.Name.Contains(".cs"))
                        listOfNameOfFiles.Add(infoFile.Name.Split('.')[0]);
                    
                }

                foreach (string file in listOfNameOfFiles)
                    files += file + "\n";

                TxtFilesBox.Text = files;
            }
            catch
            {
                MessageBox.Show("Error to try to get the files of the current path");
            }
        }
    }
}

Analicemos un poco la siguiente clase invocando a su método estático.

Directory.GetFiles(path)

La clase Directory nos permite utilizar muchas funcionalidades útiles a la hora de manipular directorios de Windows, en este caso, estamos haciendo uso del método estático GetFiles(string path).
Con este método obtendremos todos los archivos con su ruta completa.
Para poder obtener solamente el nombre del archivo, tenemos que hacer uso de otra clase llamada:

FileInfo    

Esta clase tiene una propiedad con nombre Name, es la que nosotros utilizaremos para consultar nuestros archivos “.cs”


Veamos como se ve en ejecución.



viewer
on martes, 10 de septiembre de 2013


Herencia.


Es un pilar del paradigma orientado a objetos que tiene como fin reutilizar componentes entre clases, como también tener una mejor clasificación de objetos y así poder representar en código una parte del mundo real.


Les dejo un link donde pueden leer una definición mucho mas completa de lo que es la herencia:
 

El objetivo de este post es representar los conceptos básicos de la herencia a través del código de una manera digerible y simple

Comencemos:


Implementación de herencia.

public class BaseClass
{
    public BaseClass()
    {
        Console.WriteLine("No message of my BaseClass");      
    }

    public BaseClass(string valueOfBaseClass)
    {
        Console.WriteLine("Constructor of BaseClass with value: {0}", valueOfBaseClass);
    }

    public void MyBaseMethod()
    {
        Console.WriteLine("my method of my base class");
    }
}

En este ejemplo creamos una clase base, como pueden notar, no es una clase abstracta, este tópico se explicara más adelante.



Como podrán observar, esta clase tiene dos constructores, uno con parámetro y el otro sin parámetros, esto es con el fin de identificar ciertas propiedades de herencia al momento de trabajar con este pilar de la programación orientada a objetos.



Tenemos un método público, no es ni virtual ni abstract, esto también se explicara más adelante.



Esto con el fin de hacer más didáctico el ejemplo.



Ahora construiremos una clase concreta que herede las características de nuestra clase anterior.



public class ConcreteClass:BaseClass
{
    public ConcreteClass()
    {
        Console.WriteLine("No message of my ConcreteClass");
    }

    public ConcreteClass(string valueOfConcreteClass)
    {
        Console.WriteLine("Constructor of ConcreteClass with value: {0}", valueOfConcreteClass);
    }

    public ConcreteClass(string valueOfConcreteClass, string valueOfBaseClass):base(valueOfBaseClass)
    {
        Console.WriteLine("Constructor of ConcreteClass with value: {0}", valueOfConcreteClass);
    }

    public void MyConcreteMethod()
    {
        Console.WriteLine("My method of my concrete class");
    }
}

Como verán, la diferencia entre saber aplicar herencia o no saber, está a dos puntos de distancia
 

La sintaxis es la siguiente:

public class ConcreteClass:BaseClass
{
}


A diferencia de la clase anterior, aquí tenemos 3 constructores:

Uno sin parámetros, uno con dos parámetros y otro con solo un parámetro.

Con la herencia, podemos mandar parámetros directamente al constructor base de nuestra clase base, con el fin de que cumpla funcionamiento especifico.

Para pasar argumentos, es necesario usar la palabra reservada base, como esta en el constructor que toma dos parámetros:

    public ConcreteClass(string valueOfConcreteClass, string valueOfBaseClass):base(valueOfBaseClass)

La clase concreta tiene un metodo que solo ella puede utilisar, pero la diferencia es que nuestra clase concreta puede usar todos los metodos publicos, propiedades y los atributos (que esten como protected o internal) de una clase base.

Ahora veamos la implementación de nuestras clases.


using System;

namespace herenciaYpolimorfismo
{
    using System.Threading;

    class Program
    {
        static void Main(string[] args)
        {
            ConcreteClass myConcreteClass = new ConcreteClass();
            Console.ReadKey();

            ConcreteClass myConcreteClass2 = new ConcreteClass("My Message For My Concrete Class");
            Console.ReadKey();

            ConcreteClass myConcreteClass3 = new ConcreteClass("My Message For My ConcreteClass", "My message for my base class");
            Console.ReadKey();

            myConcreteClass.MyBaseMethod();
            myConcreteClass.MyConcreteMethod();
            Console.ReadKey();
        }
    }
}

Al hacer una instancia de una clase concreta, lo primero que se va a instanciar es la clase base, lo podrán ver a continuación.

herencia


 pueden ver tambien este post sobre los objetos y su instancia a una clase: 



Ya por ultimo les dejo todo el código complete para que lo puedan correr en sus máquinas y les puedan quedar más claros los conceptos.


using System;

namespace herenciaYpolimorfismo
{
    using System.Threading;

    class Program
    {
        static void Main(string[] args)
        {
            ConcreteClass myConcreteClass = new ConcreteClass();
            Console.ReadKey();
            Console.WriteLine("-----------------------------------------------------------");

            ConcreteClass myConcreteClass2 = new ConcreteClass("My Message For My Concrete Class");
            Console.ReadKey();
            Console.WriteLine("-----------------------------------------------------------");

            ConcreteClass myConcreteClass3 = new ConcreteClass("My Message For My ConcreteClass", "My message for my base class");
            Console.ReadKey();
            Console.WriteLine("-----------------------------------------------------------");

            myConcreteClass.MyBaseMethod();
            myConcreteClass.MyConcreteMethod();
            Console.WriteLine("-----------------------------------------------------------");
            Console.ReadKey();
        }
    }
}


public class BaseClass
{
    public BaseClass()
    {
        Console.WriteLine("No message of my BaseClass");      
    }

    public BaseClass(string valueOfBaseClass)
    {
        Console.WriteLine("Constructor of BaseClass with value: {0}", valueOfBaseClass);
    }

    public void MyBaseMethod()
    {
        Console.WriteLine("my method of my base class");
    }
}

public class ConcreteClass:BaseClass
{
    public ConcreteClass()
    {
        Console.WriteLine("No message of my ConcreteClass");
    }

    public ConcreteClass(string valueOfConcreteClass)
    {
        Console.WriteLine("Constructor of ConcreteClass with value: {0}", valueOfConcreteClass);
    }

    public ConcreteClass(string valueOfConcreteClass, string valueOfBaseClass):base(valueOfBaseClass)
    {
        Console.WriteLine("Constructor of ConcreteClass with value: {0}", valueOfConcreteClass);
    }

    public void MyConcreteMethod()
    {
        Console.WriteLine("My method of my concrete class");
    }
}

Y bueno, esto seria todo.



Espero que este material resulte didactico y practico para todos aquellos que quieran conocer los conecptos de la programacion orientada a objetos.



Toda opinion y retroalimentación es bienvenida, mientras mas aportemos mejor.




Que pasen buen dia.