SG #35 https://sg.com.mx/ en Aplicando Kanban para Recuperar un Proyecto Caótico https://sg.com.mx/revista/aplicando-kanban-para-recuperar-un-proyecto-ca%C3%B3tico <span class="field field--name-title field--type-string field--label-hidden">Aplicando Kanban para Recuperar un Proyecto Caótico</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Fri, 04/20/2012 - 12:28</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/revista/secciones/agilidad" hreflang="und">Agilidad</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Las prácticas del método Kanban proveen el contexto para que valores como honestidad, comunicación, confianza, respeto y coraje emerjan de manera natural y sin resistencia dentro de un equipo de desarrollo de software. En este caso de estudio se describen situaciones clave durante el proceso de adopción de Kanban en un proyecto de desarrollo de software caótico. Con Kanban el equipo ha aprendido a convivir inmerso en el cambio y en el arte de mantener equipo y cliente satisfecho bajo estas circunstancias.<br /><br /> <strong>La situación</strong><br /> El equipo trabajó bajo un esquema típico en cascada donde las tareas se estimaron y asignaron a recursos de acuerdo a un diagrama de Gantt. Según el miembro del equipo más experimentado, trabajar tarde y los fines de semana era una práctica aceptable, sobre todo después de llevar a cabo demostraciones de avances de funcionalidad donde por ejemplo una tarea avanzada al 80% (según el Gantt) podía bajar al 20% debido a cambios solicitados por el cliente y falta oportuna de retroalimentación. La falta de honestidad, confianza y respeto eran evidentes, el equipo no era lo suficientemente honesto para comunicar al cliente el avance real. Para exacerbar la situación, el equipo no definió un criterio para considerar terminado cada requerimiento solicitado. Consecuentemente el cliente había perdido la confianza en la capacidad del equipo para entregar software, este círculo vicioso de deterioro de honestidad y confianza se repitió una y otra vez hasta el punto donde el respeto entre ambas partes se perdió. Fue entonces que me involucré en el proyecto y utilizamos técnicas de Kanban para recuperarlo.<br /><br /> <strong>El árbol de alto desempeño</strong><br /> El árbol de alto desempeño es una metáfora acuñada por Lyssa Adkins [1], que es un buen punto de partida para establecer la visión de un equipo de alto desempeño. Asumiendo que estás introduciendo Scrum al equipo, el árbol se dibuja desde las raíces a medida que se van enseñando los valores de Scrum. Para este proyecto utilicé un enfoque distinto acorde con las prácticas de Kanban y una cultura Kaizen. Establecimos que las siguientes prácticas de Kanban serían las raíces cuya adopción nos ayudarían a crear un conjunto de valores inexistentes en el equipo:</p><ul><li>Visualización y transparencia</li><li>Mejora continua</li><li>Entregas frecuentes</li><li>Priorización en base al valor</li><li>Limitar el trabajo a la capacidad del equipo</li></ul><p>Si las prácticas arriba (lo que serían las raíces) se ejecutan de forma consistente, gradualmente se harán más fuertes —e inherentes a la cultura— y por lo tanto el árbol se fortalece. Las hojas (valores) brotarán, obtendrán más luz y se volverán verdes alimentando al árbol como un todo. Dependiendo de la situación podrán emerger los valores que necesitamos para lograr el éxito:</p><ul><li>Honestidad: Las malas noticias con prioritarias, nada se esconde al cliente o entre los miembros del equipo</li><li>Comunicación: La información correcta en el momento oportuno con las personas indicadas</li><li>Confianza: El cliente tiene que confiar en la capacidad del equipo para entregar consistentemente</li><li>Respeto: Hacia las contribuciones de cada uno de los miembros del equipo de acuerdo a su background y habilidades. No hacer perder el tiempo de la gente</li><li>Coraje: Para aceptar el cambio y cambiar continuamente, experimentar, aprender, fallar y enseñar a otros</li></ul><p>Tenia claro que después de un tiempo los frutos empezarían a brotar. Los resultados estarían directamente relacionados al cambio cultural inspirado por las prácticas de Kanban y los valores continuamente reforzados en un ciclo positivo.<br /> Los frutos buscados eran: predictibilidad, calidad, satisfacción tanto del equipo como del cliente, auto-organización, crecimiento profesional del equipo y sus miembros.<br /> La figura 1 muestra una imagen del árbol de desempeño que generamos, y que a partir de su definición continuamente referenciamos en las retrospectivas.<br /><img src="/sites/default/files/images/stories/sg35/kanban-fig1.jpg" alt="" width="162" height="199" /><br /> <strong>Figura 1. Árbol de alto desempeño.</strong><br /> <br /> <strong>Kaikaku</strong><br /> Una vez definida la visión y teniendo en claro los valores que teníamos que recuperar se acordó con el equipo detener inmediatamente el proceso de desarrollo de software. Dentro de los principios de Lean esto significa “stop the line”.<br /> Acordamos enfocar todos nuestros esfuerzos para crear un backlog del producto con el formato de historias de usuario. Con la priorización de las historias se pudo distinguir los ítems funcionales de alto con los de bajo valor necesarios para lanzar la aplicación. Posteriormente definimos políticas por cada una de las fases del proceso de desarrollo actual y las hicimos explícitas.<br /><br /> <strong>Cultura Kaizen</strong><br /> La auto-organización empezó a emerger. Siguiendo nuestro objetivo de recuperar la confianza, organizamos sesiones apenas tuvimos algo que mostrar. Para minimizar el costo de coordinación acumulábamos tres historias completas antes de convocar al cliente para llevar a cabo una demo.<br /> Éste fue el punto de partida para construir honestidad y confianza. El equipo empezó a ser lo suficientemente honesto en cuanto a lo que podía entregar de acuerdo a un ritmo de trabajo sostenible. Frecuentemente se invitó al cliente a inspeccionar nuestro tablero de kanban para mantener las conversaciones dentro del contexto. La comunicación entre los miembros del equipo y el cliente comenzaron a mejorar, los primeros signos de coraje comenzaron a emerger, el equipo tenia ya el coraje para pedirle retroalimentación al cliente para clarificar el criterio de aceptación, sabían que las prácticas de Kanban (priorización en base a valor) los protegerían de cambios fuera del ámbito del criterio de aceptación acordado en las historias. La figura 2 muestra los primeras tableros kanban rudimentarios que usamos.<br /><img src="/sites/default/files/images/stories/sg35/kanban-fig2.jpg" alt="" width="264" height="200" /><br /> <strong>Figura 2. Tablero rudimentario.</strong><br /> <br /> <strong>Estimar es desperdicio</strong><br /> Antes de asumir el liderazgo del equipo las estimaciones se basaban en especulaciones acorde con un cronograma que nunca se cumplía, por lo tanto estimar era una pérdida de tiempo. Costó trabajo convencer al cliente de dejar de insistir en fechas de entrega y que la mejor forma de predecir el proyecto era a través de entregas continuas. Se acordaron políticas según la definición de terminado para cada cambio de estado de los requerimientos dentro del flujo de valor en Kanban de acuerdo al ciclo de desarrollo de software existente: análisis, diseño y desarrollo, paquete para QA listo, pruebas en entorno de QA, paquete para preproducción listo y pruebas en entorno de pre-producción.<br /><br /> <strong>Evolución de un tablero simple hacia uno avanzado</strong><br /> En cierto punto consideramos que la visibilidad que habíamos logrado no era suficiente por lo que decidimos tener un tablero tipo Scrum externo al kanban para gestionar las tareas de programación de las historias en la fase de desarrollo. Si bien Kanban no sugiere la descomposición de las historias a ese nivel nosotros consideramos que este nivel de visibilidad facilitó la auto-organización y el trabajo en equipo. Posteriormente decidimos que este tablero tipo Scrum debía estar embebido dentro del tablero Kanban ante lo cual decidimos incorporarlo evolucionando nuestro tablero hacia un modelo Scrum-Ban (la diferencia es que no evolucionamos a partir de Scrum sino todo lo contrario) pero siempre manteniendo la disciplina de Kanban de limitar el WIP o trabajo en progreso explícitamente a nivel de las historias (más no a nivel de tareas ya que nunca lo consideramos práctico). La figura 3 muestra este tablero.<br /><img src="/sites/default/files/images/stories/sg35/kanban-fig3.jpg" alt="" width="264" height="198" /><br /> <strong>Figura 3. Tablero avanzado.<br /> </strong><br /> <strong>Conclusiones</strong><br /> Kanban se implementó sin entrenamiento y sin disrupción en el trabajo desde el primer día, tampoco se cambiaron los roles. Luego de 8 meses, como resultado de un cambio cultural profundo el CEO de la compañía finalmente había logrado el nivel de agilidad de negocio que jamás pensó en tener desde que se inició el desarrollo de la primera versión del proyecto (un CRM).<br /> Hoy en día el equipo es auto-organizado y autónomo. El método Kanban ha generado una evolución hasta el punto de parecernos a un equipo Scrum, digamos que evolutivamente hemos ido orientándonos hacia un Scrum sin sprints pero de manera muy sutil, en pasos muy pequeños, logrando con cada paso el consenso colectivo y la comprensión del equipo de los principios detrás de las prácticas, la medición continua de datos cuantitivos pero sin descuidar el aspecto cualitativo y humano en el trayecto.<br /> El viaje ha sido una experiencia de aprendizaje para el equipo y el coach, sin estresar al equipo al pretender que trabajen por encima de su capacidad. Hemos construido un equipo efectivo que hoy trabaja con un proceso también efectivo y que sigue evolucionando en un entorno donde el cambio ya no asusta ni al cliente ni al equipo de trabajo.<br /><br /> <strong>Referencias:</strong><br /> [1] L. Adkins. Coaching Agile Teams. Addison-Wesley Professional, 2010.</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Manuel Mazán tiene más de 14 años de experiencia profesional y ha sido Scrum Master, Agile Coach y Kanban coach trabajando en distintos países como Perú, España, Irlanda, India y Reino Unido. <a href="mailto:mmazan@agiland.pe">mmazan@agiland.pe</a></p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Fri, 20 Apr 2012 17:28:58 +0000 Anonymous 1284 at https://sg.com.mx https://sg.com.mx/revista/aplicando-kanban-para-recuperar-un-proyecto-ca%C3%B3tico#comments Implantando Prácticas de Arquitectura dentro de la Organización https://sg.com.mx/revista/46/implantando-practicas-arquitectura-dentro-la-organizacion <span class="field field--name-title field--type-string field--label-hidden">Implantando Prácticas de Arquitectura dentro de la Organización</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Fri, 04/20/2012 - 12:06</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/arquitectura" hreflang="und">Arquitectura</a></li> </ul> </div> <div class="field field--name-field-autor field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Autor</h3> <ul class='links field__items'> <li><a href="/buzz/autores/humberto-cervantes" hreflang="und">Humberto Cervantes</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Quienes hayan estado siguiendo las distintas entregas de ésta columna y que laboren en una organización de desarrollo de software en donde actualmente no se sigan prácticas maduras de arquitectura de software probablemente se preguntarán ¿de qué manera se puede introducir esto en mi organización? En esta columna hablaré de la implantación de prácticas de arquitectura de software dentro de una organización en base a mi propia experiencia.<br /><br /> <strong>Etapas del cambio</strong><br /> La introducción de técnicas de arquitectura de software en una organización representa una mejora o cambio organizacional que, dependiendo del tamaño de la organización y el alcance de los cambios, puede llegar a ser complicado. Por lo anterior, es conveniente realizar éste cambio siguiendo un enfoque disciplinado como el que se plantea en el área de proceso OPM (antes OID) de CMMi [1], particularmente en organizaciones de tamaño medio y grande. De forma general, las etapas que conforman un proyecto de mejora se muestran en la figura1 y se describen a continuación:<br /><img src="/sites/default/files/images/stories/sg35/implantando-fig1.jpg" alt="" width="336" height="88" /><br /> <strong>Figura 1.</strong><br /> <br /> <strong>Diagnóstico</strong><br /> El diagnóstico permite establecer una línea de base o punto de partida relativo al cambio mediante la identificación del estado actual de la práctica dentro de la organización. En relación con la arquitectura de software, es conveniente evaluar las siguientes dimensiones (que corresponden a las disciplinas del desarrollo de arquitecturas y al contexto organizacional) con preguntas como las que se muestran en la tabla 1.<br /> La realización del diagnóstico permite elaborar un plan detallado del proyecto de mejora y, con base en este plan, se debe obtener aprobación y respaldo de la gerencia respecto a su ejecución. Ésta aprobación es el punto de revisión que permite continuar con el proyecto de mejora.<br /><img src="/sites/default/files/images/stories/sg35/implantando-tabla1.jpg" alt="" width="355" height="522" /><br /> <strong>Tabla 1.</strong><br /> <br /> <strong>Propuesta</strong><br /> Esta etapa se enfoca en la definición de propuestas de mejora relativa a los procesos de la organización. En relación con la arquitectura, se enfoca en establecer métodos relacionados con el desarrollo de arquitectura de software específicos que estén alineados al contexto organizacional y partan del diagnóstico establecido.<br /> Esta etapa es compleja, pues no basta simplemente con retomar métodos como los propuestos por el Software Engineering Institute (SEI) y adoptarlos “tal cual”. Un ejemplo de ello es el método de evaluación de arquitectura ATAM, que difícilmente puede es implantado en una organización relativamente pequeña. La adecuación de métodos de arquitectura de software debe considerar diversos aspectos que incluyen:</p><ul><li>El tipo de proyectos que se desarrollan dentro de la organización</li><li>La metodología de desarrollo que se usa dentro de la organización</li><li>El nivel de madurez de la organización en cuestiones de ingeniería de software</li><li>Los recursos con los que cuenta la organización</li></ul><p>Al final de ésta etapa se debe contar con una versión preliminar de métodos de desarrollo de arquitectura de software y, posiblemente, algunos artefactos asociados como pueden ser materiales de capacitación.<br /><br /> <strong>Piloto</strong><br /> Antes de permear una mejora a nivel organizacional, es conveniente realizar pruebas para 1) ver si las propuestas funcionan realmente en el contexto de un proyecto real y 2) corregir la propuesta en base a los resultados de la ejecución.<br /> Esta etapa presenta varias dificultades, entre las cuales se encuentran el encontrar un proyecto real en donde se pueda probar algo que puede resultar totalmente nuevo, lo cual puede implicar ciertos riesgos. Otro aspecto relacionado con ésta problemática es que el proyecto de mejora se puede ver detenido pues se está esperando un proyecto para la realización del piloto. Una dificultad adicional es que la realización de un piloto requiere de un seguimiento cercano (o coaching) de los participantes en el proyecto y, principalmente, del arquitecto del equipo. Durante el piloto, el coach debe ser cuidadoso en cuanto a su nivel de involucramiento dentro del proyecto pues lo que se desea es que sea el arquitecto del equipo quien ejecute los métodos de arquitectura y no el coach.<br /> Antes de iniciar el piloto se debe considerar la manera en que se realizará la evaluación del mismo. Esto es importante pues al final de esta fase debe haber un nuevo punto de revisión cuyo propósito es decidir si proseguir o no con la implantación de la mejora en base a la experiencia obtenida.<br /><br /> <strong>Implantación</strong><br /> En la etapa de implantación, las mejoras que fueron probadas durante el piloto y que han sido corregidas en base a los resultados del mismo, son permeadas a toda la organización. Esta etapa puede ser bastante compleja pues involucra entre otras cosas:</p><ul><li>Modificar los procesos organizacionales</li><li>Desarrollar y ejecutar capacitaciones</li><li>Proporcionar soporte a quienes hacen uso de la mejora</li></ul><p>La implantación de la mejora es una fase que puede tomar un tiempo considerable. La capacitación de la gente se tiene que hacer de forma gradual conforme la gente vaya arrancando nuevos proyectos en donde se pretenda utilizar la mejora, que en este caso son los métodos de desarrollo de arquitectura de software. Respecto a la arquitectura, es conveniente que dentro de la organización haya un “champion” que esté velando de forma continua que se usen los métodos de desarrollo de arquitectura de software de manera adecuada y que tenga la disposición de resolver dudas.<br /> La evaluación de la implantación, que es el punto de revisión al final de la fase, se enfoca en medir los efectos de la implantación de una mejora y, en este caso, de los métodos de arquitectura de software. Evaluar éstos efectos no es una tarea simple, sin embargo, algunas métricas que pueden ser interesantes para este efecto son:</p><ul><li>Defectos relacionados con arquitectura de software antes y después de la introducción de los métodos de desarrollo de arquitectura (se esperaría ver un decremento de éste tipo de defectos)</li><li>Cambios en tiempos de pruebas (se esperaría ver una reducción de tiempo pues se realizan más actividades de diseño)</li></ul><p>Cabe señalar que para poder medir estos efectos, se requiere que la organización en donde se va a implantar la mejora tenga datos históricos que puedan usarse como punto de referencia.<br /><br /> <strong>Seguimiento</strong><br /> El seguimiento se enfoca en mejorar continuamente el cambio que ha sido implantado exitosamente con el fin de corregirlo y adaptarlo a la evolución que existe en la organización. En ésta etapa, el “champion” sigue jugando un papel importante pues debe velar que la mejora no se diluya y que las actividades de desarrollo de arquitectura no comiencen a ser realizadas de forma mecánica como desafortunadamente sucede de forma frecuente con los procesos de desarrollo de software.<br /><br /> <strong>En conclusión</strong><br /> La introducción de cambios dentro de una organización, tales como métodos para desarrollar arquitectura de software, es una tarea compleja y particularmente si la organización en donde se pretende realizar este cambio es de tamaño considerable. Un proyecto de mejora como éste es, sin embargo, necesario si se desea que la organización madure respecto a sus prácticas de desarrollo de arquitectura. En organizaciones pequeñas la tarea puede resultar más simple, sin embargo, el reto ahí es lograr adaptar los métodos para trabajar en ambientes ‘reducidos’. Un aspecto importante para lograr la implantación de la mejora es tener apoyo de la gerencia.<br /><br /> <strong>Referencias:</strong><br /> [1] Chrissis, M. B., Konrad, M. y Shrum, S. “CMMi for Development: Guidelines for Process Integration and Product Improvement”, Addison-Wesley Professional, 3d Edition, 2011</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>El Dr. Humberto Cervantes es profesor-investigador en la UAM-Iztapalapa. Ha realizado investigación en temas relacionados con arquitectura de software desde el año 2000 y en años recientes se ha enfocado en el estudio y la aplicación de métodos que apoyen al desarrollo de arquitectura de software dentro de la industria Mexicana. Está certificado como ATAM Evaluator y Software Architecture Professional por parte del SEI. <a href="http://www.humbertocervantes.net/" target="_blank">www.humbertocervantes.net</a></p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Fri, 20 Apr 2012 17:06:21 +0000 Anonymous 1283 at https://sg.com.mx https://sg.com.mx/revista/46/implantando-practicas-arquitectura-dentro-la-organizacion#comments Aprovechando las Bondades de “whois” en las Pruebas de Seguridad https://sg.com.mx/revista/aprovechando-las-bondades-%E2%80%9Cwhois%E2%80%9D-las-pruebas-seguridad <span class="field field--name-title field--type-string field--label-hidden">Aprovechando las Bondades de “whois” en las Pruebas de Seguridad</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Fri, 04/20/2012 - 11:34</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/revista/secciones/testing" hreflang="und">Testing</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>La extracción de información inicial del SUT (System Under Test), tema abordado en la anterior edición de este espacio, es una de las fases más importantes en un proyecto de pruebas de seguridad informática, ya que entre más información tengamos sobre el sistema o aplicación que estaremos probando, mejor será la estrategia a seguir para el diseño y ejecución de dichas pruebas.<br /> Al igual que “nslookup”, sobre la cual ya ahondamos en el pasado número, existen muchas otras herramientas disponibles, de las cuales se puede echar mano para acrecentar la base de conocimiento sobre la aplicación a probar. Una de esas herramientas es la conocida “whois”, un programa con ya bastantes años en circulación, pero no por eso menos eficiente.<br /> “Whois” no es solamente un programa, es un protocolo que prácticamente nació con la Internet. El primer documento redactado con el objetivo de conformar a “whois” en el servicio y protocolo que es hoy en día, fue el RFC – 812, presentado por Ken Harrenstien y Vic White hace aproximadamente 30 años, el 1 de Marzo de 1982. Eran los días en que la Internet todavía se llamaba ARPANET y se encontraba cerrada solamente a un determinado número de científicos, militares y académicos. Con el paso de los años y la apertura de la Internet al público en general, surgieron nuevos documentos enfocados en el mejoramiento de esta herramienta. El primero de ellos fue el RFC – 954 con fecha de Octubre de 1985 y el cual fue considerado como la especificación oficial del protocolo “NICNAME / WHOIS”. Casi veinte años después, en Septiembre de 2004, fue publicado el RFC – 3912 con nuevas actualizaciones del protocolo, quedando así como especificación oficial del mismo hasta el día de hoy.<br /> A pesar del transcurrir del tiempo, la funcionalidad de “whois” sigue siendo prácticamente la misma que en sus primeros días, ya que sigue proveyendo información sobre los usuarios de la red, pero ahora ya no a nivel de usuario sino a nivel de dominio.<br /> “Whois” normalmente aparece por defecto como parte de las herramientas de los sistemas operativos Unix y Linux. En los entornos Windows, la herramienta no es incluida en la distribución de fábrica, sin embargo puede ser descargada de Internet del sitio de Technet de Microsoft.<br /> La forma más tradicional de usar “whois” es a través de la línea de comandos de Unix, Linux o Windows, de la siguiente manera:<br /><br /> <em>&gt; whois dominiodeprueba.com</em><br /> <br /> La ejecución de este comando puede obtener como resultado, información similar a la mostrada a continuación:<br /><br /> <em>Whois v1.01 - Domain information lookup utility<br /> Registrant:<br /> &nbsp;&nbsp;Empresa de Prueba.<br /> &nbsp;&nbsp;Please contact juan_perez@empresa_de_prueba.com Dirección de Prueba # 100<br /> &nbsp;&nbsp;México, DF 00000<br /> &nbsp;&nbsp;México<br /> &nbsp;&nbsp;dns-admin@empresa_de_prueba.com +5500000000 Fax: +5500000001<br /> Domain Name: Empresa de Prueba S.A. de C.V.<br /> &nbsp;&nbsp;Registrar Name: Empresa_Registrante.com<br /> &nbsp;&nbsp;Registrar Whois: whois.empresa_registrante.com<br /> &nbsp;&nbsp;Registrar Homepage: http://www.empresa_registrante.com<br /> Administrative Contact:<br /> &nbsp;&nbsp;Alberto H.<br /> &nbsp;&nbsp;Calle Madero # 000<br /> &nbsp;&nbsp;Querétaro, Qro 00000<br /> &nbsp;&nbsp;México<br /> &nbsp;&nbsp;alberto_h@empresa_de_prueba.com +4420000000 Fax: +4420000001<br /> Technical Contact, Zone Contact:<br /> &nbsp;&nbsp;Roberto L.<br /> &nbsp;&nbsp;Calzada Zaragoza # 0000<br /> &nbsp;&nbsp;Aguascalientes, Aguascalientes 00000<br /> &nbsp;&nbsp;México<br /> &nbsp;&nbsp;roberto_l@empresa_de_prueba.com +4490000000 Fax: +4490000001<br /> Created on..............: 2005-01-01.<br /> Expires on..............: 2015-01-01.<br /> Record last updated on..: 2012-01-01.<br /> Domain servers in listed order:<br /> servidor1.empresa_de_prueba.com<br /> servidor2.empresa_de_prueba.com<br /> servidor3.empresa_de_prueba.com</em><br /> <br /> Como se puede apreciar, la cantidad de información devuelta por “whois” es mucha. Sin embargo, no sólo se trata de información técnica como en el caso de “nslookup”, representada por los servidores de nombres de dominios, sino que también incluye datos personales y de contacto (teléfonos y direcciones de correo electrónico) de personas al interior de la empresa propietaria del dominio consultado. Estos datos fueron proporcionados a la empresa registrante durante el proceso de adquisición de dominio por parte del cliente y es relativamente fácil de obtener.<br /> La importancia de esta información radica en que una vez obtenida, puede facilitar a usuarios malintencionados, el hacerse pasar por representantes de la empresa registrante del dominio y solicitar datos que puedan ser usados posteriormente para la realización de un ataque informático. En otras palabras, los empleados Juan Pérez, Alberto H. y Roberto L. mostrados en los resultados regresados por “whois” podrían llegar a ser engañados mediante técnicas de ingeniería social para revelar datos más técnicos de sus aplicaciones o equipos empresariales que, de ser conseguidos, facilitarían un ataque informático a la red corporativa.<br /> Este mismo enfoque es el que puede aplicar el equipo de ingenieros de pruebas que está realizando la evaluación de seguridad de la red empresarial del cliente. En lugar de solamente enfocarse en cuestiones meramente técnicas, el equipo de pruebas puede considerar la información personal obtenida con “whois” para establecer un nuevo vector de ataque a la red y probar lo que por muchos es considerado como el eslabón más débil en el esquema de seguridad de una organización: el ser humano.<br /> Mediante llamadas telefónicas o correos electrónicos, el equipo de pruebas puede hacerse pasar por un usuario válido al interior de la empresa y solicitar el “reseteo” de una contraseña, la activación de un servicio o acceso a recursos protegidos a los cuales comúnmente no se podría acceder.<br /> Por su parte, la existencia de direcciones de correo electrónico en los resultados retornados por “whois” ha facilitado a lo largo del tiempo, la recolección de datos por parte de “spammers” para el envío de sus correos no deseados. Por lo tanto, si una o más direcciones de correo electrónico tienen ya un tiempo considerable registradas en la base de datos de “whois” es probable que ya hayan sido recolectadas por algún procedimiento automatizado y usadas para envío de “spam” como en su momento lo documentó el ICANN Security and Stability Advisory Committee.<br /> Por otro lado, la misma presencia de direcciones de correo electrónico, abre la posibilidad de que usuarios malintencionados hagan uso de programas para envío y rastreo de correos electrónicos (email tracking). Por ejemplo, un lunes cualquiera en la empresa X (potencial víctima), Juan Pérez puede tener esperando en su bandeja corporativa un e-mail con una imagen anexa. Sin embargo, es probable que Juan no se dé cuenta que ese gráfico anexo está especialmente configurado para avisar al remitente, el momento en que se abrió el correo, así como la dirección IP real en la cual se abrió el correo dentro de la empresa. De esta manera, un e-mail especialmente configurado enviado a la dirección correcta, puede descubrir datos más específicos y útiles que a simple vista no son visibles para el ojo no entrenado.<br /> Aunado a lo anterior, no podemos dejar de lado un resultado de gran relevancia para el equipo de pruebas regresado también por “whois”: una o más direcciones físicas de la empresa. En primera instancia, pudiera parecer que este dato no es importante, ¿a quién le puede importar la dirección física de una empresa? Sin embargo, observando el escenario desde una perspectiva diferente a la tradicional, el conocer la ubicación física de la empresa abre la posibilidad de presentarse en persona a las instalaciones o en los alrededores de la misma e intentar conectarse a la red organizacional directamente (si se obtiene el acceso físico) o a través de la red inalámbrica empresarial desde un lugar aledaño. Actualmente, obtener la dirección física de una empresa puede ser tan fácil como buscar en el directorio del sitio web corporativo, sin embargo, por cuestiones de privacidad, no todos los sitios web tienen un directorio corporativo a la vista y cuando este es el caso, “whois” puede ayudar.<br /> Algo importante también a resaltar, es el hecho de que actualmente, no es necesario tener instalado el programa “whois” localmente para ejecutar ese tipo de consultas, ya que también se encuentra disponible en Internet en sitios como www.whois.net y en muchos otros, facilitando aún más el acceso a la información disponible en ese protocolo.<br /> Con acciones y evaluaciones de este tipo, el equipo de pruebas puede ayudar al cliente a implementar políticas de seguridad corporativa no sólo a nivel técnico, sino que sea incluyente también con empleados, proveedores y contratistas que en algún momento dado pudieran tener acceso a la red organizacional. En caso de que ya se cuente con una política de seguridad implementada, el mismo equipo de pruebas puede ayudar a mejorarla, reforzarla encontrando puntos ciegos que no se tengan considerados hasta ese momento.<br /> Como se mencionó anteriormente, la era de Internet en la que vivimos actualmente nos da la facilidad de obtener información sobre casi cualquier cosa, desde diferentes fuentes donde muchas de ellas son insospechadas como lo es “whois” que puede ser una aplicación y protocolo muchas veces demeritado por su edad, sin embargo, eficiente y eficaz. Después de todo, por algo ha sobrevivido todo este tiempo y hasta nuestros días ¿no es así?<br /><br /> <strong>Referencias:</strong><br /> [1] SAC 023: Is the WHOIS service a source for email addresses for spammers?, ICANN Security and Stability Advisory Committee, Octubre 2007.</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p><strong>Sandra Berenice Ruiz Eguino</strong> es Directora de Operaciones de e-Quallity, además ha participado como Consultora Senior en proyectos de mejora de organizaciones de Prueba de Software. Cuenta con certificación internacional en Pruebas por el ASTQB. A lo largo de su trayectoria profesional ha actuado también como Ingeniero de Pruebas Senior, Líder de Proyectos, Administradora de Proyectos nacionales e internacionales, analista y desarrolladora. Ha sido profesora de la Universidad Autónoma de Guadalajara (UAG), donde realizó sus estudios de Maestría en Ciencias Computacionales. <br /><br /><strong>Miguel Ángel Cortés Dueñas</strong> es Líder Técnico de Proyectos de Pruebas y Consultor Especialista en Pruebas de Seguridad en e- Quallity. Cuenta con certificación internacional en Pruebas por el ASTQB, así como certificación CEH (Certified Ethical Hacker) por el EC Council. En su trayectoria profesional ha participado también en proyectos nacionales y en el extranjero como Ingeniero de Pruebas Senior, realizando pruebas funcionales manuales y automatizadas.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Fri, 20 Apr 2012 16:34:36 +0000 Anonymous 1282 at https://sg.com.mx https://sg.com.mx/revista/aprovechando-las-bondades-%E2%80%9Cwhois%E2%80%9D-las-pruebas-seguridad#comments Seguridad Pública Eficiente https://sg.com.mx/revista/seguridad-p%C3%BAblica-eficiente <span class="field field--name-title field--type-string field--label-hidden">Seguridad Pública Eficiente</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 04/19/2012 - 13:00</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/revista/secciones/infraestructura" hreflang="und">Infraestructura</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Desde tiempos inmemoriales la seguridad ciudadana ha sido la misión primaria de todo gobierno, aún cuando a través de la historia la percepción de la misma ha evolucionado y se ha adecuado a las condiciones socio/culturales de cada época: desde la defensa a agresiones de carácter militar (guerras e invasiones) hasta problemática como fenómenos sociales, desastres naturales o delincuencia. Pero, a pesar de la diferencia en cuanto a objetivos y percepciones, siempre se le ha combatido de la misma manera: a través de tecnología. Nadie puede negar la superioridad tecnológica de los romanos al expandir su imperio, o la importancia de la tecnología en las ciudades medievales para la defensa de ataques forasteros. La segunda guerra mundial fue marcada por la competencia entre Aliados y Potencias del Eje por dominar la tecnología nuclear, culminando con el trágico incidente de Hiroshima y Nagasaki.</p><p>En México actualmente vivimos momentos críticos en materia de seguridad, y resulta más necesario que nunca implementar sistemas efectivos para contrarrestar la delincuencia, el narcotráfico, los secuestros y un largo etcétera de calamidades. Como siempre, la tecnología puede ser de gran ayuda si la aprovechamos de forma adecuada.</p><p>Un ejemplo es la tecnología biométrica, que es un conjunto de mecanismos digitales que utilizan rasgos físicos como un medio de autentificación que usualmente se sirven de la imagen facial y las huellas dactilares. El término proviene de las palabras griegas “bios” de vida y “metron” de medida y tiene muchos usos interesantes. Por ejemplo, hay países que han podido capturar los datos de cada uno de sus ciudadanos y esto ha derivado en el caso de la utilización de pasaportes biométricos los cuales contienen una lámina de policarbonato con un circuito electrónico que usa la biometría para autentificar la ciudadanía de los viajeros. Otro sistema biométrico que ha sido utilizado desde la China del siglo XIV es el reconocimiento de huellas dactilares conocido como AFIS (Automated Fingerprint Identification System) orientado a resolver las necesidades de las agencias de Gobierno y las Fuerzas de Seguridad. Actualmente el uso de estas tecnologías se ha extendido para el desarrollo de aplicaciones no criminalísticas, pero ha logrado un gran nivel de precisión y confiabilidad.</p><p>Existen en el mercado diversos componentes tecnológicos para seguridad como control de accesos, circuitos cerrados de televisión (CCTV), detección de incendios, control perimetral, monitoreo de alarmas, etcétera. Sin embargo, el gran reto para lograr soluciones efectivas y eficientes está en la integración. En la conjunción de sistemas diversos de seguridad para cada lugar y cada caso se encuentra la verdadera fortaleza: hay que crear sistemas hechos a la medida para cada espacio y situación y administrarlos de manera eficiente para poder librar la batalla contra los problemas que aquejan a la sociedad contemporánea.</p><p>Un buen ejemplo es la implementación en la Casa Rosada y la Residencia Presidencial de Los Olivos en Buenos Aires, Argentina de una solución integrada que se maneja desde una única consola de control. Las soluciones que están en funcionamiento desde 2008 son el Sistema de Control de Visitas, Sistema de Tiempo y Asistencia y Sistema de Control de Acceso Biométrico. Otro ejemplo es la implementada en el Country Club de San Eliseo donde después de una desagradable situación donde un grupo de delincuentes armados entraron en el club de campo y afectó a varias familias, las autoridades del lugar decidieron invertir en el campo de seguridad implementando 220 metros de cable microfónico, 10 domos IP y una Red de Comunicación Wi Max con 70 MB bandwidth, un control de accesos biométricos para las entradas y salidas e integraron todo a una única consola de control NECSIS Platform. Al crear un sistema unificado para cada espacio determinado estaremos creando una especie de almena: las almenas eran estructuras arquitectónicas medievales cuya función era la defensa pasiva o activa para los habitantes del feudo. Hoy en día, el primer paso para un plan de seguridad pública eficiente es la prevención de incidentes bélicos a través de la mejor tecnología existente, porque como bien lo dijo el filósofo inglés Thomas Hobbes: El fin último de cada gobierno es la seguridad de sus ciudadanos.</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Fabián Fandiño es Director de Desarrollo de Negocios de IT para NEC México. NEC Corporation es líder en la integración de tecnologías de la Información y Redes que benefician a las empresas y las personas alrededor del mundo. <a href="http://www.nec.com/" target="_blank">http://nec.com</a></p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Thu, 19 Apr 2012 18:00:49 +0000 Anonymous 1279 at https://sg.com.mx https://sg.com.mx/revista/seguridad-p%C3%BAblica-eficiente#comments Startups y el Mercado Empresarial https://sg.com.mx/revista/startups-y-el-mercado-empresarial <span class="field field--name-title field--type-string field--label-hidden">Startups y el Mercado Empresarial</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 04/19/2012 - 12:22</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/revista/secciones/emprendiendo" hreflang="und">Emprendiendo</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><div style="background-color: #999999; padding: 10px;"><em>El texto original de este artículo fue publicado como: “Internet Startups: ¿Se olvidan del sector enterprise?” en <a href="http://capitaldisruptivo.com/2011/12/12/internet-startups-se-olvidan-del-sector-enterprise/" target="_blank">http://capitaldisruptivo.com/2011/12/12/internet-startups-se-olvidan-del-sector-enterprise/</a> La versión que aquí presentamos fue editada por Software Guru y se publica con permiso del autor.</em></div><p>La revolución del Web 2.0 ha impulsado la innovación en servicios al consumidor y obligó a las startups a ser muy creativas en su pensar —amén de muy ágiles y asertivas en su ejecución— para poder sobrevivir en medio de la feroz competencia que caracteriza a los mercados de consumo en general. El impacto de esta poderosa ola de servicios basados en Internet para consumidores, ha provocado incluso que en el conservador sector de TI para empresas ya se habla de la “consumerización” de las TI empresariales. En este fenómeno el usuario adquiere tecnologías (dispositivos como el iPad o aplicaciones como Dropbox) y espera utilizarlas dentro de su empresa como una herramienta de trabajo, volviéndose un factor de decisión muy importante en el rumbo tecnológico de la compañía.<br /> De hecho, podemos hablar de que hoy existe una brecha importante entre los dispositivos, aplicaciones y en general herramientas que tienen los consumidores a comparación de los usuarios de una empresa (que en esencia son las mismas personas), donde estos últimos tienen aplicaciones rígidas, complicadas, difíciles de aprender, muy limitadas en sus alcances y muy caras. Esta diferencia entre ambos mundos lo podemos explicar principalmente por el modelo de negocio de los proveedores de tecnología empresarial, quienes una vez lograda una masa crítica de adopción, se vuelven un monopolio dentro de sus clientes que difícilmente los cambiarían por otras opciones ante el alto costo de configuración y arranque inicial, además de la dolorosa curva de aprendizaje de los usuarios. Dada esta falta de competencia real de un proveedor de TI dentro de una empresa, es fácil deducir por qué los servicios y aplicaciones del segmento empresarial no han evolucionado a la par de las de consumidores, ni en calidad, ni en sencillez de uso, ni en precio.<br /> Independientemente de que las oportunidades de disrupción en múltiples mercados de consumo son de tal magnitud que sería un craso error no explorarlas, el sector de servicios en general (y no solo de TI) enfocado a las empresas medianas y grandes está siendo ignorado por la mayoría de los fundadores de startups e incluso por inversionistas angeles y firmas de capital de riesgo. Y esto es irónico porque más allá de las claras condiciones de disrupción observadas en el sector empresarial según el Dilema del Innovador [1], la empresa como modelo de organización productiva está pasando por transformaciones dramáticas y profundas.<br /> Menciono a continuación algunos de estos cambios del entorno empresarial que vale la pena explotar como oportunidades de disrupción y creación de nuevos modelos de negocio:<br /><br /> <strong>Cloud Computing y el Mercado de TI</strong>. La consumerización y virtualización de la infraestructura de TI de las empresas, donde existirán en 2015 oportunidades por US$177 billones, tan solo en servicios de nube [2] del tipo PaaS, IaaS, SaaS y BPaaS, mas un mercado global de TI de US$1.8 trillones de dolares en la oferta de nuevos dispositivos, servicios de soporte a infraestructura, servicios de consultoría, etcétera.<br /> <br /> <strong>Outsoucing</strong>. La tercerización de funciones no esenciales de una organización era una práctica reservada normalmente a la grandes empresas. Dada la ubicuidad de las redes globales de comunicaciones y permeabilidad de los sistemas computacionales, la tercerización está creciendo de manera muy rápida en empresas de todos los tamaños, lo que cambia fundamentalmente su modelo de operación hacia una empresa de tipo virtual con operaciones “federadas”. Esto requiere nuevas herramientas de colaboración, administración y control que no existen en los proveedores tradicionales.<br /> <br /> <strong>Home-Office y Co-Working</strong>. Se estima que en EUA el 30% de la fuerza de trabajo labora desde su casa o desde lo que se ha empezado a denominar el “tercer espacio” (después de la oficina y la casa) que inició siendo el Starbucks más cercano y ahora ha evolucionado a espacios de co-working donde la persona encuentra mejores instalaciones y un ambiente social de soporte (no necesariamente con sus colegas) donde puede desempeñar su trabajo, pagando por día u horas el espacio físico. Combinando esta tendencia empresarial por reducir los cubículos de empleados dentro de sus instalaciones, con el cambio del modelo de empleo permanente por uno de “freelance” o por proyecto, se crean las condiciones para una tormenta perfecta donde el mercado mundial de bienes raíces enfocado al sector comercial de oficinas se pudiera colapsar en algunos años, y en su lugar surgir espacios más informales de co-working con rentabilidades muy superiores, parecidas a la diferencia por metro cuadrado de rentar una habitación de hotel contra un departamento o piso a largo plazo.<br /> <br /> <strong>Mercado de Selección y Reclutamiento de personal</strong>. Todo el mercado de reclutamiento de personal ha llegado a condiciones de disrupción claras por la sobreoferta de características no necesarias al cliente, y por otro lado su propuesta de valor pierde aceleradamente validez cuando las empresas buscan llenar menos posiciones permanentes y prefieren la flexibilidad operativa y mayor calidad de la oferta, cuando realizan contrataciones temporales por proyecto. Existen oportunidades muy interesantes en crear nuevos modelos y plataformas de contratación para ese nuevo tipo de empleado virtual, donde ya no basta con ofrecer un mejor catálogo online de curriculums o una atractiva herramienta de entrevistas por video.<br /> <br /> <strong>Servicios de publicidsd y Marketing</strong>. El mercado de publicidad tradicional en medios (TV, radio, periódicos, revistas, eventos) sigue siendo el que recibe el mayor gasto de las empresas, a pesar de que disminuye cada vez su audiencia, misma que se vuelca hacia medios online. Solo ahí existe una oportunidad de arbitraje interesante provocada por esta distorsión coyuntural. Sin embargo hay diferencias mas profundas en este mercado que la simple relación de inversión en medios VS. audiencia: las empresas tradicionales del mercado de marketing (ATL y BTL), así como los medios tradicionales del ecosistema, basan su propuesta de valor hacia la empresa en fórmulas casi “mágicas”, donde esta debe creer que obtendrá resultados a partir de inferencias subjetivas (intuiciones) de los expertos, productos ingeniosos y mucha repetición, para al final lograr el intangible “posicionamiento de marca”. Esto contrasta con el nuevo marketing y medios digitales que están basados en experimentación objetiva con métricas estadísticamente comprobables que llevan a resultados trazables hasta el movimiento de inventarios, y con un control preciso de los costos y del retorno a la inversión. Obviamente esto suena muy aburrido y complejo para los “creativos” tradicionales, pero ese es el futuro del “marketing científico” donde existen muchas nuevas empresas por surgir.<br /> Existen oportunidades muy significativas en el sector Enterprise de compañías medianas y grandes. Sin embargo, estas requieren una mentalidad diferente a la de los proyectos de consumo. A continuación comparto algunos consejos al respecto:</p><ul><li>El cliente efectivo es multidimensional, en el sentido de que la decisión de compra la toman los usuarios, el area de TI, compras, finanzas, las regulaciones aplicables, etcétera. Esto lo hace más complejo que el consumidor que en general es práctico e impulsivo.</li><li>El nivel de esfuerzo de pre-ventas, venta y post-venta para un cliente enterprise es más demandante que hacia un consumidor, por lo que la oferta debe ser estructurada muy cuidadosamente para ser rentable.</li><li>En el mercado enterprise existen menos competidores y más nichos por atacar, a diferencia de los grandes mercados de consumo donde los competidores relevantes dominan rápidamente con dinero y masa crítica.</li><li>Los mecanismos de monetización en el mercado enterprise son más claros y directos que en los mercados de consumo basados en Internet.</li><li>La rentabilidad a laro plazo (generada por los márgenes y la estabilidad de los clientes empresariales como clientes) es mayor que en productos y servicios de consumo, donde también la competencia es más feroz.</li><li>La "comoditización" de cómputo gracias al opensource, crowdsourcing y cloud computing, permiten hoy crear desde países en desarrollo, aplicaciones y servicios de clase mundial para clientes enterprise, aspecto que hace menos de 10 años sería impensable. Pero la mentalidad para crear esta nueva generación de aplicaciones y servicios tipo enterprise debe también ser renovada, combinando la agilidad y facilidad de las aplicaciones de consumo con la confiabilidad de los sistemas empresariales.</li></ul><p><strong>Referencias</strong>:<br /> [1] M. Landa. “El Dilema del Innovador”. <a href="http://swgu.ru/sg35r2" target="_blank"> http://swgu.ru/sg35r2</a><br /> [2] M. Landa. “Cloud computing: Análisis de disrupción del mercado de TI”. <a href="http://swgu.ru/sg35r3" target="_blank">http://swgu.ru/sg35r3</a></p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Manuel Landa es emprendedor en el area de Tecnología y Managing Partner de la Incubadora <a href="startupfactory.com.mx" target="_blank">Startup Factory</a>.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Thu, 19 Apr 2012 17:22:50 +0000 Anonymous 1278 at https://sg.com.mx https://sg.com.mx/revista/startups-y-el-mercado-empresarial#comments Clojure https://sg.com.mx/revista/clojure <span class="field field--name-title field--type-string field--label-hidden">Clojure</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Mon, 03/26/2012 - 10:15</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/seccion-revista/fundamentos" hreflang="und">Fundamentos</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Continuando con esta serie de lenguajes para la JVM, en esta ocasión les presentamos Clojure. Clojure (pronunciado “cloushur”) es un dialecto del lenguaje de programación Lisp que utiliza el estilo de programación funcional y es muy adecuado para construir sistemas de procesamiento concurrente (multithreaded). Clojure puede ejecutarse tanto en la máquina virtual de Java (JVM) como en el CLR de .Net, e incluso se puede compilar hacia Javascript.</p> <p>En este artículo jugaremos un poco con Clojure para conocerlo.</p> <h4>Habilitando el ambiente</h4> <p>Lo primero que necesitamos es tener instalado un ambiente de ejecución de Java (JRE). Una vez teniendo esto, la forma más sencilla para habilitar un ambiente de Clojure es utilizando Leiningen, la herramienta preferida para construcción de proyectos Clojure. </p> <p>Leiningen se puede obtener en <a href="https://github.com/technomancy/leiningen">https://github.com/technomancy/leiningen</a>. En Linux y OSX, su instalación básicamente consiste en descargar el script lein, ponerlo en un directorio de ejecutables (ej: /usr/bin), darle permisos de ejecución y correrlo. Es decir:<br /> <code><br /> sudo wget http://bit.ly/leinscript -O /bin/lein<br /> sudo chmod +x /bin/lein<br /> </code></p> <p>La primera vez que ejecutemos ‘lein’ instalará las dependencias que necesita. Si utilizas Windows, consulta las instrucciones de instalación en la página github de Leiningen.</p> <p>Teniendo instalado el script lein, podemos utilizar REPL, que es una consola para Clojure. Sé que REPL suena un poco raro, pero son las siglas de “read eval print loop”. Para iniciar REPL tecleamos:<br /> <code><br /> lein repl<br /> </code></p> <p>Al hacer esto, en la terminal nos debe quedarel prompt ‘user=&gt;’. De aquí en adelante, todos los textos en este tutorial que estén precedidospor ‘=&gt;’ se refieren a instrucciones que deben alimentarse en REPL.</p> <h4>Comencemos</h4> <p>Comencemos introduciendo algunos números y viendo si Clojure los puede interpretar.<br /> <code><br /> =&gt;3<br /> =&gt;2/3<br /> =&gt;-5<br /> </code></p> <p>Ahora vectores:<br /> <code><br /> =&gt;[1 2 2.9]<br /> =&gt;[1 “hola”]<br /> =&gt;[];vector vacío<br /> </code></p> <p>Como puedes ver, todo lo que viene después de un ; es un comentario.</p> <p>Ahora hagamos unas listas:<br /> <code><br /> =&gt;();lista vacía<br /> =&gt;(1 2 3);oooops?<br /> </code></p> <p>Esa última instrucción debe haber generado una excepción. Antes de explicar la razón de ésta, notemos que es una excepción java.lang, lo cual nos recuerda que en el fondo estamos corriendo Clojure sobre Java. ¿Y por qué salió la excepción? Bueno,recordemos que Clojure es un dialecto de Lisp (LISt Processing) así que su paradigma consiste en evaluar listas, y el primer elemento de una lista debe ser una función y el resto de los elementos son los argumentos para dicha función. Entonces, al recibir (1 2 3) Clojure trata de interpretar 1 como función, lo cual no es correcto.</p> <h4>Funciones</h4> <p>Ejecutemos nuestras primeras funciones:<br /> <code><br /> =&gt;(= 1 2)<br /> =&gt;(str “hola mun” 2)<br /> =&gt;(map str [1 2 3])<br /> </code></p> <p>Ahora intentemos lo siguiente:<br /> <code><br /> =&gt;(def tres 3)<br /> =&gt;tres<br /> </code></p> <p>Estamos definiendo el símbolo ‘tres’ y asignándolo al objeto 3. Bajo la misma lógica, ahora intentemos:<br /> <code><br /> =&gt;(def mastres ( fn [x] (+ x tres)))<br /> =&gt;(mastres 1997)<br /> </code></p> <p>Felicidades, hemos creado nuestra primer función en Clojure. El macro ‘defn’ nos provee una sintaxis un poco más sencilla para definir funciones. Podemos volver a definir nuestra función como:<br /> <code><br /> =&gt;(defn mastres [x] (+ x tres))<br /> </code></p> <h4>Map y Reduce</h4> <p>Una función bastante útil es ‘map’, la cual aplica una función a todos los elementos de una colección, tal como una lista, vector o mapa.<br /> =&gt;(map #(+ 3 %) [1 2 3 4 5])</p> <p>¿Qué fue eso de #(+ 3 %)? Es una sintaxis más corta para escribir funciones anónimas, equivalente a (fn [x] (+ x 3)). Con esta sintaxis, cuando quieres agregar más de un argumento lo haces de esta forma: #(* %1 %2)</p> <p>Al definir esta función no utilizamos def o defn para ponerle un nombre porque, como ya se comentó, es una función anónima. Las funciones anónimas son muy útiles principalmente al trabajar con funciones de alto orden, es decir, con funciones que tienen como algunos de sus argumentos otra función. Tal es el caso de ‘map’, en donde su primer argumento es la función que le vas a aplicar a la colección que metes como segundo argumento. </p> <p>Otra función que utilizaremos mucho es ‘reduce’, la cual nos permite iterar aplicando una función a una lista de elementos. Para ejemplificar esto regresemos a nuestra función ‘mastres’, si quisiéramos que la aridad (es decir, el número de argumentos que la función acepta) de nuestra función fuera infinita haríamos lo siguiente:<br /> <code><br /> =&gt;(defn mastres ([x] (+ x 3)) ([x y] (+ x y 3)) ([x y &amp; otrosargs] (+ x y 3 (reduce + otrosargs))))<br /> </code></p> <p>Noten que estamos usando un ‘&amp;’. Cuando usas el &amp; en el vector de parámetros, todos los parámetros que agregues al ejecutar la función los convierte en una lista. Y luego estamos utilizando esa lista a reduce para que itere a través de ella, sumando sus elementos hasta que se reduzca a un solo elemento. </p> <h4>Documentación como función</h4> <p>La documentación de los elementos de Clojure está disponible por medio de la función ‘doc’. Asímismo, puedes consultar el código fuente de cada uno con la función ‘source’.<br /> <code><br /> =&gt;(doc doc)<br /> =&gt;(doc source)<br /> =&gt;(doc reduce)<br /> </code></p> <p>Estructuras de datos<br /> Clojure se basa en los tipos de datos básicos de Java. Por ejemplo, los números derivan de java.lang.Number y los strings de java.lang.String. Clojure soporta colecciones tales como listas, mapas, vectores y conjuntos. Para mayor detalle, consulta la documentación de Clojure sobre estructuras de datos [4].</p> <p>Continuemos con algunos ejemplos. Te recomiendo usar doc y source para entender lo que está pasando.<br /> <code><br /> =&gt;(if (coll? ()) “la lista vacia es una coll” “la lista vacia no es una coll”)<br /> =&gt;(str [1 2 3])<br /> =&gt;(apply str [1 2 3])<br /> =&gt;(re-seq #”[^ ]+” “Hola chicas”) ;expresiones regulares<br /> </code></p> <p>Una propiedad interesante de Clojure es que cuenta con estructuras de datos “flojas” (lazy). Esto significa que Clojure no va a hacer muchos procesamientos hasta que pides el resultado. Por ejemplo, la función ‘range’ provee una secuencia de números enteros. Si la utilizas con 1 argumento, te regresa la lista de números desde el 0 hasta llegar al número indicado (no inclusivo). Si la utilizas con 2 argumentos, utiliza el primero como valor de inicio y el segundo como final. Pero si no utilizas argumentos, se irá hasta el infinito y no tendrás otra opción mas que matar tu proceso o cerrar tu terminal.</p> <h4>Namespaces</h4> <p>Durante estos ejercicios hemos tenido el prompt ‘user=&gt;’ así que hemos estado todo este tiempo habitando en el namespace ‘user’. Intentémos invocar un comando de shell, por ejemplo “ls” para que nos de el listado de archivos del directorio que estamos.<br /> <code><br /> =&gt;(sh “ls”)<br /> </code></p> <p>Seguramente recibiste una excepción porque REPL no entendió a qué te refieres con “sh”. La función sh se encuentra en el namespace clojure.java.shell. Así que para usarlo ponemos:<br /> <code><br /> =&gt;(use ‘clojure.java.shell)<br /> =&gt;(sh “ls”)<br /> </code></p> <p>Ahora sí funcionó. Como se habrán dado cuenta, nos regresa un mapa de llaves y valores. Si queremos sólamente obtener el valor de “out”, hacemos:<br /> <code><br /> =&gt;(:out (sh “ls”))<br /> </code></p> <h4>Conclusión</h4> <p>Bien, ya hemos dado los primeros pasos para comprender la esencia de Clojure. Te invito a que conozcas más sobre este interesante y útil lenguaje. La lista de referencias incluyo los principales sitios con documentación y tutoriales de Clojure. Adicionalmente, puedes enviar un mensaje a la línea de dudas en español vía twitter en @clojure_mexico. Para despedirme, los invito a que creen su primer proyecto de Clojure tecleando lo siguiente desde la línea de comando:<br /> <code><br /> lein new proyecto<br /> </code></p> <h6>Referencias</h6> <p>[1] <a href="http://learn-clojure.com">http://learn-clojure.com</a><br /> [2] <a href="http://clojure.org">http://clojure.org</a><br /> [3] <a href="http://clojure.github.com/clojure">http://clojure.github.com/clojure</a><br /> [4] <a href="http://clojure.org/data_structures">http://clojure.org/data_structures</a></p> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Andrés Gómez coordina la comunidad de @clojure_mexico y es director de tecnología en Fractal Media, en donde se utiliza clojure para crear soluciones inteligentes para marketing digital. @fractalresearch</p> </div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Mon, 26 Mar 2012 16:15:57 +0000 Anonymous 1244 at https://sg.com.mx https://sg.com.mx/revista/clojure#comments Programación Funcional https://sg.com.mx/buzz/programar-es-un-estilo-vida <span class="field field--name-title field--type-string field--label-hidden">Programación Funcional</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 03/08/2012 - 14:04</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/programar-es-un-estilo-vida" hreflang="und">Programar es un Estilo de Vida</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>El tema eje de el presente número de SG es el manejo de datos a muy gran escala (y disculparán que no use la frase de moda “Big Data”, habiendo otras igual de descriptivas en nuestro idioma). Al hablar de muy gran escala tenemos que entender que pueden ser juegos de datos mucho mayores —por lo menos tres a seis órdenes de magnitud— de lo que acostumbramos analizar.</p> <p>Dar un salto tan grande nos presenta retos en muy diversas esferas. Para ello tenemos que adecuar nuestros procesos de desarrollo, las herramientas que empleamos, el modelo con el cual solicitamos, procesamos y almacenamos la información, e incluso el hardware mismo. Enfocaré este texto al paradigma de programación funcional, el cual permite enfrentar a la concurrencia de una forma más natural y menos traumática de lo que acostumbramos.</p> <p>Una de las razones por las que este tema ha armado tanto alboroto en el campo del desarrollo de software es que, si bien la capacidad de cómputo a nuestro alcance ha crecido de forma francamente bestial en el tiempo que nos ha tocado vivir como profesionales, nuestra formación sigue estando basada en el modelo de programación secuencial, que es muy difícil de escalar. Vamos, el problema no lo tienen las computadoras, sino nosotros los programadores: no sólo tenemos que explicar a la computadora lo que requerimos que haga, sino que además de ello tenemos que cuidar que no se tropiece —cual si fuera un cienpies— con su propia marcha. Siempre que hablemos de muy gran escala debemos hablar de un alto grado de paralelismo en nuestras aplicaciones. Y por muchos años, el paralelismo fue precisamente algo de lo que buena parte de los programadores buscaban escapar, por las complicaciones que conlleva ante una programación imperativa, necesariamente secuencial.</p> <p>A mediados de la década pasada, los fabricantes de hardware cambiaron su estrategia abandonando la carrera de los megahertz y migrando a una estrategia de multiprocesamiento (CPUs múltiples empaquetados como una sola unidad). Con esto, aventaron la papa caliente hacia el lado de los desarrolladores: tendríamos que adecuarnos a una realidad de concurrencia verdadera y ya no simulada.</p> <p>Por muchos años, vivimos en un mundo de falsa concurrencia: una computadora sólo podía hacer una cosa a la vez, dado que contaba con un sólo procesador. Por la velocidad de su operación y por el empeño que se puso en que los cambios de contexto fueran tan ágiles como fuese posible, nos daba la impresión de que varias cosas ocurrían al mismo tiempo.</p> <p>El gran reto introducido por el paralelismo real es manejar correctamente escenarios mucho más complejos de condiciones de carrera que antes no se presentaban tan fácilmente. Antes del paralelismo, podíamos indicar al sistema operativo que nuestro programa estaba por entrar a una sección crítica, con lo cual éste podía decidir retirar el control a nuestro programa para entregarlo a otro si estaba cercano a finalizar su tiempo o darle una prórroga hasta que saliera de dicha sección.</p> <p>Cuando hay más de un procesador, la situación se complica: el sistema operativo puede mantener en ejecución a uno de los programas para reducir la probabilidad de conflictos, pero se hizo indispensable hacer la colaboración entre procesos algo explícito. Claro, esto no fue un desarrollo repentino ni algo fundamentalmente novedoso. Los mutexes nos han acompañado por muy largos años y la programación multihilos nos ha regalado dolores de cabeza desde hace muchos años. Sin embargo, en sistemas uniprocesador, la incidencia de condiciones de carrera era suficientemente baja como para que muchos las ignoraran.</p> <p>Una de las razones por las que la concurrencia nos provoca esos dolores de cabeza es porque nos hemos acostumbrado a enfrentarnos a ella con las herramientas equivocadas. Un tornillo puede clavarse a martillazos, y no dudo que haya quien use destornilladores para meter clavos, pero seremos mucho más efectivos si usamos la herramienta correcta.</p> <p>Los lenguajes basados en programación funcional resuelven en buena medida los problemas relacionados con la concurrencia y pueden de manera natural desplegarse en un entorno masivamente paralelo. Sin embargo, requieren un cambio más profundo en la manera de pensar que, por ejemplo, la adopción de la programación orientada a objetos. </p> <p>¿Cuál es la diferencia? Aprendimos a programar de forma imperativa, con el símil de la lista de instrucciones para una receta de cocina. Los lenguajes puramente funcionales son mucho más parecidos a una definición matemática, en que no hay una secuencia clara de resolución, sino que una definición de cómo se ve el problema una vez resuelto y los datos se encargan de ir marcando el camino de ejecución. Los lenguajes puramente funcionales tienen una larga historia (Lisp fue creado en 1958), pero en la industria nunca han tenido la adopción de los lenguajes imperativos. Sin embargo, hay una tendencia en los últimos años de incorporar muchas de sus características en lenguajes mayormente imperativos.</p> <p>La principal característica que hace diferentes a los lenguajes funcionales es que nos hacen pensar en definiciones matemáticas, ya que la llamada a una función no tiene efectos secundarios — ¿Han depurado alguna vez código multihilos para darse cuenta que el problema venía de una variable que no había sido declarada como exclusiva? Con la programación funcional, este problema simplemente no se presentaría. Esto lleva a que podamos definir (en AliceML) el cálculo de la serie de Fibonacci como:<br /> <code><br /> fun !b 0 = 0<br /> | !b 1 = 1<br /> | !b n if (n &gt; 1) = spawn !b(n-1) + !b(n-2);<br /> | !b _ = raise Domain<br /> </code></p> <p>A diferencia de una definición imperativa, la función es definida dependiendo de la entrada recibida y la última línea nos muestra el comportamiento en caso de no estar contemplado por ninguna de las condiciones. Y el puro hecho de indicar la palabra «spawn» indica al intérprete que realice este cálculo en un hilo independiente (que podría ser enviado a otro procesador o incluso a otro nodo para su cálculo).</p> <p>Otra de las propiedades de estos lenguajes son las funciones de orden superior (funciones que toman como argumentos a otras funciones). Por ejemplo, en Haskell:<br /> <code><br /> squareList = map (^2) list<br /> </code></p> <p>Al darle una lista de números a la función squareList, nos entrega otra lista, con el cuadrado de cada uno de los elementos de la lista original. Y esto se puede generalizar a cualquier transformación que se aplicará iterativamente a cada uno de los elementos de la lista.</p> <p>Hay varios tipos de funciones de orden superior, pero en líneas generales, pueden generalizarse al mapeo (repetir la misma función sobre los elementos de una lista, entregando otra lista como resultado) y la reducción (obtener un resultado único por aplicar la función en cuestión a todos los elementos de la lista). Y es, de hecho, basándose en juegos de mapeo/reducción que se ejecutan la mayor parte de las tareas intensivas en datos en Google.</p> <p>Podemos encontrar frecuentemente otros dos patrones en estos lenguajes, aunque por simplicidad no los incluyo en estos ejemplos: por un lado, al no tener efectos secundarios, tenemos la garantía de que toda llamada a una función con los mismos argumentos tendrá los mismos resultados, por lo que un cálculo ya realizado no tiene que recalcularse, y podemos guardar los resultados de las funciones (especialmente en casos altamente recursivos, como éste). En segundo, la evaluación postergada: podemos indicar al intérprete que guarde un apuntador a un resultado, pero que no lo calcule hasta que éste sea requerido para una operación inmediata, por ejemplo para desplegar un resultado, o para asignarlo a un cálculo no postergable.</p> <p>Una de las grandes desventajas que enfrentó la programación funcional es que los lenguajes funcionales puros crecieron dentro de la burbuja académica, resultando imprácticos para su aplicación en la industria del desarrollo. Esto ha cambiado fuertemente. Hoy en día podemos ver lenguajes que gozan de gran popularidad y han adoptado muchas construcciones derivadas de la programación funcional, como Python, Ruby o Perl. Hay lenguajes funcionales que operan sobre las máquinas virtuales de Java (Clojure) y .NET (F#). Por otro lado, lenguajes como Erlang, OCaml y Scheme se mantienen más claramente adheridos a los principios funcionales, pero con bibliotecas estándar y construcciones más completas para el desarrollo de aplicaciones.</p> <p>El manejo de cantidades masivas de datos están llevando a un pico de interés en la programación funcional. No dejen pasar a esta interesante manera de ver al mundo. Puede costar algo de trabajo ajustar nuestra mente para pensar en términos de este paradigma, pero los resultados seguramente valdrán la pena.</p> </div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Gunnar Wolf es administrador de sistemas para el Instituto de Investigaciones Económicas de la UNAM y desarrollador del proyecto Debian GNU/Linux. <a href="http://gwolf.org" target="_blank">http://gwolf.org</a></p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Thu, 08 Mar 2012 20:04:31 +0000 Anonymous 1219 at https://sg.com.mx https://sg.com.mx/buzz/programar-es-un-estilo-vida#comments Tecno-lógico https://sg.com.mx/buzz/tecno-l%C3%B3gico <span class="field field--name-title field--type-string field--label-hidden">Tecno-lógico</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 03/08/2012 - 13:51</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/revista/secciones/tecno-logico" hreflang="und">Tecno-lógico</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p>Buscar información se ha vuelto una de las tareas más comunes y recurrentes entre los usuarios de las tecnologías de información: búsquedas locales en un disco duro para encontrar documentos, correos o información, búsquedas en una base de datos empresarial para construir reportes y hacer análisis de información hasta las búsquedas en Internet para localizar información en una red global con información que cambia constantemente y que está distribuida en cientos de servidores en diferentes lugares físicos. Las soluciones actuales son suficientemente buenas pero en vista de la entrada de nuevos dispositivos en la arena de soluciones tecnológicas como la perspectiva de Cómputo en la Nube, la integración de servicios y el creciente número de media para almacenar la información tenemos que repensar la manera en que interactuamos con la tecnología a nuestro alcance para recuperar información que sea relevante, actualizada y de valor, donde y cuando la necesitemos.<br /><br /> <strong>De consultas a listas de links</strong><br /> La necesidad de buenas soluciones de búsqueda no es nueva, sobre todo si el propósito principal de las Tecnologías de Información es precisamente ayudar a sus usuarios lidiar con la complejidad de integrar fuentes de datos bastas y complejas en procesos de consulta sencillos. Desde los orígenes del cómputo como disciplina se diseñaron sistemas para ordenar volúmenes bastos de información y es común que los estudiantes de carreras de ciencias computacionales comiencen a programar algoritmos sencillos de ordenación y clasificación: la búsqueda de datos es una de las tareas claves de las personas que trabajan en áreas orientadas a tecnología, de una manera u otra.</p><p>En 1970 se creó el lenguaje que ahora conocemos como SQL, pensado en sus inicios como un lenguaje diseñado para que personas de negocios con poco o ningún conocimiento técnico pudieran hacer sus propias consultas desde una terminal usando palabras comunes y algo muy cercano a lenguaje natural. Con este requerimiento casi cualquier base de datos creada después soportó una forma u otra del lenguaje SQL, convirtiéndolo en el estándar para consultas a bases de datos, pero conforme pasaba el tiempo se hizo más complejo y oscuro y sus usuarios se volvían más sofisticados en su uso, eventualmente volviéndolo poco accesible al público general.</p><p>Eventualmente las soluciones para búsqueda y recuperación de información empezaron a diversificarse en la forma de máquinas de búsqueda, mapas de links, índices y crawlers. Con el advenimiento de la Red éstas se volvieron públicas, alimentadas tanto por algoritmos como por usuarios interesados en mejorar los resultados de los directorios. El <a href="www.dmoz.org" target="_blank">Open Directory Project</a> creado en 1998 intenta ser el más grande directorio de sitios web mantenido y curado por usuarios humanos.</p><p>La búsqueda alcanzó su punto más alto cuando Larry Page y Sergey Brin desarrollaron en 1997 el motor de búsqueda de Google como una implementación del algoritmo Pagerank que utiliza las relaciones y enlaces entre sitios web como parámetros para jerarquizar los resultados de una consulta para encontrar contenido en la Web de manera eficiente y sin intervención humana. El propio Page definió en su momento a “la máquina de búsqueda perfecta” como algo que “entiende exactamente lo que necesitas y te entrega exactamente lo que quieres”.<br /><br /> <strong>Las Nuevas Búsquedas</strong><br /> Si bien Google redefinió el concepto de búsqueda de información en la Web y la hizo universalmente accesible, hoy en día la situación es muy diferente de como era cuando Google fue creado: a finales del siglo XX existían solo unos cuantos miles de sitios web, cuando actualmente existen decenas de cientos de miles de sitios y uno nuevo es creado aproximadamente cada segundo y medio, sin mencionar que la variedad y la vastedad del contenido también han aumentado de manera exponencial. Eric Schmidt, antiguo CEO de Google ha mencionado que “actualmente cada dos días los habitantes del planeta producen tanta información como toda la que produjo la humanidad entera durante los 20,000 años antes del 2003”. En este sentido, un bus cador que entrega millones de resultados deja de ser útil cuando sus usuarios no pasan del resultado número cincuenta. Las listas de links a sitios web es una herencia de los directorios de primeros días de la Web y aunque Google ha logrado separar y diversificar sus servicios de búsqueda cada día es más evidente que la manera en que se gestionan las búsquedas.</p><p>En los últimos años ha habido acercamientos novedosos al tema de la búsqueda de datos en Internet. Un ejemplo notable es <a href="http://blekko.com/" target="_blank">Blekko</a>, creado con la idea de agregar un sentido editorial a la información de búsqueda. Blekko utiliza parámetros llamados “slashtags” para diferenciar u organizar los resultados en una búsqueda. En lugar de utilizar los enlaces a un sitio para calificar su relevancia, su algoritmo utiliza el contenido del sitio y el contexto del contenido de búsqueda en el sitio, además de que es posible para sus usuarios calificar los resultados para mejorarlos utilizando la inteligencia colectiva de su comunidad. Un efecto positivo en este acercamiento es la reducción de los sitios con SPAM y hace irrelevantes las técnicas de optimización para máquinas de búsqueda (SEO) para promover sitios cuyo contenido no sea relevante.</p><p>Otro acercamiento al tema de la búsqueda el que tomó Stephen Wolfram al crear la máquina de respuestas <a href="http://www.wolframalpha.com/" target="_blank">Wolfram Alpha</a> que en lugar de regresar listados de sitios utiliza algoritmos que analizan las solicitudes de búsqueda en lenguaje natural para darles contexto y en base a la pregunta genera una única página de respuesta con información obtenida de múltiples sitios y páginas en la Web. Wolfram Alpha no sólo analiza, almacena y categoriza resultados sino que les aplica inteligencia y procesa la información para generar resultados a partir de la información en la Web. Por ejemplo, la pregunta “¿Cuál es el país en el lugar 52 con el menor PIB por persona?” regresa como respuesta “Nicaragua, con $1160 dólares al año”. Wolfram Alpha cambia el modelo de búsqueda por palabras (keywords) a uno de lenguaje natural y de hecho es utilizado por Siri en iPhone para responder preguntas factuales.<br /> <br /> <strong>Tendencias y necesidades</strong><br /> Dada la tendencia actual en el crecimiento de la producción de información y debido a las nuevas posibilidades de cómputo en la Nube, nos dan para almacenar información sin límites, los nuevos buscadores están dejando atrás el modelo “un solo buscador” y cada vez vemos más buscadores especializados para nichos específicos de información, desde comparadores de precios como <a href="http://www.travelocity.com.mx/mx" target="_blank">Travelocity</a> hasta recomendaciones para restaurantes como <a href="http://www.yelp.com/" target="_blank">Yelp</a>.</p><p>Un caso especial es el de los sitios y servicios de redes sociales donde el contenido es gestionado y categorizado por sus usuarios pero debido a políticas de privacidad la información que contienen no siempre está disponible a los buscadores genéricos, como pasa con <a href="https://es.foursquare.com/search" target="_blank">Foursquare</a>. Las redes sociales han creado también muchas formas de gestionar la información que se genera en ellas, como <a href="www.twitstori.com" target="_blank">Twitstory</a>, creada por Johan Bollen, un investigador de la Universidad de Indiana, que permite analizar en tiempo real lo que sienten los usuarios de Twitter.</p><p>Otro acercamiento al análisis y procesamiento de información en la Red es el programa <a href="http://personas.media.mit.edu/" target="_blank">Personas</a> desarrollado por un grupo de investigadores sociales del Instituto Tecnológico de Massachusetts que utiliza algoritmos de procesamiento de lenguaje natural y la información disponible en la Web para crear un retrato de información de la identidad digital de una persona, es decir, se le muestra a una persona como es percibida por Internet.</p><p>La cantidad de información disponible en medios digitales crece cada vez más, no sólo por la información nueva que se genera todos los días, sino porque también información que antes sólo estaba disponible en libros o media desconectada ya empieza a ser procesada y publicada. De la misma manera, la información digital empieza a generar nueva información por si misma al extrapolar las relaciones de datos aparentemente inconexos. Así como cada vez habrá mayor información disponible el verdadero valor de la misma no está sólo en los datos sino en cómo extraemos inteligencia de ellos. Estamos en el mejor momento para crear los nuevos buscadores que nos ayuden a dar sentido y dirección a la inteligencia colectiva mundial.</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Mauricio Angulo es programador desde 1989 divulgador, ávido escritor y emprendedor. Actualmente es CEO y fundador de Tesseract Space donde realiza funciones de asesor y consultor de innovación tecnológica, mercadotecnia digital y experiencia de usuario.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Thu, 08 Mar 2012 19:51:52 +0000 Anonymous 1218 at https://sg.com.mx https://sg.com.mx/buzz/tecno-l%C3%B3gico#comments Analfabetismo Digital https://sg.com.mx/buzz/c%C3%B3digo-innovare <span class="field field--name-title field--type-string field--label-hidden">Analfabetismo Digital</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 03/08/2012 - 13:33</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/revista/secciones/codigo-innovare" hreflang="und">Código Innovare</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><strong></strong>La gran penetración que han tenido en años recientes las TIC en las actividades del día a día de millones de personas, sean o no especialistas en tecnologías, ha significado el nacimiento de muchos modelos de negocio de distintos tipos, incluidos las redes sociales y dispositivos inteligentes de telecomunicación, lo cual por supuesto siempre es bueno cuando significa educación, progreso y desarrollo de una comunidad.</p><p>Tradicionalmente el término “Educación Digital” se ha asociado a nuevos modelos educativos utilizando las ventajas que las tecnologías ofrecen, ampliando el esquema de educación de la escuela a prácticamente cualquier lugar donde se tenga acceso a la www, enfatizando con este enfoque que las tecnologías de comunicación son solo un medio muy eficaz para lograr el desarrollo de habilidades y competencias profesionales, lo cual por supuesto es cierto en el estricto sentido de un modelo educativo.</p><p>Pero el alcance de estos modelos no debe centrarse exclusivamente en los contenidos y los fines académicos puros de las ciencias que tratan, deben considerarse además los aspectos del uso adecuado de la tecnología desde tres condiciones necesarias:<br /><br /> 1. La correcta operación técnica de las herramientas tecnológicas.<br /> 2. La adecuada utilización funcional de esas herramientas.<br /> 3. La consciente y plena responsabilidad del uso y operación de esas herramientas junto con sus consecuencias.<br /><br /> En el primer punto podemos enfatizar que los esfuerzos por preparar docentes y profesionales en aspectos técnicos a través de programas formativos han sido intensos por diversas instituciones y han generado una gran cantidad de cursos y materiales de enseñanza de operación de diversos gadgets tecnológicos y los usuarios de estos, tienen un dominio muy alto de la operación de éstas herramientas.</p><p>El segundo punto por su parte, “la adecuada utilización funcional” implica a las ideas y la explotación de las funcionalidades, así como los beneficios tangibles de la utilización de una herramienta tecnológica. Tomemos por ejemplo el caso de las redes sociales: todos los días encontramos nuevos instrumentos tecnológicos que nos permiten hacer más cosas, por lo que se encuentran en constante expansión y en un proceso de transformación bidireccional, pues así como esos desarrollos se ven influenciados por la reacción y aceptación de los usuarios, también a su vez modifican sus patrones de comportamiento debido a la utilización de dichas herramientas. Esto implica por supuesto que la penetración de instrumentos de comunicación en los últimos años ha modificado por consecuencia la dinámica social, educativa, laboral y mercantil propiciando una vertiginosa transformación del pensamiento humano colectivo a un ritmo que no había ocurrido antes.</p><p>Debido a lo anterior, las acciones de alfabetización digital se hacen evidentes y se preparan cursos que ayudan al entendimiento y operación de esas herramientas tecnológicas, fomentando en los usuarios una necesidad de aprendizaje constante al encontrar satisfacción por dominar una nueva herramienta, competir por demostrar quién la maneja mejor o le saca más provecho, quién tiene la versión más actual o sofisticada, generando incluso una sensación de estatus social que contribuye a una menor (aunque aún imperceptible en muchos ámbitos) resistencia o temor al cambio, al menos en cuanto a tecnología se refiere.</p><p>Tocando el tercer punto, “la consiente y plena responsabilidad del uso y operación de la tecnología”, veremos que las cosas cambian drásticamente y que en ese sentido aún tenemos mucho que investigar, desarrollar y difundir. La educación en este sentido implicará ir mas allá de sólo adquirir una habilidad, sino a desarrollar un proceso mental natural respecto del adecuado uso de la tecnología considerando consecuencias y responsabilidades, basados en un instintivo análisis de riesgos.</p><p>A continuación pondremos algunos ejemplos para ver que el alcance social de las consecuencias del uso indiscriminado de las tecnologías sin una responsabilidad adecuada puede ser más perjudicial que no contar con esa tecnología.</p><p>Si un paciente acude a un laboratorio a realizarse análisis médicos y consulta los términos de sus resultados en Internet y luego va con un Doctor por un tratamiento, seguramente llegará ya influenciado por lo que leyó en la Web y dudará, criticará y cuestionará el diagnóstico del profesionista debido a un problema de desinformación o información mal dirigida. Un problema común por que no se puede consultar todo el resultado completo en la red, sino solo partes del mismo (coincidencia de palabras) y en consecuencia no se tiene el contexto completo del informe del resultado médico, lo que origina información parcial o mal orientada. Un problema que se pretende resolver con la Web Semántica (pero ese es un tema para tratar en otra ocasión).</p><p>Otro problema común hoy día es el abuelito o el papá que presumen a sus hijos por que manejan mucho mejor que ellos la computadora y dicen orgullosos que son muy hábiles en la operación de esos “aparatos” que ellos apenas entienden. Cuando nosotros fuimos niños, nuestros padres nos podían advertir sobre los peligros que encontraríamos en el parque o en una fiesta y nos prevenían para poder cuidarnos y defendernos de ello. Hoy día los niños y adolescentes “salen a pasear” por la Web y hacen amigos y socializan en diversos ciber espacios, y ese padre o abuelito orgullosos de que su hijo domina la computadora no son capaces de advertir o preparar al niño sobre los peligros que enfrentará porque tampoco conocen esos peligros o cómo identificarlos. Resultado: problemas de seguridad de todo tipo que ya conocemos debido el uso o manejo inadecuado de información que liberamos a la red indiscriminadamente sin ser plenamente conscientes de los peligros a los que nos auto exponemos.</p><p>Aprender a usar una tecnología por tanto implica no solo aprender a manipular la herramienta en sí y saber obtener resultados específicos por la utilización de ella, sino además tener el cuidado de operarlos adecuadamente sin provocar problemas posteriores por un uso irresponsable de los mismos.</p><p>Un ejemplo simple es el aprender a conducir un automóvil. Girar el volante, pisar pedales, mover palancas y presionar botones, es una operación mecánica relativamente simple que requiere de cierta coordinación física, pero eso no implica que el aprender a manipular los mandos permita asegurar que una persona sabe “manejar”, pues debe además aprender a respetar y seguir un reglamento de tránsito, además de desarrollar reflejos e instintos para reaccionar ante situaciones no previstas en los procesos de enseñanza de conducción de autos, implica además saber las consecuencias de no respetar ese conjunto de condiciones escritas y no escritas que se encuentran alrededor de operar un vehículo de manera segura y eficiente, además de las medidas de seguridad que debe observar para cuidar y proteger su vehículo.</p><p>Del mismo modo ocurre hoy día con las tecnologías de comunicación en general, llámense redes sociales, sitios de colaboración, smartphones, etc. Todas sin excepción requieren de una enseñanza técnica que permita operar las herramientas adecuadamente, es necesario saber los requerimientos y posibilidades funcionales que pueden solventarse por el uso de esas tecnologías, pero debe sobre todo comenzar a hacer conciencia sobre las responsabilidades inherentes al uso de esas tecnologías.</p><p>Las universidades, centros de investigación y gobiernos en general debemos comenzar a poner especial interés en desarrollar modelos de educación digital “responsable” o “consciente” de forma que podamos no solo desarrollar modelos tecnológicos sino “Modelos tecnológicos sociales”, que ayuden a minimizar los riesgos de salud y seguridad pública generados por el mal uso que muchos delincuentes hacen de las herramientas tecnológicas de que disponemos hoy día. Tal como diría Paul Gilster en 1997, “La alfabetización digital tiene que ver con el dominio de las ideas no de las teclas”.</p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>LSCA.Victor Jesús Hernández Salinas es egresado de la Universidad del Valle de México de la Carrera de Licenciatura en Sistemas de Computación Administrativa cuenta con una Certificación en Foundations ITIL .Desde 2003 colabora en el equipo de Desarrollo y Generación de Modelos Tecnológicos elaborando Servicios alrededor de los mismos. Creador y Coordinador del área de Servicios de Producto y su normatividad en INFOTEC. Impartió Conferencia “Web Semántica, La nueva generación de Portales y Aplicaciones” en SG09. Participó en la Mesa Redonda “Software Libre como Herramienta de Transformación Económica y Social” <a href="mailto:jesush@infotec.com.mx">jesush@infotec.com.mx</a></p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Thu, 08 Mar 2012 19:33:54 +0000 Anonymous 1217 at https://sg.com.mx https://sg.com.mx/buzz/c%C3%B3digo-innovare#comments El nuevo mundo de entendimiento https://sg.com.mx/buzz/tendencias-software <span class="field field--name-title field--type-string field--label-hidden">El nuevo mundo de entendimiento</span> <span class="field field--name-uid field--type-entity-reference field--label-hidden"><span lang="" typeof="schema:Person" property="schema:name" datatype="">Anonymous</span></span> <span class="field field--name-created field--type-created field--label-hidden">Thu, 03/08/2012 - 13:01</span> <div class="field field--name-field-numrevista field--type-entity-reference field--label-inline field--entity-reference-target-type-taxonomy-term clearfix"> <h3 class="field__label inline">Publicado en</h3> <ul class='links field__items'> <li><a href="/revista/35" hreflang="und">SG #35</a></li> </ul> </div> <div class="field field--name-field-seccion field--type-entity-reference field--label-hidden field--entity-reference-target-type-taxonomy-term clearfix"> <ul class='links field__items'> <li><a href="/secci%C3%B3n-revista/tendencias-software" hreflang="und">Tendencias en Software</a></li> </ul> </div> <div class="text-formatted field field--name-body field--type-text-with-summary field--label-hidden field__item"><p><strong>¿Para qué los grandes datos?</strong><br /> <br /> La “inteligencia de negocio” (BI) nos tenía una gran sorpresa escondida: no se trata solo de información para un usuario de hojas de cálculo. Estamos descubriendo que los procesos de negocio deben ser alimentados con “entendimiento”, ya que es un combustible fundamental para la evolución de las aplicaciones críticas. La inmensa cantidad de datos que nacen digitalmente están sirviendo para consolidar una nueva categoría de “aplicaciones conducidas por entendimiento”.<br /><br /> <strong>2009: El valor de los datos</strong><br /> Retrocedo un paso para poder crear el contexto apropiado. En un artículo publicado por la IEEE en el 2009 “"e Unreasonable effectiveness of Data” [1] se establece que: invariablemente, los algoritmos simples de aprendizaje con datos abundantes triunfan sobre “algoritmos inteligentes” con menor cantidad de datos. Una idea fundamental del web semántico es la capacidad de interactuar con servicios de software sin requerir inteligencia artificial. Esto se debe a que un mismo significado puede ser expresado de muchas maneras y la misma expresión puede tener diferentes significados. El artículo concluye que las relaciones semánticas pueden ser aprendidas automáticamente de evidencia acumulada en forma de patrones de texto y tablas.<br /><br /> <strong>2012: El científico de datos</strong><br /> Los gigantes del web hoy ingieren más de 5 Petabytes al mes. Y esto en una realidad donde los sensores se encuentran en uso aún de forma muy limitada. Esto ha generado una nueva figura – el científico de datos – que se encarga de obtener, depurar, explorar, modelar e interpretar datos, estadísticas y lenguaje basado en máquina. Son aquellos que aprecian a los datos como “un producto” de primera clase.</p><p>La inteligencia de negocios es todo sobre como “jugar con los datos” y llegar a conclusiones. Para este nuevo rol, los datos son la inspiración de un nuevo modelo. Su producto no son decisiones, sino datos adicionales o análisis. Juntos aumentan a la BI actual.</p><p>Las empresas líderes no tienen datos suficientes para contestar preguntas de negocio, pero “colectan” grandes cantidades de datos. De aquí que la capacidad de combinar datos internos a la organización con la externa puede producir nuevo valor.<br /><br /> <strong>Futuras Aplicaciones: Con entendimiento y adaptivas</strong><br /> Las nuevas aplicaciones deben estar pensadas para múltiples dispositivos, para utilizar la nube y para aprovechar los avances en metodologías de desarrollo. Ejemplo: Amazon “reacciona” a cualquier operación que un usuario realice en su sitio web. En solo 3 clicks de navegación es posible disparar recomendaciones, sin importar qué usuario sea o qué información previa se tenga de él. “Sabemos de dónde nos visitas, sabemos qué explorador usas, al primer clic podemos deducir qué estás buscando”</p><p>Las aplicaciones tienen que hacerse más inteligentes, tienen que reaccionar en tiempo real. Se requieren adaptar a lo que está sucediendo en el mundo real. Un motor de recomendaciones que tarde más de tres minutos fallará, porque el usuario ya no se encontrará visitando el sitio.</p><p>Una gran oportunidad está por delante para los que puedan aprovechar estas fuerzas en la era de los negocios conducidos por datos.<br /><br /> <strong>Referencias</strong>:<br /> [1] A. Halevy, P. Norvig, F. Pereira. “The Unreasonable E!ectiveness of Data”. <a href="http://swgu.ru/sg35r4" target="_blank">http://swgu.ru/sg35r4</a></p></div> <div class="text-formatted field field--name-field-autor-bio field--type-text-long field--label-above"> <div class="field__label">Bio</div> <div class="field__item"><p>Luis Daniel Soto Maldonado (<a href="https://twitter.com/#!/luisdans" target="_blank">@luisdans</a>) labora en la división de negocio de servidores y herramientas de Microsoft Corp.</p></div> </div> <section class="field field--name-comment field--type-comment field--label-above comment-wrapper"> </section> Thu, 08 Mar 2012 19:01:53 +0000 Anonymous 1216 at https://sg.com.mx https://sg.com.mx/buzz/tendencias-software#comments