domingo, marzo 08, 2009

Web 2.0 CoffeCamp Tj


El pasado sábado 7 de Marzo, se llevo a cabo el primer Web 2.0 CoffeCamp en el D'Volada Café de Plaza Dorada en Otay, lugar del cual literalmente nos apoderamos por un espacio de poco mas de 2 horas.

Al evento asistieron @gabo, @webcool, @ilescasp, @agamenong, @bitfon, @mariohcornejo, @fcastellanos, @jesus_chavez, Carlos Hurtado, Jessica y @mario_chavez, ademas en linea creo que llego un punto en donde había como 10 personas mas, de los que recuerdo @stanmx, @angelnyo, ryozero y velocitj.

El inicio se retardo un poco por "problemas técnicos", el Internet en el lugar no funcionaba muy bien que digamos y la idea era transmitir el evento en vivo, ademas de la grabación de audio y video. Afortunadamente @bitfon nos presto un modem/router 3G con el cual pudimos sortear la situación y gracias a @gabo y @webcool se grabo audio y video, el cual una vez que este procesado, se va a hacer disponible.

A continuación voy a realizar una pequeña reseña de lo que ocurrió el día de ayer, aunque para un detalle mas completo hay que esperar que el audio y video este disponible.

El inicio fue con la pregunta obligada, ¿Que es el web 2.0?, lo interesante es que se pudo obtener la perspectiva de gente del área de desarrollo de sistemas y de diseñadores gráficos, y aunque no legamos a un acuerdo al 100% si se pudieron identificar algunas características en común:
  • Enfocadas principalmente a redes sociales
  • Twitter
  • Facebook
  • MySpace
  • YouTube
  • Flickr
  • Los usuarios participan en la creación del contenido
  • Co-participan en el contenido ofrecido, por lo tanto el sitio les es mas interesante
  • Digg
  • Enchilame
  • Ofrecen una mejor experiencia de usuario
  • Estándares Web
  • Intercambio de datos XML, JSON
  • Comunicación Asincrona
  • Lógica del lado del clientes, JavaScript
  • Se ofrecen como SaaS (Software as a Service)
Otras características que se mencionaron que pueden ser parte, pero no precisamente implican Web 2.0 son:
  • Botones redondos y diseño de letras grandes y logotipos brillosos
  • Ofrecer un API para, llevando las aplicaciones mas alla del Web
También se comento si las aplicaciones RIA (Rich Internet Applications), como las aplicaciones en Flash y Silverlight deberían ser consideradas Web 2.0 o no.

Posteriormente se discutió del modelo de negocio de las aplicaciones Web 2.0, ya que muchas no cuentan con un modelo definido y sobreviven de "Venture Capitals".

Se menciono que la publicidad es una forma de monetizar, pero no es la única forma, algunas de las aplicaciones tienen versiones lite gratuitas y la funcionalidad avanzada se ofrece con un costo el cual generalmente suele ser accesible.

También se comento que hay empresas que están utilizando a estas aplicaciones para promocionar sus productos y servicios, formando así un ecosistema económico.

Igual se comento que no por todas las aplicaciones Web 2.0 que usamos estaríamos dispuestos a pagar por usarlas, aunque el costo sea muy pequeño, de forma general coincidimos que pagaríamos por las aplicaciones que nos ofrecen un beneficio a forma de servicio, y las aplicaciones de ocio las seguiríamos usando si siguen siendo gratis.

Otro punto fue la parte tecnológica, comentamos que si para hacer una aplicaciones Web 2.0 se debe de utilizar una tecnología en particular o no, el consenso fue que no, pero la tendencia de aplicaciones Web 2.0, es que están desarrolladas en plataformas de lenguajes dinámicos, como PHP y Ruby On Rails. Java y .NET prácticamente no figuran en este ámbito. Desde el punto de vista de los diseñadores mencionaron que, por ejemplo, PHP les ofrece un mejor control sobre el HTML generado a diferencia de .NET.

Después tratamos de conjuntar una lista de aplicaciones Web 2.0 en México y prácticamente nos fue imposible, el único sitio que se menciono fue Enchilame. Buena parte de la conversación se nos fue en mencionar la dis-funcionalidad de los sitios Web de los bancos "Mexicanos", sitios de Gobierno, sitios web de empresas que no ofrecen ningún valor a sus clientes.

Se cuestiono sobre el movimiento Web 2.0 en México, aunque existen movimientos como Café de Altura y Tequila Valley, el desarrollo Web 2.0 es poco visible, ademas de que no existe una forma de acercase a inversionistas si es que los hay. También se comento que es importante seguir el modelo de Estados Unidos, conocido como "Startups", es decir empezar el desarrollo de la aplicación y tratar de ponerla en linea con la finalidad de una vez teniendo el producto funcionando, quizás así sea mas fácil el obtener financiamiento.

Finalmente se discutió si se debe de "clonar" aplicaciones exitosas en Estados Unidos o no, el consenso fue que una copia fiel, no es buena idea, lo mejor es tomar ese "know-how" y complementarlo con necesidades especificas de la zona y si la idea a final de cuentas no es muy original, entonces evitar tratar de competir con la aplicaciones original y mejor enfocarla al mercado hispano.

En general esto fue lo que se comento durante la platica, como recomendación, se comento que es necesario vencer la apatía, no renunciar todavía a sus trabajos de día, pero tratar de llevar nuestras ideas para que se materialicen y con un poco de suerte poder crear un negocio exitoso en Internet.

Estén pendientes a las fotos, audio y video a publicarse en los próximos días.
Gracias otra vez por haber participado y compartido con nosotros.

viernes, marzo 06, 2009

DevLab: TDD, pruebas de unidad.

En el desarrollo de software, ya sea usando metodología "formales" como la ingeniería de software o metodología ágiles, incluyen una fase que se denomina de pruebas.

Hay diferentes forma de realizar las pruebas, una de ellas, y quizás la menos optima, es darle la responsabilidad al programador que esta implementando la funcionalidad a que el mismo realice las pruebas.

Otra forma de hacer es tener un equipo formalmente de aseguramiento de calidad o Q&A.

Ambas opciones generalmente no son pruebas automáticas o que nos aseguren que la mecánica de la prueba va a ser siempre igual o que accidentalmente se omita alguna parte de la prueba.

El resultado derive en que cabe la posibilidad de que nuestro programa presente "bugs" al momento de llegar a producción.

Ante esta situación en la industria de desarrollo de software ha ideado practicas para poder realizar pruebas automáticas sobre el software.

Una de estas practicas es la llamada Pruebas de Unidad o Unit Testing. Las pruebas de unidad consisten en pequeños bloques de código que se ejecutan para probar el código de nuestra aplicación.

Las pruebas de unidad tiene como alcance el probar únicamente la funcionalidad propia de clase en cuestión y no su interacción con otras clases del sistema.

Como una extensión a la realización de pruebas de software, la Técnica Desarrollo Dirigido por Pruebas o Test Driven Development (TDD), nos indica que "alguien" tiene que escribir las pruebas de nuestro código a partir de las especificaciones del mismo, antes que esa funcionalidad sea implementada. Esto se debe a que el objetivo de TDD es dual, primero al escribir las pruebas para código que no existe, estamos realizando el diseño del software que vamos a construir y el segundo objetivo es que las pruebas realizas obedecen a una especificación, por lo tanto es posible identificar en que parte de nuestro software se implemento la especificación requerida.

Referencias


DevLab: TDD, pruebas de unidad from Mario A Chavez on Vimeo.

Material del Screencast

lunes, marzo 02, 2009

Fútbol, matemáticas y otras mentiras

Futbol picanteHace un par de días viendo el programa de Fútbol Picante de ESPN, los comentaristas criticaban la forma en como asignan los partidos a cada arbitro, ya que igual ponen a novatos en partidos donde errores arbitrales pueden causar controversia - por ejemplo partidos donde estén jugando equipos con probabilidades de descender a la 1ra división A -.

En los comentarios se decía que la comisión de árbitros - De la liga Mexicana de Fútbol - en "teoría" no asigna a los árbitros manualmente, para eso existe un "ordenador" que se encarga de asignar a los árbitros, pero los comentaristas se preguntaban cual es el criterio que utiliza dicho "ordenador" para realizar la selección.

Ya que mencionaron que no parece que utilice la información del torneo ni el desempeño previo de los árbitros para decidir que arbitro debe participar en que partido.

Y bueno uno que no tiene nada que hacer, empece a racionalizar sobre como esta funcionando ese "ordenador" y como debería de funcionar.

Tomando como premisa los comentado por los participantes del programa, donde no se puede apreciar un patrón en la asignación de los árbitros, la primera idea que me viene a al mente, es que posiblemente este usando un algoritmo de números pseudo-aleatorios.

Existen varios algoritmos para la generación de numero pseudo-aletorios, en donde se busca que los números generados a partir de una semilla, estén distribuidos lo mas uniformemente posible en una distribución normal, es decir que los números no estén "cargados" hacia algún lado, que tengan un periodo largo, es decir que no se repitan frecuentemente y que sean reproducibles una y otra vez con la misma semilla.

Uno de estos algoritmos es el Congruencial Mixto Lineal, es cual utiliza el numero previamente generado para la generación del numero siguiente:

pseudo

Donde:
X0 = es la semilla ó numero inicial (X0 > 0)
a = el multiplicador (a > 0)
c = es la constante aditiva (c > 0)
m = el modulo (m > X0, m > a y m > c)

Para mas información ir a "Generador congruencial lineal mixto"
Este tipo de generadores se emplean en el desarrollo de aplicaciones de Simulación para eventos discretos, los cuales permiten "modelar" escenarios mediante sistema de computo.

Volviendo al tema principal, si tal "ordenador" es el que asigna los árbitros y utilizar simplemente la asignación aleatoria a partir de numero pseudo-aleatorios, entonces las asignaciones de los árbitros van a seguir siendo como hasta ahorita "erráticas" e ignorando la gran cantidad de información historia que se genera partido tras partido durante un torneo de fútbol.

Si lo que se busca es tomar esa gran cantidad de información disponible y que sistema de computo la analice para determinar cuales son los árbitros mas óptimos para cada partido, entonces estamos entrando en el campo de la Inteligencia Artificial.

La inteligencia Artificial en términos simples, consiste en hacer que un programa de computo funcione lo mas parecido posible al razonamiento humano. Por ejemplo áreas como la lógica difusa son utilizadas para resolver problemas que por medio de algoritmos seria muy complejo describirlos, pero sin embargo se cuenta con mucha información sobre el problema, por lo tanto se utiliza un razonamiento "casi" humano para tomar una decisión a partir de los datos disponibles.

Para hacer uso de IA, se parte de que quizás la información sea necesario "normalizarla", es decir atenuar picos que se van a extremos, el siguiente paso consistiría en modelar una red neuronal en base a la arquitectura elegida para nuestra red neuronal.



En la entrada de los datos a nuestra red neuronal se asigna un peso especifico para cada tipo de dato - por ejemplo a la mejor tiene mas peso especifico el desempeño de un arbitro durante los partidos del torneo, que el peso que tiene el desempeño en el partido anterior, ya que un partido malo lo puede tener cualquiera - los valores de entrada y los pesos para cada tipo de datos conforman lo que se conoce como la función de propagación, esta función se encarga de combinar las entrada y los pesos; una función de propagación común es la sumatoria de los productos entrada-peso.

Activacion

Donde w representa el vector de peso de la entradas y x el vector de entradas a la red neuronal. Una vez que se calcula el resultado de la función de propagación, este valor se pasa a la función de activación o transferencia, la cual puede ser una función lineal, pero es mas común el uso de funciones sigmoidales - logaritmicas -

activacion sig

El resultado de la función de activación se puede comparar con un valor de umbral, para determinar si los datos entrada activan la neurona o no.

La asignación de los valores correctos de los pesos generalmente se hace de manera iterativa, donde a la red neuronal se van asignando valores de entrada, denominados grupo de entrenamiento, y en base al resultado se ajustan los pesos, con la finalidad de ir "creando conocimiento" en nuestra red; a este proceso se le conoce como entrenamiento de la red neuronal.

Una vez que a red ha cumplido con su proceso de entrenamiento, ahora si se le asignan datos de entrada para que con el conocimiento adquirido nos ayude a tomar decisiones factibles, es decir tomar la información del torneo actual, el desempeño de los árbitros y tratar de asignar al arbitro correcto para cada partido.

Aunque el concepto de redes neuronales se escuche muy de ciencia ficción y mas si lo tratamos de emplear a un problema tan vanal como el expresado en el post, la realidad es que muy probablemente utilicemos la inteligencia artificial mas seguido de lo que nos imaginamos, por ejemplo:
  • La cámara fotográfica que realiza focus automático de nuestros objetivos
  • La cámara que busca y enfoca rostros en nuestras escenas
  • La cámara fotográfica que se dispara cuando alguien sonríe
  • El programa que de gestión de fotos que reconoce rostros y nos ayuda a catalogar nuestras fotos
  • La TV HD que toma información de iluminación del programa que se esta transmitiendo e información de luz del ambiente donde se encuentra la TV para así auto-ajustar el brillo y el contraste.
Entre otros muchas aplicaciones mas. Para mas informacion sobre redes neuronales visitar:

Tarjetaroja

En fin un momento de ocio me llevo a un estado de análisis y razonamiento mas alla de lo que yo hubiese querido. Señores de la FemexFut si quieren menos criticas en los árbitros, aquí esta la propuesta de solución, ah y estoy disponible para implementarla ;)

domingo, marzo 01, 2009

Lo importante es que funcione

Hace unos días me encontré con este post titulado "Lo importante es !!! que funcione !!!" y no puede evitar recordar platicas pasadas en donde precisamente me comentaban lo mismo, "lo importante es que funcione".

Y si, en buena medida se tiene la razón, de nada sirve una aplicación que hace uso de todas las practicas y patrones si la aplicación nunca ve la luz.

Pero también existe la otra contraparte - la mencionada en el post -, en donde nos olvidamos por completo de cualquier norma o reglas implícitas o explícitas y simplemente "tiramos" código hasta hacer que nuestro programa funcione.

Ambos extremos son malos desde cualquier punto que se les observe.

La sobre ingeniera de una aplicación, solo viene a causar complejidad excesiva en el desarrollo y mantenimiento de una aplicación, esa complejidad se multiplica cuando se busca realizar cambios o simplemente darle mantenimiento a la aplicación.

El aplicar todas las buenas practicas y patrones, perdiendo de vista el objetivo final, que es el realizar un producto funcional, en tiempo y forma; solamente lleva a que el proyecto sea cancelado en algún momento, causando mal sabor de boca a los desarrolladores, ya que el esfuerzo empleado para lograr una buena aplicación no sirvió de nada, y si se es una empresa pequeña o mediana, obviamente también se refleja en un daño económico, por la perdida del proyecto y posiblemente del cliente.

El no "disponer" del tiempo para realizar un diseño y especificar una arquitectura de nuestra solución, y simplemente "hacer que funcione", desafortunadamente es algo común en las empresas pequeñas a medianas de desarrollo de software, como también en las empresas que no son TI pero tienen sus propios departamentos de desarrollo.

Buena parte de la ideología de "no perder tiempo" en el diseño, patrones y guías, viene de la necesidad de tener el producto terminado cuanto antes, ya que eso significa que se esta en posición de poder cobrarle al cliente cuanto antes, por lo tanto cualquier situación que "retrase" el tiempo de entrega se ve como un enemigo a tener los recursos económicos a tiempo en las empresas.

En las empresas no TI, desafortunadamente en muchos de los casos gente no TI compromete tiempos de desarrollo, en base a prácticamente nada, ante esta situación, pues también se piensa en "no perder tiempo" en el desarrollo y hacer que la aplicación funcione.


El argumento más común para implementar el proceso "haz que funcione", viene de la idea que para poder implementar un diseño y una arquitectura de nuestra aplicación implica "perder tiempo", quizás evitando esta parte fundamental del desarrollo de software, si sea posible tener un entregable en tiempo, pero la pregunta es: ¿A que costo?

Si bien todo software tiene un tiempo de vida antes de volverse "legacy", siguiendo la "metodología" "haz que funcione" acelera esta situación por las siguientes razones:
  • Es muy difícil entender el código, posiblemente únicamente la persona que lo desarrolló, es el que "puede" tener un entendimiento aceptable.
  • Existe una mayor posibilidad de tener "bugs" extraños y difíciles de duplicar y corregir.
  • El realizarle cambios al programa se vuelve cada vez mas complejo, porque no entendemos hasta que punto esos cambios van a afectar otras áreas de nuestro programa.
  • No hay forma de reproducir situaciones muy particulares que ocurren con nuestro software y si este inter-actua con otro mas, lo mas común es culpar al otro software.
  • Inicialmente quedamos "bien" con el cliente por entregar el software a tiempo, a la larga los errores y fallas de nuestro software nos ponen en una situación no muy buena, y si a esto le agregamos que le cobramos al cliente por arreglar nuestros "errores", pues todavía peor.

El caso es encontrar el punto medio, si como empresa de desarrollo no seguimos buenas practicas para el desarrollo de nuestras soluciones, tratar de implementarlas de un momento a otro, únicamente va a producir un desastre y volveremos a las viejas practicas al instante.

Es necesario identificar las practicas que pueden traer un beneficio mayor a nuestra organización y primeramente "evangelizar" entre nuestro grupo de desarrollo antes de siquiera intentar implementarlas, una vez que decidimos implementarlas, es importante comenzar un tanto relajados en su aplicación, una vez que el equipo se haya acostumbrado, entonces empezar a "apretar" poco a poco para que estas se cumplan.


Actualización: En el blog de Eber Irigoyen, el comenta sobre la idea de "Deuda Técnica" a este problema de únicamente hacer que funcione.

Imagén notebook MyImageCollections
Imagén diseño subWiz
Imagén de los problemas de software Ryan Coleman
Imagén Programador frustrado Sybrem A. Stuvel

miércoles, febrero 25, 2009

DevLab: Webkit Inspector

En esta ocación en el videocast se muestra el uso de la herramienta WebKit Inspector, la cual es de gran ayuda tanto para los diseñadores web, así como para los programadores web.

La herramienta permite inspeccionar el código html de una pagina web, realizar cambios a la misma "en vivo", también es posible inspeccionar el CSS de la pagina y de igual forma realizar cambios al momento.

También cuenta con una opción para medir el tiempo de carga y tamaño de nuestra pagina, dandonos un detalle, de cuales son los elementos que tardan mas en descargarse o cuales son los mas "pesados" en términos de bytes.

Por último también se muestra la herramienta para depurar javascript e inspeccionar los valores de las variables del código que se este ejecutando, ademas de incorporar una herramienta de "profile" para analizar que partes de nuestros javascript son las más lentas en su ejecución.


DevLab: WebKit inspector from Mario A Chavez on Vimeo.


Como siempre comentarios o sugerencias para próximos videocasts son bienvenidos.

lunes, febrero 23, 2009

helper_method en Rails

Trabajando en una aplicación en Rails, me sugió la necesidad de hacer que un método que existe en la clase ApplicationController, estuviera disponible tambien para el ActionPack.

Lo primero que se me ocurrió fue duplicar el método en el helper de la vista donde lo requiero, pero eso no me pareció muy DRY (Don´t Repet Yourself); una búsqueda rápida en Google me dió la respuesta: helper_method

Con helper_method podemos declarar un método en nuestra ApplicationController, por ejemplo, y hacerlos disponible a nuestros controladores, pero al declarar nuestro método con helper_method, tambien lo hacemos disponible para nuestras vistas.

helper_method :hola_mundo

def hola_mundo
....
end

jueves, febrero 19, 2009

Web 2.0 CoffeCamp Tj


¿Te interesa el Web 2.0?, ¿haz escuchado hablar de él, pero no estas seguro que es?, ¿sabes de Web 2.0 y tienes algo que aportar?

Acompañanos este sábado 7 de Marzo en el D´Volada de Plaza Dorada en Otay, Tijuana; a partir de las 9 a.m., hasta que el cuerpo aguante o nos corran del lugar.


View Larger Map

Nos interesa tratar temas relacionado a negocios y la interacción social, además del aspecto tecnológico.

Si te interesa compartir algo, por favor agrega en los comentarios tu propuesta de tema.

Comparte una taza de café en una charla amena y agradable.

Pláticas confirmadas:
  • Frameworks para el desarrollo Web 2.0 - Mario A Chávez

Nota: Evento gratuito, solo se require consumo en el D'Volada !

miércoles, febrero 18, 2009

DevLab: GIT parte 2

Segunda parte del videocast sobre el sistema de control de codigo fuente Git. La primera parte se encuentra aquí.

En este video se tocan temas sobre, clonación de repositorios, manejo de etiquetas (tags), creación y manejo de ramas (branches) y se muestra la aplicación GitX para visualizar la bitácora de cambios y ver la gráfica de cambios en nuestro proyecto.

Adicional a los recursos para Git presentados en el primer videocast, aqui se presenta una hoja "acordeón" para Git (cheat sheet).


DevLab: GIT parte 2 from Mario A Chavez on Vimeo.

Como siempre comentarios, sugerencias son bienvenidos.

martes, febrero 17, 2009

México First, reunión informativa para Tijuana BC

A través de la Comunidad Tijuana.NET se logró el tener una reunion informativa con respecto a la iniciativa México First, por parte del Cluster TI@Baja y New Horizons.

Esta reunion esta programada para el 24 de Febrero, en las instalaciones del Cluster TI@Baja, en el 209 del edificio Salomon. La reunion comienza a las 6:00pm.

El post original en el sitio de la Comunidad Tijuana.NET es el siguiente:

Con el fin de presentar y resolver dudas acerca del programa México First te invitamos a esta reunión donde podremos conocer de primera mano los detalles de este programa para apoyo a capacitaciones y certificaciones.

* Apoyos para estudiantes y emprendedores (Microsoft vía LiveMeeting)
* Valor de Capacitaciones y Certificaciones (New Horizons)
* México First (IT@Baja)

Esperamos se unan a esta iniciativa de capacitación profesional y que aprovechen las facilidades económicas que nos están otorgando.



View Larger Map

lunes, febrero 16, 2009

Consejos para Startups por David Heinemeier Hansson

A través de twitter me encontré con este video de David Heinemeier Hansson, donde da consejos para Startups y toma como ejemplo su empresa 37 Signals. La charla es muy amena y sobre todo presenta ideas interesantes.

Pencil, "mockups" para interfaces gráficas

Cuando se desea compartir una idea sobre la interface gráfica de una aplicación a los desarrolladadores o diseñadores gráficos, quizás la forma mas rápida de hacerlo es dibujándola a mano sobre una "servilleta" o una hoja de papel, o quizás se utilice alguna herramienta costosa como Visio o algún software parecido.

Pencil es una herramienta gratuita Open Source, que se instala como un plugin de Firefox y que ayuda precisamente a expresar ideas de interface gráfica entre desarrolladores y diseñadores gráficos, de una manera fácil y rápida; con Pencil es posible realizar el "mockup" de una interface gráfica en cuestión de minutos.


Los diseños puedes hacerse en múltiples paginas y pueden ser compartidos en el formato original de Pencil o exportados a archivos de imagen png.



Mexico First, Continuación ...


En un post previo comenté acerca de la iniciativa México First del Gobierno Federal y la industria TI de México, bueno, por parte del Cluster TI@Baja y la Comunidad Tijuana.NET, aqui hay más información al respecto de los cursos y como poder acceder a la capacitación con descuentos de más del 50%.

De los puntos importantes que nos comparten son los siguientes, con respecto a los costos:
  • Proyectos de instutuciones académicas: 80% de subsidio.
  • Proyectos de organismos empresariales y clústers: 70% de subsidio.
  • Empresas individuales: 60% de subsidio (solo para proyectos en donde se capacite a mas de 100 personas).
A parte se requiere de un compromiso por escrito de realizar la capacitacion y aprobar la certificación, en caso de no ser así, se tiene que devolver el dinero aportado por parte del gobierno.

Los cursos que el Cluster TI@Baja está buscado llevar a cabo son:
  • Visual Studio .NET
  • SQL Server
  • Windows Server
  • Office
  • CompTIA Network+ Certification
  • CompTIA A+ Certification
  • Cisco: CCNA y CCNP
Así que si estas interesado en poder acceder a esta opción para alcazanzar una certificación, verifica si tu empresa esta afiliada a alguna organización como los Cluster de TI, si tu instutución académica tiene algún acuerdo con el Gobierno Federal, en relación a la iniciativa México First.

viernes, febrero 13, 2009

Numb3rs y las matemáticas

Numb3rs Numb3rs es una serie que se transmite por CBS en US los viernes por la noche, actualmente en su quinta temporada.

A simple vista parece ser una serie policiaca más, en donde el FBI trata de resolver casos de asesinato, robo, secuestro y terrorismo; pero las herramientas que se usan para resolverlos es lo que la hace un tanto diferente.

En Numb3rs el personaje Charlie Epps (David Krumholtz), reconocido genio matemático de la universidad CalTech de California, ayuda a su hermano Don Epps (Rob Morrow), agente del FBI, a resolver los casos con la ayuda de Matemáticas aplicada.

Numb3rs introduce los conceptos matemáticos de una forma fácil y sencilla, con analogías que son relativamente fácil de entender, sobre todo dejando ver que las matemáticas las utilizamos todos los días, aun en cuestiones que no nos imaginamos.

numb3rs charlieAunque en algunos episodios parece simplemente increíble la manera en que las matemáticas han sido aplicadas para resolver cierta situación, que mas bien parece una invención de algún escritor de Hollywood bajo los efectos de alguna droga, la verdad es que toda la matemática del show esta fundamentada y apoyada desde diferentes puntos.

Por ejemplo, algunos de los episodios se basan en eventos reales atendidos por el FBI - cuentan con asesoría del FBI -, en donde precisamente usaron a las matemáticas como herramienta para resolver los casos, de hecho existe un libro "The numbers behind Numb3rs: Solving crime with mathematics".

Por otro lado, los productores del show se acercaron a la "Mathematical Association of America" con la finalidad de tener asesoría y no presentar matemáticas falsa.

Ademas cuentan - o por lo menos al inicio de la serie - con la asesoría Gary Lordon, jefe del área de matemáticas de la universidad CalTech, así como otros matemáticos.

Los temas matemáticos en general que la seria ha tratado en este momento van:
  • Números primos y su factorizacion
  • Números Fibonacci
  • Hipótesis de Riemman - por cierto sobre esta hay un premio de 1 millón USD para quien la pueda comprobar -
  • Dinámica de fluidos
  • Teoría de conjuntos
  • Teoría del juego
  • Teoría de grafos
  • Probabilidad y estadística
  • Simulación de modelos matemáticos
  • Etc

En fin una gran cantidad de conceptos matemáticos, aplicados a eventos de física, computación y seguridad informática, economía, ciencias sociales, etc.

Por otra parte los programas usados para la visualización y análisis, que se muestran en la serie no es simple flash con algo de photoshop, la gente de Wolfram, los creadores del software de matemáticas Mathemathica 7, ayudan con la visualización de la información, de hecho tienen un blog donde semana a semana toman la matemática de la serie y crean vídeos para visualizar la teoría detrás de esta.

Epps

Adicional a este análisis del blog de Wolfram, hay otro blog un profesor de matemáticas- no encontré su nombre - de la universidad Northeastern, donde analiza episodio por episodio la matemática del mismo, ademas de dar ejemplos y ligas para una investigación mas profunda.

En fin la serie esta interesante por el hecho de llevar las matemáticas aplicadas a un lenguaje o situaciones donde la mayoría las podamos entender, pero si te gustan las series policiacas, pues también la serie tiene algo que ofrecer, aunque como todas las series tiene sus altibajos en cuestión de la trama.

miércoles, febrero 11, 2009

DevLab: GIT parte 1

Este primer video vamos a realizar una introducción a el sistema de control de código fuente GIT, este videocast esta conformado por una primera parte (este video) y una segunda parte que se publicará próximamente.


DevLab Git from Mario A Chavez on Vimeo.

Recursos

DevLab Screencast de desarrollo de software

Ya el año pasada habia comenzado con esta iniciativa de crear Screencasts sobre temas de desarrollo de software, por diversas situaciones ya no pude continuar haciendolo.

Pero he decidido buscarme el tiempo para dedicarle a la creación de estos videos, esperando que sean de ayuda mutua, es decir que el contenido les aporte algo en su desempeño diario, y que támbien a través de la retro-alimentación me ayuden haciendome saber sus comentarios sobre el tema.

DevLab

La serie de Screencast se llama DevLab y la puden acceder desde esta liga o subscribirse a al feed a traves de feedburner.

El primer video esta práticamente listo y es sobre el Sistema de Control de Código Fuente GIT

ASP.NET MVC != Ruby On Rails

ASP.NET MVC desde que llego a los portales de noticias y se empezaron a publicar blogs sobre él, creo que ha estado bajo fuego enemigo como fuego amigo.

Y una buena parte de ese fuego, viene desde el "bando" de los programadores de WebForms, que no se hacen a la idea de desarrollar aplicaciones Web en esta herramienta tan "minimalista" y que no cuenta con ningún control UI que puedan "arrastrar y soltar" para componer su pagina, forzandolos a programar HTML.

Otra parte del fuego, viene de la misma gente .NET, que esperaban que ASP.NET MVC se parezca mas a Ruby On Rails y que están un tanto en desacuerdo con las decisiones técnicas que realizadas sobre el Framework.

Y por ultimo esta la gente que escucha el acrónimo MVC y espera que ASP.NET MVC sea un clon exacto de Ruby On Rails, y que al ver que no es así, simplemente desestima el Framework.

Desde mi punto de vista, ASP.NET MVC no debería de tener ningún compromiso de parecerse a Ruby On Rails, creo que debe de crecer por su cuenta, tomando las fortalezas de .NET así como sus debilidades también.

Pero volviendo al titulo de este post, ASP.NET MVC != Ruby On Rails y no se debe de esperar que lo sea por las siguientes razones:

Ruby On Rails es un framework super integrado desde la presentación Web hasta el acceso a la base de datos, esto nos ayuda a no preocuparnos sobre la "plomería" de nuestro proyecto y simplemente enfocarnos a lo importante, implementar la funcionalidad de negocio de nuestra aplicación.

Por su parte ASP.NET MVC es únicamente un Framework para desarrollar aplicaciones Web con el patrón MVC, pero no ofrece una guía sobre el acceso a base de datos, validación, ni ninguna otra cuestión de infraestructura. Aunque esto no es malo del todo; pero hay señales encontradas por parte del mundo .NET en este sentido, por ejemplo Microsoft empuja el uso de Entity Framework como capa de persistencia a datos, gente de la comunidad y empleados de Microsoft realizan sus demos con Linq2SQL y la gente mas independiente de Microsoft empuja NHibernate.

Esta situación donde no hay quien de una pauta, causa confusión en la gente que quiere aprender a desarrollar con ASP.NET MVC o los que vienen de frameworks como Ruby On Rails, que esperan llegar y desarrollar sin preocuparse de esas cuestiones, y que al final de cuentas se van decepcionados porque ASP.NET MVC no llena sus expectativas.

Hasta ahorita las únicas guías serias y con fundamento que he visto es la que promociona Headspring con su Arquitectura de la Cebolla y los proyectos CodeCampServer y MVCContrib, y la guía de SharpArchitecture, que de alguna manera es muy parecida a la Arquitectura de la Cebolla. Por lo menos ambas ayudan a olvidarse de los detalles de implementación y dedicarse a crear la funcionalidad de la aplicación.

Si a final de cuentas lo que buscamos son comparaciones, creo de ASP.NET MVC se parece mas al framework de Ruby Merb, el cual, al igual ASP.NET MVC es agnóstico a su capa de persistencia, presentación, etc.; tal y cual es el estado actual de ASP.NET MVC. Ambos frameworks tienen puntos extensibles que nos permiten reemplazar la funcionalidad original por nuestra la funcionalidad preferida.

Por lo tanto y para finalizar, quiero remarcarlo una vez mas, ASP.NET MVC != Ruby On Rails

martes, febrero 03, 2009

México First


México First es una iniciativa anunciada bajo el marco de Prosoft 2.0 a mediados del 2008. Esta iniciativa es impulsada por la Secretaria de Economía, con el apoyo de la Cámara Nacional de la Industria Electrónica, de Telecomunicaciones y Tecnologías de la Información (CANIETI) y la Asociación Nacional de Instituciones de Educación en Informática (ANIETI).

El objetivo de México First es lograr la certificación de profesionistas y graduados de instituciones académicas en áreas relacionadas con las IT y sus procesos, según los objetivos del programa se espera que para el 2012 existan algo así como 150,000 personas certificadas, aunque hay otras versiones donde indica que realmente esperan 65, 000 personas certificadas.

Como mencione, las áreas a certificar van Business Process Outsourcing (BPO) a certificaciones IT. En el lado de las certificaciones IT, me llama la atención que buscan certificar personal en metodología TSP (Team Software Process) y PSP (Personal Software Process).

Ambas metodología se enfocan en como las personas y equipos deben de trabajar en conjunto para desarrollar software, según - el articulo de Software Guru, en las ligas al final del post - TSP/PSP ayudan a que las empresas pequeñas se acerquen a marcos de trabajo complejos como CMMI, pero que no se supone que la norma Moprosoft tenia este mismo objetivo? acercar a la pymes de desarrollo de software a marcos como CMMI?

Ahh, Moprosoft tiene un hoyo grande, quizás deliberado, quizás no, no se enfoca en las personas, si no en los procesos de la empresa, pero si se pregonaba que las empresas de desarrollo de software que aplicaran Moprosoft iban a tener un mejor nivel de calidad en el desarrollo de software, porque meter ahora TSP/PSP, y si TSP/PSP es complemento de Moprosoft, porque no se promociono junto con Moprosoft, o será que Moprosoft no dio "el ancho" y ahora TSP/PSP es un "parche" para asegurar la calidad del software.

El caso es que como empresa desarrolladora de software, ahora hay que certificar a los empleados en TSP/PSP, para ahora si, poder alcanzar un nivel de madurez en el desarrollo de software. No estoy en contra de estos modelos de "calidad" de software, simplemente creo que hay que interponer a las personas sobre los procesos y herramientas, y que es mejor responder a los cambios de forma organizada, en lugar de solamente seguir un plan - Si 10 puntos para el que me diga donde vienen estas ideas -.

MexicoFirst BOPIT


Sobre las certificaciones técnicas, no estoy en contra de ellas, solamente creo que son una falsa sensación de seguridad, porque el contratar una persona certificada, a mi no me dice que va a tener un mejor o peor desempeño que alguien que no tiene certificaciones; pero en cuestiones de Curriculum y de mercadotecnia, pues una certificación no se ve nada mal.

Que al final de cuentas el objetivo de la SE con las certificaciones es el poder tener una mejor mercadotecnia para atraer inversión externa en BPO e IT a México, aunque al final el cliente no creo que se vaya con quien tengan mas certificaciones que otros, todos se va a reducir a el costo, quien lo pueda hacer mas barato.

Volviendo al punto de la iniciativa, el caso, es que el gobierno federal ha destinado fondos para apoyar a que las empresas certifiquen a sus empleados en la áreas mencionadas, estas certificaciones no serán gratuitas, pero tendrán un descuento de alrededor del 90%, por lo tanto si te interesan estas certificaciones y la empresa en la que trabajas esta afiliada a la CANIETI o algún Cluster TI, o estas estudiando la universidad, hay que investigar como poder obtener este beneficio.

Por el lado de la Comunidad Tijuana.NET también habrá información proximante de como se puede acceder a estos fondos para las certificaciones, tanto para profesionistas independientes, como miembros de la comunidad en general.

lunes, enero 19, 2009

Mis tags en Delicious

Este mi primer post del 2009 es relax, tengo una serie de temas que me gustaria tratar en las siguentes semana, por lo que espero poder postear mas seguido.

Por cierto no me habia fijado, pero hace 20 días este blog cumplió 2 años.

El día de ayer me encontré con esta página, la cual permite crear un tagcloud de los tags de Delicious, al generar mi tagcloud, creo fue contundente mi interes personal actual sobre Ruby On Rails.

delicious tagcloud


Cual es tu tendencia sobre las paginas que guardas con Delicious?
Mis bookmarks en Delicious estan aquí

martes, diciembre 16, 2008

Oxite, el proyecto que termino quemandose solo


Hace algunos días se anuncio con mucho eco Oxite, un manejador de contenido Web desarrollado por Microsoft. El revuelo que causo en algunos lados era debido a que esta desarrollado con el ASP.NET MVC Framework y que esta acompañado de una licencia Open Source - Ms PL -.

Por otro lado en algunos sitios se llego a mencionar que ahora Microsoft quería competir contra WordPress.

Oxite nació, como se como una herramienta Open Source para el manejo de contenidos del sitio Mix Online de Microsoft, y según la pagina en Codeplex de Oxite, tiene dos objetivos principales:
1.- Ser un ejemplo de funcionalidad base de un blog
2.- Ser un ejemplo de una aplicación real desarrollada en ASP.NET MVC

Ante la publicidad que Microsoft le ha proporcionado a Oxite, sobre todo señalando que es una aplicación "real" de ASP.NET MVC, no era de extrañarse que ante la falta de aplicaciones guía para el desarrollo con ASP.NET MVC una horda de programadores "corrieran" a descargar el código fuente y empezar a utilizarlo como base para otras nuevas aplicaciones, del 5 de Diciembre a la fecha el código fuente se ha descargado 15,326 ocasiones.

Pero días después, ya que "humo" alrededor de Oxite se ha asentado le han empezado a caer las criticas al ser una aplicación pobremente realizada. El primer critico de la aplicación fue Rob Conery - Microsoft -, el menciona lo siguiente:

* La aplicación esta abierta a ataques, ya tiene vulnerabiliades XSS - Cross-site Scripting -, al omitir el uso de Html.Encode para desplegar texto en la pagina.

* En términos de arquitectura hace uso del patrón Repository, pero delegan al patrón la tarea de crear sus DataProviders en lugar de hacer uso de Inyección de Dependencias, permitiendo así que los DataProviders se inicialicen únicamente una vez de forma Singleton.

* Critica el uso de controladores como capa de negocio o "Fat Controllers"

* Recomienda separar y agrupar las acciones de los controladores por áreas funcionales.

* Evitar usar ViewData como cubeta donde "tirar" datos, ya que la ideología tanto de los controladores como de las vistas es ser "ligeras" como sea posible.

* Extraer la lógica de las vistas y moverla a "Helpers", evitando así el código espagueti de Oxite.

Por su lado Karl Seguin critica los siguientes puntos:
* La arquitectura esta sobre-diseñada

* La falta de pruebas de unidad, integración y funcionales, después de todo el Framework MVC favorece al uso de pruebas para asegurar el funcionamiento de la aplicación.

* Al igual que Rob, comenta sobre el abuso de los controladores, con lógica que no debería de estar ahí, y la falta de Inyección de dependencias para el manejo de las mismas.

* También menciona el hecho de las Vistas con código espagueti y el abuso de ViewData

* Otro punto importante es porque la aplicacion hace uso de Linq To SQL, si su futuro esta dudoso, ya que Microsoft favorece Linq To Entities.

* También critica la desaparición de la M del acrónimo MVC, indicando que la V se desarrollo de forma mediocre y la C completamente horrible.

* Para rematar hace una serie de observaciones sobre inconsistencias en el código donde parece que intervinieron varias personas, pero cada una aplico su estilo propio.

Chad Myers recomienda sobre Oxite:
* Oxite debe de ser retirado hasta que se arreglen por lo menos los problemas de seguridad

* Oxite no debe de ser visto como base o guia para desarrollar aplicaciones ASP.NET MVC

* Si quieres aprender ASP.NET MVC y no te es familiar el patrón MVC, alejate lo mas que puedas de Oxite.

Y para finalizar aqui hay un post de Scott Koon aka "lazycoder" donde compila una serie de posts criticando Oxite, pero tambien invita a la gente a aportar a Oxite, ya que al ser Open Source es posible que se pueda corregir.

Con esto queda demostrado que ASP.NET MVC no es un "Silver bullet" para el desarrollo de aplicaciones Web, y que cualquier herramienta/tecnologia puede ser abusada al extremo y sin piedad.

Si quieres conocer ASP.NET MVC te recomiendo ver el código fuente de CodeCampServer y SharpArchitecture, ambas proveen de una buena guía como usar ASP.NET MVC.

jueves, diciembre 11, 2008

Curso ASP.NET Upgrade información para asistir

 Ya esta disponible la información para asistir al curso ASP.NET Upgrade.

Como mencione en un post anterior, el curso iniciara el Sábado 10 de Enero, continuara el sabado 17 de Enero y finalizara el sabado 24 de Enero 2009 en las instalaciones de IT@Baja.

IT@Baja Clúster de TI de Baja California
Dirección:
Blvd. Díaz Ordaz, 4558-209,
Edificio Salomón Local 209,
Col. Las Palmas, Tijuana, B.C.
Tijuana, B.C. 22123

El costo del curso es de 500.00 pesos -pago único por los tres días - como cuota de recuperación, NO DEPOSITES ANTES DE CONFIRMAR TU LUGAR !.

Para confirmar sigue estos pasos:
1. Envía un mail a Gabriel Flores con la intención de apartar lugar en el curso
2. Se te responderá con un mail si aún hay cupo
3. Deposita tu cuota de recuperación en
Banamex
Cuenta de Cheques Sucursal 13 Cuenta 7692082
Nombre Gabriel Flores Romero
4. Envía un scan de la ficha de depósito a Gabriel Flores por mail
5. Te esperamos en las instalaciones del Clúster

Temario del curso esta disponible en la pagina de la Comunidad Tijuana.NET.