¡Bienvenidos coders!
RSS

16 oct 2014

¿El analista es un programador jubilado?


Reflexiones sobre la vocación de los desarrolladores, y sobre la importancia de mantener la pasión por crear software a lo largo de nuestra carrera.

Empecé a programar a los 13 años. Empezó siendo un juego, y lo fue por mucho tiempo, hasta que empezaron a pagarme por hacerlo.

Entonces tuve que empezar a programar lo que me pedían, en lugar de programar lo que yo quería. Así y todo, seguía disfrutando de la tarea de programar; era algo que hacía con naturalidad y que me “salía solo”, como quien tiene algo de habilidad para tocar un instrumento musical. De todos modos tuve que estudiar para perfeccionarme y justificar lo que me pagaban por programar.

Con el tiempo y la experiencia, me volví “senior”. Eso significaba que recibía encargos más difíciles de hacer, y que podía resolverlos. Después comencé a repartir mi tiempo entre programar y especificar tareas para otros programadores.

Hasta que un día dejé de programar. Y me volví analista.

Hoy digo (mitad en broma mitad en serio) que “me jubilé como programador”.

¿Por qué? Dos motivos:

1. El conocimiento funcional que adquirí sobre determinados dominios hizo que mi tiempo fuera más valioso haciendo análisis que programando.

2. La actualización tecnológica me pasó de largo. Lo digo dejando caer una lágrima, pero hoy el esfuerzo que me demandaría ponerme al día con todas las herramientas y tecnologías de programación sería excesivo, y me distraería de las actividades de análisis que (por lo dicho en el punto anterior) me veo obligado a hacer. Sí debo mantenerme al día en el conocimiento de las nuevas herramientas y tecnologías, para saber qué potencial tienen; esa es una obligación ineludible de todo analista.

Nostalgias informáticas
A veces, las circunstancias me obligan a programar un poco. Y es entonces cuando me agarra un poco de nostalgia, que debe ser semejante a la que les da a los directores técnicos/ex futbolistas a quienes les cae una pelota a los pies y se ponen a hacer jueguitos.

Entonces me pregunto qué fue lo que me atrajo de la programación desde un principio. Y pienso que debe ser la posibilidad de construir cosas que funcionan (maquinarias, podría decirse) y hacerlo de una manera virtual, sin necesidad de ensuciarse las manos ni dominar herramientas y aparatos “físicos” que siempre me parecieron ruidosos, inmanejables y hasta peligrosos. Hay un placer innegable en escribir un programa y verlo funcionar en forma efectiva, sin errores. No importa que sea un juego o un sistema de facturación; es lindo ver una creación propia que funciona, y bien.

Pero uno se vuelve grande, y pierde la habilidad para salir a la cancha y correr atrás de la pelota. Hay que quedarse junto al banco y dar instrucciones. Entonces, la satisfacción no viene de construir algo y verlo funcionar, sino de dar instrucciones para que otros lo construyan, y ver que lo construyen bien, y que funciona, y darle una palmada en el hombro al que lo hace, y decirle: “lo estás haciendo bien siguiendo mis instrucciones”.

Convengamos que no todo analista es un programador jubilado (así como no todo DT es un ex jugador). Hay quienes salen de la facultad y comienzan a trabajar de analistas, sin haber estado dentro de la cancha corriendo atrás de la pelota. ¿Son mejores o peores analistas que los ex programadores?

Quién sabe. Quizás no tienen vicios de programador, entonces no tratan de que el programador haga las cosas como ellos lo harían, sino que le dejan libertad para que lo haga de la forma que le parezca mejor. Pero también puede ser que les cueste más trabajo encontrar un idioma común para transmitirle fielmente sus ideas al programador.

Todos somos traductores. El analista traduce lo que pide el cliente en modelos conceptuales; el diseñador y el programador traducen los modelos conceptuales en modelos de clases y finalmente en código de programación. A veces esas tres personas son en realidad una, a veces son dos, o tres.

Sería bueno saber en qué condiciones se obtienen las traducciones más fieles, si cuando los roles están en personas separadas, si cuando están en una o en dos, si cuando el analista es ex programador, o cuando el analista es sólo eso: analista y punto.

En cualquier caso, creo que lo importante es rescatar eso que nos atrajo a la actividad del desarrollo de software desde un principio, independientemente de que estemos en el sillón del analista, dibujando diagramas y narrando casos de uso, o en el del programador, tirando líneas de código: disfrutar de la satisfacción de ver funcionando a nuestras creaciones de software.

8 oct 2014

Ingeniería de requerimientos: cómo hacer una buena entrevista

Las técnicas periodísticas para entrevistar al cliente pueden ser de utilidad a la hora de relevar rquerimientos, con miras a obtener una descripción completa y enfocada en la solución que realmente se necesita.

Últimamente estuve leyendo algunas cosas sobre herramientas para ingeniería de requerimientos y otras yerbas, y me encontré con algo por demás interesante: el análisis lingüístico de textos. Resulta que uno somete a las transcripciones de lo explicado por el cliente a una de estas herramientas y, como por arte de magia, la herramienta devuelve una lista de las cosas candidatas a convertirse en clases conceptuales del modelo de dominio. De ahí en adelante es todo cuesta abajo. Genial, ¿no?

No.

Lo que las herramientas automáticas pasan por alto es que quienes describen el sistema a desarrollar son seres humanos. No son máquinas, ni son Sheldon Coopers, ni Mr. Spocks. Son seres humanos, y como tales, sus explicaciones están cargadas de defectos. No sólo por las ambigüedades y demás complicaciones propias del lenguaje natural, sino por las múltiples circunstancias que enturbian las narraciones y explicaciones de quienes tienen a su cargo relatar lo que necesitan en términos de sistemas.

Los ejemplos que se encuentran en libros de análisis y diseño suelen mostrar situaciones ideales, con casos de uso en los que los escenarios están descriptos minuciosamente, en forma concisa y completa, sin dejar escapar ni un detalle. Pero la realidad del día a día es muy distinta.

Lo que solemos encontrar cuando nos reunimos con el cliente (sin importar que el cliente esté representado por sponsors, stakeholders, expertos en la materia o incluso futuros usuarios del sistema) es que quien nos tiene que contar lo que se necesita incurre en una o más de las siguientes fallas:

-          No sabe lo que quiere en términos del sistema a desarrollar.
-          Tiene una idea de lo que quiere pero no la sabe explicar.
-          Sabe lo que quiere, pero no sabe lo que su empresa u organización realmente necesita.
-          Tiene sólo una idea parcial de lo que la empresa necesita, y la relata como si fuera el todo.
-          Sabe lo que la empresa necesita, y lo sabe explicar, pero su explicación está sesgada y prioriza aspectos del sistema que no son los más importantes para la empresa.

Si sometemos al análisis lingüístico a los relatos de una de estas personas, obtendremos una serie de correctas sugerencias de las clases que tiene que contener el modelo de dominio. Aclaremos: las sugerencias son correctas, pero están fundamentadas en una narración defectuosa. Un amigo mío suele decir: las herramientas automáticas se equivocan automáticamente.

Para corregir el factor humano que causa defectos en los inputs, lo que se necesita es un factor humano opuesto. Aquí es donde aparece la figura del entrevistador.

Quienes llevan años o décadas relevando requerimientos han desarrollado un instinto para entrevistar, y saben cómo interactuar con el cliente para obtener la información que necesitan y avanzar con el análisis por las sendas correctas. Pero quienes somos más novatos, corremos el riesgo de tomar al pie de la letra las declaraciones del cliente y utilizarlas como única, veraz y completa base para el posterior análisis.

En mi caso, tengo la suerte (?) de haber pasado algunos años trabajando en la industria editorial, escribiendo artículos y haciendo entrevistas periodísticas. Y aprendí algunas cosas que pueden ser de utilidad a la hora de relevar requerimientos.

La labor periodística
El verdadero periodista se enfrenta todos los días con la necesidad de entrevistar a personas y sacarles información que no quieren dar, o que no saben dar, o que no pueden dar. Pero se las tiene que ingeniar para salvar ese obstáculo y obtener la información a como dé lugar. Si no, se queda sin trabajo. Entonces, ¿qué mejor que emplear técnicas periodísticas para entrevistar al cliente y extraerle todos los conocimientos posibles?

A continuación detallo algunos consejos de verdaderos periodistas que pueden ser de gran utilidad a la hora de hacer ingeniería de requerimientos.

Lo primero que se debe hacer antes de encarar una entrevista es seleccionar el tema a tratar. Desde el punto de vista de un relevamiento, esto significa interiorizarse con la problemática que debe resolver el sistema a desarrollar. Simple y obvio.

Elegir a la persona a quien entrevistar. Esto no siempre está en nuestras manos; a veces la persona es designada por alguna “autoridad superior” y debemos atenernos a trabajar únicamente con esa persona (aunque no se descarta la posibilidad de que propongamos a otras personas para que aporten información adicional).

Diseñar un cuestionario con preguntas claves. Muy recomendable para encaminar el diálogo y evitar olvidos. El cuestionario, sin embargo, debe tomarse como una ayuda-memoria, ya que las preguntas más interesantes (y sus respuestas) suelen nacer en el diálogo dinámico.

Establecer una conversación relajada antes de abordar los temas claves. Esto lo sugieren los periodistas para establecer un vínculo con el entrevistado. No está de más tenerlo en cuenta; es bueno que exista una amistad con quienes deben suministrarnos información valiosa, y con quienes vayamos a trabajar todo a lo largo del proyecto.

No orientar, condicionar o sugerir respuestas. De lo contrario, corremos el riesgo de que nuestros preconceptos distorsionen la información. Hay que asumir que el que sabe es el entrevistado, lo cual no quita que debamos empaparnos con anticipación en el tema a tratar.

¡Que no se escape nada! Conviene tener a mano un grabador de periodista para que no haya información “off the record”. Para los periodistas, esta es una cuestión legal; para los analistas, es bueno tener un respaldo para recordarle al cliente lo que dijo y pidió.

Algunos otros detalles: colocarse en un nivel de igualdad con el entrevistado, sin faltar al respeto, pero dialogando de igual a igual; ir de lo más sencillo a lo más complejo; manifestar interés por la información vertida; dar al entrevistado el tiempo que necesite para pensar las respuestas.


Quizás estas ideas no sean herramientas infalibles, pero de seguro ayudarán a arrancar un proyecto de desarrollo con el pie derecho. 

1 oct 2014

La habilidad más importante que un desarrollador debe tener

(ante todo, una aclaración: el título se refiere únicamente a desarrolladores -analistas, diseñadores, programadores, arquitectos- que utilizan metodologías orientadas a objetos, si bien hoy en día son pocos los que no lo hacen)

Craig Larson, en su libro "Applying UML and Patterns" hace una pregunta: si debiéramos elegir la actividad práctica más importante entre todas las que componen el proceso de desarrollo orientado a objetos, ¿cuál sería?

Su respuesta es: la habilidad para asignar responsabilidades a los objetos de software. O sea, hay muchas habilidades valiosas, como por ejemplo diseñar eficientes bases de datos relacionales, escribir casos de uso completos y claros, o dibujar impecables diagramas de secuencia, entre muchas otras; pero la asignación de responsabilidades a objetos es la más importante de todas.

La razón (explica Larson) por la que dicha habilidad es tan importante es que debe llevarse a cabo en todo momento del proceso de desarrollo -ya sea mientras se dibuja un diagrama UML o mientras se está escribiendo código- y que influye fuertemente en la robustez, facilidad de mantenimiento y posibilidad de reutilización de los componentes de software.

Larson observa también que la asignación de responsabilidades tiende a ser una actividad desafiante para dominar, y su importancia es vital. "En un proyecto real, un desarrollador puede no tener la oportunidad para llevar a cabo ninguna otra actividad de modelado, por el frecuente 'apuro por programar'. Pero incluso en tal situación, la asignación de responsabilidades es inevitable".

Ahora, la pregunta es: ¿se puede cultivar esa habilidad, o se nace con ella?

Una forma de intentar responder a esa pregunta es jugar al DT (esto no es sugerencia de Larson, es pura cosecha propia). Jugar al DT significa imaginar que los objetos de un sistema son el plantel de un equipo de fútbol, y uno, como analista, es quien debe diseñar la estrategia de juego, acordando con cada jugador (u objeto) lo que debe hacer.

Un pequeño ejemplo: nos toca diseñar una herramienta para hacer el picking de pedidos en un depósito de mercaderías. Como directores técnicos, primero armamos el "plantel" imaginario con los objetos que van a formar nuestro equipo: un depósito, muchos artículos, muchas ubicaciones, un pedido que debe armarse. Hay un actor principal que es el preparador del pedido.

Comenzamos a armar nuestra estrategia de juego. Reunimos imaginariamente a nuestros objetos frente a un pizarrón (en el que imaginamos que está dibujado el bosquejo del modelo de dominio) y les decimos, señalando el dibujo: "el preparador llega con una hoja impresa en la que figura el detalle de artículos que debe reunir para armar el pedido. El preparador tiene una necesidad clara: armar el pedido lo más rápido posible, ya sea para poder seguir armando otros pedidos o para poder irse a su casa temprano. El preparador se fija en el primer artículo del pedido, y necesita averiguar rápido en qué parte del depósito encontrarlo".

Entonces miramos a nuestros jugadores y les preguntamos:

-¿Quién se encarga de decirle en dónde encontrar el artículo que busca?

-¡Yo! -contesta el objeto Depósito con firmeza.

-¡Bien! -gritamos entusiasmados. Ya tenemos asignada una importante responsabilidad a un objeto igualmente importante. Pero no es suficiente. Nos dirigimos a Depósito y le preguntamos:

-¿Qué información le das al preparador para ayudarlo a encontrar ese artículo?

-¡Le muestro todas las ubicaciones en donde hay almacenadas unidades del artículo que busca! -contesta Depósito enérgicamente-. ¡Ordenadas por cercanía, para que tenga que recorrer el menor camino posible!

-¡Perfecto! -replicamos palmeando a Depósito en el hombro. Volvemos a señalar el pizarrón y continuamos el relato estratégico-. Entonces el preparador se dirige rápidamente a la ubicación más cercana de las que le mostraste y allí encuentra el artículo. Toma las unidades que necesita y las coloca en el carro. Ahora necesitamos que el sistema se entere de que esas unidades fueron retiradas de su ubicación. ¿Quién se encarga de esto?

-¡Yo! -contestan a coro los objetos Artículo.

-¿Y cómo lo hacen?

-¡Le mostramos al preparador nuestros códigos de barra, para que los lea con su escáner, y el sistema sepa que ya no estamos en la estantería, y ahora formamos parte del pedido!

-¡Excelente!

Y así sigue nuestra imaginaria charla motivadora con nuestro plantel de objetos hasta que cada uno de ellos tiene perfectamente claro lo que tiene que hacer para llegar a cumplir con lo que necesita el actor (en este caso, el preparador).

Una curiosidad lingüística que ayuda en la metáfora del equipo de fútbol: en la terminología del UP (Proceso Unificado), se habla de los "goals" (metas u objetivos) de los actores para identificar requerimientos. Nuestro equipo imaginario, en lugar de tratar de convertir goles, busca materializar goals.

No me atrevería a proponer en recintos académicos la costumbre de dar vida, actitud y personalidad a los objetos como una forma de diseñar software; pero de seguro sirve como ayuda para ver a los sistemas como conjuntos de entidades con comportamiento, que colaboran en pos de un objetivo común.

Al fin y al cabo, si a los escritores de novelas les pasa que sus personajes parecen cobrar vida y decidir por sí mismos cuáles serán sus destinos, ¿por qué los objetos de software no pueden hacer lo mismo y decidir por sí mismos cuáles serán sus responsabilidades?

13 sept 2014

¡Feliz Día del programador!

Hoy es el día número 256 del año, lo que significa que los programadores festejamos nuestro día. El logotipo "oficial" de este contiene el número 1111 1111 binario, que en realidad no equivale a 256 sino a 255... pero, como se empieza a contar desde cero, bueno, podemos hacer una pequeña licencia poética para utilizar ese particular número binario a modo de símbolo representativo de nuestro día.

Lamentablemente, los programadores no tenemos asueto en este día tan especial, ni tampoco se hace festejo alguno (del cual yo tenga conocimiento, al menos). Pero esto podría cambiar próximamente, ya que hay un sitio en Internet empeñado en que el día del programador tenga reconocimiento oficial. El sitio en cuestión es www.programmerday.info. Por suerte, este año y el próximo cae en fin de semana, así que (a menos que tengamos algún trabajo urgente para terminar) podemos darnos el lujo de no trabajar en nuestro día.


Descarga del libro "Applying UML and Patterns 3rd Edition" de Craig Larman

Applying UML and patterns 3rd edition, Craig LarmanEstaba buscando la tercera edición del libro "Applying UML and Patterns" de Craig Larman para leer en mi Kindle, y no lo pude conseguir ni siquiera en Amazon. La única opción para leer el libro en formato de e-book parecía ser conseguirlo en PDF. Y leer en PDF en mi Kindle es muy incómodo, casi diría que prefiero llevar el ladrillo de más de 900 páginas en mi mochila y leerlo en papel, a la vieja usanza.

Entonces se me ocurrió ver si no había una forma de convertir libros en PDF a formato mobi (de Kindle). Y resultó ser que sí hay una forma. El sitio Zamzar ofrece una herramienta online y gratuita para convertir cualquier cosa en cualquier cosa, y uno de estos pares de cualquier cosas es PDF y mobi. Lo único que hay que hacer es subir el PDF, indicar una dirección de correo electrónico en donde se desea recibir
el archivo convertido, y listo.

Puse mi dirección de correo asumiendo el riesgo de que, a cambio, me llegara toda clase de spam, virus, intentos de phishing, etc., pero por suerte no fue así. A mi correo llegó el archivo .mobi con el libro de Larman completito.

Obviamente el formato no es todo lo prolijo que uno querría, pero sirve. Ahora puedo leer esa biblia del OOA/D (análisis y diseño orientado a objetos) en la pantalla de mi Kindle mientras viajo en tren, y sin sufrir las incomodidades de un PDF.

Para simplificarles la búsqueda a quienes quieran leer este libro en sus Kindles o en PDFs, a continuación incluyo los links para bajarlos:

PDF:
http://shink.in/RFYGW

mobi:
http://shink.in/i3VRE

Se aceptan agradecimientos, comentarios, likes, retweets, +1s, etc. :-)

5 jul 2014

Una noche en la oficina (cuento para programadores)

Una historia de ficción que guarda mucha semejanza con circunstancias reales por las que todo programador ha pasado alguna vez, sobre todo cuando los programas fallan
sin que exista una explicación lógica para tales fallos.
Nota 1: cualquier parecido a “Una noche en el museo” es pura coincidencia.
Nota 2: ver pregunta al final del relato.
Ya son casi las 11 de la noche del 12 de diciembre de 2006. Estoy solo en la oficina. Mis compañeros se fueron hace rato a sus casas. Incluso Jorge, el que se queda trabajando hasta tarde, también se fue. “¿Necesitás una mano?”, me preguntó antes de irse. “No, dejá, termino de instalar esto y me voy”. ¡Ja! Sí, seguro. Eso había sido hace casi cuatro horas. Ya avisé a mi mujer que no me espere para cenar. También avisé a la vigilancia que no me apaguen la luz, por que todavía estoy trabajando.
¿Por qué, digo yo, por qué? Hicimos todas las pruebas imaginables con el programa en el servidor de test y anduvo perfecto. Y ahora, en el servidor de producción, hace cualquier cosa. También, ¿a quién se le ocurre comenzar a usar una versión nueva del sistema un día 13? ¿No saben que es de mala suerte?
Pero tengo que dejarlo andando. Mañana van a llegar los directivos y lo primero que van a hacer es abrir su nuevo informecito de ventas acumuladas del mes. Y si ven los números que tira el informe, de la patada más chica voy a ir a parar a La Quiaca.
Miro a mi alrededor. La oficina está llena de adornos navideños. En el hall hay un arbolito de navidad con un montón de regalos falsos abajo. En la mesa de la recepción hay un muñequito Papá Noel con su trineo y sus renos. A su alrededor, un montón de tarjetas de navidad. La mayoría, enviadas por proveedores, para tratar de demostrar que no sólo se acuerdan de nosotros cuando quieren cobrar. Algunas tienen motivos navideños, otras tienen el logo de la empresa acompañado de algún dibujito navideño, como una hoja de muérdago. “No pueden ser tan ratas”, pensé. “¿Realmente creerán que mejoran su imagen poniendo el logo de la empresa en una tarjeta de navidad?”.
Basta de distracciones. Me tengo que concentrar. Ya son las 11:30.
Repaso todo una vez más. ¿Los datos que tengo en la base de pruebas son los mismos que me bajaron del servidor de producción? Ya lo verifiqué 200 veces, pero lo verifico una vez más. Las mismas cantidades de registros en las tablas. Comparo algunos totales mediante un par de consultas SQL y me dan exactamente los mismos valores.
¿Dónde? Maldición, ¿dónde está la diferencia?
Desde el programa, el informe de ventas acumuladas del mes me da cifras perfectamente razonables si lo corro desde el servidor de test, pero al correrlo en producción, las cifras son gigantescas, totalmente ilógicas. Y obviamente, no cruzan ni a palos con otros informes de ventas.
Compilo, instalo y pruebo una vez más. Las diferencias siguen siendo igualmente monstruosas. Pero si hago a mano, desde SQL, la misma consulta que hace el informe, pidiéndole que me acumule las ventas desde el 1° de diciembre hasta hoy, los resultados son exactos al centavo.
Miro el reloj de Windows en el preciso instante en que pasa de las 11:59 a las 12:00. Ya es trece de diciembre. Estoy perdido.
Mi vista se queda fija en el monitor, pero ya no ve nada. Mi mente ya no piensa.
–¡Psssst!
El chistido me causó un terrible sobresalto que me sacó del estado catatónico en que me encontraba. Miro a mi alrededor. Nadie.
–¡PSSSST! –repite con más fuerza el muñequito de Papá Noel desde la mesa de la recepción.
Solté una carcajada. Yo sabía que este día llegaría tarde o temprano. He perdido la cordura.
–Probá de vuelta –dice Santa Claus.
–¿Que pruebe qué?
–Corré de nuevo el informe
–¿En el entorno de producción? –no puedo creer que le estoy haciendo esa pregunta a un muñequito de Papá Noel. Pero parece que él sabe de qué le hablo.
–Sí, en el server de producción.
–Pero ya probé doscientas mil veces…
Papá Noel se cruza de brazos y saca panza, moviendo el piecito y haciéndose el canchero.
–Haceme caso, probá una vez más.
Con un gesto de incredulidad, vuelvo la vista hacia el monitor. Me conecto nuevamente al Server de producción. Abro el programa y pido nuevamente el listado maléfico de ventas acumuladas del mes. En lugar de mostrarme cifras ridículamente grandes, esta vez aparece un mensaje de error que me desconcierta más de lo que ya estoy, si es que eso es posible: “Error convirtiendo valor varchar a datetime”.
Me vuelvo a mirar a Papá Noel, a ver si él me explica lo que pasa.
–Fijate la fecha de la máquina.
Le hago caso: 12/13/2006. Mi grito se escucha desde la vigilancia.
–¡¡¡¡MALDITA CONFIGURACIÓN REGIONAAAAAAAAL!!!!
Llamo a la vigilancia para avisar que estoy bien. No le dan importancia, están acostumbrados a los exabruptos de los que se quedan trasnochando en la oficina.
Papá Noel ahora tiene un gesto aún más canchero que antes.
–¡Gracias chabón! –le dije.
–De nada, pibe.
Ahora está todo claro. ¿Quién inventó las conversiones implícitas? ¿Para qué dejar que la máquina decida cómo convertir un valor de un tipo a otro, si no sabe? Claro, recién cuando no puede, dice “no puedo convertir el valor varchar a datetime…”. ¡Pobrecita, no puede convertir! ¿Por qué no lo decís de entrada y dejás que yo haga la conversión desde mi programa? Qué te parió… Un amigo mío suele decir que los sistemas automáticos se equivocan automáticamente, y tiene mucha razón.
Ahora no tengo apuro, total, ya es de madrugada. Me preparo un café, paseo un poco por la oficina mientras me lo tomo, escuchando la vibración de los coolers de los servidores. Con toda tranquilidad, reviso el código, saco las conversiones implícitas y las reemplazo por conversiones hechas a mano; como Dios manda.
Compilo, instalo y pruebo. Ahora anda de maravilla. Miro una vez más a Papá Noel. Está inerte, pero alcanzo a ver que su manito tiene el pulgar apuntando para arriba, en señal de aprobación.
Voy caminando por la calle en busca de un taxi que me lleve a casa. En la vereda de enfrente, un cartel luminoso en la marquesina de un negocio indica la temperatura, la hora y la fecha: 26° – 02:30 – 12/13/2006. Me detengo a mirarlo unos segundos. Tras un certero piedrazo, el cartel que antes era luminoso ahora es sólo una franja oscura. “La próxima vez lo van a pensar dos veces antes de instalar sin revisar la configuración regional”, pensé.
Pregunta: ¿por qué el informe se comportaba de distintas maneras antes y después de que hablara Papá Noel?

26 jun 2014

Google I/O 2014: Todo lo que hay que saber

Un resumen de los anuncios hechos por Google en la más reciente edición de su conferencia para desarrolladores.

Google no se guardó nada en materia de comentarios durante su conferenccia de desarrolladores de casi tres horas el miércoles pasado. Algunos anuncios, como Android L, fueron esperados, mientras que otros tomaron por sorpresa a la audiencia. A continuación, un breve resumen.

Android L
La nueva versión del sistema operativo para teléfonos y dispositivos móviles, Android L, estará disponible para los usuarios en otoño (o en primavera para quienes habitamos el hemisferio sur del planeta). Actualmente hay disponible una versión preview para desarrolladores.

Una de las principales características de "L" es el nuevo lenguaje de diseño de la plataforma, llamado Material Design, que correrá a lo largo de teléfonos, tabletas, relojes, Chrome OS y la web.


Android L también incluye algunas serias mejoras de performance, prometiendo llevar juegos estilo PC a los teléfonos y tabletas, además de nuevos controles para optimizar la duración de las baterías. Las notificaciones también sufrieron un muy necesario rediseño: ls usuarios podrán leer y descartar las notificaciones directamente desde la pantalla de bloqueo de sus dispositivos.

Hablando de pantalla de bloqueo, Android L también se integra con relojes impulsados por Android Wear para autenticar la identidad del usuario. Esto significa que quien use un reloj con Android Wear no necesitará ingresar su pin para desbloquear el teléfono.

La compañía también anunció una nueva iniciativa, llamada Android One, orientada a llevar dispositivos de costo accesible y alta calidad a países en vías de desarrollo.

Android Wear
La plataforma de Google para relojes y otros dispositivos vestibles se integrará con Android L y Android TV. Al descargar una nueva app al teléfono, por ejemplo, la versión Android Wear de la app automáticamente se descargará al dispositivo. Las actualizaciones subsecuentes de la app también se descargarán automáticamente.

Las notificaciones en Android Wear están diseñadas para mostrar sólo la información más relevante e importante a cada momento. Las notificaciones vendrán de las app en el teléfono y en el reloj, al igual que las alertas contextuales de Google Now. Si se recibe una nueva notificación en el teléfono, como por ejemplo un mensaje de texto entrante, el reloj vibrará y una tarjeta se mostrará en pantalla con una vista previa del mensaje.

Las notificaciones también pueden ser visibles de un vistazo (en inglés es "glanceable", y a mí me gustaría traducirlo como "pispeables"), al igual que las recientemente agregadas a Google Glass. Esto significa que se puede interactuar con ellas simplemente elevando la muñeca.

La plataforma también tiene la habilidad de seguir estadísticas de fitness, como por ejemplo la cantidad de pasos dados al día y el ritmo cardíaco, siempre y cuando el reloj soporte esas características.

Los primeros dispositivos impulsados por Android Wear (los relojes G, de LG, y Gear Live, de Samsung) están disponibles actualmente, y el Moto 360 de Motorola saldrá a la venta en los próximos meses.

Android Auto
Google finalmente llevó a Android a los automóviles con Android Auto, la plataforma de autos conectados que guarda semejanza con CarPlay, de Apple.

El sistema se maneja íntegramente por comandos de voz y permite llevar apps de navegación, comunicación y música desde el teléfono hasta el panel del auto. Los comandos de voz, habilitados por Google Now, permiten enviar y recibir mensajes de texto, obtener indicaciones y hacer llamados telefónicos usando únicamente comandos de voz.

La compañía cuenta ya con más de 40 socios para el sistema por medio de su Open Automotive Alliance, lanzada anteriormente este año. El lanzamiento de Android Auto coincidirá con el de Android L más adelante este año, pero los desarrolladores pronto podrán comenzar a crear sus apps para autos con el Android Auto SDK, el cual será publicado en breve.

Android TV
Google develó a Android TV, una combinación de televisión en vivo, apps Android y servicios Google Play. La plataforma enfatiza la búsqueda sencilla y soporta búsquedas por comandos de voz. Las búsquedas también pueden controlarse por medio de relojes impulsados por Android Wear.

Android TV también soporta a Google Cast, lo que significa que funcionará en forma similar a un Chromecast, permitiendo transmitir contenidos desde un teléfono o tableta directamente hacia el televisor. Hablando de Chromecast, Google también anunció algunas mejoras al dispositivo de streaming: no será necesario conectarse a la misma red Wi-Fi para usar un Chromecast, lo que significa que se puede conectar fácilmente cualquier dispositivo con cualquier televisor, sin necesidad de compartir contraseñas de Wi-Fi o información de redes. Chromecast también soportará mirroring entre un televisor y un teléfono o tableta.

Google trabajará en conjunto con Sony y Sharp para desarrollar televisores con Android TV, y con Razer y Asus para crear sintonizadores (set-top boxes) específicos para gaming.

Chromebooks
Google parece querer juntar a Chrome OS y a Android para ofrecer una experiencia de uso más unificada entre las dos plataformas.

Las notificaciones de Android, y eventualmente las apps nativas de Android, llegarán a las Chromebooks. La característica de notificaciones permitirá ver llamadas entrantes, mensajes de texto y niveles de batería directamente en el escritorio. Las aplicaciones Android nativas seguirán el mismo camino: hubo demostraciones de Vine, Flipboard y Evernote corriendo sobre una Chromebook. Pero el esfuerzo está todavía en una "fase temprana" de desarrollo, por lo que no está claro cuándo se podrá contar con algo más que una vista previa de estas características.

Google Fit
Por último pero no por eso menos importante, aparece Google Fit, una nueva plataforma de Google para seguimiento de información sobre salud y bienestar. La plataforma estará abierta a desarrolladores y próximamente habrá un SDK disponible.

Fit servirá como un concentrador de información sobre salud y bienestar, utilizando la información recolectada por sensores en los teléfonos y dispositivos vestibles para brindar recomendaciones relevantes. Entre los primeros socios en esta iniciativa se encuentran Nike, Adidas, Polar, HTC y Motorola.



16 may 2014

Intel prepara su primer procesador de 4 GHz

Hace alrededor de 10 años, Intel planeaba alcanzar el hito de los 4 GHz con su microarquitectura NetBurst, pero debió dar marcha atrás, retirándose de la carrera de los MHz. Ahora, los Core i7 de la generación “Devil’s Canyon” tienen planeado superar esa barrera que parecía infranqueable.

Lisa Graff, la más grosa del grupo Plataformas Cliente de Intel
Si bien no hay una confirmación oficial al respecto, trascendió la noticia de que uno de los chips de formato LGA1150 que Intel lanzará en las próximas semanas o meses superará la marca de 4 GHz de velocidad.

Las especificaciones de los chips de la familia “Devil’s Canyon” fueron publicadas por el sitio Expreview (www.expreview.com), dando cuenta de un modelo llamado Core i7 4790K que contará con 4 núcleos con Hyper-Threading que correrán a 4 GHz y alcanzarán 4,4 GHz en modo Turbo Boost. Además, este modelo incluirá 8 MB de caché, tendrá un valor de TDP de 88W y utilizará un núcleo gráfico integrado HD Graphics 4600 con hasta 1.250 MHz de velocidad.

Otros integrantes de la serie Devil’s Canyon serán el Core i5 4690K, también de 4 núcleos pero con frecuencias de 3,5 GHz / 3,9 GHz y 6 MB de caché, y el Pentium G3258 “edición aniversario”, cuyas características técnicas se desconocen.

Los chips de la familia Devil’s Canyon tendrán el multiplicador desbloqueado y una interfaz térmica mejorada entre los núcleos y el disipador de calor, lo cual debería ampliar su capacidad de overclocking. Muchos entusiastas se han quejado de la interfaz térmica de los chips Intel Core i “Haswell” de la serie 4000, acusándola de limitar el potencial de overclocking de los chips.

Los microprocesadores Devil’s Canyon serán compatibles exclusivamente con las motherboards basadas en los chipsets Intel Z97 y H97, no pudiendo funcionar en mothers con chipsets de la serie 8.

En la actualidad, la frecuencia a la que corren los núcleos de un chip tiene un impacto muy relativo en la auténtica performance de los mismos. Sin embargo, superar la barrera de los 4 GHz representa para Intel un hito importante en muchos aspectos, cosa que seguramente atraerá a los entusiastas.

En términos de frecuencia pura, AMD está por delante de Intel, ya que desde hace un año ofrece su microprocesador FX-9590 que corre a 4,7 GHz y alcanza los 5 GHz en modo turbo. Aún así, la serie FX no alcanza a superar en performance a los chips de la familia Intel Core i7. Tal vez, la aparición en el mercado de un chip Intel de 4 GHz le dé una motivación a AMD para preparar un procesador que alcance los 5 GHz en modo default.

26 abr 2014

Code Babes: aprendiendo a programar con profesoras strippers

La premisa de Code Babes es facilitar el aprendizaje de programación dándole al alumno un atractivo extra: motivación sexual. Cada vez que el alumno pasa una prueba, su instructora se quitará una prenda, hasta donde sea necesario para motivarlo.

Varios comentarios en Hacker News indican que unas cuantas respuestas a las preguntas están mal, reforzando el argumento de que este sitio es en realidad una broma.

Sexismo, discriminación, inmadurez, y muchas críticas más se merece este sitio. Pero... a simple vista, parece una forma efectiva de incentivar el aprendizaje (al menos en los hombres).

Una de las sexys teachers