lunes, 2 de febrero de 2009

Informática en tiempo de crisis o crisis en tiempos de la informática?

A estas alturas para nadie es un misterio que estamos pasando por una crisis mundial y que según las proyeccciones puede durar un buen tiempo (no entraré en detalles acerca de si es similar a alguna de las crisis anteiores, ni las proyecciones de cuando podría terminar por que no es el motivo de este post).
Si bien se dice que la informática es una de las pocas áreas en que la crisis no ha causado un efecto devastador, creo que falta aun que se sienta a cabalidad. En la empresa que trabajo prestamos servicios a una empresa minera. Y la minería es uno de los sectores que han visto mermadas sus utilidades en mucho dinero con respecto a hace un par de años. Entonces tomando como base este ejemplo, me gustaría que el escenario no fuera tan tomado a la ligera, mal que mal, el trabajo hay que hacerlo igual por lo que despedir personal es una alternativa cortoplazista y posiblemente apresurada, y como no es algo que quiera, quisiera en este post plantear mis alternativas o planes de acción que a mi juicio deberían tomar las empresas para afrontar la crisis por la vía de optimizar recursos versus el despido masivo.

La creación de una política de ahorro es fundamental. Como toda política, se debiera basar en normas y procedimientos, debe ser impulsada por los altos mandos y hecha respetar y controlada para verificar el funcionamiento.
Se me ocurren los siguientes ítems de ahorro:

1) Mejor aprovechamiento de la electricidad. El consumo energético en las empresas tecnologizadas es alto. Sevidores que funcionan día y noche, un computador asignado por empleado, cargadores de celular enchufados todo el día, el termo eléctrico para el cafecito, etc. Cada una de ellas suma.. y vaya que suman. Mi propuesta es generar un plan de ahorro energético consistente en programar los computadores para que actúen en modo de ahorro de energía cuando estén inactivos y que todos los empleados de la empresa tengan el deber de apagar sus pc'c al término de la jornada laboral. Evitar la mala práctica de tener el celular todo el día enchufado al cargador. Un cargador enchufado todo el mes significa un consumo de aproximadamente US$4. Proyecten esa cifra de acuerdo a la cantidad de empleados que potencialmente tienen esta mala práctica en las empresas. Lo mismo con otros artículos electrónicos que siguen "chupando" electricidad aunque estén apagados (Televisores, DVD, Proyectores, y computadores). Creo que en solo este ítem, el ahorro potencial es bastante. Otra cosa a considerar también es que en algunas empresas no es tan necesaria tanta luminosidad (tienen la luz del día y además luz en la empresa. En algunos casos esto podría arreglarse midiendo en qué sectores la luminosidad es mas adecuada y una posible reorganización de los escritorios podría conllevar a tener la mitad de las luces prendidas incluso produciendo mejor luminosidad en el puesto de trabajo de las personas.

2) Utilización de telefonía IP. Está comprobado que el ahorro producto de la implementación de esta tecnología es bastante. Claro, la inversión podría ser fuerte, pero el aprovechamiento de la tecnología y el ahorro también lo son. El Item "comunicaciones" en empresas cuyo tráfico telefónico es mucho, debieran sacar la cuenta de cuánto significa implementar una solucion de VoIP.

3) El acceso a internet. Las empresas usualmente tienen muy mal administrado este ítem. todavía existen empresas que tienen malutilizado el ancho de banda contratado con los ISP. Acá la política de seguridad de la imformación juega un papel importante. La limitación de los contenidos y servicios de internet a los empleados si bien no es lo mejor, es un punto importantísimo al momento de optimizar los recursos de red. Servicios de mensajería, P2P, descargas directas, FTP, y otros hacen que generalmente los recursos de red nunca sean suficientes. Posiblemente con una consultoría acerca del tema, una empresa que paga actualmente un enlace de 10 MB podría perfectamente funcionar con un enlace de 1 MB o de 2 MB.

4) Utilización de Software libre. Creo que está de mas que me extienda mucho sobre este punto sabiendo que este post lo leerán mayormente personas ligadas a la informática. El costo de licencias no es menor (y el no tenerlas, aparte de ser un delito podría significar una multa altísima) por lo que mi propuesta en este sentido es promover la utilización de software libre. Linux en vez de Windows, OpenOffice en lugar de MS Office, y así. Por cada software licenciado existe una alternativa libre.

5) Teletrabajo. Podría ser que sea mucho mas conveniente para una empresa tener a un trabajador trabajando desde su casa que tener un puesto disponible en una oficina. Este punto es relativamente especial dado que no todas las empresas están dispuestas a tener a sus empleados muy alejados de su alero y control, pero si consideramos el costo de una oficina en el centro versus llegar a un acuerdo con el trabajador por subsidiar su conexion a internet, teléfono y consumo energético, creo que el item "puesto de trabajo" podria reducirse bastante.

5) Aprovechamiento de servidores. La virtualización acá es la piedra angular. Muchas empresas se empeñan en utilizar un servidor por cada servicio. La clave es la optimización de los servidores virtuales (mas de un servidor lógico en un solo servidor físico).

6) Optimización de insumos: Papel, toner, tinta, son recursos que muchas veces están muy subaprovechados. Conozco empresas donde todavía se acostumbra a imprimir los correos electrónicos (de hecho, en algunos casos a mi también me gusta hacerlo por comodidad). La idea es que los trabajadores tomen conciencia de esto y que se evite la "sobreimpresión" es decir, que se evite el consumo excesivo de estos elementos. Otra práctica muy habitual en este sentido es que en algunas empresas se utilizan varias impresoras, una por PC, lo que podría ser fácilmente solucionable instalando una sola impresora en red para uso compartido.

Eso por ahora, creo que hay muchas mas alternativas de ahorro y como siempre, en esto tienen que estar todos "comprometidos" además de "involucrados" (lean sobre el paralelismo de los huevos con tocino). Se necesita que todos los trabajadores sean "el cerdo".

viernes, 16 de enero de 2009

Qué es y como funciona un GIS o SIG (Sistema de Información geográfica) Parte I

Introdución:
En la vida cotidiana usamos de estos sistemas (Mapcity). En mi trabajo se están desarrollando proyectos de este tipo. El sistema de transporte público de Chile también posee uno que usamos confrecuencia (Transantiago), en fin. Hoy en día cualquier informático y de hecho, cualquier persona ha escuchado hablar acerca de los GIS.

Definición
:
Un sistema de información geográfica es una aplicación computacional que se compone de datos geográficamente referenciados y las funcionalidades para capturar, organizar, manipular y desplegar esos datos apoyando la toma de decisiones respecto de temas de planificación y gestión.

Ambitos de acción:
La utilidad de estos sistemas puede ser llevada a ámbitos muy variados, por ejemplo: educación, salud, transporte, turismo, migración, población, obras públicas, estudios de impacto ambiental, territorio, gestión de recursos naturales, hidráulica, etc.
Ejemplos:
Sistema de gestion de distribución de equipamiento computacional de colegios municipales de Chile.
monitoreo de turismo en playas y balnearios
gestion de enfermedades virales por región

Utilidades:

  • Obtener información instantánea y actualizada
  • Apoyo en la fase de diagnostico
  • Facilidad en el análisis de la información
  • Agilidad en la manipulación de datos
  • Facilidad en las consultas
  • Mayor nivel de procesamiento, integración y calidad de datos.
  • Información detallada, confiable y geo-referenciada
  • Eficiencia en las respuestas (rápida, oportunas y confiables)
  • Mayor velocidad de acceso a información tanto espacial, como no espacial.

Hasta acá, ya se podrán imaginar la cantidad de aplicaciones que tiene este tipo de sistemas, sin embargo aun no hemos dicho nada técnico sobre ellos.
Técnicamente un GIS debe cumplir con ciertas características, algunas de las cuales, la madurez de esta tecnología ya ha ido estandarizando.

Necesitamos:
  • Una base de datos georeferenciada. Tabién llamado "subsistema de manejo", permite almacenamiento, ordenamiento y recuperación de datos. Permiten trabajar con datos espaciales-digitales.
  • Los datos georeferenciados. También se denomina "subsistema de entrada" (Idealmente en algún tipo de formato desde el cual sean capturados, migrados o interfaceados desde otros sistemas.
  • Herramientas para gestionar búsquedas geográficas, análisis y visualización "subsistemas de análisis" (análisis espacial, análisis de proximidad, análisis de redes y análisis en tercera dimensión, entre otros)
  • La interfaz gráfica del usuario. "Subsistema de salida" Es el despliegue gráfico de mapas y gráficos, tablas y reportes que para una mejor interpretación. La salida puede generarse en formatos tanto analógicos como digitales (impresoras u otros sistemas).
  • El equipo de personas "recursos humanos" para conceptualizar los datos y modelarlos de acuerdo a las necesidades del negocio.
  • Una organización que respalde las implicaciones de adoptar esta tecnología
  • Por último, los datos, dado que un SIG sin datos no es SIG, sino simplemente un software vacío.
Dado que los SIG trabajan con Información Geográfica (IG), su verdadero valor radica en mostrar la verdadera realidad geográfica.
Los fenómenos de interés para el mundo real, se denominan "entes", "entidades", "elementos geográficos", "unidades de observación", entre otras, y tienen las siguientes características:

Todo elemento o fenómeno de interés se localiza en algún lugar (espacio), ha sucedido en algún momento (tiempo) y tiene asociada alguna medida del mismo (Atributo):

  • Componente espacial
    1. Geometría (localización): posición, forma, tamaño, orientación.
    2. Topología (relaciones espaciales): deducible de la geometría.
  • Componente temática
    1. Atributo o variable temática: son propiedades que pueden asignarse a cada localización del espacio, y que carecen de extensión específica, se estudian de modo genérico y está contenida en códigos, nombre y atributos.
  • Componente temporal
    1. Tiempo

Las formas de analizar los datos en función de sus componentes como se muestra a continuación, son:

  • Análisis espacial
    1. Considera asiladamente el aspecto espacial
    2. Estudia sus características geométricas puras
  • Análisis estadístico
    1. Considera aisladamente el aspecto temático y utiliza las técnicas existentes.
  • Modelado cartográfico
    1. Considera simultáneamente e interactuando los dos aspectos.

Características de la información Geográfica:

  • Voluminosa: Tanto por su procedencia y contenido muy dispar, el número potencial de datos en los trabajos de campo puede ser infinito.
  • Fractal: Los elementos naturales tienen forma sumamente irregular, son objetos fractales. La dimensión Fractal mide el grado de irregularidades. La representación depende de la escala del mapa; un mismo objeto varía sus dimensiones topológicas si se representa en mapas distintos; dependiendo de la escala la presentación de la realidad es diferente.
  • Borrosa: Es difícil delimitar los elementos geográficos, por ejemplo los límites de un bosque junto a un cultivo, el límite dónde acaba un río y comienza el mar o entre una ciudad y un término municipal.
  • Dinámica: La información cambia con el tiempo y ello implica la corrección de los errores que se produzcan.
    1. Cambios en el tiempo (mapas de uso en el suelo)
    2. Cambios en el espacio (crecimiento urbano, obras hidráulicas, crecimiento demográfico (6% al año)).
    3. Cambios temáticos (rotación de cultivos)
  • Multiforme: La representación de los objetos geográficos varía con la escala del mapa; una ciudad puede ser un punto o un polígono en función de la escala elegida. La elección dependerá del fin que se persiga y del tipo de las consultas a las que el sistema deberá responder.

Tratamiento y análisis de la IG en un SIG.
El tratamiento y análisis de la IG en un SIG implica abstracción y discretización:

  • Abstracción: estructuración de la información geográfica en capas temáticas.>
  • Discretización: elección de determinados elementos geográficos, obviando otros que puede que no tengan la importancia deseada.

Se deben de tener en cuenta que los datos geográficos deben descomponerse en tres componentes: Temática, Espacial y Temporal, que responden respectivamente a las preguntas de ¿que? ¿dónde? Y ¿cuándo?
El SIG gira alrededor del interés por conocer cierto aspecto del mundo real y de intentar explicarlo mediante un modelo. Estudia el concepto de medida de los componentes como parte fundamental del desarrollo del modelo y el concepto de control como generador del modelo del SIG.
Cada una de las medidas de los componentes juega un determinado papel en un SIG (Sinton estableció en 1979 que una debía ser “fija”, otra serviría de “control” y una tercera se mediría constituyendo la componente principal del estudio).
El control de los componentes da como resultado los marcos de medida que en los modelos SIG tradicionales son:

  • Atributos como control -> Modelo Vector
  • Espacio como control -> Modelo Raster

También existen en la actualidad un modelo que integra conjuntamente los dos modelos anteriores llamado Geoobjetos y que queda fuera del objetivo de este documento.

Modelo

Ventajas

Desventajas


Raster


Estructura de datos simple
Compatibilidad imágenes de satélite y de escáner
Buenas capacidades para el análisis, simulaciones y modelado
Tecnología barata



Archivos muy grandes que se incrementan geométricamente cuando aumenta la resolución
Necesidad de estructuras de compresión de datos
Menor precisión locacional

Vectorial

Buena representación cartográfica
Estructura de datos compacta
Facilidad de actualización de la base geográfica

Estructuras de datos complejas
Imposibilidad para realizar ciertos análisis
•Technología costosa

Los SIG se definen como tecnologías de integración de información de naturaleza diversa, por lo que, es frecuente, que cada proyecto utilice distintas fuentes de datos que a su vez se encuentran en formatos variados. Una clasificación simple permite distinguir entre fuentes primarias y secundarias y formatos digitales y no digitales.

Documentos
Fuentes

Digitales

No digitales

Primarias

-Levantamientos topográficos (vectorial)
-Telemetría (vectorial)
-Medidas de GPS (vectorial)
-Imágenes de satélite (raster)
-Otros instrumentos digitales


-Observaciones de campo
-Documentos lineales (Censos, encuestas, listas…)
-Mapas
-Fotografía aérea

Secundarias

-Imágenes de satélite (raster)
-Bases de datos digitales
-Listas (de direcciones, coordenadas…)
-Documentos de escáner (raster)

-Documentos de archivo
-Otros mapas e imágenes


Continuará...

jueves, 15 de enero de 2009

Cómo se debiera organizar un Departamento TI ?

Introducción:
Una vez fui a una entrevista de trabajo y me hicieron dos preguntas de las cuales me reí. Un subgerente de una empresa de telecomunicaciones preguntaba:

1) cómo de imaginas nuestra sala de servidores?

Me reí, no fue una gran carcajada, pero intenté pensar qué quería él que le respondiera.
grande? bonita? con hartos cables? calurosa? Me pareció algo tonta la pregunta

2) Como te imaginas el futuro de las TI en nuestra empresa?

También me reí. Pensé en el momento "si supiera el futuro no estaría aqui, "%)&/·Q#€" y aunque también me pareció algo tonta la pregunta, como el cargo tenía que ver con implentación de SOA, respondí algo relacionado con eso. Ya no recuerdo bien mi respuesta, pero creo que hoy sería una respuesta mucho menos a la defensiva y mucho mas creativa.

El punto es que si bien no conozco muchos departamentos de TI y como se organizan, me ha tocado trabajar para una gran empresa que desde hace un tiempo se ha empeñado en mejorar su gestión y como resultado, la estructura organizacional (del Departamento TI) se ha modificado varias veces buscando la optimización. Dada esta situación, me he estado cuestionando cuál debiera ser el mejor modelo organizacional que se debe implementar en una organización. Y como casi siempre, la respuesta es.... "DEPENDE"
y como no, si no todas las industrias ni todas las empresas son iguales, y es mas, al interior de una misma industria tampoco tienen por qué ser iguales ni compartir la misma estrategia de implementación de un departamento TI. Lo que si se debe tener claro cuál es el ROL de un departamento de TI al interior de una empresa. Cuál es el real valor para el negocio que aporta, cuáles son las funciones, etc. Recordemos que para muchas empresas el principal activo es la información y para otras, su principal negocio está soportado por las Tecnologías de Información.

Antes de empezar a tirar cuadritos jerárquicos (organigrama) , hay una serie de preguntas que el gerente debiera hacerse y responderse. (Acá, dependiendo de cuán autónomo pueda ser, dado que muchos departamentos de informática dependen delotras áreas por ejemplo de finanzas). Unos ejemplos:

1) Evaluar qué tan alineadas están las TI con el negocio
2) Se están aprovechando los recursos de manera óptima?
3) Entiende la organización el rol de las TI como aporte al valor del negocio?
4) Existe la gestión de riesgos? como se mitigan?
5) Los sistemas son apropiados para el negocio?
6) Qué existe al interior y qué tengo externalizado?
7) Cuento con el presupuesto para llevar a cabo la planificación, puedo conseguir recursos?

Luego, el paso natural, una vez que se tiene claro lo anterior es empezar a desarrollar el plan estratégico de TI (no me extenderé en este artículo sobre esto, creo que mejor irá en un artículo aparte).
Algunos de los proyectos que podrían resultar de la planificación estratégica son:

  • Definición de la Arquitectura de Información, implentación de estándares de calidad, lograr certificaciones, definir políticas, normas y procedimientos.
  • Definición de la Organización y de las Relaciones de TI (Organigrama e interacción con otras áreas)
  • Distribución de la Inversión en Tecnología de Información.
  • Administración de proyectos, administrar personal, administrar riesgos y administrar requerimientos.

En el detalle, seguramente, se deberán solucionar temas tales como:
Tenemos que efectuar lo siguiente:
  • Definición de Niveles de Servicio (SLA)
  • Administración de Servicios prestados por Terceros (revisión y administración de contratos y evaluación de la calidad de los servicios).
  • Administración de Desempeño y Capacidad
  • Aseguramiento de Servicio Continuo.
  • Garantizar la Seguridad de Sistemas.
  • Educación y Entrenamiento de Usuarios
  • Apoyo y Asistencia a los Clientes de Tecnología de Información
  • Administración de la Configuración
  • Administración de Problemas e Incidentes
  • Administración de Datos
  • Administración de Instalaciones
  • Administración de Operaciones
Claramente, es imprescindible el control, por lo que se deben realizar algunas tareas de monitoreo:
  • Monitorear el entorno de trabajo interno
  • Realización de auditorías
  • Registrao y revisión de la información
  • Auto-evaluación de los controles (Evaluar la completitud y efectividad de estos)
  • Acciones correctivas Identificar e iniciar medidas correctivas basadas en las evaluaciones y en los reportes de control.
Con todo lo anterior, que ya parece bastante, el cabecilla de la organización TI deberá conformar su equipo de trabajo en una estructura jerárquica que permita llevar a cabo la planificación.

Hay varias formas de abordar el diseño de un nuevo modelo organizativo, una es por ”Análisis de funciones” y otra basada en “Análisis por Procesos”, las cuales se describen a continuación y que se complementan: fuente

Análisis de funciones: Lo primero es saber qué funciones se hacen en el departamento de TI y qué área o grupo las ejecuta. Esto se puede abordar desde cero o bien en base a algún tipo de lista previa que contenga las funciones más comunes y ampliarla adaptándola a las singularidades de TI. Una vez que se dispone de la relación de funciones, se van asignando a cada área/grupo de TI que las realiza, utilizando para ello el organigrama en vigor. Cuando se dispone de estos datos, ya se detecta qué funciones están duplicadas, segmentadas o no se hacen. Con esa información se pueden abordar cambios organizativos que hagan más eficaz la actividad de los recursos que componen TI. Es un modo de mejorar la actividad de TI sin aumentar los recursos humanos y por tanto sin incurrir en mayores costes.

Análisis por procesos: Otra línea de actuación es organizar las funciones de TI en base a procesos. Cuando se aborda el análisis y mejora de los procesos, se tiene que entrar en la estructura organizativa de TI ya que para cada proceso deben estar asignadas las responsabilidades para todas las actividades que se realizan. Esto supone analizar cuáles son los flujos de cada proceso y quienes son los implicados. A medida que se van detallando las matrices de responsabilidad de cada proceso de TI, se van identificando las inconsistencias y van aflorando las duplicidades, las ambigüedades y demás situaciones que ralentizan la realización de cada proceso e incluso que los hacen poco eficientes. Ello permite tomar medidas organizativas encaminadas a solventar dichas ineficiencias. En este sentido, guías de buenas prácticas como ITIL, Cobit o las normas ISO, son de gran ayuda ya que proponen una estructura de procesos frente a los que compararse y que representan el correcto funcionamiento del departamento de TI, incluso ofrecen detalle de las actividades a realizar y los roles que deben existir.


Hasta acá, no se ha resuelto aun el cómo se debe organizar un departamento TI, sin embargo con la información anteriormente descrita, ya se pueden formar una idea en mente de las cajitas y sus dependencias en el organigrama.

A manera de ejemplo, dejo acá un organigrama de una organización TI (es un ejemplo pequeño, pero instructivo para este artículo).

Organigrama estructural



Organigrama Funcional

Informática y computación

Este artículo también es una copia de mi blog. Una opinión muy personal y con sentido del humor acerca de nuestra querida industria de las TI. Es de Enero de 2008.

..me voy a dar un gusto...
Voy a pelar (pelar en Chile es hablar a espaldas de otro) a la informática. Claro que para esto primero vamos a empezar por separar la informática de la computación que son cosas completamente diferentes. Para los que somos informáticos y nos quemamos las pestañas algunos años de la vida estudiando la carrera, a veces nos resulta gracioso ver como cualquier pelagato por conocer un par de programas, saber instalar el Windows, utilizar las teclas mas que el mouse, por tener nociones de Linux se las da de computín o informático. Bueno... puede que algo de computín tenga, pero pregúntenle si saber realizar operaciones binarias, punto flotante, o algo de arquitectura de computadores. estoy seguro que dirá "en español por favor". Y claro... la computación tiene su ciencia también. Los sitemas operativos y las aplicaciones no se hacen solas (aunque hoy en día cualquiera que hace páginas web y cualquiera que sabe hacer aplicaciones sencillas para web cree que lo sabe todo). Claro, ya hubo un informático que hizo la pega para que al pseudo computín le saliera fácil hacer su aplicación. No tiene idea que detrás de esa página web o aplicación hay muchas personas que previamente desarrollaron estándares, desarrollaron lenguajes y desarrollaron aplicaciones. Esos son los "real computines " los de verdad... no los de Mattel. Lo mismo para con los informáticos al peo... esos que por hacer una base de datos en access creen que saben todo sobre bases de datos. Seguramente estos tipos no tienen idea de álgebra relacional, transacciones, modelamiento de datos y seguramente si les preguntas: ¿en que forma normal está el modelo? capaz que respondan "si, la modelo era normal y estaba en forma (plop)".
Ahora, la informática tambien tiene sus divisiones... yo hago la diferencia entre la informática de laboratorio y la informática empresarial. La primera, es la que se practica en las universidades, en los centros de investigación, en los organismos que se dedican a establecer normas, los grandes fabricantes de software, etc. Es una informática mas dura y que regularmente tiene mucha computación, algoritmos, optimización, matemática, estructuras de datos, teoría de autómatas, expresiones regulares y compiladores, etc. La otra, es decir, la informática empresarial, aunque tambien la podríamos subdividir, creo que podemos pelarla en torno a que es meramente de gestión, y bueno, es por eso también que con el tiempo se han ido creando carreras de informática mas asociadas a la gestión. Me refiero a la informática que vemos cuando en nuestras empresas van creando una cultura informática con respecto a políticas de seguridad, de uso de los recursos computacionales, de red, de almacenamiento, etc. En las organizaciones donde hay una cultura informática mas arraigada, podemos encontrar que las áreas de infirmática y sistemas apoyan fuertemente a las áreas de negocios convirtiéndose en las habilitadoras para que la empresa haga frente a su estrategia. En mi opinión, creo que en esta última parte es donde tenemos que hincar el diente si queremos (en la actualidad) ganar plata.
Acá, es donde entra la consultoría... No se imaginan la cantidad de empresas que lloran por alguien que les diga como solucionar sus problemas que en general son muchos.

Los que se pueden solucionar con una consultoría sencilla:
1) La red se cae a cada rato, necesitan una certificación, equipos, clableado y seguridad decentes.
2) La seguridad es mala, la secretaria tiene acceso a la información de la empresa y su marido trabaja en la competencia
3) Los computadores tienen virus, malware, spyware y otras ware.
4) No hay respaldo de datos
5) No hay políticas sobre acceso a internet
6) No hay política sobre licenciamiento de software

Los que necesitan una consultoría mas especializada
1) Desarrollo de software a medida o adquisición de un ERP
2) Modelamiento de los procesos de negocios de la empresa
3) Planes para el resguardo y recuperación ante catástrofes
4) Evaluaciones de riesgos
5) Auditorías (de informática obiamente)

Creo que se me quedan varias en el tintero, pero seguramente lograré abrirle el apetito a más de algún visitante.


Cuestionario, para darle que pensar al informático

¿para qué estudió informática?
a) Por que es la carrera del futuro
b) Por que me sonaba bonito
c) Por que con eso voy a ganar plata
d) Por que tengo habilidades

Si usted eligió la alternativa a)
Era la carrera del futuro de hace muchos años. Ahora ya es el futuro y la informática sigue siendo una buena carrera incluso si pensamos desde ahora en el futuro.

Si ud eligió la alternativa b)
Está absolutamente perdido en la vida cuando encuentre un trabajo asuma sin chistar toque lo que le toque.

Si eligió c)
Aun hay áreas donde se puede ganar dinero. La consultoría es una de ellas. y como siempre, el ser empresario con buenos contactos.

Si eligió d)
Ud mejor que nadie conoce sus habilidades... explótelas al máximo en el área de su interés.


Está contento con su trabajo actual?
a) Si
b) No
c) Me es indiferente

Si contestó a)
Lo felicito, no todos pueden decir lo mismo.

Si contestó b)
Espero que tenga las competencias o los contactos para poder cambiarse pronto de trabajo y ijalá mejor remunerado.

Si su respuesta es c)
O usted tiene una secretaria muy rica o tiene que hacerse ver por un especialista.


¿Está contento con su renta actual?
a) Si
b) No
c) Me es indiferente

Si contestó a)
Lo felicito, no todos pueden decir lo mismo. Es usted una muestra viviente de conformismo y auteridad.

Si contestó b)
Lo siento, no siempre se puede ganar lo que desea. Si se lleva bien con su jefe invítelo a un happy hours y entre trago y trago lo va sensibilizando para lograr su objetivo: Conseguir un aumento.

Si su respuesta es c)
Sencillamente no le creo. O usted gana mucha plata, tiene una secretaria muy rica o su esposa gana mas que usted y puede cargar con ello.

Mashups (Remezclas)

Este artículo lo publiqué antes en Noviembre del 2007 en mi blog personal y me parece una tecnología interesante que aun no ha sido y me atrevo a decir que aun no comiemza a ser explotada.

Los mashups son, traducidos al español, remezclas (si.. como las de los DJ's). Se trata de un concepto que se introduce en con la filosofía WEB 2.0 que tiene que ver con aprovechar la potencialidad de cruzar contenidos existentes en otras páginas y aprovechar la nueva información.

Según WIKI:
"Una aplicación web híbrida (mashup o remezcla), es un sitio web o aplicación web que usa contenido de otras aplicaciones Web para crear un nuevo contenido completo, consumiendo servicios directamente siempre a través de protocolo http.
El contenido usado en un mashup es típicamente usado de terceros a través de una interfaz pública o usando un
API. Otros métodos que constituyen el origen de sus datos incluyen: sindicadores web (RSS o Atom) , Screen scraping ...
Así como los
weblogs han revolucionado la publicación en línea, los mashups están revolucionando el desarrollo web, permitiendo que cualquiera combine, de forma innovadora, datos que existen en eBay, Amazon.com, Google, Windows Live y Yahoo!. Las grandes facilidades brindadas por simples y ligeras API's han hecho que los mashups sean relativamente fáciles de diseñar. El que se requiera de mínimos conocimientos técnicos ha hecho que los mashups sean creados en su mayoría de casos por innovadores, quienes combinan en formas nuevas y creativas datos disponibles públicamente. Así como hay mashups muy útiles, existen otros que no pasan de sólo ser novedosos o publicitarios, con mínima utilidad práctica.
Los defensores e impulsores de las aplicaciones
Web 2.0 expresan que los mashups son un ejemplo de este nuevo movimiento con sus usuarios en activa participación e interacción".

En la Charla que fui el martes, se tocó el tema de los mahups. Hablaban de un tipo que tenía una corredora de propiedades usando información desde dos fuentes. Un sitio donde se publicaban avisos de ventas y arriendos y otro sitio que permitía encontrar direcciones utilizando una herramienta del tipo google earth. Esa es mas o menos la idea. Utilizar fuentes de datos diferentes para obtener nueva información con algún objetivo particular.

En este video se trata la creación de Mashups con la herramienta QEDWiki de IBM.


Otras aplicaciones que permiten generar mashups son:

Yahoo! Pipes
Dapper
QEDWiki

Lo mejor es que no hay que programar. Solo hay que manejar algunos conceptos básicos y listo.
Shuerte en shush aventurash.

miércoles, 14 de enero de 2009

Patrones de diseño orientado a objetos

Definición:
Según Wikipedia: Los patrones de diseño (design patterns) son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces. Un patrón de diseño es una solución a un problema de diseño. Para que una solución sea considerada un patrón debe poseer ciertas características. Una de ellas es que debe haber comprobado su efectividad resolviendo problemas similares en ocasiones anteriores. Otra es que debe ser reusable, lo que significa que es aplicable a diferentes problemas de diseño en distintas circunstancias.

Los patrones de diseño no son fáciles de entender, pero una vez entendido su funcionamiento, los diseños serán mucho más flexibles, modulares y reutilizables. Han revolucionado el diseño orientado a objetos y todo buen arquitecto de software debería conocerlos. y como consejo: Abusar o forzar el uso de los patrones puede ser un error.

El grupo de GoF clasificaron los patrones en 3 grandes categorías basadas en su PROPÓSITO: creacionales, estructurales y de comportamiento.

  • Creacionales: Patrones creacionales tratan con las formas de crear instancias de objetos. El objetivo de estos patrones es de abstraer el proceso de instanciación y ocultar los detalles de cómo los objetos son creados o inicializados.
  • Estructurales: Los patrones estructurales describen como las clases y objetos pueden ser combinados para formar grandes estructuras y proporcionar nuevas funcionalidades. Estos objetos adicionados pueden ser incluso objetos simples u objetos compuestos.
  • Comportamiento: Los patrones de comportamiento nos ayudan a definir la comunicación e iteración entre los objetos de un sistema. El propósito de este patrón es reducir el acoplamiento entre los objetos.
A continuación una lista con los patrones de diseño a objetos más habituales publicados en el libro "Design Patterns", escrito por los que comúnmente se conoce como GoF (gang of four, "pandilla de los cuatro").

Patrones de creación (Creacionales)

* Abstract Factory. Proporciona una interfaz para crear familias de objetos o que dependen entre sí, sin especificar sus clases concretas.
* Builder. Separa la construcción de un objeto complejo de su representación, de forma que el mismo proceso de construcción pueda crear diferentes representaciones.
* Factory Method. Define una interfaz para crear un objeto, pero deja que sean las subclases quienes decidan qué clase instanciar. Permite que una clase delegue en sus subclases la creación de objetos.
* Prototype. Especifica los tipos de objetos a crear por medio de una instancia prototípica, y crear nuevos objetos copiando este prototipo.
* Singleton. Garantiza que una clase sólo tenga una instancia, y proporciona un punto de acceso global a ella.


Patrones estructurales


* Adapter. Convierte la interfaz de una clase en otra distinta que es la que esperan los clientes. Permiten que cooperen clases que de otra manera no podrían por tener interfaces incompatibles.
* Bridge. Desvincula una abstracción de su implementación, de manera que ambas puedan variar de forma independiente.
* Composite. Combina objetos en estructuras de árbol para representar jerarquías de parte-todo. Permite que los clientes traten de manera uniforme a los objetos individuales y a los compuestos.
* Decorator. Añade dinámicamente nuevas responsabilidades a un objeto, proporcionando una alternativa flexible a la herencia para extender la funcionalidad.
* Facade. Proporciona una interfaz unificada para un conjunto de interfaces de un subsistema. Define una interfaz de alto nivel que hace que el subsistema se más fácil de usar.
* Flyweight. Usa el compartimiento para permitir un gran número de objetos de grano fino de forma eficiente.
* Proxy. Proporciona un sustituto o representante de otro objeto para controlar el acceso a éste.


Patrones de comportamiento


* Chain of Responsibility. Evita acoplar el emisor de una petición a su receptor, al dar a más de un objeto la posibilidad de responder a la petición. Crea una cadena con los objetos receptores y pasa la petición a través de la cadena hasta que esta sea tratada por algún objeto.
* Command. Encapsula una petición en un objeto, permitiendo así parametrizar a los clientes con distintas peticiones, encolar o llevar un registro de las peticiones y poder deshacer la operaciones.
* Interpreter. Dado un lenguaje, define una representación de su gramática junto con un intérprete que usa dicha representación para interpretar las sentencias del lenguaje.
* Iterator. Proporciona un modo de acceder secuencialmente a los elementos de un objeto agregado sin exponer su representación interna.
* Mediator. Define un objeto que encapsula cómo interactúan un conjunto de objetos. Promueve un bajo acoplamiento al evitar que los objetos se refieran unos a otros explícitamente, y permite variar la interacción entre ellos de forma independiente.
* Memento. Representa y externaliza el estado interno de un objeto sin violar la encapsulación, de forma que éste puede volver a dicho estado más tarde.
* Observer. Define una dependencia de uno-a-muchos entre objetos, de forma que cuando un objeto cambia de estado se notifica y actualizan automáticamente todos los objetos.
* State. Permite que un objeto modifique su comportamiento cada vez que cambia su estado interno. Parecerá que cambia la clase del objeto.
* Strategy. Define una familia de algoritmos, encapsula uno de ellos y los hace intercambiables. Permite que un algoritmo varíe independientemente de los clientes que lo usan.
* Template Method. Define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura.
* Visitor. Representa una operación sobre los elementos de una estructura de objetos. Permite definir una nueva operación sin cambiar las clases de los elementos sobre los que opera.

Recursos:
Algunos ejemplos concretos de patrones de diseño en este link.
En este link algunos patrones con su código en Java o C#

Arquitectura TI: Que es y que hace un arquitecto de TI?

Introducción:
Previamente publiqué un post sobre la Arquitectura MVC pero... qué es realmente la arquitectura de software? cuál es el rol del arquitecto? Hay herramientas que faciliten la labor del arquitecto?

Definición:
La arquitectura de software, llamada también la arquitectura lógica, es el diseño de mas alto nivel de la estructura de un sistema, aunque hay varias definiciones y no hay prácticamente ninguna que sea totalmente aceptada, aunque la más oficial es la definición oficial de Arquitectura del Software es la IEEE Std 1471-2000 que dice: “La Arquitectura del Software es la organización fundamental de un sistema formada por sus componentes, las relaciones entre ellos y el contexto en el que se implantarán, y los principios que orientan su diseño y evolución”.

Otra definición es la de Hohmann, 2003: “Arquitectura de software es la suma de los módulos complejos, procesos y los datos del sistema, su estructura y exactas relaciones entre sí, cómo puede ser y se espera que sea, sus extensiones y qué tecnologías participan, deducir las capacidades exactas y flexibilidad del sistema desde el cual se puede formar un plan para la implementación o modificación del sistema.”

El Rol del arquitecto de software:
El arquitecto es el encargado de definir:
QUE?
La union de requerimientos del cliente, el conocimiento de su entorno, de sus necesidades, de sus espectativas de crecimiento, dan como resultado un producto intangible que será la solución que se va a proveer considerando un modelamiento del negocio conformado por el equipo de analistas que apoyan cada proyecto.
Acá se hace un paralelo con un drector de orquesta, que debe hacer que cada uno de los músicos interpreten la música de acuerdo a la partitura.


COMO?

Una vez que está definido el qué se va a hacer, definidos ya el modelo de negocios, con los analistas que conforman el negocio, se confecciona la documentación técnica del proyecto que contiene análisis, modelos y diseño de la solución a los requerimientos del cliente. El arquitecto cumple su parte como organizador, facilitador de definiciones y como validador del modelamiento.

CON QUE?
Nuevamente el arquitecto entra en su rol de "director de orquesta" esta vez con otro equipo de trabajo, conformado por un jefe de proyectos (que tiene una metodología) y un experto técnico con un framework de trabajo bien definido y consolidado para definir cada una de las partes de la solución, esta vez se toma mas en detalle a la solución, se toman decisiones que deben estar de acuerdo a la tecnología que vaya ser utilizada por el equipo de desarrollo y se define presupuesto y cronograma del proyecto (a esta altura ya debiera estar bien definido el equipo de trabajo del proyecto). Lo anterior en teoría, porque según mi experiencia, el arquitecto no se entromete en temas de presupuesto ni de cronograma del proyecto dado que el líder técnico (jefe de proyectos) debe conformar su equipo y planificar las actividades de su equipo, aunque esto puede variar dependiendo de las empresas cuando el arquitecto también es el jefe de proyectos.

Productos resultantes de la ingeniría de software:
No hay un consenso en cuanto al lenguaje y la forma en que el arquitecto entregue los elementos de ayuda a la toma de decisiones y que permitan la comunicación en un lenguaje común con todos los actores del proyecto. Acá, dependerá de la tendencia de la arquitectura escogida.
Uno de los modelos más usados y conocidos es el “4+1” de Philippe Kruchten, vinculado al Rational Unified Process (RUP), que define cuatro vistas diferentes:

  • Vista lógica: describe el modelo de objetos.
  • Vista de proceso: muestra la concurrencia y sincronía de los procesos.
  • Vista física: muestra la ubicación del software en el hardware.
  • Vista de desarrollo: describe la organización del entorno de desarrollo.
  • Existe una quinta vista que consiste en una selección de casos de uso o de escenarios que los arquitectos pueden elaborar a partir de las cuatro vistas anteriores.
Ejemplos de Arquitectura de Software:
Para ilustrar y clarificar un poco lo anteior, se muestran dos diagramas de arquitectura en un entorno J2EE. Ambos diagramas están disponibles en Designing Enterprise Applications with the J2EE Platform, Second Edition de SUN.

El primer diagrama consiste en una vista lógica que muestra los componentes y servicios típicos de un entorno J2EE.
Por otro lado, en el modelo MVC tenemos una vista de procesos que se relacionan entre las capas Modelo, Vista y Controlador en un entorno J2EE.


Hasta acá lo mas relevante con respecto a la arquitectura. En otros post posteriores seguramente mencionaré temas asociados como SOA (Arquitectura orientada a servicios), Usabilidad y Patrones y antipatrones de diseño.

Recursos: The architecture journalist; revista del MSDN (Microsoft Development Network) especialmente dedicada a temas de arquitectura. Hay varios números en español aunque atrasados con respecto a las publicaciones en inglés.

martes, 13 de enero de 2009

Informática Forense (Computer Forensic)

Introducción
Es un término que suena muy fuerte a primera vista. La mayoría relacionamos la práctica forense con asesinatos, cadáveres y muerte en general. En informática, la verdad es que no es tan diferente, acá los asesinatos podrían paralelizarse con los delitos de robo de información (el crimen), los cadáveres con datos, dispositivos de almacenamiento o periféricos.
Para mi es apasionante el tema de la seguridad informática en general, y la informática forense podría clasificarse como una sub-area dentro de la seguridad.



Definición:
El término Informática Forense(Digital Forensic) viene de la unión de las tecnologías de información con la necesidad de obtener, identificar, examinar y preservar información-evidencia criminal y/o legar relevante en algún aspecto computacional dentro de un caso relacionado con la justicia.

Forense:

Del lat. forensis.

* adj. Perteneciente o relativo al foro.

* adj. ant. Público y manifiesto.


En realidad no estoy completamente seguro que solamente se deba llevar al ámbito judicial, pero es lo que normalmente se hace. Por ejemplo cuando una compañia sufre un ataque desde el interior del robo de información por parte de un empleado, lo lógico sería que dicha empresa levantara cargos contra las personas que resultaren responsables, pero probablemente habrá casos en que a la empresa solamente le interesa contar con la información. Creo es es un tema debatible, pero no acá :)

Origen:
En la mayoría de los sitios dan como precursores de la informática forense a los creadores del primer "Forensic toolkit"

Alcances.
Entre los usos más comunes de un análisis forense están:
  • Recuperación de evidencias en discos
  • Recuperación de contraseñas
  • Detección y recuperación de Virus, Spyware y Troyanos
  • Recuperación de correos electrónicos
  • Análisis de redes P2P
Etapas:
  • Adquisición: en esta etapa se debe copiar la información del sistema en observación. podría requerir desde realizar una imagen del disco duro hasta rescatar un disco que se haya caído al mar, que haya sufrido daños físicos o que haya sido borrado. Es importante en esta etapa tener en cuenta que el simple arranque del computador, podría modificar archivos del sistema. Es por eso que actualmente se usan sistemas operativos del tipo "portable" es decir que arrancan desde el CD o desde una entrada USB (En otro post me extenderé mas acerca de esto).
  • Validación y preservación de los datos; Con el fin de resguardar los datos, se intenta mantener la confidencialidad de estos, por lo que se recomienda el uso de passwords robustas para que sea difícil el obtenerlas por terceras personas.
  • Análisis y descubrimiento de evidencia: Se realiza una batería de operaciones y pruebas sobre los datos en diferentes niveles y lo que se busca generalmente es:
*Archivos borrados, creados, accesados y modificados
*Tipos de archivos con formatos en particular (documentos, planillas, presentaciones, etc)
*Imágenes, mensajería, correos electrónicos, direcciones web visitadas, tráfico de internet.
*Palabras claves como nombres, ciudades, números telefónicos
  • Emisión de informe: Se determina si hay un patrón del uso con respecto al análisis anterior. Y se entrega la información en lenguaje técnico e idealmente un CD u otro con los archivos donde se interpreta la evidencia.
Proyectos en curso:
http://cp4df.sourceforge.net/
http://sourceforge.net/projects/oscfmanual/
http://www.ioce.org/2002/core.php?ID=1

Recursos:
Una revista dedicada al tema. Se puede bajar el primer número gratis.

Sistemas operativos especializados:
Caine (Computer Aided INvestigative Environment) es una distribución de GNU/Linux del tipo Live-CD creado por Giancarlo Giustini como un projecto del CRIS (Digital Forensics for Interdepartment Center for Research on Security) de la Universidad de modena.

Algo sobre Frameworks y Arquitectura MVC y RIA (Rich Internet Applications)

Introducción:
Es difícil empezar a escribir. Primero, por que es mi primer post en este blog y me imagino que debo soltar un poco la mano antes de tomar confianza y soltura.
En realidad no se por qué este primer post está dedicado a la arquitectura MVC. Será que es de las cosas que me interesa aprender? por que les digo desde ya: La palabra experto siempre me ha parecido muy subjetiva y yo no me considero experto en ninguna rama de la informática, mas bien la experiencia, los estudios y la lectura, me han llevado a saber de todo un poco y también por eso un poco el título del blog. Entre tanta cosa, sigla, iniciales, tecnologías, empresas, marcas... díganme, quién no se ha sentido un poco desorientado en este mundo?

Frameworks
Según wiki: Un framework, en el desarrollo de software, es una estructura de soporte definida en la cual otro proyecto de software puede ser organizado y desarrollado. Típicamente, puede incluir soporte de programas, bibliotecas y un lenguaje interpretado entre otros software para ayudar a desarrollar y unir los diferentes componentes de un proyecto.
Representa una arquitectura de software que modela las relaciones generales de las entidades del dominio. Provee una estructura y una metodología de trabajo la cual extiende o utiliza las aplicaciones del dominio.


La verdad es que leo esa definición y me parece muy técnica aunque si explicativa. En el fondo, lo que quiere decir es que un framework es un programa que permite hacer programas. Complementando lo anterior, es necesario mencionar que hsata ahora estoy hablando solamente de una herramienta, independiente de la tecnología.
hoy en día muchas empresas han desarrollado o adaptado (dependiendo de sus propias necesidades) estos programas (generalmente basados en productos opensource) permitiendo disminuir los tiempos de desarrollo. Un sencillo ejemplo podría ser que para generar una lista de elementos desde una base de datos (por ejemplo una lista de ciudades), cosa que trabajando en forma bruta significaría crear una consulta que extraiga los elementos desde la base de datos y crear el código para que la lista se genere dinámicamente, con un framework esta misma acción podría simplificarse a una línea de código en que se pasen como parámetros los elementos necesarios para que la lista sea desplegada (parámetros como la tabla que desea ser consultada, cual será la opcion por defecto, si es una lista en que se pueden seleccionar varios elementos o solo uno, el método de ordenamiento, etc.
Ejemplo: en el framework Akelos (fue el primer ejemplo que encontré), el código sería:

$form_options_helper->select ($object_name,$column_name,$choices, [ $options ],[ $html_options ])

No me voy a extender mas sobre esto. Mas bien espero haber clarificado un poco de que se trata un framework. Su utilidad.
En la red hay muchos y para todos los gustos. Por ejemplo:
En la página http://www.phpframeworks.com/
hay una tabla comparativa de frameworks para PHP que indica cuáles son sus principales funcionalidades o soportes.
También los hay en Java si es que alguien tiene preferecias por este lenguaje.
En este sentido intentaré ser imparcial y mis recomendaciones serían que al momento de elegir un Framework, se fijen en:
- Tipo de aplicacion a desarrollar
- Facilidad en el desarrollo
- Soporte del framework (que tan amplia es la comunidad del proyecto)
- Si se vislumbra continuidad en el desarrollo del framework
- Soporte de tecnologías (características técnicas)
Además de:
- No crean todo lo que dicen los blogs y/o artículos
- Pruebenlo ustedes mismos
- Ver si se ajusta a los intereses corporativos
- Intenta realizar un prototipo en los que elijas y si sale muy complicado, deshéchalo.
- Intenta documentar todo. Desde por qué no te gustó un framework hasta por qué elejiste uno mas antiguo.

Ahora, para hacer el enganche con el siguiente tema, debo decir que los Frameworks permiten realizar el desarrollo de aplicaciones de acuerdo a cierta arquitectura.
Por ejemplo: Una de las arquitecturas más extendidas y por tanto la mayoría de los frameworks la soportan es la aquitectura MVC (Modelo / Vista / Controlador)
La idea de esta arquitectura es separar la aplicacion en "datos", "interfaz de usuario" y "lógica de control".
Modelo: Es la representación de la información con la cual el sistema opera. La lógica de datos asegura la integridad de estos y permite derivar nuevos datos.
Vista: Este presenta el modelo en un formato adecuado para visualizar y operar (interactuar), típicamente conocido como "interfaz de usuario".
Controlador: Este responde a eventos, usualmente acciones del usuario e invoca cambios en el modelo y probablemente en la vista.
RIA
Y para terminar con este artículo, no puedo dejar de mencionar el concepto RIA.
Según Wikipedia: RIA, acrónimo de Rich Internet Applications (Aplicaciones Ricas de Internet) son un nuevo tipo de aplicaciones con más ventajas que las tradicionales aplicaciones Web. Esta surge como una combinación de las ventajas que ofrecen las aplicaciones Web y las aplicaciones tradicionales.

Normalmente en las aplicaciones Web, hay una recarga contínua de páginas cada vez que el usuario pulsa sobre un enlace. De esta forma se produce un tráfico muy alto entre el cliente y el servidor, llegado muchas veces, a recargar la misma página con un mínimo cambio.

Otra de las desventajas de las tradicionales aplicaciones Web es la poca capacidad multimedia que posee. Para ver un vídeo es necesario usar un programa externo para su reproducción.

En los entornos RIA, en cambio, no se producen recargas de página, ya que desde el principio se carga toda la aplicación, y sólo se produce comunicación con el servidor cuando se necesitan datos externos como datos de una Base de Datos o de otros ficheros externos.

Las capacidades multimedia son totales gracias a que estos entornos tienen reproductores internos y no hace falta ningún reproductor del Sistema Operativo del usuario.

Hay muchas herramientas para la creación de entornos RIA. Entre estas se puede mencionar las plataformas Adobe Flash, Adobe Flex y Adobe AIR de Adobe, AJAX, OpenLaszlo, Silverlight de Microsoft, JavaFX Script de Sun Microsystems y Bindows de MB Technologies.

Y para terminar, teniendo la tecnología RIA, en una arquitectura MVC y con un framework que soporte ambas, creo que las aplicaciones serán cada día mejores. En una artículo leí que para el 2010, el 60% de las aplicaciones serán construídas utilizando este esquema. Queda en nuestras manos informáticas el hacer que esta cifra aumente. Y cómo? aprovechando la tecnología existente, implementando la amplia gama de posibilidades que ofrece la WEB 2.0, aprendiendo a utilizarlas y potenciandolas. Espero con este artículo haber abierto un poco las mentes y haber alimentado el apetito de más de alguien.
Dejo acá algunos Frameworks que están hechos para desarrollar "RIA's"
Spring Richclients
Ariaware ARP
Scope
Cairngorm

Eso por ahora. Que lo disfruten

Powered By Blogger

Un informático desorientado © 2008. Template by Dicas Blogger.

TOPO