Social Icons

Featured Posts

miércoles, 10 de junio de 2015

¿Por qué Windows 10 marcará la diferencia?

¿Te acuerdas de cuando tenías que ir a casa de tu vecino para que te prestase su cinta del Zanac?

¿Te acuerdas cuando te compraste el casette de doble pletina para copiar el juego? como copia de seguridad y para hacer testing, claro

Entoces llegaron los discos flexibles de 5 1/4 comparados con el cassette eran rapidísimos y su capacidad increible, pero no cambiaron el hecho de que tuvieses que ir a casa de tu amigo para conseguirte una copia del Alley Cat.

Entonces llegó internet y ... todavía tuviste que ir a casa de tu amigo para que te prestase el diskette del Ishar porque se tardaba bastante menos tiempo en ir andando a la otra punta del planeta que en descargar 1MB.

Pero internet marcó la diferencia. Después de algún tiempo pudiste olvidarte completamente de los diskettes de 3.5 y solo tenías que visitar a tu amigo para que te prestase el CD del Dungeon Keeper II o algo así.

Y algún tiempo más tarde (hoy) te puedes incluso descargar una máquina virtual de 60GB en minutos. parece que en el momento en el que hubo buen ancho de banda dejé de disfrutar con los ordenadores...

Windows 10 es similar cuando se trata de cambiar el paradigma de la distribución de software y explicaré por qué.


La mayoría de los programas y juegos para ordenadores de escritorio fueron creados para Windows y no para Linux ni Mac y hay una buena razón para ello. La cuota de mercado del escritorio Windows hacía que trabajar para otras plataformas fuese tirar el dinero.

Los app stores llegaron y, en lugar de irte a la peligrosa internet a descargar los programas, te irías a un entorno supervisado desde donde podrías descargarte tus programas de manera segura.

PERO

De los ordenadores de escritorio tan solo un "ridículo" 16.45% (W8 + 8.1) puede ejecutar aplicaciones de la Microsoft Store mientras que la gran mayoría de los ordenadores (W7 + XP) un 72.36% están todavía anclados en el paradigma antiguo. (fuente)

Y nos hacemos la pregunta otra vez. ¿Por qué desarrollar una aplicación para el 16% de los ordenadores cuando podemos crear la misma aplicación por el mismo dinero para el 89% (dado que W8 y 8.1 son compatibles con el viejo código de escritorio)? La respuesta es obvia.

Y aquí viene Windows 10.

Ofreciendo Windows 10 como una actualización gratuita Microsoft va a convencer probablemente a la mayoría de usuarios de W7, 8 y 8.1 de instalar la última versión del sistema operativo y, con ella, la capacidad de ser clientes de la Tienda Microsoft.

No solo eso. Dado que las aplicaciones de Windows 10 también van a funcionar en cualquier hardware que sea capaz de ejecutar W10 el público objetivo no va a ser solo aumentado si no, posiblemente multiplicado.

Podrás desarrollar una vez tu aplicación y ésta podrá ser descargada por los usuarios de escritorio y tambien por los usuarios de Windows Phone y por los de XBox y por los de RaspberryPI y por los de las Hololens!.


Microsoft estima que en un par de años habrá mil millones de dispositivos W10 en el mundo y una vez más la pregunta será:

¿Por qué querría nadie desarrollar para otra plataforma?
Publicar un comentario en la entrada

miércoles, 11 de febrero de 2015

Se acabaron las funciones recursivas para definir CAML Queries gracias a Camlex

Algunas veces tienes un número aleatorio de condiciones para incluir en una CAML query y en esos casos yo solía definir las consultas usando una función recursiva que normalmente tenía que debugar unas cuantas veces me funciona siempre a la primera.

El código para este tipo de consultas sería algo así (y este es de los simples):

public List<string> GetSomeInfo(string fieldsToSearch, string contentTypesToSearch)
{
    ...

    var queryval = string.Empty;
    if (contentTypesToSearch.IsNullOrEmpty())
        queryval = string.Format("<Where>" + GenerateFieldsQuery(fieldsToSearch.Split(','), 0) + "</Where>", text);
    else
        queryval = string.Format("<Where><And>" + GenerateCTypesQuery(contentTypesToSearch.Split(','), 0) + GenerateFieldsQuery(fieldsToSearch.Split(','), 0) + "</And></Where>", text);

    var scope = "Scope=\"RecursiveAll\"";

    ...
}

private static string GenerateFieldsQuery(string[] fields, int index)
{
    if (fields.Length == 0) return string.Empty;

    if (fields.Length == index + 1)
        return "<Contains><FieldRef Name='" + fields[index] + "' /><Value Type='Text'>{0}</Value></Contains>";

    return "<Or><Contains><FieldRef Name='" + fields[index] + "' /><Value Type='Text'>{0}</Value></Contains>" + GenerateFieldsQuery(fields, ++index) + "</Or>";
}

private static string GenerateCTypesQuery(string[] cTypes, int index)
{
    if (cTypes.Length == 0) return string.Empty;

    if (cTypes.Length == index + 1)
        return "<Eq><FieldRef Name='ContentType' /><Value Type='Choice'>" + cTypes[index] + "</Value></Eq>";

    return "<Or><Eq><FieldRef Name='ContentType' /><Value Type='Choice'>" + cTypes[index] + "</Value></Eq>" + GenerateCTypesQuery(cTypes, ++index) + "</Or>";
}

Eso era hasta ahora... gracias a Camlex (y gracias a Luis por decírmelo), este código se puede escribir así:

public List<string> GetSomeInfo(string fieldsToSearch, string contentTypesToSearch)
{
    ...

    var queryVal = string.Empty;
    var fieldExtensions = new List<Expression<Func<SPListItem, bool>>>();
    var cTypeExtensions = new List<Expression<Func<SPListItem, bool>>>();

    if (!contentTypesToSearch.IsNullOrEmpty())
    {
        foreach (var cType in contentTypesToSearch.Split(','))
            cTypeExtensions.Add(x => (string)x["ContentType"] == cType);
    }

    foreach (var field in fieldsToSearch.Split(','))
        fieldExtensions.Add(x => ((string)x[field]).Contains(text));

    var expressions = new List<Expression<Func<SPListItem, bool>>>();
    expressions.Add(ExpressionsHelper.CombineOr(cTypeExtensions));
    expressions.Add(ExpressionsHelper.CombineOr(fieldExtensions));

    queryVal = Camlex.Query().WhereAll(expressions).ToString();

    ...
}

Echaré de menos los métodos recursivos... me hacían sentir especial...
Publicar un comentario en la entrada