Iver's web place

Navegador de Archivos

Calendario del Blog

February 2012
Sun Mon Tue Wed Thu Fri Sat
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 1 2 3

General

Programación

  • Evitar commits sin comentarios en subversion.

    Cuando estamos desarrollando un sistema con diversos desarrolladores, ya sea de manera informal o formal siempre es bueno seguir las best practice [1] para evitar hacer el trabajo dos veces o complicarnos la existencia con errores comunes.

    Uno de los errores más comunes que tenemos a la hora de subir cambios a un repositorio en subversión es la falta de comentarios, para esto, cuando somos administradores de un respositorio de este tipo bien podemos solicitar al desarrollador que se ingrese un mensaje antes de poder hacer un commit.

    Esto lo encontré en un blog en la red (que por cierto no lo volví a encontrar) y ahora lo posteo aquí para que no se me olvide y espero que a alguién más también le sea de utilidad.

    En el directorio de nuestro repositorio se encuentra un subdirectorio llamado hooks , ahí es donde tenemos que poner el siguiente script para poder evitar los commits:

     
    :: Evitamos la impresión en pantalla de mensajes.
    @echo off
     
    setlocal
     
    set "REPOS=%~1"
    set "TXN=%~2"
     
    :: Aquí se asegura que el commit contiene algún texto
    :: En este caso se tiene que cambiar la url del svnlook de acuerdo a donde
    :: este instalado el subversion
    for /f "tokens<img src="plugins/Emoticons/images/face-kiss.png" border="0" alt="face-kiss.png " width="16" height="16" />" %%i in ('C:\ARCHIV~1\SUBVER~1\bin\Svnlook.exe log -t "%TXN%" "%REPOS%"') do set "LOGMSG=%%i"
    if not "%LOGMSG%"=="" exit 0
     
    echo. 1>&2
    echo Tu actualización ha sido cancelada debido a que no ingresaste texto alguno! 1>&2
    exit 1
     
    Por último solo tenemos que guardarlo con el nombre de pre-commit.cmd para que el svn sepa que tiene que ejecutar ese script antes de hacer un commir.

    [1] http://en.wikipedia.org/wiki/Best_practice

    Referencias interesantes:

    http://es.wikipedia.org/wiki/SVN

    http://svn.collab.net/repos/svn/trunk/doc/user/svn-best-practices.html

    http://svnbook.red-bean.com/en/1.1/svn-book.html
  • Evitar recompilar por cambios simples.

    El otro día encontré un artículo que citaba al programador de raza y me doy cuenta de que me inclino poco a poco hacia ese perfil y espero algún día llegar a cubrirlo perfectamente, por lo mientras he dedicado un poco de mi tiempo para investigar sobre como realizar un mejor código con pocas modificaciones.

    En esta ocasión me puse a modificar el código para que al subir los datos a producción no se tenga que estar recompilando porque falló una u otra cadena de conexión o que la ip no corresponde o detallitos como esos.

    Primero veamos la conexión a la base de datos, muchas veces por la facilidad y rápidez de copiar y pegar no nos damos cuenta que nuestro código se está duplicando considerablemente y para colmo no nos interesa darle el mentado refactoring. En el caso de las cadenas de conexión de bases de datos bien podemos usar el archivo de configuración que brinda el .NET (web.config).

    Es muy simple, unicamente se tiene que definir lo siguiente:

     
    <appsettings>
     ...
                    <add key="keyName" value="Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=MiBase;Data Source=MiServer;"></add>
    ...            
    </appsettings>
     
    Después de eso en nuestro código usamos el namespace System.Configuration y asignamos a una variable de tipo string el valor del key que contiene la conexión:

     
           string _dbConnection = ConfigurationSettings.AppSettings["keyName"];
     
    con esto es más que suficiente para poder utilizar a cadena que viene en el archivo de configuración y además puedes modificarla al vuelo sin tener que compilar nuevamente tu código.

    Otro problema que puede surgir es que constantemente tengas que estar cambiando la URL de la máquina de pruebas a la de producción. Para esto he encontrado una forma simple de hacerlo y claro si alguién más lo ha hecho de una manera diferente por favor comentalo para aprender face-wink.png .

     
      // Se obtiene el nombre de la máquina
      string hostName = System.Net.Dns.GetHostName();
      // Se obtiene la ip de un array porque puede tener más de una ip asignada
      string stringIP = System.Net.Dns.GetHostEntry(hostName).AddressList[0].ToString();
     
    Después de esto ya puedes usar la variable stringIP para concatenarla en cualquier parte de tu código.

    Simple, ¿o no?, que nos cuesta darle una pulidita a ese código y evitar unas cuantas líneas que no nos serviran de nada. Ya si andas medio inspirado puedes generar una clasesilla y poner tus diversas configuraciones para conectarte a las bases de datos.

    Si, también existen FrameWorks dedicados a eso pero esa es otra historia.
  • Configurando log4net almacenando en archivos.

    Si alguna vez has realizado algun desarrollo y has tenido problemas al ponerlo en produccion sabras que no puedes debuguear en tu servidor de produccion o al menos es algo complicado realizarlo.

    Para este tipo de problemas y sobre todo para una buena administracion de tu sistema es necesario que siempre tengas un log de las cosas que pasan. Recientemente implemente log4net con .NET en el trabajo y a continuacion pretendo poner unas pocas configuraciones que me han sido de ayuda.


    1. Descargar log4net de la siguiente liga: http://logging.apache.org/log4net/downloads.html

    1. Agregar el binario a las referencias, para esto buscamos la dll apropiada que se encuentra en el directorio bin del comprimido obtenido en el paso anterior. De acuerdo con el framework que se trabaje se navega en los directorios y encontraremos una dll y un archivo xml, dichos archivos los copiamos y pegamos en el directorio bin de nuestro proyecto. Si usas un IDE como MonoDevelop o VS solo basta darle boton derecho en el navegador de nuestra solucion y seleccionar agregar referencias.


    1. Para configurarlo se requiere agregar algo como lo siguiente en el archivo web.config si estas desarrollando un sitio web o en app.config si es una aplicacion:

     
     
    <configuration>
      <configsections>
        <section type="log4net.Config.Log4NetConfigurationSectionHandler, log4net-net-1.0"></section>
      </configsections>
     
     
      <log4net>
       
        <appender type="log4net.Appender.ConsoleAppender">
          <layout type="log4net.Layout.PatternLayout">
            <param value="%d [%t] %-5p %c [%x] <%X{auth}> - %m%n"></param>
          </layout>
        </appender>
       
        <appender type="log4net.Appender.RollingFileAppender">
          <param value="C:\log\MiLog.log"></param>
          <param value="true"></param>
          <param value="10"></param>
          <param value="1000"></param>
          <param value="Size"></param>
          <param value="true"></param>
          <layout type="log4net.Layout.PatternLayout">
            <param value="%d [%t] %-5p %-45c [%x] - %m%n"></param>
          </layout>
        </appender>
       
        <appender type="log4net.Appender.FileAppender">
          <param value="MiArchivoDeLogs.log"></param>      
         
          <param value="true"></param>
          <layout type="log4net.Layout.PatternLayout">
            <param value="%d [%t] %-5p %c [%x] - %m%n"></param>
          </layout>
        </appender>
       
        <root>
          <level value="INFO"></level>
         
        </root>
       
        <logger>
          <level value="INFO"></level>
         
        </logger>
      </log4net>
    </configuration>
     

    1. Por ultimo se deben de agregar los namespaces en tu codigo

     
    using log4net;
    usgin log4net.Config;
     
    o bien hacer referencia directa a cada metodo con su ruta absoluta. Para poder usar los metodos es necesario que se declare un objeto estatico y de solo lectura para almacenar la referencia al logger:

     
    private static readonly ILog log = LogManager.GetLogger("NombreDelAppender");
     
    Donde NombreDelAppender es el nombre que le has puesto al appender primario, en este caso ha sido "ConsoleAppender". O bien si agregaron el nodo logger como en el ejemplo, pueden usar:

     
    private static readonly ILog log = LogManager.GetLogger("MiLogName");
     
    Algo importante y que me causo un poco de dolor de cabeza es que no se menciona en la mayoria de los manuales que se tiene que mandar a llamar el metodo que configura el framework, esto se hace de la siguiente manera y se pone en el constructor de la clase.

     
    XmlConfigurator.Configure();
     
    Y despues podras usar los metodos del log (Debug, Info, Warning, Error, etc):

     
    log.Debug("Iniciando aplicacion");
     
    Para mas detalles de la configuracion pueden leer la documentacion.

    http://logging.apache.org/log4net/release/manual/configuration.html

    O bien usar este enlace que creo es mas explicito y contiene un ejemplo completo:

    http://aspalliance.com/557

    Mas adelante posteare una configuracion que hice para sql con SQL Server para aquellos que tengan dudas o interes al respecto. Por el momento es todo porque tengo algo de suenio.
  • Podcast de programacion

    Me imagino que ya muchos conocen el termino de podcast, en dado caso que no pueden consultar el significado en la wikipedia tongue.png .

    Ultimamente he estado escuchando algunos de ellos que me han parecido adecuados para quienes quieren aprender sobre programacion en .NET, a continuacion pongo la url para suscribirse con el iTunes:

    http://feeds.feedburner.com/superneurona (SuperNeurona)

    http://feeds.feedburner.com/pozotecnico/ (PozoTecnico)

    O bien pueden dirigirse al blog de los autores:

    http://www.pozotecnico.com/ (Carlos Madrigal)

    http://www.superneurona.com/podcast/ (Raul Guerrero)

    Para facilitarte la vida puedes usar un programa podcatcher. Los podcatchers, mientras los tengas prendidos, revisan periódicamente todos los podcasts a los cuales estes suscrito, si hay nuevos episodios, los descarga. En lo particular a mi me gusta el iTunes face-wink.png .

    Si alguien esta interesado en realizar un podcast pueden dirigirse a la siguiente liga para ver como funciona:

    http://utilidades.bitacoras.com/archivos/2005/09/13/como_hacer_un_podcast_gratis/

    Como recientemente me han solicitado informacion referente a C#, tambien pongo algunos enlaces que pueden servir para que se documenten al respecto.

    • Mono y .Net

    http://www.mono-project.com/Main_Page

    http://www.go-mono.com/docs/

    http://msdn.microsoft.com/netframework/

    http://www.microsoft.com/spanish/msdn/arquitectura/das/distapp.asp

    • Manuales

    http://www.programacion.com/tutorial/csharp/

    http://www.mono-project.com/Introduction_to_developing_with_Mono

    http://www.mono-project.com/Guide:Running_Mono_Applications

    http://www.mono-project.com/Monkeyguide

    http://unrealspace.com/cartuchoGL/NpgsqlUserManual.html

    • Portales

    "C# Corner" (http://www.c-sharpcorner.com)

    "C# Help"(http://www.csharphelp.com)

    "C# Station" (http://www.csharp-station.com)

    "Codehound C#" (http://www.codehound.com/csharp)

    "csharpindex.com" (http://www.csharpindex.com)

    "Developersdex" (http://www.developersdex.com/csharp)

    ".NET Wire" (http://www.dotnetwire.com)


    • Notas de interes

    http://knocte.blogspot.com/2005/06/antifud-mononet.html

    http://www.go-mono.com/docs/index.aspx

    http://www.ajlopez.net/puntonet/

    http://www.josanguapo.com/
  • Un programador de raza

    Leyendo en una revista encontré este texto, creo que es bueno y lo comparto después de un tiempo de no haber posteado mucho.

    En todos estos años que llevo haciendo programas, usándolos, etc, he tenido
    la oportunidad de relacionarme con una gran cantidad de personajes del mundo
    de la programación, entre los cuales me incluyo.
    Con el correl del tiempo, esta interacción con el mundillo de los programadores
    me fue enseñando más acerca de ellos, "o de mi".
    Cualquiera que estudie algo relacionado a la informática y que tenga algo de
    código que escribir, puede programar, sin importar qué se programe, o en qué
    se programe, o la calidad de lo que se programe.
    Hasta acé no hay nada en especial. Pero si la persona que escribe el código,
    además de solucionar o de crear, va por un poco mas allá , entonces, es un
    "programador de raza".

    Un promgramador de raza es una persona que mezcla lo mejor de un excelente
    programador con lo mejor de un excelente artista.
    Esto implica que, además de ser sistemático y ordenado, y de que lo que está
    creando cumpla con las normas básicas de la codificación, le agrega un toque
    personal , y vive y siente cada desarrollo como una obra de arte.
    Esto no implica que el resto de los programadores sean malos. Pero al igual que
    en el mundo del arte, existen artistas que sobresalen de los demás y que le
    dan a cada obra el toque personal y especial, que los convierte en grandes
    artistas. Esto no quita que los demás artistas no puedan crear, reproducir,
    interpretar, etc.
    Un programador de raza es una persona especial, que se siente diferente del
    resto y que necesita ser comprendida, ya que la única forma con que cuenta para
    hacerse notar es con programas, o sea, con cosas abstractas. Y a diferencia del
    resto de los programadores, lo que está creando es muy importante para él.
    Si en algún momento les toca interactuar con un programador de raza, comprenderán
    esta diferencia de la que les estoy hablando. Si ése es el caso, disfruten sus
    obras.

    GUSTAVO BIOTT.
    SOCIO FUNDADOR DE SYNCROLOGIX.
Anterior página 1 ... 4 5 6 7 8 Siguiente página
39 Artículos

Estadísticas de visitantes

6
65
27403