¿La cagamos al usar DateTime.Now?


UTC vs hora local
Antes de nada, os aviso de que no voy a denostar por completo el uso de DateTime.Now, ni de las estructuras similares que existen en cada lenguaje. Obviamente, cada vez que tengamos que mostrar a los usuarios un dato horario, lo ideal es dárselo en su formato local, aquél que conocen y sabeninterpretar de forma inmediata sin necesidad de realizar cálculos mentales.
Sin embargo, todas las operaciones internas en las que intervenga una hora deberían hacerse con horas en Tiempo Universal Coordinado, más conocido como UTC. Aunque a algunos pueda parecerles un capricho o un formalismo innecesario, son varias las situaciones en que agradeceremos usar UTC, y no solamente por su invariabilidad, sino también por su eficiencia.

Menos operaciones, menos incertidumbre

Antes de ver los casos caóticos, conviene saber qué tiene de provechoso usar UTC en el día a día. Por ejemplo, en el típico caso en el que queremos medir un lapso de tiempo ocurrido entre dos eventos (normalmente el principio y el final de una operación cuya eficiencia nos interesa especialmente).
DateTime comienzo = DateTime.Now;
// Operaciones cuya duración queremos medir
DateTime fin = DateTime.Now;
TimeSpan duracion = fin - comienzo;
Nuestro objetivo debe ser introducir el menor ruido posible en la medición, por lo que toda operación que no sea parte del conjunto a medir, debería ser lo más rápida posible. Dependiendo de la precisión deseada, puede ser fundamental conocer el funcionamiento interno de DateTime.Now: en primer lugar llama a DateTime.UtcNow, a continuación calcula el desfase horario en función de la zona establecida, y por último verifica si hay que aplicar la corrección por horario de verano. En resumen,DateTime.UtcNow es un par de órdenes de magnitud más rápido que DateTime.Now.
De hecho, en C# es incluso más rápido que la clase Stopwatch, creada ex profeso para este tipo de mediciones de precisión, pero que obviamente aporta más herramientas destinadas a dicho fin. Podemos verlo en este gráfico, obtenido a partir de un benchmarking realizado por Keyvan Nayyeri:
Eficiencia comparada de DateTime.Now, Stopwatch y DateTime.UtcNow

Trabajar con usuarios de todo el mundo sin volverse loco

Si ganar algunos milisegundos no es tu finalidad, no te preocupes, hay más motivos para utilizar UTC. Uno bastante importante es que tu aplicación sea utilizada por usuarios de distintas zonas horarias. Y ni siquiera es necesario que sean de países distintos.
Imagina: tu base de datos tiene un registro del usuario A, que utilizó la aplicación en Las Palmas de Gran Canaria, con hora 09:10; mientras que hay otro registro del usuario B, que utilizó la aplicación en su PC de Córdoba, a las 10:05. Si no recuerdas si la hora guardada se tomó en los clientes o en el servidor, puedes dudar acerca de cuál de los dos es anterior.
Pero es más, puedes encontrarte con este mismo problema con usuarios de una misma zona horaria. Es tan simple como que tu servidor pase a alojarse en un hosting de otro país, y si lo tienes configurado conforme a su información regional, las horas guardadas en él pueden dejar de significar lo que tú crees que significan.

Fatalidad, ocurre lo que no debería ocurrir cuando no debería ocurrir

Pero cuando de verdad se ve lo necesario que es usar datos invariables es en las situaciones excepcionales, aquellas en las que nunca solemos pensar, entre las que cabe destacar los cambios de hora debidos al ahorro energético.
Cambio horario de verano
Y es que el destino caprichoso puede querer que uno de tus usuarios comience una operación a las 2:59 CET del último sábado de marzo… ¡y la termine a las 2:00 CEST de ese mismo día por culpa del cambio al horario de verano! Es poco probable, pero puede ocurrir y fastidiarte contadores con tiempos negativos (o enormes por culpa de un desbordamiento). O que te pase como en Samoa, donde el gobierno decidió suprimir el 30 de diciembre de 2011 para mejorar sus relaciones económicas internacionales.
En definitiva, más vale pensar que lo peor puede pasar, y que no nos pille desprevenidos.

El desbloqueo de logros llega a la programación con Visual Studio Achievements


Logros en Visual Studio
Las nuevas redes sociales y aplicaciones para móviles nos han habituado al modelo de desbloqueo de logros. A día de hoy, raro es que alguno de nosotros aún no haya recibido una medallita por ver una película, visitar un monumento, pasarse una fase de un juego, etc. Pero Microsoft le da una nueva vuelta de tuerca al asunto y en su afán por hacer del desarrollo una labor divertida, nos propone empezar a conseguir logros a base de hacer nuestro trabajo y programar.
La herramienta en cuestión para hacerlo es un plugin para Visual Studio (y ojo, que todavía está en fase beta, nada de usarlo en el entorno de producción del megacliente). Para intentar distraernos lo menos posible mientras programamos, sólo se muestran los nuevos logros al compilar, ya que un hilo en segundo plano analiza nuestro código en busca de las características que lo conviertan en digno de una medalla.
Estas chapitas que podemos conseguir se catalogan en 6 categorías: Customizing Visual Studio,Don’t Try This At HomeGood HousekeepingJust For FunPower Coder y Unleashing Visual Studio. Mientras la de personalización de Visual Studio o la de generación de un código limpio son más que aconsejables, lo cierto es que la categoría que te propone no intentar esto en casa más bien debería incentivar lo contrario, intentarlo como mucho en casa, y nunca en entornos sensibles. Y es que crear una clase con 10 niveles de herencia, más de 10 sobrecargas de un sólo método y enumerados de más de 30 campos, quizá no es algo de lo que se deba presumir, por mucho que el plugin permita compartir tus logros en Facebook.

Primer Congreso Internacional de Informática Aplicada, CIIA 2012


El Comité Organizador del “Primer Congreso Internacional de Informática Aplicada. CIIA 2012″ del Instituto Tecnológico Superior de Misantla ha invitado de manera personalizada a alumnos y publico en general a participar en este importante evento, a celebrar del 25 al 27 de Abril de 2012 en la ciudad de Misantla, Veracruz, México.
Se ofrecerán conferencias magistrales, sesiones técnicas, talleres, demostraciones y un concurso de programación, con énfasis en el tema: “Tecnologías Emergentes: Retos y Oportunidades”.
Cada ponencia debe describir su aportación de forma breve y completa, presentarse en formato IEEE, y sus autores deben registrarse en la página del congreso, o a la dirección electrónica: ciia2012.itsm@gmail.com.
Para fechas importantes, costos y detalles, favor de consultar:
Twitter: @ciia2012itsm
Teléfono: (235) 3231545 ext. 122

Python 4 Android


Me tomo un relax de algunas horas, para encontrar algo con que distraerme, y recorde la existencia de un proyecto que permitia usar Python para correr aplicacion Android, opte por probarlo y escribir un articulo al respecto.

Android Scripting


Si no eres fanatico de Java, o si eres un amante de scripting particularmente de python o simplemente te gusta cambiar de vez en cuando lo aburrido de las llaves y los punto y comas y ademas quieres trabajar con Android, pues bien SL4A te parecera una buena opcion. (Si no la unica ¬¬). La descripcion del proyecto va asi:


Scripting Layer for Android (SL4A) lleva los lenguajes de scripting a Android, permitiendo editar y ejecutar script de manera interactiva directamente en dispositivos Android. Estos script tienen accesos a muchas APIS disponibles en el dispositivo, pero con una interfaz increiblemente simple que permite accederlos de forma sencilla.



Hay una guia detallada Practical Android Project que te guia paso a paso sobre lo que debes hacer. Pero aqui tienes mi confusa explicacion de como hacerlo.


Manos a la obra


Existen dos formas de hacer esto, hacerlo directamente desde el dispositivo o bajarlo en tu ordenador y luego instalarlo con el ADB con el siguiente comando:

> adb install sl4a.apk


En lo personal prefiero hacerlo desde el telefono, me ahorro abrir la terminal, para hacerlo abre el navegador y descargalo desde el sitio del proyecto. Asi que operacion "Descarga e Instala", te dira que necesita muchas  y muchos permisos, dandole el voto de confianza acepta e instala.



Ahora ya tienes SL4A, pero te hace falta algo, y no es amor es el interprete para ello  necesitaras otro APK de Python For Android, igualmente en el sitio oficial puedes descargarlo.



Una vez que necesitas extraer los extras para tener los script de python y curosear el codigo y como se ejecuta.



Ahora si puedes ver la cantidad de Script en la aplicacion SL4A alli tienes para empezar a ver ejemplos basicos de SL4A.




Todos corren de maravilla, y todos los puedes editar "on the fly" como es costumbre con las aplicaciones python. Algo que me fascino es la simplicidad de los script, el hell_world.py se destaca, son 4 lineas de codigos en lo que en Android Java me tomaria al menos diez tan solo en la clase. Aqui el codigo


import android
droid = android.Android()
droid.makeToast('Hola Mundo')
print 'Hola Mundo'

La aplicacion tambien te permite correrlo en consola, ejecutarlo, modificarlo, renombarlo o eliminarlo.

Otra caracteristica super util es que te permite ver las trazas:



Perspectivas del proyecto

Es probable que siga jugando con SL4A, lo recomiendo ya sea si quieres empezar con Android y no te gusta java, o estas aburrido en la noche y quieres distraerte un poco, aprenderas una ó dos cosas nuevas, garantizado!

Si te preguntas si puedes llegar al mercado de Android con esto, pues lo creas o no, esto no es un juguete es una manera de desarrollar aplicaciones real!. La documentacion incluye la manera en como puedes crear Scripting as APK. Y si ya existen app con esto incluido. TaskBom es una de ellas.

Existen otros proyectos similares que portan lenguajes a la plataforma Android. Dos que me llaman la atencion son:

Scala 4 Android(Una buena excusa para aprender scala)

Un detalle final, me sorprendio, sino me asusto la cantidad de tutoriales para esta herramienta en el sitio oficial, si de algo se ha caracterizado python desde el principio es de su documentacion extrema y este proyecto no excepcion, no hay excusas par ano pasar unas horas probando y quien sabe si te gusta quizas hagas un DroidCopter:

avast! Mobile Security: antivirus gratuito para Android


Con el auge que últimamente han tenido losdispositivos Android, al menos en Argentina, ha traído como consecuencia miles de herramientas nuevas para estos celulares, como lo es el caso de este nuevo antivirus gratuito para Android.
Entre las principales funciones encontraremos algunas como las siguientes:
  • Escáner antivirus de aplicaciones y tarjeta SD.
  • Asesor de privacidad.
  • Administrador de aplicaciones.
  • Filtro de llamadas y SMS con bloqueo.
  • Escudo de página web.
  • Cortafuegos para móvil.
  • Anti-robo.
avast! Mobile Security ocupa sólo 2,5 MB del espacio en tu móvil y se instala directamente en la memoria del mismo. Después de haberlo instalado nos solicitará acepta los términos de la licencia y preguntará si deseamos enviar información anónimo a la Comunity IQ, la red de seguridad de avast!.

Antivirus para aplicaciones y tarjeta SD

Esta es la principal función de esta herramienta ya que en los últimos tiempos se han multiplicado la cantidad de malware en Androidavast! Mobile Securityutiliza su propio escaner para atajar las diferentes amenazas que se presentan al dispositivo.
avast-security-mobile
A pesar de que la protección no es en tiempo real completa, esta aplicación es capaz de detectar las diferentes aplicaciones maliciosas en el dispositivo y además, hasta archivos infectados, incluyendo los de Windows.

Asesor de privacidad y aplicaciones

Esta función es realmente interesante, ya que al instalar diferentes aplicaciones y aceptar sus términos de uso, podemos estar cometiendo un grave error, principalmente si la misma no fue creada con fines benéficos.
avast-android
avast! Mobile Security, se encarga de analizar a qué tipo de información tiene acceso las aplicaciones y después hace un resumen de la situación dividido por categorías.

Escudo web y cortafuegos

Muchas personas que cuentan con un dispositivo Android, se encuentran conectadas a la red permanentemente, y aquí existen una gran cantidad de peligros que se pueden transmitir a través del navegador o a través de las aplicaciones.
antivirus-avast-android
El escudo web se encarga de impedir ingresar a sitios “peligrosos”, es decir que contengan pishing o malware. Por su parte, el cortafuegos permite bloquear el tráfico a la red de todas las aplicaciones, ya sea por WiFi o 3G, aunque para funcionar tendremos que rootear el móvil anteriormente.

Bloqueo de llamadas y SMS

Aunque no sea una herramienta de seguridad, esta función es realmente muy útil, ya que habilita un filtro de llamadas y mensajes entrantes y salientes. Podrás configurar grupos de contactos o números individuales, y tildar si queremos bloquear llamadas o SMS, entre otras pequeñas opciones.
antivirus

Antirrobo para el móvil

Esta función nos protege ante posible robos o pérdidas del celular, y esta aplicación antirrobo puede ayudarnos a dar con el paradero del mismo. Este módulo se instala de manera silenciosa y podemos disfrazarla con el nombre de otra herramienta, ya sea alarma, solitario, cronómetro, etc. Además, en caso de que el móvil tenga root, podrá resistir intentos de reseteo y hasta acceso vía USB.
La verdad que esta herramienta es muy útil para aquellas personas que cuenten con celulares Android. Y si eres de los que no tiene antivirus te aconsejo que vayas pensando en instalar uno. Y si eres de los que ya tiene un antivirus, ¿qué te pareció avast! Mobile Security?

Enlace | avast! Mobile Security