miércoles, 26 de agosto de 2009

The Passionate Programmer




Learn a new programming language. But, don’t go from Java to C# or from C to C++. Learn a new language that makes you think in a new way. If you’re a Java or C# programmer, try learning a language like Smalltalk or Ruby that doesn’t employ strong, static typing. Or, if you’ve been doing object-oriented programming for a long time, try a functional language like Haskell or Scheme. You don’t have to become an expert. Work through enough code that you truly feel the difference in the new programming envi-ronment. If it doesn’t feel strange enough, either you’ve picked the wrong language or you’re applying your old way of thinking to the new language. Go out of your way to learn the idioms of the new language. Ask old-timers to review your code and make suggestions that would make it more idiomatically correct.




Legendary jazz guitarist Pat Metheny has a stock piece of advice for young musicians, which is “Always be the worst guy in every band you’re in.”

Before starting my career in information technology, I was a professional jazz and blues saxophonist. As a musician, I had the good fortune of learning this lesson early on and sticking to it. Being the worst guy in the band means always playing with people who are better than you.


The Passionate Programmer
Chad Fowler

domingo, 16 de agosto de 2009

Usability Engineering - Jakob Nielsen


Details Matter

Unfortunately, usability often depends on minor interface details, which is why systematic usability engineering work is necessary to ferrer out those details. For example, Simonelli[1989] reports on the development of instructions for a frozen-dinner microwave indicator that would gradually change from being white to being blue. User testing showed that the phrase "turns blue" was much poorer than "white disappears" for describing this change, even though the two phrases are logically equivalent relative to this process. The blue color was not uniform - it was dark blue in some places and light blue in others - so users were uncertain "how blue is blue?" when the first wording was used.


Usability Engineering
Jakob Nielsen

sábado, 1 de agosto de 2009

Jugando con Jquery y basuras varias :-)

Estoy tratando de implementar un minúscula app que me permita gestionar, posiciones georeferenciadas (nada del otro mundo) pero con la salvedad que quiero que esta sea de carácter muy simple en todo sentido, sobre todo en usabilidad.

Arquitectura:

Desde hace algún tiempo estoy exponiendo servicios RestFul (sin la utilización de frameworks MVC) pensé en utilizar ASP.Net MVC pero la verdad es que no tenía mucho sentido cuando finalmente voy a terminar haciendo lo mismo "exponiendo servicios Rest" así que deseche esa idea y seguí utilizando WCF (Windows Communication Foundation)

Una de las muchas cosas que me agradan de estos servicios Rest es que:

- Respetan el paradigma HTTP (request/response) sacando el máximo provecho del mismo.

- Conceptualmente son muy claros, ordenados y directos (no hay que ser muy astuto para entenderlos)

- Siempre permiten por su naturaleza de servicio, que si a un alguien, no le gusta, le incomoda mi supuesto de presentación (HTML CSS JS), pues bien, se puede idear su propio concepto de presentación, con la tecnología que más le acomode (Adobe FLEX, MS$ Silverlight, JavaFX, MS WinForm... cualquier ""cosa"" que permita hacer un http request.)

- al revés, si a un alguien no le acomoda cierta tecnología de servidor... puede reconstruir la exposición de servicios, una vez más con la tecnologías que más le acomode y esto sin desechar las presentaciones ya creadas. (A bajo nivel, a alto nivel, da igual... mientras respete el estándar)

Sin ir muy lejos, tal como ya mencione, hoy trabajo con lo que propone MS$ (las "reglas" de MS$ específicamente WCF), sin embargo tengo una implementación con Java Restlet (GlassFish) "No J2EE" y tratando de simplicar aun mas (intento con Python CherryPy "Web Server Gateway Interface" (WSGI) y LightHTTP)

Una novedad de este desarrollo es que utilizo dos implementaciones de patrones para NHibernate que no había utilizado con anterioridad UnitOfWork quien es el encargado de gestionar la session "session per request" y Repository. Quien maneja modelo de dominio con una serie de métodos genéricos ya definidos .. Que luego vuelvo a envolver con lo que he llamado manager y una interfaz CRUD que me supone orden. (Otro Repository)






Presentación:

A grandes rasgos y sin entrar en mucho detalle o polémica (existe gente a favor y gente en contra) reemplace ExtJS por Jquery pudiendo así volver a un concepto no tan acabado o de alto nivel acerca de mi presentación en HTML CSS JS sino algo más directo y simple...

También he cambiado la forma en la que estructuro la presentación ... no quiero tener solo widgets bien modelados y estructurados, Sino que además un modelo que signifique algo .. Acá por ejemplo he vuelto a ocupar un concepto muy antiguo pero no menos útil... clases proxy centralizadas.

Por utltimo y ya para terminar de escribir jeje ya a bajo nivel intento crear mi propia abstracción sobre Javascript...algo sencillo que me permita definir clases y herencia simple...(OOP with JS) utilizando el prototype de Javascript (sin utilizar un framework claro esta :-)).... mi mejor referencia ... es ExtJS Core, OL (Openlayer) y Proj4JS ...estos dos ultimos poseen "tipos base" genericos que trabajan mas menos de la misma manera ..almenos ya manejo mis propios eventos, que me interesan en particular para encapsular las llamadas Asyncronicas XHR ... (es decir las clases proxy)

Entonces resumiendo:

- Microsoft WCF (MS FrameWork 3.5 SP1) (IIS7) RestFul services
- Log4Net
- NHibernate - Persistencia
- Extencion Spatial para NHibernate
- Patron UnitOfWork & Repository para NHibernate.
- PostgreSQL / PostGIS

y en presentación:

- HTML limpio (table-less)
- CSS
- JavaScript
- Jquery
- Jquery.ui
- Jqgrid
- Jq.select
- Proj4JS
- Json2
- Google API V2/V3 (cree dos provedores para manejar ambas API)
* en V3 los marker no son DnD :-S

- Servicio de Geocodificacion de Ultramap

En 3-4 días (fin de semana aburrido) aun no está del todo terminado, pero el resultado final (que es lo que importa) se ve más menos así: