martes, 23 de noviembre de 2010

Sobre paros y huelgas en empresas de servicios

Los últimos días parece que la cantidad de paros y conflictos laborales ha explotado. No hay gremio que no esté reclamando algo... o por lo menos así parece. La cobertura de los informativos sobre estos conflictos también es mucho mayor que el año anterior.

Cuando los empleados hacen paro en una empresa, digamos por ejemplo una fábrica, el objetivo es perjudicar al patrón para que atienda sus reclamos. Cuando es una empresa que produce bienes, en general haciendo un paro esto se logra.

Ahora, cuando la empresa brinda servicios, no es el patrón el principal perjudicado, sino que son los usuarios. Por ejemplo, el conflicto de la limpieza...

Esto lleva además a empeorar la imagen de los gremios, que en vez de tener a la opinión publica de su lado, se ponen a la gente en contra. O si no, ¿a quién le cae simpático el gremio de ADEOM por ejemplo?

Creo que a los gremios les está faltando un poco de imaginación, además de un poco de sentido de responsabilidad social. Me parece bien que reclamen lo que quieran (siempre que sea razonable), pero no a costa de perjudicar al resto de la población. Tendrían que buscar medidas de lucha que no nos afecten a todos.

Por ejemplo el transporte público. ¿No sería mejor, en vez de hacer paro y que no haya transporte, salir a la calle y no cobrar boleto? Al patrón lo estás perjudicando igual o más que haciendo paro, pero sin afectar al resto de la población...

lunes, 22 de noviembre de 2010

Mi primer aplicación iOS con GeneXus

Hace unos días se liberó la posibilidad de generar aplicaciones para dispositivos iOS usando GeneXus X Evolution 2 (beta), así que me puse a hacer alguna prueba...

Lo primero que me encontré fue la falta de documentación específica para esta plataforma. La página correspondiente en el Wiki explica que se debe bajar una aplicación desde el App Store, pero no dice nada de como configurar el modelo.

La documentación correspondiente a Android es mucho más completa, y ahí sí explica la configuración necesaria (para Android, pero sirve de ejemplo...), con lo que pude configurar el modelo.

Siguiendo este instructivo hay algunas cosas a tener en cuenta:

  1. El generador para iOS no requiere ningún tipo de emulador, por lo que la configuración es mucho más sencilla que para Android.
  2. En las preferencias correspondientes al generador para Smart Devices, se debe configurar iOS como Main Platform, porque por defecto es Android.
Esa fue toda la configuración necesaria para poder correr la aplicación en un iPhone. La aplicación muestra los datos correctamente. El único problema que tuve fue que se cierra cuando quiero agregar... pero eso es para el foro y no para el blog.

Me pareció muy bueno lo que se puede lograr en poco tiempo con este generador. La principal ventaja que tiene es la velocidad con que se pueden desarrollar las aplicaciones. Es impensable crear una aplicación y su back-end correspondiente en media hora programando a "mano". En este punto me parece difícil de superar.

La principal contra que le veo es que la aplicación generada es muy básica en cuanto a su diseño. Sería bueno (no se si estará en los planes) que se pudiera generar el proyecto XCode de la aplicación para poder realizarle modificaciones. Esto último es peligroso porque al volver a generar pierdo los cambios, pero lo veo como algo necesario al menos hasta que se pueda tener mayor control desde dentro de GeneXus.

En conclusión, creo que viene muy bien encaminado.

lunes, 1 de noviembre de 2010

Invocación dinámica de funciones en Objective-C

Tengo el siguiente problema: tengo un objeto que tiene tres propiedades (o métodos, en Objective-C se pueden invocar como métodos), que tienen nombres "sourceUrl1", "sourceUrl2" y "sourceUrl3".

En una determinada función, recibo por parámetro el número de la propiedad que quiero usar.

El código "tradicional" para hacer esto, sería con un switch, discriminando por el valor del parámetro. Algo así:
NSString *strUrl;
switch (indexPath.row) {
  case 0:
    strUrl = question.sourceUrl1;
    break;
  case 1:
    strUrl = question.sourceUrl2;
    break;
  case 2:
    strUrl = question.sourceUrl3;
    break;
}
Pero Objective-C tiene la ventaja de ser dinámico. De esa forma, puedo construir el nombre de la propiedad usando un string, e invocarlo a partir de ese nombre.

El código usando esta propiedad del lenguaje es:
NSString *selectorName = [NSString stringWithFormat:@"sourceUrl%d", indexPath.row+1];
NSString *strUrl = [question performSelector:NSSelectorFromString(selectorName)];
Me gusta cuando encuentro que se pueden resolver las cosas de una forma más simple :)