Hack(at)ONG, Fundación Rosas y código

thumbnail_1433213296

El sábado se llevó adelante la segunda Hack(At)ONG dentro del maco de la Semana TIC, en Córdoba.

La idea del evento era poder ayudar a una ONG con desarrollando alguna solución de software para una problemática puntual.

Desde las 8 AM hasta las 7 PM. Un día de trabajo que, dependiendo de la solución y las necesidades, podría terminarse o no, para luego continuar con el desarrollo.

En mi caso, participé junto a Fundación Rosas con el desarrollo de una app Web simple de preguntas y respuestas.

El resumen de la arquitectura y tecnologías:

  • ASP.net MVC 4.
  • C#.
  • JavaScript y HTML5.
  • SQL Server 2008.
  • JSon.

El código fuente puede ser accedido y descargado desde aquí: https://github.com/matiasiacono/Preservados


Quinto Webcast

Venimos creciendo tras cada Webcast. No solo hemos hablado de desarrollo de video juegos, si no que estamos mostrando como diseñar gráficos, hablamos de frameworks, mostramos desarrollos nacionales, y hasta un curso para aprender a programar desde cero.

No te lo pierdas: https://www.youtube.com/watch?v=D5mNBycae9s


Video del Webinar sobre Video juegos y Móviles

Ya se puede ver en forma offline el Webinar de ayer donde hablé sobre desarrollo de video juegos con HTML5 y JavaScript, y cómo llevarlo a un dispositivo móvil.


Extendiendo objetos en JavaScript

Muchos lenguajes cuentan con la posibilidad de extender la funcionalidad de objetos nativos o creados por programadores.

Por ejemplo, en C#, podemos “inyectar” funcionalidad mediante los Extendend Methods (http://msdn.microsoft.com/en-us//library/bb383977.aspx) a objetos pre existentes. Pero es necesario remarcar que esta característica (En el caso de C#), es solo una forma de alivianarle el trabajo al desarrollador mientras escribe código, ya que por detrás, el código se ejecuta de la misma forma que lo haría si llamásemos a una función dentro de una clase estática.

Veamos un ejemplo:

class Program
{
    static void Main(string[] args)
    {
        string text = “”;
        Console.WriteLine(text.ToSomething());
        Console.WriteLine(Ext.ToSomething2(text));
        Console.ReadLine();
    }
}

public static class Ext
{
    public static string ToSomething(this string data)
    {
        return data + “Hola”;
    }

    public static string ToSomething2(string data)
    {
        return data + “Hola”;
    }
}

En este caso, si vemos el código en la clase Program, todo apuntaría a que tenemos una mejora con el método extendido, ya que no necesitaríamos conocer la función en cuestión, misma que es provista desde el tipo de dato y, por otro lado, la función “ToSomething” queda incorporada al tipo.

Pero, si miramos un poco más adentro, esto es, el código IL, veremos que en realidad, no pasa nada de nada. Todo sigue funcionando como si hubiésemos llamado a una función común.

IL_0000:  nop
IL_0001:  ldstr      “”
IL_0006:  stloc.0
IL_0007:  ldloc.0
IL_0008:  call       string Extendend.Ext::ToSomething(string)
IL_000d:  call       void [mscorlib]System.Console::WriteLine(string)
IL_0012:  nop
IL_0013:  ldloc.0
IL_0014:  call       string Extendend.Ext::ToSomething2(string)
IL_0019:  call       void [mscorlib]System.Console::WriteLine(string)
IL_001e:  nop
IL_001f:  call       string [mscorlib]System.Console::ReadLine()
IL_0024:  pop
IL_0025:  ret

O sea, no hemos enriquecido el objeto, solo hemos agregado soporte visual.

En JavaScript, por el contrario, es posible inyectar funcionalidad a los objetos y que estas sean parte del objeto, tanto para uno particular como para todas las “instancias” del mismo tipo.

Esto podemos conseguirlo con el uso de “prototype”. Pero veamos un ejemplo:

var arr = [];
//Llenamos el array


//Buscar un elemento
for (var i = 0; i < arr.length; i++) {
   if (arr[i] === …) {
     founds.push(arr[i]);
   }
}

En el ejemplo, lo que intentamos hacer es obtener un elemento de un array basados en un criterio particular. La lógica resulta simple, y podría ser encapsulada en una función y así usarse tantas veces como se requiera.

Por supuesto, podríamos hacer esto, o extender el objeto Array para que contenga esta funcionalidad.

if (Array.prototype.where === undefined) {
    Array.prototype.where = function (selector) {
        var result = [];
        for (var i = 0; i < this.length; i++) {
            if (selector(this[i])) {
                result.push(this[i]);
            }
        }
        return result;
    }
}

La principal diferencia, comparada con una función y con el ejemplo de C# es que, en este caso, efectivamente el objeto Array posee, ahora, una función llamada “where”, y cualquier instancia de Array contendrá la misma, no repitiendo el código si no, incorporándolo al objeto.

En resumen, en JavaScript, es posible modificar los objetos y tipos más allá de un cambio visual de cara al desarrollador. Esto nos otorga mayor flexibilidad para desarrollar ya que no es necesario tener un conjunto de funciones para tareas sobre objetos específicos, si no que podemos enriquecer estos objetos de forma directa.


Serie de videos en Channel 9–Símbolos de compilación

channel9logo_55552f9bOtro video y esta vez con una forma para poder diferenciar código al momento de compilarlo, para diferentes objetivos.

http://channel9.msdn.com/Blogs/DevWow/-100devdays-S-mbolos-de-compilaci-n-condicional-en-C-


Serie de videos en Channel 9–Tipos de variables

channel9logo_55552f9b

Otro video de la serie.

En esta oportunidad hablamos sobre los diferentes tipos de variables que podemos encontrar en C# y sus principales diferencias.

http://channel9.msdn.com/Blogs/DevWow/-100devdays-Tipos-y-Variables-en-C-


Serie de videos en Channel 9–Excepciones

channel9logo_55552f9b

Podes controlar los errores en el código resulta vital para el normal funcionamiento de nuestros programas.

En este video vemos como manejar las excepciones que arroje el código durante su ejecución.

http://channel9.msdn.com/Blogs/DevWow/-100devdays-Manejo-de-Excepciones