Pro ASP.NET MVC3 Framework

Acabo de terminar de leer Pro ASP.NET MVC3 Framework, un libro de Apress, escrito por Adam Freeman y Steven Sanderson. En pocas palabras, el libro es muy bueno, no exageradamente detallado pero buena aproximación para quiénes quieran ganar un nivel principiante/intermedio en la plataforma. Determinadas características han quedado afuera, y por supuesto, detalles de la implementación del framework también. Eso habría sido material para una buena cantidad de otros libros. Este en particular está muy orientado al ejemplo práctico, y es ideal para afianzar teoría con pequeños snippets de código que la hacen práctica. Cubre algunos aspectos relacionados a esto para darle un buen contexto y es una buena opción por su precio, pero no es suficiente para el que quiera entrar demasiado profundo en los interiores de la plataforma.

El libro se divide en tres grandes partes. La primera parte, llamada Introduciendo ASP.NET MVC 3, es una explicación muy a vuelo de pájaro de qué es MVC, cómo es la aproximación de Microsoft a él y unos ejemplos básicos para demostrar la organización de una aplicación MVC. Se habla un poco de inyección de dependencia, haciendo uso de Ninject, pero su aplicación es de lo más básica y no justamente asociada a las buenas prácticas, aunque como primer paso, es bueno. Habla de DDD y de TDD, ayudado de Moq, desde un punto de vista tan superficial que no hacen impacto en el resto del contenido, pero siguen estando ahí.

La segunda parte del libro, ASP.NET MVC3 en Detalle, comienza a hablar del sistema de ruteo, de cómo se enlazan a él los controladores y las acciones, el uso de filtros (casi tocando AOP para controladores, pero no mencionándolo), uso de controladores propios, autorización, generación de un engine propio de vistas, uso de helpers, vistas parciales, acciones hijas, templates de modelos, binding de modelos, validación, AJAX, y el uso de jQuery. En estos últimos dos puntos debo hacer una aclaración: la forma en la que se implementa AJAX es todavía muy Microsoft-oriented, del estilo de hacer una receta y que todo funcione de forma mágica. Se queda muy corto para customizaciones y aplicaciones reales con lógica de cliente compleja, pero recordemos que este libro es sobre ASP.NET MVC, no sobre JavaScript. Aún así, es un buen comienzo para profundizar en otro libro.

La tercera y última parte, Entregando Projectos ASP.NET MVC 3 Exitosos, cubre varios puntos extras no exactamente de a la plataforma pero relacionados. Uno de ellos es la seguridad. Se le dedica un capítulo entero a determinados tipos de ataque y forma de evitarlos. Como los otros temas tangenciales, no es una guía definitiva, pero un buen punto para comenzar. Otro capítulo está dedicado a la autenticación y la autorización, sin mucho detalle y sin mucho ejemplo esta vez, pero pasos básicos que nos permiten conocer varias opciones distintas para las distintas situaciones que debamos afrontar. El último capítulo de esta parte se enfoca en el deployment y la generación de paquetes de instalación. Nuevamente, no contiene mucho detalle.

El libro en general es bueno como introducción y bueno como ejercicio de aprendizaje. Es detallado en el comienzo y light al final, con lo cual sus 836 páginas en realidad son un resumen de mucho más que podría cubrirse. Es un balance apropiado, con lo cual recomiendo su lectura. Le otorgo unos 4 zorrinitos.

(Read more →)

Principios Universales del Diseño

Partiendo desde la base de lo básico

Este es otro de esos encuentros que hago en los foros de StackExchange, específicamente en el de User Experience. Aquí alguien preguntó ¿Cómo es que los bordes redondeados afectan la usabilidad?

La pregunta estaba orientada al saber el por qué los bordes redondeados son algo deseable, y de qué forma afectan a nuestra experiencia de una página web. Al mismo tiempo, también pregunta por qué la mayoría de los sitios permite que estos bordes aparezcan no-redondeados en versiones viejas de algunos navegadores, si es que es una característica tan importante.

La respuesta más votada habla de la psique humana y cómo el ser humano responde de forma más amigable a objetos redondeados. Hizo una referencia muy interesante también, basándose en el libro Universal Principles of Design, un libro que analiza desde lo más básico la experiencia de usuario en mundos más allá de la informática (incluyéndola también). Mostrando cosas como desde el diseño de juguetes, al diseño de menúes y pasando por el diseño de elevadores, este libro parece ser una de esas joyitas que iluminan más el por qué que el cómo hacemos lo que hacemos todos los días.

Soy un zorrinito especulativo.

(Read more →)

GoMo

La iniciativa mobile de Google

Gracias a i.MicroSiervos me enteré de GoMo, una aplicación web que toma nuestro sitio y nos analiza de forma personalizada las características del mismo y nos da sugerencias para pasar al mundo mobile. Cosas como la visibilidad de la página, los links, las tecnologías utilizadas y demás, está todo disponible en un reporte de forma gratuita.

Cabe destacar que este sitio es en realidad una iniciativa de Google, con lo cual gana un poco más de renombre.

Les recomiendo también visitar el mismo sitio desde un dispositivo movil, la enorme diferencia con el sitio original realmente habla de tomar una aproximación diferente al momento de pensar en mobile.

Soy un zorrinito móvil.

(Read more →)

Udacity

Otra iniciativa más de enseñanza online

Me encontré como noticia en ALT 1040 que Sebastian Thrun dejó Stanford para comenzar su propia iniciativa de enseñanza online, llamada Udacity. En este preciso momento se están enseñando sólo dos cursos: Cómo construir un auto que se maneja solo y Cómo construir un motor de búsqueda. Ambos están dados por Thrun y el del motor de búsqueda está también asociado con David Evans.

Se vienen nuevos cursos durante este año, que también parecen ser muy interesantes, como Sistemas Operativos, Sistemas Distribuidos, Redes, Seguridad, Algoritmos y estructura de datos, Prácticas de Ingeniería de Software, Construir aplicaciones web, etc. Nombré los cursos que están nombrados en la página al día de hoy, pero quién sabe qué traerá el futuro. Parece que por hoy está teniendo mucho éxito.

Soy un zorrinito estudioso.

(Read more →)

Jugando con la productividad

Conseguí una lapicera dorada +20!

La gamification (…jueguización? ugh) es algo muy común y popular en estos días para aplicar a distintas actividades, y alguien en Productivity de StackExchange decidió preguntar si existen técnicas de productividad basadas en juegos. Desafortunadamente las respuestas no son muchas y no hay demasiadas opciones, pero las pocas que hay son iluminadoras.

Uno es el caso de EpicWin, una aplicación de iPhone que en base a las tareas que uno completa va ganando puntos de experiencia y subiendo su nivel, obteniendo items, y equipando así a un personaje. Sus contrapartes en el Android Market son Task XP y RLRPG.

Hubo alguien que utilizó automatización sobre su inbox para generar gráficos de productividad. Muy seguramente esté trabajando bajo la premisa de Inbox Zero, también muy útil para tener la mente y el inbox limpio.

Alguien más se basó en Pomodoro y creó un juego integrado en su sistema de tiempos. Mantiene una wishlist de cosas que le gustaría comprarse, pero sólo se lo permite cuando, tras terminar una tarea, su oportunidad de tirar los dados le favoreció. No gana todo el tiempo, pero mientras más tareas haga siempre va a tener una oportunidad extra, aumentando las posibilidades.

Soy un zorrinito jugador.

(Read more →)

Naked password

yeaaah, venga esa complejidad!

De los rincones recónditos de User Experience en StackExchange y una pregunta de cómo incitar a los usuarios a poner passwords fuertes, me entero de la existencia de Naked Password, un plugin de jQuery que en sitios informales (muy informales) incentiva a los usuarios a usar passwords complejos, de forma… digamos… “natural”. Pueden probar el demo en su misma página.

Dicho sea de paso, otras buenas respuestas fueron:

Soy un zorrinito de poca complejidad.

(Read more →)

wkhtmltopdf

De HTML a PDF

Nombre complicado, pero aplicación muy útil. Hace algunos días ando trabajando con wkhtmltopdf, una aplicación basada en QT y en Webkit que renderiza páginas web y las convierte en PDFs. Lo interesante es la forma en la que se puede automatizar este proceso, generando elementos más allá del contenido en sí (como tablas de contenido, encabezados y pies de página, etc). Mejor aún, este paquete contiene wkhtmltoimage.

Por supuesto, todo esto puede ser parte de una aplicación mayor que genere PDFs o imágenes desde otro documento (luego publicaré algo sobre eso) basándose en un proceso automatizado. Parece que es muy comùn que aplicaciones utilicen esto de fondo para generar screenshots de páginas web o reportes PDF desde un HTML.

Soy un zorrinito screenshoteado.

(Read more →)

dnndev.me → 127.0.0.1

Dominio para desarrollos locales

En geeks.ms (via los enlaces interesantes de VariableNotFound) publicaron un artículo/tip/huevo de pascua (no lo considero un huevo de pascua) sobre dnndev.me, un dominio registrado y apuntando sus entradas DNS a 127.0.0.1. La idea detrás de esto es que los desarrolladores puedan utilizarlo para no modificar sus entradas en el archivo hosts. El nombre del dominio viene realmente de DotNetNuke Development, que es la razón que llevó a registrar este dominio. Yo me hubiera conformado con un localhost.com, o loopback.me, o algo así.

Realmente no es tan útil si uno sabe cómo editar los archivos de host, pero – y acá lo interesante – muchas veces no tenemos accesos de administrador para lograrlo, y en ese caso es en donde necesitamos un DNS que nos devuelva 127.0.0.1 para estas cosas. Ahí es donde esto se vuelve realmente útil.

A ver quién tiene una idea similar y registra dominios para apuntarlos a direcciones de redes C. No les gustaría ir a 192-168-0-1.my.net y que tengan acceso a su router? Mejor aún, podrían usarse alias en subdominios para IPs conocidas dentro de las redes. linksysrouter.my.net, broadcast.my.net, etc. ¿Quién será el valiente?

Soy un zorrinito cobarde.

(Read more →)

SOPA, PIPA, y MEPA que se están equivocando

El problema es la receta, no la sopa.

Hace mucho que todos estamos siendo bombardeados por la historia de esta ley que casi sigue su curso, pero hay un tema en particular que no veo nombrar y que creo es el más importante. Es como si todos se quejaran de un dolor de cabeza pero no se preguntaran por la enfermedad, sino sobre como quitárselo.

Esta es mi (humilde e ingenua) opinión al respecto.

¿Por qué SOPA tenía sentido?

(Antes de matarme, por favor lean lo que tengo para decir.)

Creo que el argumento de que los senadores no entienden de tecnología como excusa para decir que la ley no tiene sentido es un poco simplista. Puede que no haya sido una buena idea, pero estas cosas se piensan antes de convertirse en propuesta. Dejando de lado que esto puede haber sido algo que surgió de las empresas multimediales, la ley tenía un sentido práctico: detener la piratería.

Muchos critican que la ley era dirigida a regular a quienes permiten los accesos a la piratería más que a la piratería en sí. Eso también tiene sentido. Cuando el asesino serial no hizo caso a la ley de “no matar”, hay que asegurarse que nadie lo ayude. Si drogarse fuera ilegal, vender droga también lo sería, es natural pensar que si la piratería es ilegal, llevar a piratería también lo sería.

Por otro lado, los comentarios que he visto al respecto muestra muy poco conocimiento sobre las leyes de copyright. Las leyes de propiedad intelectual están muy claras y son vigentes. Esta ley no era nada nuevo en cuanto a qué regulaba, era nuevo en cuanto a quién estaría obligado a reaccionar y las medidas a tomar. (Más un par de detalles que a drede voy a dejar fuera.) En resumen, la ley decía “tomemos más seriamente las leyes que ya tenemos”.

¿Por qué SOPA no tenía sentido?

El problema de SOPA estaba más allá de SOPA, y esto es lo que veo que muy pocos dicen. El problema de SOPA era el copyright en sí mismo, pero cuando SOPA iba a aplicar esas reglas “de a de veritas”, todos nos preocupamos.

El problema con las leyes de la propiedad intelectual es que crean una propiedad sobre elementos que no pueden ser reclamados ni robados. Para hacerlo aún más obvio: reclaman propiedad en donde no se puede reclamar propiedad.

El mundo de a poco ha reaccionado un poco a esto haciendo de las licencias libres algo muy natural en entornos en donde no se puede ganar esa pelea. El software es un campo de batalla que el open source está ganando de a poco. (El modelo as a Service no probó ser rentable de casualidad.) La música y las películas es una batalla que el propietarismo ya perdió pero que resiste a retirarse.

Propiedad intelectual y derechos de propiedad

Tuve una charla con un colega al que le expliqué mi punto de vista de esta forma: ¿Qué es una canción, si no un montón de ruidos juntos? ¿Podemos decir que alguien es dueño de ese ruido y nadie más debe poder usarlo? ¿Los libros, un manojo de palabras?

Por supuesto, la respuesta de esta persona fue muy apropiada: hacer música cuesta dinero, tiempo y aprendizaje. Hacer libros requiere también tiempo, dinero, investigación, edición, etc, etc. ¿Cómo fomentar la cultura si esta gente no recibe dinero por lo que hace?

Y mi respuesta es que lo que esta gente vende no es ni ruido ni palabras, es lo extra que todo eso tiene. Uno no escucha música porque sí, sino que uno la experimenta y la disfruta (como todo arte, lo que se vende es el sentimiento – incluso aunque sea un resultado de una fórmula marketinera). Un libro no es un montón de palabritas juntas, sino la información extra que aporta. Lo que compro cuando compro algo de eso no es el material ni el medio (que, según la ley de copyright, no deben tener dueño), sino el ahorrarme tener que hacerlo yo. Estoy comprando trabajo pre-hecho.

En ese sentido, este trabajo es un trabajo como cualquier otro. Quienes escriben libros deben poder vivir de ello, quienes hacen música deben poder vivir de ello. Pero como un trabajo justo, debe pagársele por su trabajo, nada más. Su éxito es un resultado de qué tan bien está hecho su trabajo. Recuerden: cultura. La comercialización no es algo malo, pero ese es otro trabajo. Si lo que queremos es que alguien talentoso haga un buen trabajo, hay que mantenerlo bien pagado mientras ese trabajo se hace, no cuando ya está hecho. Hay que recompensar el buen trabajo, no el buen descanso.

Una vez hecha la obra, vale tanto como su material, porque ya no hay nada más que debería pagarse. ¿O acaso solo los que tienen dinero deben acceder a nueva información? ( ¿Es así como fomentamos la cultura?) Si el medio no vale nada, la obra en el mercado no debería valer nada. La piratería es la respuesta natural del mundo a eso.

Quiénes exigen que el copyright se pague caen en una de las siguientes categorías:

  • Parásitos: son los que quieren trabajar una sola vez, hacerse famosos y vivir de los que eso les de. Si de verdad quisiéramos fomentar la cultura, alguien talentoso debería trabajar más, no menos. Sin discriminar, todos deberían trabajar para pagar sus cuentas. (O nadie… pero esa es otra historia sobre la que no voy a hablar ahora.)
  • Narcisistas: exigen reconocimiento. (Yo caigo en esta, pero Creative Commons me da lo mejor de los dos mundos.)
  • Multimediales: (esta es la más interesante.) Estas son las empresas que consumen a los artistas y viven de ello. Por supuesto, ellos fabrican, distribuyen, venden, publicitan, etc. Estoy de acuerdo con que ese trabajo se pague… Pero no más que lo que ese trabajo vale. El copyright no tiene nada que ver acá.

La discusión sobre cuánto es lo justo para cada empresa es otra discusión extensa, y creo que abarca más de lo que puedo opinar acá. Pero no, la propiedad intelectual no tiene cabida ahí, solo el trabajo realizado.

¿Y entonces qué hacemos?

Primero, démonos cuenta de que estamos ladrándole al árbol equivocado. El problema no es SOPA ni la internet. El problema es el copyright y lo que estamos pagando.

Segundo, denunciemos las extorsiones de compañías a artistas. Si alguna vez tuvieras la oportunidad, exigí que tu contrato esté libre de copyrights propietarios. Si realmente amás lo que hacés, vas a comprender mis palabras. Si ves que tu copyright ya no te genera dinero, no nos hagas perder el tiempo y cambialo. Si tu película o tu canción ya se pirateó, ofrecé una descarga oficial y promové el modelo pay as you want, donaciones, vendé publicidad o merchandising, etc, etc.

Tercero, prestemos un poco más de atención a las injusticias de la propiedad intelectual que ocurren todos los días y protestemos por eso también. No esperemos a que la ley se tome en serio para darnos cuenta de que estaba mal.

Cuarto, dejemos de actuar como si la cultura fuera algo que nació en internet. Vivimos el 90% de nuestras vidas fuera de él (bueno… algunos un poco menos). Hagamos énfasis en que la libertad esté fuera de él también.

(Read more →)

Cómo uso Trello para trabajar

Mi guía novata a la organización

Hace un tiempo ya, y realmente, el día que salió, yo ya tenía una cuenta de Trello. Era simple, era bonito, era rápido, pero no veía el gran poder que tenía. Es porque, como muchas cosas, hay que saber utilizarlas.

Hoy es para mi una herramienta fundamental en mi organización (personal y laboral) y me ha vuelto más productivo y ha evitado muchos de esos momentos de “_ ¿y ahora qué?” o “ ¿en qué estaba?_”. Voy a compartirles el como para que sepan cómo lo hago yo, y espero comentarios de cómo lo hacen ustedes. Hasta que arregle los comentarios del blog, pueden responderme a @AlphaTwi.

Trello por default

Trello se compone de boards (pizarras) que a su vez se componen lists (listas), que a su vez contienen cards (tarjetas).

Cuando crean un board por primera vez, verán esto como su contenido.

Trello default lists

(Puede que se vea distinto si su resolución de pantalla es menor, en ese caso pasará al modo mobile.)

El flujo ya es bastante apropiado en la forma en la que se presenta, y es ideal para grandes grupos de gente (ah, es multiusuario). Básicamente, las cosas se van dando de alta en la lista To Do, al momento en que comienzan a trabajarse, se mueven a Doing, y al momento de terminarlas se pasan a Done.

Preguntas respondidas

La simple disposición de tareas de esta forma ayuda a responder muchas preguntas.

Cuando las cosas están en To Do es porque es importante ver cuáles son todas las cosas pendientes. Responde preguntas como “terminaremos para hoy/mañana?” o “cuando termines con esto estás libre?”.

La lista de Doing ayuda a ver qué progreso se está haciendo. Responde preguntas como “En qué está trabajando José?” o “Qué estaba haciendo yo?” (especialmente útil para los que lidian mucho con interrupciones).

La lista de Done ayuda a ver qué se terminó. ¿Qué sentido tiene esa lista? Ayuda a responder preguntas como “_ ¿Qué porcentaje de tareas terminamos?”, “ ¿Avanzamos mucho?”, “ ¿Qué está presente en esta versión?_”.

Mi variante: el día a día

Mis cambios a ese esquema por default no han sido radicalmente distintos, pero lo suficiente como para mencionar. Este es el caso de mi trabajo, tengo distintos esquemas para distintos tipos de proyectos personales (y creo que esa es una de las cosas que hace a esta herramienta tán versátil). Estas son mis listas y para qué se usan:

To Do: Igual que siempre este es el listado de todo lo que se tiene que hacer, o que algún día tiene que ser resuelto. Puede ser mañana, puede ser la semana entrante, puede ser “algún día” indefinido.

Get Done Today: Al principio del día, luego de checkear mis correos y verificar qué cosas tengo pendientes que no sabía antes, elijo desde To Do un listado de ítems que obligatoriamente tengo que terminar el día de hoy. Puede basarse en prioridad, en tiempo disponible, en urgencias, en la dirección del viento. La forma de elegirlas no importa, lo que importa es que esas tareas son mi compromiso del día. Me sirve también para reportar en nuestra scrum meeting qué es lo que voy a estar haciendo.

Doing right now: Como su nombre lo dice, el listado de cosas que estoy haciendo ahora mismo. Si no tengo nada acá, probablemente esté almorzando. Si tengo más de tres tarjetas aquí, seguramente algo saldrá mal. Cuando me llaman por teléfono, me buscan en la oficina o me interrumpe un email, este es el lugar al que vuelvo a mirar y resumo mis tareas.

Waiting for feedback: Este es el listado de cosas que comencé pero estoy bloqueado y requiero que alguien más intervenga. Es porque la tarea depende de alguien más o porque estoy esperando respuesta de alguien para poder continuar. Siempre les agrego un comentario a esas tarjetas para poder leer cuál fue la última vez que la actualicé y para saber qué estoy esperando que me respondan o hagan. Puede que una vez que me respondan las tarjetas se muevan de aquí a To Do, o, si tengo suerte, a Done.

Done: Nuevamente, aquí es donde vienen a morir las cosas que ya hice. Mantengo este listado hasta el fin del día, en donde lleno mis timesheets (mi empresa requiere que llene un listado de qué actividades realicé cada día). Las tarjetas me ayudan a recordar, y el tener que limpiar esa lista me hace recordar llenar el timesheet.

Este es un ejemplo con mi día de hoy (exitosamente cerrando la semana):

My Work Today in Trello

Probablemente lean mis ítems y no entiendan en qué estoy trabajando, porque los títulos no son muy explicativos. Ese es otro beneficio: no tienen que serlo. Sólo tienen que decir lo suficiente como para que yo recuerde de qué se trataba todo. Si necesito más detalles uso los comentarios o las descripciones de las tarjetas (que, dicho sea de paso, soporta Markdown). Si necesito varios puntos intermedios agrego una checklist (como el primer item en la imagen), y es todo a gusto.

Espero que esto haya sido útil para quién lo lea. Si tienen sugerencias, estoy encantado de oírlas, sería muy útil para mi también aprender de alguien que sepa organizarse mejor.

Soy un zorrinito organizado.

(Read more →)