Búsqueda


Categorías

C# [15]
PHP [6]
Zend [1]
FileMaker [1]
.NET [6]
CVS [3]
General [9]
Javascript [2]
Paypal [1]
.NET Compact Framework [3]
C++ [1]
mysql [4]
Linux [1]

Últimos post

Dónde guardar los archivos de configuración en ClickOnce
phpinfo: Valores en error_reporting
Notes about Zend Server and Zend Studio setup
What's new in C# 4
Resolving a 'sticky tag is not a branch' error
Resumen del CodeCamp
CodeCamp Tarragona 2009
Acerca de la calidad del código
ClickOnce en Linux
Programando en PHP (y con CVS) en Visual Studio 2008

Sindicación

RSS 0.90
RSS 1.0
RSS 2.0
Atom 0.3

Resumen del CodeCamp

ctg | 21 Octubre, 2009 23:37

Aunque todavía estoy "digeriendo" toda la información del Codecamp, creo que ya es hora de al menos... ordenar las ideas y reportar "feedback" a los organizadores.

Primero, antes de todo, felicitar a los organizadores, y por mi parte a Marc Rubiño, quien en todo momento me tuvo informado de los ponentes y sus sesiones.

Personalmente
, no puedo quejarme absolutamente de nada. He conocido a mucha gente y a la vez poder hablar con los ponentes "cara a cara" en vez de e-mail.

Aquí dejo las sesiones que más me gustaron:
Quizás el único aspecto negativo a destacar por mi parte fue la webcast con Lisa Feigenbaum, que se acabo antes de tiempo por culpa de la pésima conexión a internet que ofrecía el hotel.

A las que no pude ir porque eran a la misma hora
Afortunadamente, todas las sesiones se grabaron y estarán disponibles en breve.

¿Para cuando el próximo?

Publicado en General . Comentario: (0). Retroenlaces:(0). Enlace

CodeCamp Tarragona 2009

ctg | 02 Octubre, 2009 14:33

Dentro de un par de semanas se celebrará el CodeCamp 2009.  Será un evento gratuito dónde se podrá conocer a los profesionales,usuarios y aficionados a la tecnologia .NET y Mono.

 Code camp 2009 Banner 1

 Code 2009 Banner 2


 

Publicado en General . Comentario: (1). Retroenlaces:(0). Enlace

Acerca de la calidad del código

ctg | 08 Junio, 2009 16:33

La mayoría de los programadores estarán de acuerdo con las siguientes afirmaciones:

Publicado en General . Comentario: (0). Retroenlaces:(0). Enlace

Programando en PHP (y con CVS) en Visual Studio 2008

ctg | 06 Abril, 2009 18:27

Después de pasar más de 3 años utilizando Zend Studio y antes de realizar el cambio a Eclipse que tarde o temprano tendré que realizar, decidí a finales del 2008 perder un poco de tiempo en intentar que Visual Studio 2008 fuera mi principal editor tanto para código C# y también de PHP, Javascript y HTML/CSS.

Además de Zend Studio para mis desarrollos en PHP, utilizaba diferentes add-on según el navegador para depurar código Javascript. Y para editar HTML, hojas de estilo usaba Dreamweaver. A todo esto, se suma nuestro controlador de versiones, que todavía sigue siendo CVS (si funciona bien porque tocarlo), pues tenemos código del siglo pasado :P y utilizamos TortoiseCVS para trabajar más cómodamente.

En resumen, muchas de herramientas para realizar el trabajo diario.

La versión 2005 de Visual Studio ya me permitía realizar la mayoría de las tareas mencionadas anteriormente pero fue en la versión 2008 en donde por fin el editor de HTML/CSS funcionaba decentemente (el mismo que incluía Expression Blend), se añadió un depurador para Javascript, snippets, split view ...

Para poder editar PHP, con coloración de código, Intellisense, depuración y otras características, he utilizado PHP IDE - VS.Php for Visual Studio. Se integra perfectamente con Visual Studio y creo que tiene algo que ver con el proyecto descontinuado Php for Visual Studio (Php4VS) de Codeplex porque ellos mismos lo recomiendan.

Y para poder utilizar CVS desde Visual Studio, he utilizado TamTam CVS SCC, que permite realizar las tareas más habituales, es decir, check-in/check-out, diferencias, histórico...Desde principios de año utilizo PHP como editor de código con CVS y la experiencia ha sido muy positiva y productiva, al tener en un solo producto las herramientas que necesito para mi trabajo diario.

 

Publicado en General, Javascript, PHP, .NET . Comentario: (0). Retroenlaces:(0). Enlace

10 consejos a la hora de diseñar tú página web

ctg | 23 Julio, 2008 00:42

  1. El usuario de una página web mira por primera vez la parte superior izquierda. Y poco a poco van bajando y van centrado su mirada y acaban observando muy brevemente el lado derecho.
  2. Por ello, un buen lugar para colocar la publicidad es la parte superior izquierda.
  3. Los títulos deben ser claros y cortos.
  4. Evitar artículos largos o bloques de texto muy largos.
  5. Utilizar listas o puntos para enumerar algo.
  6. Cuando necesites poner una cantidad, utiliza números, nunca texto.
  7. Los menus, deben estar situados en la parte superior o en la izquierda, como se dijo en el punto 1.
  8. El texto con la fuente tipo "Comic Sans" no son leídas por el usuario excepto en el caso que la página este pensada para el público infantil.
  9. La mayoría de banners gráfico son ignorados por el usuario.
  10. Las imágenes relacionadas con la página en cuestión siempre son útiles y a ser posible, grandes.

Publicado en General . Comentario: (0). Retroenlaces:(0). Enlace

Programar seguro

ctg | 07 Junio, 2008 14:16

Aprovechando que Microsoft ha lanzado Microsoft Source Analysis for C#, he creado este post para anotar algunas conductas que siempre recomiendo a la hora de escribir código. El principal objetivo es crear un código seguro, escalable, de fácil lectura y mantenimiento.

Como siempre, cualquier crítica es bienvenida y espero ir añadiendo más puntos en un futuro.

1) Comentarios y variables

En cada variable/método/función que se declara, utilizar nombres razonables y en las variables miembro de una clase, no esta de más poner un pequeño comentario (pero recordar, lo bueno si breve dos veces bueno) para saber su objetivo.

En Visual Studio.net se pueden utilizar las etiquetas <summary>, <param> ... que facilitan mucho la lectura de código. Además Intellisense hará uso de esas etiquetas y facilitaran la escritura de código. Incluso, las etiquetas se pueden utilizar para la creación de documentación.

2) Divide y vencerás

Evitar crear un ficheros de utilidades enormes. Por ejemplo, usar partial en C# que apareció en la versión 2.0 de .NET Framework. De esta forma es posible separar código en diferentes archivos para hacerlos más flexibles.

3) Utilizar excepciones en vez de retornar 0=OK, 1=ERROR ó HRESULT

Desde la aparición de las excepciones, la comprobación de los valores de retorno al llamar una función ha quedado obsoleta.

4) Utilizar ASSERT, TRACE

Cuando se está desarrollando utiliza todas las herramientas que el propio entorno y el mismo lenguaje proporcionan. En C#, el espacio de nombres System.Diagnostics se encuentra la clase Debug y Trace. En el artículo How to Trace and Debug in Visual C# aparecen ejemplos de su uso.

5) Cuidado con el  código "no seguro"

Al escribir código no seguro, debemos encargarnos nosotros mismos de realizar de liberar los recursos previamente utilizados. Utiliza código "no seguro" únicamente cuando seaestrictamente necesario.

6) Automatizar

Visual Studio incluye muchas formas de automatizar código. Desde la utilización de un asistente para generar el código de acceso a la base de datos, servicios web,etc...

Macros, snippets y programas que ayudan a la escritura y la automatización de código: MZ-Tools, Visual Assist, etc...

7) Utilizar todas las herramientas disponibles

Antes de Microsoft Source Analysis for C#, ya existían otros programas que ayudan a crear código mas seguro, FXCop es el más conocido, aunque realmente FXCop se centra más en los ensamblados. También existen otros analizadores como Code.It.Right

8) Atención a la entrada de datos

La entrada de datos es fuente de numerosos problemas. Algunos muy importantes, como los ataques de inyección SQL o problemas con la codificación de caracteres. Las expresiones regulares pueden ser una solución a este problema.

9) Realizar pruebas

Probar nuestro código en todos los sentidos. Introducir datos incorrectos, acciones que no estén soportadas para observar nuestros mensajes de error. Puede ser muy útil pedir a otra persona que comprueba nuestro programa y que realice una batería de pruebas para asegurar la calidad de nuestro código.

10) Ser modesto, todos nos equivocamos

Todos nos equivocamos y quizá no hay mejor forma de aprender que equivocarse. Resolver problemas y asumir nuestra responsabilidad nos ayudará a concentrarnos para escribir código más seguro.

Publicado en General . Comentario: (0). Retroenlaces:(0). Enlace

Nuevo Amazon S3 (2008-05-02)

ctg | 06 Mayo, 2008 13:31

Amazon Simple Storage Service (Amazon S3), conocido como S3, es un servicio que proporciona amazon.com que permite almacenar y recuperar tus datos como un disco duro virtual se tratase, a un precio muy bajo. En nuestro trabajo llevamos un año aproximádamente utilizándolo para hacer copias de seguridad.

Además utiliza los standards SOAP y REST y por ello, se puede acceder desde cualquier lenguaje actual (C#, PHP, Java y alguno más). También hay un plug-in para Firefox que te permite acceder, S3 Organizer.

Pongo un pequeño ejemplo, en C# para crear un bucket y subir un fichero.

Primero crear un fichero, llamado S3Helper.cs. Esta pequeña clase es una utilidad para trabajar más cómodamente con S3.

using System;
using System.Text;
using System.Security.Cryptography;

/// <summary>
/// Summary description for S3Helper
/// </summary>
public class S3Helper
{
    public S3Helper()
    {
        //
        // TODO: Add constructor logic here
        //
    }

    /// <summary>
    /// Formats the provided time as a string limited to millisecond precision
    /// </summary>
    /// <param name="myTime"></param>
    /// <returns></returns>
    public static string FormatTimeStamp(DateTime myTime)
    {
        DateTime myUniversalTime = myTime.ToUniversalTime();
        return myUniversalTime.ToString("yyyy-MM-dd\\THH:mm:ss.fff\\Z", System.Globalization.CultureInfo.InvariantCulture);
    }

    /// <summary>
    /// Returns a new DateTime object set to the provided time
    /// but with precision limited to milliseconds.
    /// </summary>
    /// <param name="myTime"></param>
    /// <returns></returns>
    public static DateTime GetTimeStamp(DateTime myTime)
    {
        DateTime myUniversalTime = myTime.ToUniversalTime();
        DateTime myNewTime = new DateTime(myUniversalTime.Year, myUniversalTime.Month, myUniversalTime.Day,
                                 myUniversalTime.Hour, myUniversalTime.Minute, myUniversalTime.Second,
                                 myUniversalTime.Millisecond);

        return myNewTime;

    }

    public static string GetSignature(string mySecretAccessKeyId, string strOperation, DateTime myTime)
    {
        Encoding myEncoding = new UTF8Encoding();

        // Create the source string which is used to create the digest
        string mySource = "AmazonS3" + strOperation + FormatTimeStamp(myTime);

        // Create a new Cryptography class using the
        // Secret Access Key as the key
        HMACSHA1 myCrypto = new HMACSHA1(myEncoding.GetBytes(mySecretAccessKeyId));

        // Convert the source string to an array of bytes
        char[] mySourceArray = mySource.ToCharArray();

        // Convert the source to a UTF8 encoded array of bytes
        byte[] myUTF8Bytes = myEncoding.GetBytes(mySourceArray);

        // Calculate the digest
        byte[] strDigest = myCrypto.ComputeHash(myUTF8Bytes);

        return Convert.ToBase64String(strDigest);
    }
}

 

Y a continuación, el código para crear un bucketname y subir un fichero:

 

// Add web reference http://doc.s3.amazonaws.com/2006-03-01/AmazonS3.wsdl

using <yourappnamespace>.com.amazonaws.s3.doc;

try
{
    using (var s3 = new AmazonS3())
    {
        var s3 = new AmazonS3();
        var currentTime = DateTime.Now;
        const string myAWSAccessKeyId = <my S3 access key>;
        const string mySecretAccessKeyId = <my S3 secrect access key>;

        // Create a bucket
        CreateBucketResult myCreateResult = s3.CreateBucket(
            <bucket name>,
            null,
            myAWSAccessKeyId,
            S3Helper.GetTimeStamp(currentTime),
            true,
            S3Helper.GetSignature(mySecretAccessKeyId, "CreateBucket", currentTime)
            );
   
        // Get data to upload
        const string fileName = "fileName.ext";
        byte [] bytesToWrite = File.ReadAllBytes(fileName);
   
        // Finally upload the object
        PutObjectResult putObjectResult = s3.PutObjectInline(
            <bucket name>,
            fileName,
            null,
            bytesToWrite,
            bytesToWrite.Length,
            null,
            StorageClass.STANDARD,
            true,
            myAWSAccessKeyId,
            S3Helper.GetTimeStamp(currentTime),
            true,
            S3Helper.GetSignature(mySecretAccessKeyId, "PutObjectInline", currentTime),
            null
                    );
    }
}
catch (Exception ex)
{
    MessageBox.Show(ex.Message);
}

Publicado en General . Comentario: (0). Retroenlaces:(0). Enlace

Microsoft Developer Day 2007 Material

ctg | 22 Abril, 2008 23:48

Este año, no he podido asistir a ningun evento de Microsoft Developer Day. Pero afortunadamente, las presentaciones ya estan disponibles en su web.

Estoy bastante intersado en conocer las novedades de Visual Studio 2008, ASP.NET 2.0 y SQL Server 2008 ... 

Publicado en General . Comentario: (0). Retroenlaces:(0). Enlace

Remove “My shared documents” folder

ctg | 11 Enero, 2007 00:07

I hate stupid folders. I never use this folder but till now, I don’t know how remove it. Today, I found the solution in a post

For remove this folder, launch regedit and go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\
CurrentVersion\Explorer\MyComputer\NameSpace\DelegateFolders. Inside DelegateFolders you can find another folder with name {59031a47-3f72-44a7-89c5-5595fe6b30ee}. Destroy it and reboot.

Publicado en General . Comentario: (0). Retroenlaces:(0). Enlace