jueves, octubre 19, 2006

Podvcasts

En lo personal no soy fan de la música, me gusta una que otra rolita pero nada mas, no tengo ningún CD de música en mi casa y mi laptop no tengo mas que 25 archivos mp3 de música así que nuca he viso la necesidad de comprar un mp3 player

Sin embargo con el fenómeno del podcasting tengo un chingo pero un chingo de shows en mi PC y me gusta escucharlos por las noches ahora que ando en el DF y estoy solito en el hotel ahora gracias a esto si he pensado en adquirir un mp3 porque eso de estar sacando la Laptop para escuchar dichos podcasts pos esta de gueva.

Los podcast que me gusta escuchar son de IT (daaaaa) y muchas personas me han criticado el echo de que me gustan dichos podcasts y no la musica pero como todo en la vida tiene su lado positivo y su lado negativo.

Lo positivo
Ok queria listar los beneficios de escuchar o ser parte de un podcast sin embargo déjenme les comento mi experiencia del día de hoy para que se den una idea.

Estaba en una junta la cual estábamos definiendo la arquitectura de una aplicación, estaba el cliente y algunos papas fritas de IT en la sala. Total que todo el mundo exponiendo y viendo si la arquitectura esta fe asible y que me acuerdo de un podcast de arquitectura el cual escucho el podcast se llama ARCast. Pos total que empiezo a hablar y hablar y hablar y hablar, puta madre pocas veces habla tanto en una junta.

Total que todo fue un éxito y pos yo como pavo real y todo gracias a ese podcast y conste que digo que es un podcast no un show en especifico que un show nunca reaplazara a las experiencias de la vida y a los jodasos que nos damos cuando cometemos errores..

A lo que voy es que los podcast se han convertido en una fuente de aprendizaje muy buena y donde encuentras temas de todo tipo (hasta como sacarte un moco sin tocar el cerebro)..

Lo Malo
Pero como todo lo bueno tiene su lado oscuro pos ándele aquí les va.

Mucha de la información que se platica en los podcast no es fiable uno tiene que saber que escuchar y que no y sobre todo a que hacerle caso. Muchas veces no es la intención de la persona que esta podcsteando el transmitir mal la información sin embargo es la inexactitud la que puede provocar dicha falla.

No me malinterpreten los podcasteros tiene que ser muy valientes para ponerse delante de un micrófono y hablar como merolico durante un rato. Yo lo se por experiencia propia el punto es que uno no debe de confiar en todo lo que oye se tiene que tener un criterio y sentido común para saber descartar lo inexacto y uno solo lo puede adquirir dandose de jodazos y cometiendo errores. Yo en lo personal trato de ser lo mas exacto posible cuando podcasteo pero a veces so nos va una o las dos sin querer el chiste es reconocer el error y admitir que LA CAGAMOS de vez en cuando..

Pero bueno en resumen a mi en lo personal los podcast me han ayudado mucho en mi desarrollo profesional.

Cuídense y no coman tierra

viernes, septiembre 08, 2006

Aguas con el AJAX

Hoy en día cualquier persona que sea digno de llamarse programador Web ha escuchado acerca de AJAX, no es raro ver que en los últimos meses nos han bombardeado con información acerca de esta tecnología, blogs, podcasts, libros, seminarios, incluso ya existe una conferencia de AJAX.

La columna principal de AJAX se basa en la creación del objeto HttpRequest el cual abre un canal de comunicación hacia el servidor Web tal y como lo hace el navegador, por medio de javascript podemos abrir un canal de comunicación hacia el servidor y solicitar por una pagina ya sea estática (HTML) o dinámica (PHP, ASPX, JSP, etc.) lo que obtenemos del resultado de esta llamada va a ser exactamente el mismo resultado que obtendríamos si mandamos llamar la misma pagina desde el navegador. Por lo regular se mandan llamar scripts que regresen XML o JSON. Para todas aquellas personas que no lo único que saben es de AJAX es que es un químico que se utiliza para limpiar (mi mama lo usa :)) revisen la categoría de AJAX en el blog de Carlos Madrigal

Gracias a AJAX podemos por fin proveer aplicaciones responsivas tal y como lo haríamos con una aplicación de escritorio, bueno y que tiene de malo esto? Se preguntaran, bueno no tiene nada de mal siempre y cuando se cuente con un mecanismo de seguridad bien definido.

Seguridad? Seguridad!!!!! Pero si solo estamos hablado de unas mugrosas paginas que dibujan la interfase de usuario y ya esta, porque debemos de preocuparnos por la seguridad? Que se preocupen los gueyes del Server para que no los hackeen y se roben los datos de las bases de datos.

La implementación de AJAX en nuestras aplicaciones Web abre la puerta a una nueva plataforma de ataques por parte de los gueyes mal intencionados que no tienen otra cosa que hace mas que el estar chinge y chinge y chinge y chinge (cual vil pinche mosca en una mañana de verano).

Existen diferentes tipos de ataques que un guey mal intencionado podría hacerle a nuestro sito cuando este implementa AJAX, estos son solo algunos de ellos.

Information Leakage – (en perro- ups se te vieron hasta las entrañas ).

La situación mas común se da al momento de desarrollar nuestras formas de captura o de edición, típicamente estas formas piden por un ID por ejemplo del cliente con AJAX el programador puede crear un pedazo de javascript que cuando el campo de texto pierda el foco ejecute una petición al servidor para traerse la información ya sea en formato XML, JSON, etc. Este tipo de escenarios le dan a nuestros atacantes el “how to” (en perro- ya se como chigados hacerle ), ya que se enteran de nombres de funciones, tipos de retorno, parámetros, rangos validos de datos, etc.

Resource Transfer (en perro- presta ese archivo)

Las requisiciones echas con AJAX son idénticas a las echas por el navegador, el servidor no tiene forma de identificar si la requisición viene del navegador o de un script, lo que significa que por medio de AJAX se puedan solicitar archivos, por ejemplo, que pasa si la configuración de nuestro sito esta en un archivo de configuración, por medio de AJAX se podría requerir ese archivo de configuración (todo esto sin que el usuario lo note) y ver su contenido por ejemplo el nombre de usuario y la clave de acceso a la base de datos donde se guardan los números de las tarjetas de crédito de los clientes (ay guey!!!!)..

Injection of script (en perro- de donde salio eso)

Esto es básicamente es la inyección de un script dentro de una pagina servida por el servidor web, este script al ser ejecutado pone al usuario a merced del maldito script, el script puede robarse a la malagueña las cookies, variables de sesión o información de la PC en donde se esta ejecutando el navegador, etc. y enviarla por medio de AJAX a la dirección de mendigo hacker..

Ajax Bridging

En este mundo en donde la arquitectura que esta de moda es SOA, muchas de las empresas están ofreciendo sus servicios a través de este tipo de arquitectura, en pocas palabras se les esta abriendo digo están abriendo sus aplicaciones. Sin embargo por cuando usamos un framework por razones de seguridad este framework AJAX no pude hacer llamadas hacia otros sitios que no sean de los sitos de los que vienen, por ejemplo la implementación de AJAX bajada de google.com no se puede conectar a yahoo.com o live.com, si la aplicación tiene la necesidad de hacer esto hay algo llamado AJAX bridge el cual como su nombre lo indica es un puente entre sitios, la comunicación entre estos sitios por lo regular se lleva a cabo por medio de web services.

El problema que se podría presentar es el abuso por parte de un cliente hacia el proveedor de servicios, por ejemplo consideremos esta situación:

La empresa negocios.com provee un servicio de directorio de negocios a sus clientes, esta empresa ofrece diferentes tipos de membresía que van desde la consulta de 10 negocios (la membresía gratis) hasta el acceso ilimitado del mismo (la membresía non plus ultra $$$$$$) .

El sito miempresa.com tiene una membresía non plus ultra o sea acceso ilimitado al directorio de negocios, el mañoso podría hacer diferentes cosas en este escenario

Una seria si el hacker desea copiar toda la base de datos hacinado un chingo de llamadas por medio del puente de ajax de miempresa.com. debido a la relación de negocio entre estas dos partes no hay nada que pueda impedir este tipo de ataque.

Otra cosa que podría hacer el jijo del maíz es lanzar una ataque malicioso de manera que el proveedor (negocios.com) lo detecte y debido a que proviene del puente ajax de miempresa.com le niegue el servicio miempresa.com, causandole un daño a esta o alguno de sus clientes.

Como ven esta es solo una pequeña lista de los riesgos de seguridad a los que nos podamos enfrentar si implementamos AJAX sin tener diseñado un esquema de seguridad adecuado.

La primera vez que escuche acerca de AJAX no me emocione mucho, uno de mis problemas fue que no encontraba una aplicación practica para tal tecnología, sin embargo conforme escuchaba mas de AJAX me empecé a emocionar mas y a ver las posibles aplicaciones de este tipo de tecnologías y estoy seguro que muchos están en este tipo de situación, sin embargo una de las cosas la mayoría esta haciendo es programando a la copy & passte (en perro: copiar y pegar) y no entienden las implicaciones o no ven la foto completa, mi recomendación es que si están pensando en crear o migrar una aplicación Web usando AJAX entiendan la foto completa y evalúen seriamente las posibles implicaciones de seguridad que conlleva dicha implementación.

Saludos y no coman tierra.

viernes, septiembre 01, 2006

Outlook 2003 Navigation Bar

Esto lo logre con puritito JavaScript y CSS, unos dicen que JavaScript + CSS = DTML sera cierto o no a mi la barrita me quedo chingona. todavia no voy a liberar el odigo porque esta medio bugoso (en perro := la chingadera truena ). y la voy a hacer compatible con FF ya que en estos momentos solo jala con IE 6 :D.

En este screenshot se ve la barra con expandida en este caso solo se ven 5 botones ya que toma en cuanta la resolucion de la pantalla a mayor resokucion mayor el numero de botones grandes visibles, el resto se muestra abajo.

En esta imagen se ve la barra de botones pequeña la grande esta colapsada.

Saludos - No coman tierra.

martes, agosto 29, 2006

Lo pequeño sale caro

Después de partirte la madre como esclavo durante 3 semanas desarrollando un modulo Web para el sistema contable que la empresa donde trabajas vende. Le avisas a tu jefe y le que ya terminaste tu parte del jale y como dictan los procedimientos tu jefe convoca a una junta de revisión con los meros chingones técnicos.

Llegas a la junta dispuesto a mostrar tu trabajo, orgulloso de tus logros, implementaste AJAX, con una interfase de usuario bien chingona y cuando estas mostrando los frutos de tu trabajo, cuando estas demostrando como el usuario va a usar esa interfase uno de los gueyes (que por lo regular es el mas mamón) te dice que todo lo que mostraste esta bien pero que 3 clicks se le hacen muchos para que el usuario pueda consultar la lista de clientes te dice que el no lo aprueba a menos de que en lugar de 3 clicks el usuario haga 2 clicks y para variar tu jefe lo apoya.

Sales de la junta con cara de mataputos, encabronado porque tu momento de gloria y triunfo te lo echo a perder un pendejo con un comentario que tu consideras fuera de lugar, inoportuno y si importancia lo cual lo expresas con 2 palabras "son mamadas".

A quien le ha pasado? a mi si y me ha tocado estar en ambos lados, del lado del bato desilusionado y del lado del bato mamón y créanme cuando me ha tocado portarme mamón me he portado momonsisimo.

Bueno el punto es que uno como desarrollador no considera que un click de ratón sea importante, después de todo cuantos clicks de ratón no damos todos los días (yo doy muchos sobre todo en este momento que le estoy corrigiendo la sintaxis en Word a este post). sin embargo no pensamos en el usuario y en la productividad que nuestras aplicaciones proveen para dichos usuarios.

Para los que no saben que significa esa palabra pongamos un ejemplo de nuestro mundo geek, cuantos no han creado una aplicación de escritorio usando Windows Forms con MS Visual Studio 2005 o las versiones express? los que lo hemos echo sabemos que es algo muy fácil solo creamos una aplicación Windows desde el editor y listo, si queremos la compilamos y si la ejecutamos se mostrara una ventana en Windows la cual la podemos mover, podemos cambiarle el tamaño, la podemos minimizar, maximizar o cerrar, todo esto lo obtuvimos gratis ya que .NET provee las clases necesarias para que la forma implemente este tipo de comportamiento estándar sin que tengamos que hacerlo nosotros, bueno ese es un nivel de productividad porque para nosotros los veteranos los que vivimos la transición de MS DOS a Windows y tuvimos que aprender a programar en Windows lo primero que aprendías en ese proceso era como crear una ventana similar a la que se crea en .NET con pura funcionalidad estándar y créanme cuando les digo no era algo chido de aprender.

El segundo nivel de productividad es a nivel de escritura de código ya que cuando hacemos una aplicación Windows las plantillas base que utilizamos ya existen y son incluidas en nuestro proyecto sin tener que escribir el código desde cero nosotros mismos vivan los wizards!!!!!!.

Bueno ahora que los que no sabían que chingados era la productividad ya lo saben volvamos al punto de este post. el cual es.............. clicks dude!!! clicks

A lo mejor para nosotros no es gran cosa dos clicks o tres clicks pero para un usuario final si los es ya que es una forma de ser productivo, imaginemos este escenario y hagamos algunos cálculos.

Un usuario usa una aplicación durante todo el día y digamos que por cada hora de uso el usuario tiene que hace un click adicional por hora el cual tarda por lo regular 1 segundo desde desplazar el apuntador del ratón y hacer el click, bueno supongamos que el usuario trabaja 8.5 horas diarias y le pagan 30 Dlls la hora (el guey gana un chingo y le pone al camello desde que llega hasta que se va), y esta aplicación como es una aplicación empresarial la usan los 10,000 empleados de la empresa.

Dado este escenario tenemos que el usuario pierde 8.5 segundos diarios, hay guey cuanta perdida de tiempo!!! Pierdo mas tiempo llendo a hacer pipi que este guey en el día.

OK ahora esos 8.5 segundos multipliquémoslos por 360 que seria lo que trabaja en un año (si a la chingada días festivos y vacaciones) eso nos da 3,060 segundos perdidos al año o 0.85 horas,

Ahora multipliquemos eso por la cantidad que se le paga al guey por hora y eso nos da 25.5 Dólares, ahora multipliquemos esa cantidad por el numero de usuarios que utilizan la aplicación eso nos da 255,000 Dlls.

HAY guey!!!! un solo puto click del ratón puede hacer que una empresa pierda o ahorre 255,000 dlls al año, en perro son como 2,805,000.00 pesos Mexicanos (definitivamente mas de lo que gano al año) .

Como desarrolladores de software nos enfocamos muchas de las veces a que la aplicación este chida o sea se vea bonita, este creada con lo mejor de la tecnología y que la arquitectura sea la mas chingona del barrio pero si no tomamos en cuanta el propósito principal de toda aplicación que es el incremento de productividad del usuario final nuestra aplicación no va a servir de nada

Como ven cuando diseñamos nuestras aplicaciones necesitamos tomar en cuenta la productividad del usuario entre otras muchas cosas

Saludos - no coman tierra.

jueves, agosto 24, 2006

Nuevo sitio para VideoBits

AL FIN!!! ya pude crear el sitio para videobits, estas ultimas semanas han estado del navo, un chingo de jale por todas partes.

Pero bueno sin llorar aqui esta la liga del sitio

y esta es la liga del feed por medio del cual se pueden subscribir

Saludos.

miércoles, agosto 23, 2006

VideoBit - Virtual Earth Parte 2

En esta entrega se ve como manipular el mapa creado en el VideoBit anterior por medio de nuestos propios controles.

Pueden ver el Videobit haciendo click aqui

Espero lo disfuten

Saludos.

lunes, agosto 21, 2006

Aplicaciones como componentes.

Estas en la oficina y recibes una llamada de uno de los Project manager (en perro: "gerentes de proyecto") para que asistas a una junta en donde se esta planeando el siguiente proyecto de la empresa, Al parecer el guey que define los proyectos se levanto con una revelación divina y antes de que se le olvide convoca a una junta.

Entras a la sala miras a tu alrededor y observas a los asistentes, algunos con cara de "no se que chingados hago aquí" otros con cara de "mta madre otra pinche junta" y alguno que otro con cara de "me la pelan putos" pero todos tienen algo en común y ese algo es que todos son considerados como los top lead tech (los chingones técnicos).

Te sientas y escuchas al gerente hablar acerca de la visión de la aplicación, jóvenes vamos a crear la ultra mega plus ultra de las aplicaciones financieras, trabaje el fin de semana en una aplicación de este tipo y me di cuenta de que para hacer toda la chamba necesito no solo una sino 4 pinches aplicaciones. Que les parece si hacemos una aplicación que proporcione TODA la funcionalidad que un usuario final espera, que use una solo app y no 4. Yo les propongo bla bla bla bla bla bla.

Después chutarte media hora de puras mariguanadas escuchas la pregunta del gerente --tons como le hacemos? y antes de que puedas articular palabra los demás empiezan a ladrar a un tiempo como perros cuando pasa el camion de la basura, atropellándose las oraciones, unos empiezan hablar mas fuerte, total se arma de la de dios es padre y como no, son puros geeks tratando de dar soluciones.

Unos hablan de implementar una arquitectura de 3 capas, otros que mejor sea de n capas, unos empiezan a hablar de la tecnología que van a utilizar para implementar la solución, otros con su guerra santa de quien es mas chingón si .NET o J2EE, etc. etc., etc., etc. pero con lo que todos están de acuerdo es que el desarrollo tiene que ser en capas, cuantas? sabrá la chingada pero todo tiene que ser en capas es la moda, y la funcionalidad tiene que ser modularizada pa que el desarrollo sea ágil y se le puedan vender partecitas a los clientes (léase versiones), se tienen que reutilizar componentes como los de UI, comunicaciones ya sea por mail u otro medio, uso de un framework para la capa de negocio, etc, etc,etc.

Te ha pasado? te suena familiar la historia? a mi si me ha pasado innumerables veces, en ocasiones he entrado a las juntas pensando que chingados hago aquí, otras veces pensando puta madre otra pinche junta pero siempre entro con actitud de ME LA PELAN!!!!!! :-) no se crean.

Bueno el punto es, que esta situación tan familiar y que empresa no quiere crear la killer app de la Web, y como suele suceder en este tipo de proyectos se toman las mismas decisiones y se tratan de implementar las mismas practicas que se han aprendido de la experiencia en el ramo, practicas como la reutilización de componentes de UI ya sea para Web o Windows, el uso de un armazón de capa de negocio, incluso la utilización de algún tipo de tecnología de portal, siempre apuntando a una arquitectura moddularisada. Pero alguna vez se han preguntado como le hacemos para reutilizar la funcionalidad de negocio de una aplicación existente?

Yo se que muchos de ustedes se han de estar preguntando que chingados fumo este guey. Pero si lo analizamos detenidamente la idea no esta jalada de los pelos.

Si bien en nuestro día a día es común que tengamos que utilizar un chingo de aplicaciones para desarrollar nuestro trabajo también lo es que empresas de IT ya identificaron esta necesidad y traten de consolidar la funcionalidad en una sola aplicación, el problema es que muchas empresas toman el camino largo, y conste que digo que es el camino largo y no el equivocado porque en el área de IT existen diferentes caminos para lograr un objetivo

Pero cual es este camino? se preguntaran bueno pongamos el ejemplo de una empresa que trata de desarrollar una solución integral para el manejo del departamento de recursos humanos, y bueno como parte de esa integración quiere ofrecer módulos de Administración de empleados, nomina, reclutamiento, desarrollo laboral por nombrar algunos. Bueno una tiiiipica empresa trataría de desarrollar cada uno de los módulos, aventarse la chamba de definir, analizar, desarrollar, probar e implementar por cada uno de los módulos, que si lo analizamos detenidamente en la actualidad esos módulos son aplicaciones existentes y quizás implementadas dentro de la empresa.

pero que tiene de malo esto, bueno nada y todo, porque bueno porque es perfectamente factible que cualquier empresa de IT desarrolle la aplicación que se le inche pero si tomamos el tiempo que se toma desarrollar una aplicación de este tipo nos enfrentaríamos a años de desarrollo ya sea utilizando métodos convencionales o ágiles, y siendo realistas años no es un termino aceptable y menos hoy en día, aunado a esto tenemos el echo que ya existen empresas que proveen este tipo de servicios y que tiene en el área años y volviendo a ser realistas esta cabron competir con estas con nuestra primera versión y recuerden que estamos hablando de un modulo digamos reclutamiento.

Una alternativa que están ofreciendo las empresas de IT par atacar este problema es la integración a trabes de una capa de presentación, y digo a trabes de una capa de presentación porque al usuario se le presenta como una sola solución, un lugar centralizado en donde el puede hacer su trabajo sin tener que usar otra aplicación.

Esto se logra utilizando aplicaciones ya existentes y creando un mecanismo de comunicación entre las mismas, poniendo una capa de UI que por lo regular es una capa Web, claro que no es fácil ya que involucra el desarrollo de una arquitectura completamente nueva y me refiero nueva en el sentido de que es un cambio completo de modo de pensar, otro paradigma ya que estamos acostumbrados a desarrollar nuestras aplicaciones con componentes y no con aplicaciones en si.

Arquitecturas que se pueden aplicar para este tipo de aplicaciones siempre han existido no son nuevas, y para muestra basta un botón alguno de ustedes ha oído hablar de la arquitectura basada en servicios o SOA por sus siglas en ingles? además de que muchas de las aplicaciones para usuario final ya cuentan con algún tipo librerías para poderlas extender ya sea a través de un API de funciones o de Web Services.

Una arquitectura similar a SOA se aplacaría para la integración de este tipo de soluciones claro con cierto sazón ya que tendríamos que definir el modelo de comunicación entre las aplicaciones, idear una manera de implementar el SSO o Sigle Sign On (en perro:- nomas ingresa tus credenciales una vez y se chingo), se tendría que definir que aplicación es dueña de los datos a nivel campo, o la manera en como los procesos offline de una aplicación afectarían a el resto. Haaa aun recuerdo los días en los que integrar aplicaciones era nomás escribir y/o leer un archivo plano para otra aplicación, que tiempos aquellos.

Pero que tipo de tecnologías necesitamos tomar en cuenta para esto? bueno les dejo una lista pero como todo en IT esto es relativo tecnologías como .NET, J2EE, Delphi, XML, Web cervices, XSLT, SQL, Work Flows, etc. nada del otro mundo.

Esta manera de desarrollar soluciones esta tomando mucha fuerza y conviene estar preparado por si tu jefecito amanece un día con dolor de guevos y quiere crear la aplicación perfecta que lo va a sacar de pobre.