monoku.blog
desarrollo e ideas en el dia a dia de monoku
desarrollo e ideas en el dia a dia de monoku
Jun 14th
Hace ya casi nueve meses que compre mi primer Mac, y aun no he hecho una transición completa a este. A parte de los multiples problemas que he tenido configurando todo el stack de django con mod_wsgi, las herramientas de edición que uso son las mismas que antes (Eclipse con Pydev). Lo unico realmente Mac que uso ahora son Keynote (de verdad muy bueno), Skitch y Cyberduck. De resto podría decirse que las herramientas son las mismas (o similares) que llevaba usando hace tiempo en Ubuntu.
Por eso, y ya no sintiendome tan novato en esta plataforma, he decidido experimentar un poco. En una primera instancia he decidido reintentar montar todo el stack de Django (eso ya esta listo casi listo). Ahora, he decidido reevaluar mi IDE.
Por lo tanto, durante las siguientes 3 semanas voy a evaluar 3 diferentes editores de texto/IDE para ver si alguno de ellos es mejor que Eclipse. Cada semana les contaré cómo me fue y al final decidiré cual es el camino apropiado.
Por lo pronto, el primero será Textmate:
Deseenme suerte!
Apr 5th
Una de las funciones utiles en Ruby on Rails para el manejo del cache (uno de los mejores amigos de la escalabilidad) es la función fetch.
cache.fetch("my_key") {
// return what I want to put in my_key if it is empty
"some_value"
}
Esta función permite especificar el código que se usará para “inicializar” los datos en caso de que no los encontremos en el cache. En django, sin embargo, no existe una función equivalente y es usualmente necesario evaluar si el dato ya se encuentra en cache para entonces decidir si se calcula o no. Siguiendo el principio DRY, creamos la función fetch para django que realiza esa acción:
def fetch(key,val_function,**kwargs): val = cache.get(key) if not val: val = val_function(**kwargs) cache.set(key,val) return val
Y para llamarla, definimos como se han de inicializar los datos (también es posible crear una función que use parámetros), e invocar la función fetch:
def get_value(param1,param2):
# solo un ejemplo sencillo, pero usualmente esto incluye ir a la db o cálculos.
return "value %s - %s " % (str(param1),str(param2))
fetch('key',get_value,param1='first',param2='second')
Espero les sirva y les ayude a utilizar el cache :)
Apr 5th
El año pasado (aunque no recuerdo exactamente) fue lanzado un framework de muy bajo perfil llamado rightjs. La apuesta era lanzar una librería rápida, fácil de aprender y que su core contarara con las mejores funcionalidades de los frameworks más populares. Desde ese día hasta hoy las cosas con este pequeño proyecto han cambiado de una forma inimaginable y ahora está a nível o por encima de muchos otros.
Pero ese no es el tema, muy probablemente en el futuro les estemos comentando más acerca de rightjs, por ahora vamos a revisar una de sus juguetes y cómo portarlo a jQuery. El fin no es lo que importa pues cualquier framework Javascript actual lo puede llegar a hacer, lo impresionante es lo creativo es los medios con los cuales se logra. Estoy hablando del acceso a selectores a través de literales de cadena y no a través de un método como lo hacen jQuery, Mootools, Dojo Toolkit, etc. Para empezar miremos la forma tradicional de capturar elementos del DOM a través del objeto jQuery y su equivalente a través de literales de cadena.
jQuery('#footer').click(...); // así lo haríamos normalmente
"#footer".click(...); // Y así usando literales. Life is Good!
En ambos caso estaríamos usando jQuery, la diferencia está en la forma en que accedemos a los selectores. Hemos desarrollado un plugin para poder hacer esto posible. Lo que quisimos hacer fue extender el objeto String nativo de Javascript con los métodos de jQuery y así hacer uso de éstos. Ahora vamos a revisar la anatomía del plugin que se puede ver en el código de ejemplo.
Lo que primero hacemos es recorrer el objeto jQuery.fn para luego agregarlo al prototype chain de String verificando que no haya conflicto con algún método ya existente. A cada nuevo método insertado en String le asignamos una función personalizada que se encarga de pasar la cadena de caracteres al objeto jQuery para que sea parceada y luego ejecutar el método jQuery correspodiente y así no afectar la funcionalidad normal.
Este plugin es un claro ejemplo de lo que se puede lograr al extender objetos nativos para así desarrollar aplicaciones mucho más elegantes y profesionales.
Mar 31st
Creo que no es noticia para nadie que en monoku no somos muy fan de Flash. Actualmente, mi portatil es un MacBook Pro y si no lo saben, en OS X el Flash realmente apesta :/.
Ahora, viendo la noticia acerca de Chrome dando un soporte mejorado para Flash (http://blog.chromium.org/2010/03/bringing-improved-support-for-adobe.html ) y la cantidad enooorme de comentarios que esta ha generado, decidi realizar mi propio aporte. No sobra mencionar que soy un fervoroso creyente que HTML 5 es el camino a seguir y que en mi humilde opinion, los estandares abiertos son el camino del bien.
Considero primero, que ser ultra fanatico de una tecnologia no tiene razón de ser. La mejor tecnologia es aquella que mejor te funcione, (y por eso instalé en una ocasión MS Office en Ubuntu), y de esa misma manera trato de ser abierto con todo, evaluando las diferentes opciones.
Qué no me gusta de Flash? No soy un desarrollador Flash a tiempo completo, pero debo decir que cuando me he tenido que enfrentar a él he visto código realmente… miedoso…. Tal vez la flexibilidad de la plataforma permite que mucha mas gente tenga acceso a esta y pueda desarrollar en esta (genial!) – lastimosamente no veo que se esten introduciendo buenas practicas o patrones en la cultura Flash que permita que estas persones mejoren el uso. Creo que en ultimas como desarrollador lo que me molesta de Flash no es Flash per se si no el uso que se ha dado de este.
Como usuario, me molesta en exceso que Flash no sea un elemento común del navegador. Esto hace que cuando yo este usando algún elemento en Flash (como dandole click a un video en Youtube) este se apodere del foco y no permita luego hacer “Tab” a otros elementos. Tambien ocurre que el Flash se “coma” el scroll o impida cambiar de pestaña… Not so cool :/ (oh! y el z-index, no hablemos del z-index!!)
Sin embargo, hay que admitir que Flash es una tecnologia muuuy difundida, casi pareciendo un estándar (o como diria don Ivan Sosa – un estándar de facto). Muchas de las aplicaciones que hoy en dia usamos usan Flash, y creo que esto no es malo (del todo) y que permite cosas que aun no permite HTML+JS+CSS y que es posible que ni HTML5 soporte (uso de webcam, para dar un ejemplo…).
La noticia que dio Google habla no solo de Flash si no de la definición del nuevo API para plugins (oh sorpresa! usará el tag de HTML5 <embed>…), cuestión que me parece MUY interesante ya que hasta el momento los plugins sufren de lo que me aquejo antes: al no hacer parte real del stack, el comportamiento de estos es indeseado en ciertas ocasiones. Una mejor integración solo puede hacer la web mejor, así como la estandarización claramente tambien! Para los radicales de ambos ramas: todos podemos vivir en paz… y si leen la noticia a fondo, podran ver que un tag html5 va a ayudar a integrar mejor Flash!
Asi, creo que esta noticia es una BUENA noticia, un paso más a la web como plataforma. Y en ESO si que creemos en monoku :).
Nota: Para los curiosos, en la próxima version de HTML que ya se empieza a dibujar, llamada simplemente HTML (se dejara de versionar como se hacia antes) es probable que ya se soporten diferentes dispositivos, el tag <device> tiene ese objetivo…
Dec 20th
Ayer inició de nuevo un proyecto en monoku en Java. Después de casi 2 meses de no usarlo, he vuelto al lenguaje donde (se supone) me siento mas cómodo. Y se sintió extraño…
Hace 2 meses mas o menos, he estado dedicado cuasi exclusivamente a Python, y en especial a django. Este cambio de lenguaje ha realizado en mi interior un cambio de estado, de rutina, de mentalidad.
El “;” ya no se siente natural. Los getters y setters se sienten como metodos extraños e innecesarios. Me siento escribiendo mucho código verboso. Definir variables, tipos, casting…. se siente innecesario… Comprendo el por qué son utiles, y he tenido errores en Python que no debería tener si se hiciera verificación de tipos estáticamente…. pero al final del dia… siento que mi código es muy verboso y que debo pedir permiso para hacer cosas que usualmente yo se que funcionan…. 2 enfoques diferentes, al alcance de un Command+Tab…


Otra cosa. Compilar: apesta. Sin importar que aporta tiempo de juego a nuestro dia, es desesperante tener que compilar, en especial una compilación compleja con empaquetamiento para montar en un servidor JEE….(1-3 mins, si compilamos GWT de paso… puede llegar a ser 2-10mins)
Afortunadamente algo le da cohesión a mi mente… eclipse es mi IDE para ambos idiomas, en todo OS, en todo momento. Y bien configurado, Ctrl+Space es tu amigo!! (Debería registrar esa frase) Es mas, ahora uso Eclipse en colores… no tan estandar, creo que un efecto de Python. Acá la muestra…
Que opinan? Que prefieren Uds.? Java? Python? (Que opinan de mi esquema de colores?)