jueves, 29 de julio de 2010

ROI (Return Over Investment)

Vamos a introducir uno de los terminos frecuentemente utilizados al momento de emprender un proyecto o un negocio el cual precisa de medidas que me ayuden a cuantificar la inversion y las ganancias obtenidas por haber realizado la iversion, de esta menera estas medidas son una herramienta util para la toma de desciciones.

EL ROI o tambien llamado Retorno Sobre una Inversion es una medida porcentual aplicable a proyectos de software, proyectos web y en general a cualquier tipo de proyecto el cual requiera de una inversion la cual promete generarme beneficios, los beneficios pueden ser de diferente tipo por ejemplo imagen de la empresa, beneficio monetario, ventas, etc..

El ROI mide el ratio de costo/beneficio, es decir que para un mismo proyecto calculamos el ROI utilizando diferentes costos obteniendo diferentes beneficios y de esta forma podemos saber como es mas rentable nuestro proyecto, como obtenemos mas beneficio variando el costo.

En el ambiente de programacion web calcular el ROI es una actividad clasica, apoyandonos en las herramientas para medir la cantidad de visitar y medir el tiempo promedio de cada visita es sencillo saber el beneficio ahora bien el costo es el valor monetario pagado por la pagina web, de esta forma podemos probar con diferentes plantillas de diseño, diferentes colores y diferentes formas de hacer la misma actividad en la pagina para saber de que forma obtenemos mas beneficio del cliente.

Monetariamente el ROI tambien se puede calcular, es decir no solo cuando aumentan las visitas o cuanto mas tiempo se esta un visitante en nuestra pagina. tambien podemos medir cuanto mas compra en nuestro sitio de comercio electronico.
La ecuacion es:
ROI = (Beneficio - Costo) / Costo

El costo es muy sencillo de medir, pues con una pequeña contabilidad podemos saber cuanto hemos gastado para hechar andar un sitio (pago hosting + pago dominio + pago software + pago webmaster). El beneficio es indudablemente complicado de medir para lo cual tenemos que establecer metricas muy claras de lo contrario habria subjetividad en esta medida, por ejemplo podemos establecer como metrica de beneficio (el tiempo del usuario en el sitio, en numero de visitas en el sitio, cantidad de productos vendidos en el sitio de comercio electronico)

Podemos enfocar el ROI a cuanto obtenemos de beneficio por la publicidad de nuestro sitio asi saber si invertir mas o dejar de invertir en publicidad, basandonos en el beneficio que estamos obteniendo de ello.

Por ejemplo, supongamos que desea atraer usuarios a su sitio web para generar ventas de sus artículos, lo que le supondría unos beneficios de 10 dólares por artículo vendido. Invirtió 1.000 dólares en su campaña publicitaria de la semana pasada y, como resultado, ha vendido 130 artículos. Los ingresos obtenidos de las ventas, o beneficio total, son 1.300 dólares (10 dólares de beneficios multiplicados por 130 unidades). Por consiguiente, resta los 1.000 dólares del costo de su campaña publicitaria de los 1.300 dólares de beneficios, con lo que obtiene 300 dólares. Esta cantidad son los beneficios que recupera como resultado de su inversión publicitaria inicial de 1.000 dólares. Su ROI, expresado como porcentaje de su inversión inicial, sería del 30% (300/1.000 multiplicado por 100)

Otro ejemplo es: si invertimos en un proyecto 1000 quetzales y gracias a esa inversion obtenemos 3000 quetzales podemos utilizar la ecuacion que indica
ROI = (3000-1000)/1000 = 2000/1000 = 2
Como el roy es una medida porcentual decimos que 2 * 10 = 200% es el ROI de este ejemplo.

El ROI es un valor muy facil de calcular una vez teniendo el valor y el beneficio que en ocaciones es el dificil de cuantificar, entre mas alto sea el % de ROI mas rentable es mi inversion, si tengo un ROI cerca de 0 (cero) no es aconsejable realizar la inversion pues no voy a tener ganacias y en el peor de los casos si tengo un ROI negativo, significa que por la inversion realizada voy a tener perdidas. por eso entre mas alto sea el ROI mucho mejor.

Ahora bien, si vemos el ROI desde una perspectiva detallista sabemos que es una medida complicada de identificar. Por ejemplo si tengo una pagina web de comercio electronico en la cual invierto 500 quetzales en publicidad y gracias a esa publicidad incrementan mis ventas y el incremento es de 3000 quetzales. El ROI seria:
ROI = (3000-500)/500 = 2500/500 = 5
En porcentaje seria un 500% esta campaña publicitaria suena muy bien pero aqui no hemos incluido el costo extra que tenemos en personal, empaque, gastos generales de venta, envio, impuesto por lo cual ese 500% de ROI es relativo y no absoluto.


Puntos a tener en cuenta para medir incrementar el beneficio en un sitio web:
  • Estancia de usuarios: cuántas páginas y cuanto tiempo permanecen en nuestro sitio
  • Carritos de la compra abandonados, porcentaje de usuarios que abandonan el sitio sin finalizar transacciones.
  • Rutas inadecuadas de navegación: callejones sin salida
  • Enlaces rotos en el sitio
Consejos:
  • Evitar intros en flash o vídeos pesados que se interponen entre el usuario y la información sin aportar valor.
  • Diseñar varias formas de encontrar una misma información
  • Calcular el número de clics necesario para realizar los procesos claves
  • Mantener actualizada la información clave.
  • Información clara acerca de privacidad, condiciones

lunes, 26 de julio de 2010

Back Office y Front Office

El backoffice y frontoffice son dos terminos muy utilizados para dividir las areas de una empresa segun el rol que lleven a cabo en la misma.


El BackOffice hace referencia a las actividades que pasan atras de la oficina, sean estas las que el cliente o usuario no puede ver, entre estas estan los departamentos de tencologia, estrategia, produccion, desarrollo entre otros. dicho en otras palabras el backoffice son todas las personas, departamentos que trabajan en la empresa y son fundamentales pero que a ojos de nuestros clientes no son evidentes.
Ejemplos de BackOffice es el departamento de desarrollo de software, el cual crea el software necesario para que todos los empleados trabajen sin embargo el cliente de la empresa solo sabe que hay un registro de sus transacciones con la empresa (compras, envios, devoluciones) sin embargo ignora como es que se lleva a cabo.
Otro ejemplo es el departamento de Produccion el cual es el encargrado de crear multiples productos para la venta, sin embargo el cliente lo que ve es el producto terminado, el mismo cliente ignora los detalles de como fue creado su producto.


Por otro lado tenemos el Front Office que es toda actividad, departamento, persona que trabaja directamente con el cliente, entre los departamentos de FrontOffice de una empresa tenemos el Call Center, Recepcion, Sala de ventas, Atencion al cliente, Sala de conferencias y presentaciones entre otros.
El FrontOffice debe ser cuidadosamente estudiado debido a que es la imagen de mi empresa, pudiera darse el caso de tener un buen BackOffice, pero sin un buen FrontOffice todo esfuerzo de la empresa por superarse es envano.
Un ejemplo de Front Office es la sala de ventas, en donde se encuentra el producto en expocicion, con un atril de lujo, luz estrategica para resaltar los detalles, perfecto perfil para causar atractivo y sin dejar por un lado los colores del empaque, las y los edecanes que promocionan el producto.
Otro FrontOffice es el Call Center en donde no se cuenta con la ventaja de la comunicacion visual pero estos centros de llamadas son especializados en atender y resolver los requerimientos de los clientes que los llaman unicamente con la comunicacion auditiva, en estos centros se desataca la claridad de comunicacion, la sencilles del lenguaje, la cortesia y las buenas expreciones verbales.


En el estudio de la informatica es importante conocer el backoffice, porque indudablemente los manejos tecnicos y de tecnologia en un alto porcentaje corresponden al BackOffice no obstante es importante mencionar que el BackOffice impacta directamente sobre el FrontOffice, porque si bien es cierto el FrontOffice es el que el cliente tiene contacto el valor entregado no existiera sin el BackOffice.

Software On Demand Vrs On-Site

El software On-Demand tambien conocido como Software as a Service (SaaS) es una modalidad evolucionada de Aplication Service Provider (ASP). Consiste en contratar a una empresa ajena a mi empresa (outsourcing) para que sea esta otra empresa la encargada y la responsable de mis Tecnologias de Informacion (Software), en otras palabras podemos mencionar que existe la modalidad On-Site y la metodologia On-Demand.
On-Site:
Es la forma tradicional que hemos visto que las empresas manejan el software, este consiste en que la empresa contrata personal y crea un departamento de tecnologia, compra equipo hardware para soportar las aplicaciones, desarrolla el software o compra licencias de software ya existente y lo instala en los servidores locales.

On-Demand:
Esta forma de gestionar el software es la contraparte de On-Site, consiste en contratar una empresa externa que sea la encargada de tener el software actualizado, tener los servidores funcionando y monitorear el buen funcionamiento de tecnologia,
Comparativas On-Site vrs On-Demand
  • Con On-Site nuestros datos siempre van a estar dentro del perimetro de mi empres, eso es una falsa sensacion de tener la informacion segura, por otro lado en la cuando utilizamos On-Demand mi empresa y la empresa que prestara el servicio firmamos un contrato por el servicio en donde quedan pactados temas de confidencialidad de mi informacion, % de tiempo de inactividad medido anualmente, actualizaciones al software, soporte tecnico entre otos.
  • On-Site el tiempo de recuperacion de errores mas rapida, en los centros donde prestan servicio On-Demand hay personal encargado de velar por el buen funcionamiento pero nunca va a ser igual de rapido que tener al tecnico exclusivamente para mi servidor empresarial y siempre a un costado de este.
  •  On-Site es una forma cara de mantener software en una empresa porque debemos incurrir en un departamento el cual esta conformado por personal, ademas hay que invertir en hardware (servidores) para soportar la aplicacion, hay que comprar licencias perpetuas para el uso del software y cuando se le solicita al equipo de informatica un nuevo desarrollo no es inmediato porque hay que pasar por las etapas de desarrollo de software lo cual toma determinado tiempo, mientras que en la metodologia On-Demand se paga mensual/anualmente y este pago incluye uso de servidores, personal de soporte, pago por uso de software, actualizaciones del software y mi enpresa unicamente consume el software (hace uso de el) como un servicio externo.
  • En tiempos de respuesta definitivamente On-Site es mas rapido que On-Denand debido a que la primer forma de software que menciono esta de forma local, es decir el servidor esta colocado en la misma LAN mientras que en la segunda forma el servidor esta lejos, podriamos pensar que esta en otra ciudad, otro pais o inclusive otro continente por lo cual se demora en viajar la informacion, no obstante el retardo es de unas pocas milesimas de segundo por lo cual ese retardo no es percibido por el usuario fianl.
  • En cuanto a continuidad de servicio es un tema que depende, la empresa que presta el software como servicio garantiza un % de tiempo de servicio debido a que estos centros tienen una infraestructura preparada para este tema por ejemplo fuentes alternas de corriente (generadores), fuentes diferentes y redundantes de conexion a internet. Sin embargo no solo de ellos depende que el servicio llegue a mi oficina debido a que si en mi oficina no hay luz entonces no hay continuidad por parte de mi oficina, o si mi proveedor de internet ISP falla, entonces mi negocio queda parado sin software debido a que no hay comunicaciones.
  • Los costos de operacion con SaaS, On-Demand o ASP son  predictibles porque se pacta todas las condiciones del servicio en  un contrato escrito el cual es firmado de aceptacion por ambas partes, sin embargo los costos de operacion bajo On-Site son variables porque mi departamento ocacionalmente va a tener que incurrir en gastos no previstos.
Podemos pensar, donde quedan los informaticos en este caso si todo lo que nececito del software me lo da la empresa que presta el servicio ??
En este caso los informaticos pasan a ser una unidad de estrategia y canalizar sus actividades a mejorar la tecnologia interna de la empresa para reducir tiempos y maximizar ganancias, es decir toman un rol de productividad estrategica optimizada basada en TI y no un rol tencino de desarrollo.


Sitios:
http://www.smartsales.com.ar

jueves, 22 de julio de 2010

Diarama Causa-Efecto

El diagrama Causa/Efecto es un diagrama utilizado para el analisis de probelmas, teniendo en cuenta que el problema fundamental es el efecto y sucesivamente se van identificando las causas. Dicho en otras palabras este diagrama nos es util para identificar los aspectos fundamentales que de una manera directa o indiracta impactan en el resultado de lo que se este analizando, con este diagrama podemos ahondar en las causas auxiliandonos del diagrama de lluvia de ideas.

El diagrama tambien llamado diagrama de Ishikawa por su creador tiene forma de espina de pescado, debido a que su forma consta de una cabeza que es el efecto principal y de alli se van identificando todas las causas que en este caso son las espinas del pescado.

Los pasos para crear el diagrama son:
1) Identificar el efecto principal, es decir el problema mayor y para ello vamos a ejemplificarlo con el tipico caso de (¿Porque los estudiantes son tan malos en la materia de matematica?)

2) Identificar los aspectos fundamentales que impactan, podrian ser personas, entidades o cosas para nuestro ejemplo vamos a destacar (Estudiantes, Maestros, Centro educativo, Recursos, Contenido de estudio)

3) Identificar las causas que dan lugar total o parcialmente y como resultado tienen el efecto identificado en la cabeza del pescado, por ejemplo (los estudiantes no ponen de su parte, los maestros estan mal preparados, el centro educativo no tiene recursos economicos, los recursos educativos son inapropiados, el pensum de estudio esta desactualizado).

Notese que en este diagrama podemos tener causas que dan origen a otras causas, esto es permitido y no hay numero limete de causas a listarse.

Resumen de pasos:

martes, 20 de julio de 2010

Sistemas de Seguridad Informatica

Que es un sistema
Un sistema es un conjunto de objetos que interactuan entre si para generar un resultado, los sistemas cuentan con unidades de entrada que es la alimentacion del sistema, unidad de procesamiento que es donde se transforma y se emplea la funcionalidad del sistema, unidades de salida que son el resultado del procesamiento de las unidades de entrada, recursos que son los utilizados para transformar las entradas en salidas y retroalimentacion que son medidas que tomamos de la salida y nos indican que tan bien estubo el funcionamiento del sistema y en que podriamos mejorarlo.
Los sistemas tienen la capacidad de ser parte de sistemas mayores, llamandose a los sistemas pequeños subsistemas y a los sistemas generales suprasistemas.

Que es la seguridad
Seguridad es tener control sobre las amenazas y sobre el riesgo de algun activo de pendiendo en el contexto que se analize. frecuentemente el estar protegido y contar con un respaldo implica el aumento de la seguridad.

Que es la seguridad informatica
En informatica el termino seguridad es empleado para evaluar el nivel de control que tenemos sobre la informacion, para que un sistema informatico este seguro debe existir:
  • Analisis de riesgo
  • Analisis de impacto
  • Politicas para mitigar el riesgo
  • Resguardo de la informacion.
La seguridad informatica puede tener diferentes enfoques(amenazas naturales, amenazas ciberneticas), pero todos convergen en el hecho de salvaguardar la informacion.

Como estudio la seguridad informatica
Cuando queremos darle seguridad a un sistema de informacion debemos hacerlo de una forma ordenada y sistematica para no olvidar ningun aspecto que de lugar a vulnerabilidades y para ello debemos utilizar la metodologia descrita a continuacion:
Debemos identificar los siguientes aspectos fundamentales.
  • Activo: Son todos los entes(fisicos o logicos) que pueden ser foco de falta de seguridad y los cuales debemos proteger (informacion, equipo computo)(bienes, casa).
  • Amenaza: Son todos los entes (fisicos o logicos) que atentan contra de los activos, estas amenazas son las que dan lugar a que un activo sea seguro o no lo sea(virus)(lluvia extrema)
  • Vulnerabilidad: Es el acontecimiento que se puede dar entre la amenaza y el activo, es decir que la vulnerabilidad es la condicion que nace de la amenaza y va directo al activo. (a los troyanos)(vivir cerca de un rio)
  • Riesgo: Es la probabilidad que se concrete una amenaza dado a que la vulnerabilidad existe y el reisgo es alto(probabilidad que se roben informacion)(alta probabilidad que aumente el caudal e inunde mi casa)
  • Impacto: Es la magnitud en que afecta la amenaza al activo (la competencia puede saber mi estrategia de negocio)(perder mis bienes y no tener donde vivir)
  • Ataque: Es el acto en que un activo es dañado o se intenta dañarlo atravez de una de sus amenazas.

Los activos y las amenazas siempre van a existir, lo que debemos procurar es que la vulnerabilidad no exista y si por alguna razon no se puede eliminar la vulnerabilidad hay que establecer las politicas necesarias para que el riesgo sea minimo.

Analisis de riesgos
El analisis de riesgo tambien llamado RA(Risk Analisis), es un proceso el cual consiste en identificar los activos, posteriormente identificar las amenazas, listar las vulnerabilidades y finalmente analizar la probabilidad que tiene de concretarse la amenaza.


Analisis de impacto
Es necesario medir el impacto de cada activo porque en una situacion de desastre para continuar con las operaciones del sistema se restablecen emergentemente los activos mas criticos, es decir que debemos identificar que procesos y que activos son vitales para que funcione el sistema y a estos darles prioridad para minimizar el impacto a la hora que se concrete la amenaza.

Tecnicas para asegurar sistemas
  • Vigilancia de la red.  Zona Desmilitarizada
  • Encripcion de datos
  • Antivirus, anti-spyware, firewall, actualizaciones criticas de seguridad del SO
  • Sitio de respaldo en un lugar remoto.

viernes, 16 de julio de 2010

Concurrencia vrs Paralelismo

Concurrencia
La concurrencia es cuando EXISTE mas de un proceso para ser atendido por el CPU, sin embargo en un instante de tiempo puede ser atendido unicamente un proceso por lo cual existen mecanismos para ejecutar simultaneamente multiples procesos dando la falsa espectativa que todos los procesos son atendidos en el mismo instante. Para lograr la el procesamiento concurrente es necesario software capaz de organizar los procesos (Sistema Operativo)

Palalelismo
El paralelismo es cuando se EJECUTA mas de un proceso en la misma praccion de tiempo, para esto debe haber un soporte de hardware (multiples procesadores).

Programacion:
En programacion, existe el termino thread que significa en español hilo. Este hilo se refiere a que un proceso (instancia de un programa)(ejecucion del codigo) puede estar compuesto por multiples hilos, en caso que se este ejecutando el proceso concurrentemente, a cada hilo le corresponde un cuantum de tiempo del procesador con la diferencia que cuando muere el proceso padre mueren los hilos.
Sin embargo la programacion por hilos o programacion concurrente es el camino para tener aplicaciones capaces de optimizar el uso de multiples procesadores, debido a que en un sistema que procesa paralelamente, cada hilo es asignado a un procesador maximizando los recursos del sistema.

jueves, 15 de julio de 2010

Administracion de Procesos

Existe el termino CONCURRENCIA, que se refiere en el contexto de los procesos y los procesadores a la capacidad que tiene un procesador de atender uno o muchos procesos simultaneamente.
No debemos confundir la palabra Concurrencia que es atender muchos procesos simultaneamente con el Paralelismo que es atender muchos procesos en el mismo instante, para lo cual se precisa de multiples procesadores.

Entonces para que se atiendan multiples procesos de forma concurrente (simultanea), debe existir un administrador de procesos el cual es encargado de alistar los procesos para ser procesados por el procesador, asignarles un cuantum de tiempo especifico a cada proceso, verificar que se cumpla este cuantum de tiempo, colocar en espera el proceso cuando ha cumplido su cuantum de tiempo y verificar cando se ha concluido un proceso. En resumen el administrador de procesos es el encargado de seleccionar el proceso de turno para que sea ejecutado por el CPU.

Proceso
Ahora que hablamos sobre procesos, se entiende como un proceso a la ejecucion de un programa o aplicacion, estos procesos son alojados en la memoria antes de ser atendidos por el CPU, existen dos tipos de procesos, el primero son los procesos del kernel que se ejecutan en modo privilegiado, y el segundo timpo de procesos que son los de usuario, estos se ejecutan sin privilegios.

Programa o Aplicacion
Un programa es una coleccion de codigos guardada en el disco duro o en una unidad de almacenamiento, este programa se convierte en proceso cuando es ejecutado por el procesador.

Analogia de diferencia entre programa y proceso:
  • Programa: Receta de cocina
  • Proceso: Cocinar esa receta.
  • Programa: Recorrido de un viaje.
  • Proceso: Viajar.
  • Programa: Libro
  • Proceso: Leer el libro.

Para que un procesador sea capaz de ejecutar procesos concurrentemente (rimultaneamente), es necesario que asigne estados a cada uno de los procesos, los estados existentes que pueden tomar los procesos son:
Creado  =  Created
Listo  =  Ready
En Ejecucion  =  Running
Suspendido  =  Waiting
Terminado  =  Terminated


PCB = Process Control Block
El sistema operativo, encargado de la gestion de procesos. Crea una estructura para cada proceso que quiere ser atendido por el CPU, a esta estructura se le llama BLOQUE DE CONTROL DEL PROCESO, en ella se almacena:
  • El identificador del proceso
  • El estado (Creado, Listo, Ejecutando, Esperando o Terminado).
  • El cuantum de tiempo
  • Con tador del proceso.
  • Valor del registro de CPU
  • Ubicacion y espacio utilizado en la memoria
  • Recursos asignados al proceso
  • Estadisticas del proceso.
  • Datos del propietario del proceso
  • Permisos del proceso.
  • Señales pendientes de ser atendidas.
Cuando un proceso quiere hacer presencia y que sea considerado por el administrador de procesos es necesario que cuente con su estructura PCB y cuando el proceso ha terminado la estructura PCB asociada es eliminada para dejar libre el registro y que un nuevo proceso pueda hacer uso de este espacio.

Listas existentes dentro del Administrador de Procesos:
  • Lista de Procesos, es una estructura circular donde estan todos los procesos listados, con su apuntador a su descriptor.
  • Lista de Procesos Listos, es la estructura que contiene los descriptores de los procesos que estan listos para ser ejecutados, estos son procesos candidatos para ser atendidos por el CPU.
  • Listado de Procesos en Espera, es la estructura que contiene los descriptores de procesos que han sido interrumpidos o que estan en espera de una señal.

miércoles, 14 de julio de 2010

Sistemas Operativos

El sistema operativo es una interface entre el usuario y el hardware, es decir, el sistema operativo es el encargado de gestionar los recursos de hardware basandonos en las peticiones de los usuarios.
Este sistema se encuentra en todo aparato que cuente con un microporocesador por ejemplo computadora, celulares, microhondas, refrigeradores, etc..

 Las funciones principales de un sistema operativo son:
  • Administrar la memoria
  • Conocer donde inicia y termina cada segmento de memoria, decidir que informacion se traslada a memoria y cual se recupera de la memoria, organizar y distribuir el espacio de la memoria.
  • Administrar el CPU
  • Crear, distribuir, parar y reanudar tareas de los procesos (programas en ejecucion)
  • Administrar dispositivos de E/S 
  • Guarda temporalmente informacion en la memoria cache.
  • Administrar Archivos
  •  Crear, modificar y eliminar archivos y carpetas, encargado de la forma de administracion de los archivos por ejemplo FAT32, NTFS, EXT2, EXT3, ReiserFS entre otros.
  • Administrar Almacenamiento Secundario
  • Es la administracion del desco o de los discos duros, el espacio disponible, la forma en que se almacena y se busca la informacion.

Las llamadas del sistema operativo son funcionalidades que este mismo presta, por ejemplo si una aplicacion de software nececita el uso de el cd-rom, existe en el SO una llamada la cual permite el uso de este periferico, de esta manera cada SO tiene sus llamada especificas. Cuando se cambia de SO a una version mas nueva hay que tener cuidado debido a que estas llamadas pueden cambiar y con ello deje de funcionar correctamente nuestro software. Entonces para concretar una llamada es cuando el software de aplicacion nececita utilizar algun hardware del sistema.

Caso contrario cuando el hardware del sistema nececita llamar a un software especifico, a esto se le conoce como una interrupcion del sistema, son utilizadas frecuentemente cuando el hardware esta ejecutando una accion y al concluir hace una interrupcion avisando que se el hardware esta libre y que puede ser utilizado nuevamente. Tambien cuando ha ocurrido un error en el hardware es necesario notificarlo al sistema operativo y a esto se le llama excepcion.

  • Llamada: Software nececita comunicarse con el hardware
  • Interrupcion: Hardware nececita comunicarse con el software.
  • Excepcion: Hardware nececita notificar un error al SO.


Administrador de Tareas:
  • Monotarea: se puede ejecutar una aplicacion simultaneamente aparte de los procesos utilizados por el SO, este proceso deja de utilizar los recursos hasta qaue termina todas sus tareas.
  • Multitarea: se pueden ejecutar diferentes aplicaciones simultaneamente, esto quiere decir que podemos estasr escuchando musica, escribiendo, utilizando un navegador y una sesion de chat abierta porque la multitarea asigna tiempos pequeños al procesador para atender la tarea en cuestion, la memoria, los perifericos son compartidos.

Administracion de Usuario:
  • Monousuario: permite ejecutar programas de un usuario al mismo tiempo.
  • Multiusuario: muchos usuarios pueden ejecutar programas al mismo tiempo, por lo general estos sistemas operativos tienen proteccion para sincronizar los datos que estan siendo alterados.

Manejo de Recursos:
  • Centralizado: se permite utilizar recursos de una sola computadora.
  • Distribuido: permite utilizar recursos de muchas computadoras simultaneamente (CPU, Memoria, Disco Duro).

martes, 13 de julio de 2010

Alta Disponibilidad

La alta disponibilidad es cuando un sistema resuelve las nececidades de los usuarios en un porcentaje de tiempo elevado, las nececidades del usuario pueden ser escribir un dato en el sistema, leer un dato en el sistema, procesar un dato en el sistema.
Existen dos tipos de inactividades que son las causas de que el usuario no pueda trabajar con el sistema y por consiguiente no hay alta disponibilidad, estas son:
Inactividad Programada
Inactividad No Programada

La inactividad programada son todas aquellas interrupciones del sistema que se llevan a cabo con hecho pensado, entre las cuales destacamos el mantenimiento, actualizacion de sistema operativo, antivirus u otro software. En algunas ocaciones no se toman en cuenta para medir la disponibilidad del sistema pero lo correcto es incluir este tiempo de inactividad para obtener el porcentaje de dispoinibilidad de servicio.

Las inactividades no programadas son aquellas que ocurren accidentalmente y sin acto de meditacion o de voluntad por ejemplo cuando se corta la corriente, algun ataque de virus, denegaciones de servicio por stress del sistema, fallas en el cableado de red, errores internos en el software entre otros, estas inactividades son las que frecuentemente se toman en cuenta para proporcionar un dato porcentual de funcionamiento del sistema.

Es prudente hablar del tiempo de recuperacion, es importante medir el tiempo de recuperacion ante diferentes tipos de inactividades debido a que este dato es fundamental para poder proporcionar a nuestros clientes un porcentaje real del tiempo de disponibilidad. Existen ocaciones en que el tiempo de recuperacion es demaciado grande o incluso infinito por ejemplo el caso de un incendio o una inundacion, para lo cual es prudente estar preparado con un plan de continuidad el cual nos garantice recuperarnos en un tiempo prudente.

La inactividad del sistema es tolerable por parte del usuario, por ejemplo imaginemos que queremos entrar a la banca electronica de nuestro banco y esta se encuentra deshabilitada por mantenimiento, como usuarios intentamos mas tarde y no hay mayor inconveniente incluso cuando sera muy preciso saber el dato, nosotros como usuarios vamos a esperar. Lo que definitivamente el usuario no puede permitir es la perdida de datos o la inconsistencia de los mismos, imaginemos el mismo caso del banco, de nada nos sirve que este disponible en un 99.999999% del tiempo si cada vez que consulto mi saldo es diferente y sin una justificacion aceptable, o que cuando quiera entrar a mi cuenta me aparezcan menos de los depositos que yo he realizado.

El calculo del porcentaje de disponibilidad se lleva a cabo de la siguiente forma:
porcentaje_disponibilidad =1- tiempo_inactividad / tiempo_año

Por ejemplo:
1 - 11dias / 365dias = 0.9698, en porcentaje seria 96.98% de disponibilidad anual.



Índice de disponibilidadDuración del tiempo de inactividad
97%11 días
98%7 días
99%3 días y 15 horas
99,9%8 horas y 48 minutos
99,99%53 minutos
99,999%5 minutos
99,9999%32 segundos

Solucion
Para proporcionar un sistema de alta disponibilidad es sencillo, debemos instalar un cluster de equipos que tengan el mismo nivel de servicio y un balanceador de disponibilidad.

La logica consiste en dos o mas servidores que tengan la misma informacion replicada entre ellos, el balanceador de disponibilidad verifica si el servidor esta funcionando y en caso deje de funcionar el balanceador redirecciona el trafico de los usuarios hacia el servidor de respaldo, el cual es bueno mencionar que tiene la misma informacion replicada del servidor principal y que resuelve las peticiones de forma similar. Finalmente cuando se ha restablecido el servidor principal, este se pone en linea, se actualizan los datos que han sido modificados en el cluster respaldo.

Nota: no debemos confundir el cluster de alta disonibilidad que garantiza funcionamiento continuo con el cluster de alto rendimiento que su funcionalidad es balancear las cargas en multiples servidores para que se procesen mas rapido los datos.


Software:
Existen multiples sistemas operativos que incluyen software para configurar la alta disponibilidad, entre ellos:
  • HearBeat
  • Idirectord y LVS (Linux Virtual Server)
  • Pirahna
  • UltraMonkey
  • Kimberlite








domingo, 4 de julio de 2010

Multiprocesamiento

El multiprocesamiento se refiere a un equipo de computo, con dos o mas procesadores que trabajan de forma simultanea pero ocupan la misma memoria.

No debemos confundir la falsa apariencia que dan los actuales procesadores al permitirnos ejecutar multiples tareas "simultaneamente", esto en realidad no sucede asi.

Los procesadores actuales tienen la capacidad de ejecutar multiples aplicaciones "simultaneamente" porque se otorgan pequeños intervalos de tiempo del procesamiento a cada aplicacion por ejemplo. si estamos navegando en internet, escribiendo un documento y escuchando musica, tenemos 3 aplicaciones activas en memoria y aparentemente todas se ejecutan a la vez, pero no sucede asi, el procesador es asignado una fraccion tan pequeña de tiempo para cada una de las 3 aplicaciones que las 3 son percibidas como que se ejecutan "simultaneamente" pero en realidad solo es una la que se ejecuta y las otras dos aplicaciones esperan su porcion de tiempo de procesador para ser ejecutadas, como repito es tan minimo el tiempo que se asigna de procesador a cada tarea que el usuario no lo persibe de esa forma.

El multiprocesamiento es caro, debido a que no solo consta de tener un equipo con dos procesadores y una memoria en comun, debe existir la tecnologia de sincronizacion y asignacion de tareas especifica, sistema operativo), porque en caso un procesador deje de funcionar los otros procesadores deben tomar procesamiento de procesador arruinado.

El multiprocesamiento es escaso y ha tenido lugar en aplicaciones de requerimientos grandes como lo es el procesamiento de datos masivos, la renderizacion de videos 3D, bases de datos entre otros.

Para que una aplicacion aprobeche el potencial de contar con un equipo hardware de multiple procesador debe estar programada en hilos, para que cada hilo sea ejecutado en cada procesador.

viernes, 2 de julio de 2010

Compilacion vr. Interpretacion

Debemos tener claro las generaciones de codigo que existen, las cuales vamos a resumir como primer generacion es el codigo de maquina, el unico entendible por la computadora. Segunda generacion es el codigo ensamblador o de tres direcciones. La tercera generacion de codigo son los lenguajes estructurados y orientados a objetos, La cuarta generacion son los lenguajes que no se ejecutan ordenes sino se solicita funcionalidad y el lenguaje genera el resultado tipo SQL.

Todas estas generaciones a escepcion de la primera generacion, deben ser compilados/interpretados para llegar a el mas bajo nivel que seria la primer generacion, donde el codigo son ceros y unos que son la unica instruccion que entiende la computadora.

Compilacion:
+ Se ejecuta con mas velocidad
+ Se compila una vez y se ejecuta muchas veces.
- Ocupa menos espacio en memoria
- La compilacion es para un equipo con una arquitectura especifica, es decir, la compilacion es dependiente de la plataforma.

FUENTE -> TRADUCCION -> OBJETO -> EJECUTABLE

Interpretacion:
+ Proporciona buen soporte para la depuracion.
+ Facil de identificar el error en el codigo.
+ Programas idependientes de la plataforma.
- Las aplicaciones interpretadas ocupan mas espacio en memoria y requieren mas CPU.
- La velocidad de ejecucion es menor que la de un programa compilado.

FUENTE -> INTERPRETE -> INSTRUCCION PARA LA MAQUINA VIRTUAL



.Net
1. Se escribe el archivo con codigo (C#, J#, Visual Basic) en el entorno de desarrollo.
2. Se compila el proyecto con el compilador llamado IL_Compiler
3. Este utiliza CTS (Common Type System) sistema de compatibilidad ante multiples lenguajes.
4. Esta compilacion genera el codigo intermedio MSIL.
5. Se instala la maquina virtual que se llama Excecution Support.

Java
1. Se escribe el archivo con codigo java y se guarda como nombre.java
2. Se compila nombre.java con el compilador llamado JAVAC.ç
3. La compilacion devuelve el codigo intermedio ByteCode, este es libre de plataforma.
4. Se instala una MAQUINA VIRTUAL DE JAVA, especifica para cada plataforma.
5. Sobre esa maquina virtual especifica de la plataforma se ejecutan los ByteCode para hacer uso de la aplicacion.

Nota:
.Net y Java son semejantes desde el punto de vista que ambos son compilados inicialmente y posteriormente interpretados por sus respectivas maquinas virtuales.
La diferencia radica en que java utiliza la maquina virtual con el objetivo de hacer sus aplicaciones multiplataforma mientras que .net utiliza su maquina virtual para integrar multiples lenguajes de programacion.

jueves, 1 de julio de 2010

Memoria RAM vr. Memoria ROM

La memoria RAM no es la misma que la memoria ROM, aunque asi parezco o aunque sea tema de confucion de muchas personas.
Ambas tienen diferentes funcionalidades y diferentes formas de operar, lo cual marca su diferencia.

Memoria RAM:
La memoria RAM, llamada asi por sus siglas en ingles de Random Access Memory en español memoria de acceso aleatorio.

Esta memoria teine la caracteristica de almacenar informacion de fomra referencial en su interior, es decir, los programas que ejecutamos en la computadora se almacenan en esta memoria y no siempre se almacenan donde mismo, mas bien, los registros le asginan un espacio aleatorio a nuestros programas para que se alojen alli mientras dure la ejecucion. Principalmente por esto su nombre de acceso aleatorio.

Tambien tiene la caracteristica que es una memoria volatil, esto significa que si hay informacion almacenada en la memoria RAM y cortamos la corriente electrica, nuestra informacio se pierde, es por este motivo que cuando desconectamos la computadora o se va la electricidad en nuestra casa, todos los programas que se estavan ejecutando se cierran inclusive el sistema operativo.

Finalmente esta memoria tiene la capacidad de ser Leida y Escrita, es decir, permite que leamos de ella y que escribamos sobre ella.

Memoria ROM:
Por otro lado existe la memoria ROM, esta a diferencia de la memoaria RAM, solo permite la lectura de informacion y no la escritura de informacion por lo cual la memoria ROM es utilizada para almacenar rutinas de arranque de la computadora, secuencias de ejecucion establecidas como revisiones de sistema periodicas o deteccion de dispositivos. Esta memoria ROM es donde esta almacenado el BIOS de la computadora.

Tambien la memoria ROM esta diseñada para no ser volatil, es decir, la informacion guardada en ella no se borra cuando apagamos la coputadora o cuando inclusive cortamos la corriente.

Resumen:
  • Memoria RAM, es donde se almacenan los programas que ejecutamos en nuestra computadora, es un acceso aleatorio, es volatil (se pierde la informacion cuando se corta la corriente) y tiene la capacidad de lectura y escritura por parte del usuario.
  • Memoria ROM, es donde se almacenan las rutinas de arranque y de revision de perifericos de la computadora, es un acceso directo, no es volatil (su informacion no se pierde cuando se corta la corriente) y tiene la capacidad de lectura unicamente. por lo cual es ideonea para el BIOS.