martes, 29 de junio de 2010

Lenguaje Ensamblador

El que llamamos lenguaje ensamblador tambien conocido como lenguaje de tres direcciones o lenguaje de primera generacion, hace referencia al lenguaje que codifica un nuvel antes del codigo de maquina.

El codigo ensamblador es el ultimo lenguaje de programacion antes de que se convierta en codigo maquina por lo cual es un lenguaje de nivel medio de dificultad para que un usuario poco experimentado lo comprenda.

Es un codigo que ahorra mucha memoria debido a que sus instrucciones son claras y directas aportando velocidad a la ejecucion.

Es conocido como codigo de tres direcciones porque todas sus instrucciones pueden tener por maximo 3 direcciones o apartados de instruccion por ejemplo:
Mov Ax, Bx.

Este lenguaje debe ser compilado por un ensamblador que es el que convierte las instrucciones en codigo binario (ceros y unos), la ventaja de utilizar codigo ensamblador es que como usuarios podemos entender el codigo, el codigo es limpio y rapido de ejecutar por ser directo y sobre todo que se tiene mucho control sobre el hardware directamente.

A diferencia de lenguajes de alto nivel los cuales involucran instrucciones alternas al codigo, este codigo ensamblador hace referencia directa a la memoria y a las operaciones del procesador ahorrando tiempo de ejecucion.

lunes, 28 de junio de 2010

Arquitectura de Software MVC

La arquitectura de software MVC de sus siglas Modelo-Vista-Controlador, es la forma en que se organizan los productos de software para separar los datos de la funcionalidad y de la interfaz grafica.

La idea  es tener independiente estos tres aspectos tomando como datos a cualquier sistema de almacenamiento pudiendo ser la base de datos o un conjunto de archivos, por otro lado el controlador se refiere a todas las acciones que dan lugar al modelo de negocio, son todas aquellas funciones que determinan la secuencia de pasos para que el proceso culmine exitosamente y la vista es la interfaz grafica, en donde el usuario va a ver la informacion solicitada en pantalla.

Por ejemplo, la vista es la interfaz grafica de usuario (GUI) de la aplicacion y para ello pensemos en una pagina web de control academico de cualquier universidad, entonces la vista seria el desplegado de cursos aprobados que el estudiante ha obtenido.

El controlador es todas las acciones, botones y eventos que han llevado al estudiante a ver sus cursos aprobados en pantalla, por ejemplo el evento de hacer login, el enento de haber seleccionado el menu "Cursos Aprobados".

Y el modelo finalmente es donde estan almacenados los datos, para este ejemplo es una base de datos la cual ha aportado informacion de asignaciones de cursos, notas de cursos, alumnos para determinar los cursos aprobados por el alumno especifico.

Visto el ejemplo anterior y relacionado a la arquitectura MVC nos damos cuenta que es una aquitectura que aporta flexibilidad al sistema debido a que podemos cambiar la interfaz de usuario GUI sin nececidad de alterar el modelo de datos ni los controladores, o bien podemos cambiar los controladores sin cambiar el modelo de datos ni la vista grafica por ejemplo que los datos sean desplegados no ingresando el codigo sino deslizando una tarjeta con banda magnetica.


miércoles, 23 de junio de 2010

Arquitectura de procesadores

Antes de iniciar este tema en el blog, voy a responder una pregunta frecuente que hacen los usuarios con respecto a los procesadores.

Cual es la diferencia de un procesador X86 y uno X64 ??
Es sencillo, a nivel de usuario vamos a decir que el procesador es el encargado de obtener datos de entrada provenientes de la memoria, transformarlos en datos de salida. entonces el procesador utiliza BIT que es la unidad de medida de entrada al procesador todo esos datos por cada pulsacion del reloj (ciclo), quiere decir que determinado numero de bits(32 o 64) es la cantidad de informacion que entra al procesador.
Entonces la respuesta es, el procesador X64 trabaja con 64bit de entrada al procesador mientras que el X86 trabaja con 32bit de entrada, por consecuencia el procesador X64 procesa mas informacion que un procesador X86.

Basados en la respuesta anterior surge una nueva pregunta la cual es:
Si el X64(64bit) procesa mas informacion en un ciclo de reloj que un X86(32bit) porque el nombre ?
La respuesta es que el X64 su nombre se origina naturalmente porque procesa 64 bit pero el procesador X86 su nombre se origina gracias a que pertenece a la familia de procesadores 8080, en los cuales tenemos el 8082, 8085, 8086, 8088 entre otros.
Algunos de los procesadores anteriores trabajan con 16bit por ejemplo 8080, 8082, 8085 y fue a partir del 8086 que se trabaja con 32bit por eso el nombre de esta familia de procesadores. 

Arquitectura de procesadores 80x86
1.         Arquitectura en pipeline
En el procesamiento de datos tenemos historicamente una evolucion del sistema, inicialmente el procesador era el encargado de ir a la memoria a traer los datos y luego procesar los datos, de esta forma el procesador gastaba tiempo ejecutando tareas que ne eran las de procesamiento puramente (ir a traer a memoria). Para solucionar esta situacion se dividieron en dos funciones, la primera de ellas se llama BUI Basic Unit Interface y es la encargada del manejo de los registros y de los datos en memoria mientras que la segunda funcion el EU Excecute Unit la cual se encarga de ejecutar las instrucciones. De esta manera se ha logrado mayor rendimiento y velocidad por parte del procesador debido a que su funcion ahora es exclusivamente procesar informacion.

2.         Bus de datos de 16bit
El bus de datos es el medio por el cual se comunica el procesador y la memoria, por esa razon a mayor bus de datos mayor cantidad de bits  por pulsacion del reloj pueden fluir de la memoria al procesador. Cuando hablamos de un bus de datos de 8bit nos referimos a que existen 8 hilos de alambre entre la memoria y el procesador y que cuando el reloj del sistema da un pulso simultaneamente pasan los 8 pulsos. Sin embargo, ahora hablamos de bus de datos de 16bit lo que significa que la comunicacion fluye mas rapido debido a que existe mas bus de datos.

3.         Bus de direccion de 20bit
El bus de direccion es el encargado de INDEXAR los datos dentro de la memoria, por lo cual a mayor tamaño de bus de direccion mayor podra ser el tamaño de la memoria debido a que puede indexarse completamente, anteriormente se hablaba de un bus de direccion de 16bit, lo cual permitia indexar memoria de hasta 64kb, cantidad que fue insuficiente por lo cual nacio el bus de direccion de 20bit el cual podia indexar hasta 1MB de memoria cantidad que en aquel entonces era suficiente.

4.         BUI, Basic Interface Unit
El BUI es el encargado del FETCH, en otras palabras, el BUI se encarga de estar accediendo periodicamente segun la demanda del procesador hacia la memoria para traer la informacion que le va a servir al procesador para realizar los calculos asociados.

4.1       Registros de segmento
Son cuatro registros que se han asignado a diferente area de la memoria para seleccionar la region de memoria sobre la cual se esta trabajando.

4.1.1    DS, Data Segment: Segmento de datos, aqui se almacenan las variables de una aplicacion.

4.1.2    CS, Code Segment: Segmento de codigo, aqui se almacena el codigo de la aplicacion que se esta ejecutando.

4.1.3    SS, Stack Segment: Segmento de pila, utilizada por el procesador para almacenar las aplicaciones y las sub rutinas utilizadas, su forma de acceso es como una pila (el primero en entrar es el ultimo en salir).

4.1.4    ES, Extra Segment: Segmento extra, utilizado para que el progrmador expanda la memoria de datos o como memoria destinada a video o variables del BIOS.

4.2       Cola de prefectch
Es una estructura de comunicacion y sincronizacion entre el BUI y el EU, sucede que el BUI se encarga de buscar los datos en la memoria y el EU se encarga de ejecutarlos, pero para que ambos procesos se sincronizen es necesaria una cola de espera de tal manera que el BUI busca los datos y los coloca en la cola prefetch de donde el EU los va tomando a medida que se va desocupando. De esta manera se logra que el trabajo continue y ninguno se detenga de trabajar esperando a que el otro proceso se desocupe.

4.3       Generador de direcciones fisicas
Debido a que el bus de direcciones es de 20bit y los registros que almacenan la direccion son  de 16bit es necesario dos registros para lograr almacenar la direccion del bus de direcciones para lo cual existe le circuiteria que genera las direcciones fisicas utilizando la siguiente fomrula:
Direccion Fisica = Segmento * 0010h + Desplazamiento

4.4       Bus C
Este bus es exclusivo para la comunicacion entre el proceso BIU, es decir comunica a la memoria, los registros, el generador de direcciones y la cola del prefetch. Notose que este bus solo comunica dentro del BIU para que no se intercepten los datos con el EU.

5.         EU, Execution Unit
Es la unidad encargada de la ejecucion de las instrucciones utilizando los datos que se encuentran en la memoria. Estos datos que estan en la memoria son traidos por el BIU (conformado por registros) y almacenados en la cola de prefetch para ser utilizados por la EU quien es la encargada de realizar calculos aritmeticos.

5.1       Unidad de Control
Es la unidad que controla el prefetch de la memoria y las actividades necesarias para que el procesador funcione, es en otras palabras el que coordina las microoperaciones del procesador para que este lleve a cabo su tarea.

5.2       Registro de Proposito General
Son 4 registros de 16bit cada uno, dividisos en dos partes, H es la parte alga de 0 a 7bit y L es la parte baja de 8 a 15bit. Son utilizados por los programadores para almacenar informacion de variables, funciones con las cuales se pueden realizar operaciones.

5.2.1    AX, Registro de Acumulador: Registro de proposito general, es el mas usado de todos los registros.

5.2.2    BX, Regostro Base: Especializado en el acceso a memoria conjuntamente con los registros de indice.

5.2.3    CX, Registro Contador: Especializado para ser contador, debido a que funciona de forma ciclica.

5.2.4    DX, Registro Datos: conjuntamente con el AX, forman registros de 32bit para almacenar datos de mayor longitud.

5.3       Registro de Indice
Son registros de 16bit, al igual que los registros de proposito general con la unica diferencia que no cuentan con las mismas capacidades en cuanto a funcionamiento que los registros de proposito general.

5.3.1    SI, Source Index:: Registro que apunta hacia la localidad de memoria que se va a leer.

5.3.2    DI, Destination Index:Registro que apunta hacia la localidad de memoria que se va a escribir.

5.3.3    BP, Base Pointer: Registro utilizado para acceder a la pila, indicando cuando queremos sacar mas datos de los que la pila tiene "underflow"

5.3.4    SP, Stack Pointer: Registro para acceder a la pila al igual que el BP(Base Pointer) con la diferencia que este indica cuando la pila esta llena "overflow"

5.4       ALU, Aritmetic Logic Unit: Circuito electronico capaz de realizar operaciones aritmeticas necesarias para el procesamiento de datos provenientes del bus A, el ALU esta conectado con las vanderas las cuales en dependencia de el resultado del ALU se activan o se desactivan.

5.5       Registro de Banderas: Este es un registro de 16bits que almacena informacion de estados del procesador en donde 0 significa que el evento no ocurrio y 1 significa que el evento ocurrio.

5.5.1    ZF, Bandera de Resultado 0: Se activa cuando el resultado de la operacion en el alu es cero.

5.5.2    CF, Bandera de Carry: Se activa cuando el resutlado del alu (suma o resta) genero un acarreo.

5.5.3    OF, Bandera de Overflow: Cuando la operacion en el alu excedio el tamaño del registro.

5.5.4    SF, Bandera de Signo: Se activa cuando la operacion devuelve un valor negativo, es decir, menor que cero.

5.5.5    AF, Bandera de Carary Auxiliar: Es el auxiliar del carry cuando se generan acarreos en sumas o restas de operaciones realizadas por el alu, por ejemplo si sumamos dos numeros de 16bit cada uno, cuando sumamos los primeros 8bits se general el carry auxiliar que es el que corresponde a la primer mitad.

5.5.6    DF, Bandera de Direccion: Esta bandera no se enciende como las anteriores banderas, esta es utilizada por el programador para indicar la direccion de acceso.

5.5.7    IF, Bandera de Interrupcion: Esta bandera se activa cuando el procesador esta en una interrupcion de tal modo se evita que una interrupcion sea atendida mientras se encuentra en otra interrupcion.

5.6       Bus A
Es el camino por el que viajan los datos dentro de la unidad de ejecucion, principalmente entre los registros y el alu.


De forma global podemos ilustrar el procesamiento de datos de la siguiente forma:






martes, 15 de junio de 2010

Plan de Contingencias

El plan de contingencias es un documento escrito que contiene las medidas preventivas, emergentes y reanudables de las actividades criticas que dan negocio a una empresa o institucion.

Las medidas preventivas son aquellas que pretenden estar preparados para el caso en que ocurran los acontecimientos que atenten contra el funcionamiento cotidiano de la empresa o institucion.

Las medidas emergentes son los planes que se llevan a cabo durante la emergencia, es decir, se llevan a cabo durante la eventualidad.

Las medidas reanudables consisten en los procedimientos a utilizarse cuando ya todo ha vuelto a la normalidad y se requiere restablecer el sistema.

Para realizar un plan de contingencias debemos seguir los siguientes pasos:
  1. Analisis de Activos (computadora)
  2. Analisis de Amenazas (tormeta elecrtica)
  3. Analisis de Riesgos (que la tormenta electrica recargue el fluido electrico y queme la computadora)
  4. Analisis de Impacto (que el facturador a quien pertenece la computadora deja de ingresar facturas a razon de 30 facturas por hora).
  5. Desarrollo de medidas preventivas.
  6. Desarrollo de medidas emergentes.
  7. Desarrollo de medidas reanudables.
  8. Plan de pruebas y mantenimiento.
  9. Plan de implementacion.

Control de Calidad

La calidad es la aptitud que tiene un producto o servicio para satisfacer las nececidades de un cliente.
El control es forma en que vamos a verificar que se esten cumpliendo todos los estandares los cuales generan un producto o servicio que satisface las nececidades de nuestros clientes.

La medicion de software no es tarea facil ni 100% objetiva, hay muchos temas que se califican subjetivamente como por ejemplo la funcionalidad, la prefeccion, la facilidad de uso entre otros.
Tambien hay medidas que a pesar de ser cuantitativas resultan ser variables por ejemplo la velocidad de ejecucion, velocidad de carga.

Para poder medir el software existen las metricas que son aspectos en los cuales vamos a orientar nuestras medidas y la forma en que se va a medir, existen diversas metodologias para hacer mediciones de software.
Recordemos lo que no se puede medir, no se puede mejorar y siempre que hablamos de mejora esta involucrada la calidad.

El software se puede medir por su tamaño a travez de la metodologia COMOCO, que en versiones iniciales esta basada en el numero de lineas de codigo aunque posteriormente involucra aspectos de funcionalidad.
Tambien podemos medir el software por su funcionamiento a trevez de la metodologia de Puntos de Funcion en donde las metricas son orientadas a la funcionalidad del sistema de software.
Ambos sitemas de medidas son utilizados para hacer estimaciones de tiempo, recursos, personal y costos de desarrollo.

Actualmente existen entidades internacionales que se dedican a certificar la calidad, entre ellas tenemos las normas ISO en sus diferentes numeraciones que corresponden al aspecto a certificar.
Es importante contextualizar que los certificados ISO 9001 no certifican software propiamente, sino que certifican metodologias y empresas de desarrollo de software.

Por lo tanto es incorrecto pensar que mi programa hecho a la medida tiene un certificado de calidad, lo que es correcto en este caso es suponer que mi software hecho a la medida es de calidad y satisface mis nececidades debido a que la empresa que lo desarrollo cuenta con certificado de calidad, los desarrolladores son certificados un la herramienta utilizada y que emplean una metodologia certificada.

Aseguramiento de la Calidad de Software
Conjunto de actividades diseñadas y determinadas antes del desarrollo del software las cuales estan orientadas a asegurar la calidad del software a trevez de actividades continuas y periodicas que verifiquen el desarrollo del software.

Para certificar la calidad
  • Una metodologia adecuada.
  • Medio de valoracion de la metodologia
  • La metodologia y la valoracion de la metodologia deben estar reconocidas en al industria.
Factores que determinan la calidad
OPERACIONES DEL PRODUCTO (caracteristicas operativas)
  • Correccion (hace lo que se le pide?)
  • Fiabilidad (hace lo que se le pide en el tiempo indicado?)
  • Eficiencia (que recursos de software y hardware nececito?)
  • Integridad (puedo controlar su uso?)
  • Facilidad de uso (un usuario sin experiencia puede entender el funcionamiento?)
REVICION DEL PRODUCTO (capacidad para soportar cambios)
  • Facilidad de mantenimiento (puedo localizar fallos facilmente?)
  • Flexibilidad (puedo añadir nuevas opciones ?)
  • Facilidad de prueba (puedo verificar su funcionamiento?)
TRANSICION DEL PRODUCTO (adaptabilidad a nuevos entornos)
  • Portabilidad (podre utilizarlo en otra maquina con otro sistema operativo?)
  • Reusabilidad (podre utilizar parte del software para otra aplicacion?)
  • Interoperabilidad (podra comunicarse con otras aplicaciones y otros sistemas?)

martes, 8 de junio de 2010

Administración de Recursos Humanos

Para entender la importancia de la administracion de recursos  humanos hay que pensar en:

"Alcanzar OBJETIVOS a trevez de PERSONAS que utilizan TECNOLOGIA dentro de la ORGANIZACION".


El proceso Administrativo involucra: Planeacion, Organizacion, Coordinacion, Direccion y Control.

El proceso administrativo contempla la administracion de personal por lo cual el administrador de recursos humanos debe Planificar los puestos, Organizar el personal, Coordinar las actividades, Dar direccion al desarrollo de actividades y finalmente Controlar como se realizan las actividades.

Cuando existen trabajadores que efectuan una labor el administrador puede adoptar la metodologia de empoderamiento (Empowerment) la cual significa darle oportunidad al trabajador a desarrollar su potencial expresando y ejecutando sus ideas dicho en otras palabras, el administrador debe "delegar autoridad sobre el trabajo pero compartir la responsabilidad".

Por ejemplo para un maestro, su administrador le delega la autoridad de que temas dar en su curso, como manejar las notas de los alumnos y como manejar los problemas con los alumnos sin embargo la responsabilidad de las acciones que tome el maestro van a ser compartidas por el administrador porque si causa un problema grande, el colegio completo tendra mala reputacion por lo cual el dueño llamara la atencion de el administrador y de el maestro.


Una ventaja competitiva para las organizaciones radica en la calidad humana de sus trabajadores, la cual no se importa ni se compra, la calidad humana de  una organizacion se crea dentro de la misma. En donde los ejecutivos juegan un papel muy importante.

La gestion de personal involucra 8 pasos escenciales que son:

   1. Reclutamiento de personal.
   2. Seleccion de personal.
   3. Descripcion y analisis de puesto.
   4. Evaluacion del desempeño del personal.
   5. Sistema de compensacion.
   6. Plan de beneficios sociales.
   7. Higiene y Seguridad en el trabajo.
   8. Capasitacion y Desarrollo del personal.

Reclutamiento y Seleccion de personal:
Este proceso inicia con la convocatoria o la publicacion de oportunidad de empleo con la cual se pretende atraer a los canditdatos al puesto ofertado.
Para llevar a cabo una buena contratacion debemos recolectar todas las hojas de vida de los interesados en el puesto del cual debemos seleccionar las hojas de vida que cumplan con el perfil del puesto creado en el analisis del puesto.
 
Cuando tenemos un grupo de hojas de vida que aplican, ahora debemos entrevistar y conocer lo mas posible a los interesados para ver quien tiene las mejores aptitudes y actitudes.
 
para finalizar el proceso de seleccion de personal, finalmente se negocia con el interesado que mejor se adapte al puesto para que entre en funcion.
 
Existen pasos alternativos que dependen de cada empresa o institucion por ejemplo un examen de conocimientos, un examen psicologico, examenes de salud, entre otros.

Analisis y Descripcion del Puesto:
El analisis de un puesto se debe realizar antes de la contratacion del personal que ocupara ese puesto, en el analisis se debe detallar claramente las tareas que debera realizar la presona que este ocupando el cargo, tambien se debe describir explicitamente las responsabilidades que tendra el puesto, las personas que tendra a su cargo el puesto y las personas a quienes esta  a cargo el puesto.
 
Evaluacion del Desempeño del Personal
Este proceso debe llevarse a cabo para identificar las fortalezas y las debilidades del personal, es importante destacar que la evaluacion de personal debe ser motivante y debe animar a los trabajadores a la superacion propia.
 
Esta actividad supone ventajas para la empresa, para la administracion y para el empleado.
Para la empresa ayuda mejorando la productividad debido a que cuentan con mano de obra calificada y en mejora continua, para la administracion beneficia porque ayuda  a identificar los temas de deficiencia y poder trabajar en ellos, y para los empelados crea un ambiente de reconocimiento de esfuerzo y de competitividad exhortandolos a seguir mejorando.
La propia evaluacion de desempeño se puede realizar bajo diferentes enfoques, los cuales son:
  • Orientado a tareas.
  • Orientado a personal
  • Sistema de Retroalimentacion
  • Sistema de mejora de rendimiento


lunes, 7 de junio de 2010

PLANEACION del desarrollo de sistemas de software

La planeacion del desarrollo de sistemas de software es importante para que los proyectos tengan exito, esta fase del proyecto nos sirve para hacer los planes de como voy a organizar el desarrollo de software, esta organizacion involucra el hardware, el software y el recurso humano.

Para planificar debemos tener claro que:
  • Panorama: es un resumen en el cual debemos detallar la vision del proyecto y una descripcion general.
  • Plan de fases: en este plan debemos detallar el analisis y diseño del software, debemo especificar las fechas aproximadas en un intervalo de tiempo de entrega y un aproximado de personal involucrado para estas fases.
  • Plan de organizacion: se identifican las responsabilidades especificas y explicitas de las personas que van a trabajar en el proyecto, es decir se asignan roles.
  • Plan de pruebas: se determina como y cuando se van a realizar las pruebas y bajo que condiciones para verificar el funcionamiento y la calidad del proyecto.
  • Plan de control de moficifaciones: se establece un sistema de modificaciones del software cuando ya se haya terminado.
  • Plan de documentacion: es el plan que permite transmitir la estructura del proyecto de software y la forma correcta de uso, actualmente se utilizan las FAQ que es una forma de gestionar las preguntas y respuestas mas comunes de los proyectos de software.
  • Plan de capacitacion: se debe diseñar la forma en que vamos a capacitar al prsonal para que se obtenga la menor resistencia al cambio y mayor comprencion por parte de los usuarios.
  • Plan de instalacion: se debe determinar la forma en que se va a implementar el software, recordemos que las primeras experiencias son determinantes para ganar la confianza del usuario por lo cual debemos hacer una instalacion completa y minuciosa para tener los minimos errores y perder credibilidad.
  • Plan de recursos y estrategias: se debe determinar los recursos que se utilizaran en el desarrollo del software sabiendo que estos pueden ser de tipo hardware, software y recurso humano.
Es importante destacar que en el planeamiento de software y para tener exito debemos establecer un plan de continuidad del desarrollo de software, en donde tengamos una guia detallada para los casos mas frecuentes de emergencia.

El plan de continuidad de desarrollo de software nos invita a pensar en que hacer en caso de emergencia por ejemplo si un desarrollador se enferma, si se va la luz y no podemos seguir desarrollando, si hay problemas tecnicos, etc.

Cuando los clientes tienen una fecha de entrega especifica esto ya involucra un compromiso, lo cual significa que no importa la emergencia que tengamos nuestra honorabilidad y puntualidad esta en juego por lo cual es importante analizar todas las vulnerabilidades a las que estemos expuestos, identificar su riesgo y generar planes alternativos que garanticen la continuidad en lo breve posible para mitigar el impacto en nuestro negocio.

Los errores mas comunes al desarrollar software derivado de la planeacion son:
  • Mal analisis de requerimientos
  • Mala planeacion
  • No tener una negociacion con el cliente (documento, contrato).
  • No hacer un analisis Costo Beneficio
  • Desconocer el ambiente de trabajo de los usuarios.
  • Desconocer los usuarios que trabajan con el sistema.
  • Mala eleccion de recursos (humanos, software, hardware)

viernes, 4 de junio de 2010

AdWords y AdSense

AdWords
Es un modelo de negocio adoptado por Google para anuncios publicitarios, las busquedas en google son gratuitas el buscador es caracterizado por no colocar banners publicitarios en la pagina principal de busquedas ni el las paginas de resultados a diferencia de la mayoria de buscadores.

La forma de generar ganancias de Google esta basada en parte por los AdWords, que son anuncios publicitarios incluidos dentro de las busquedas, estos aparecen como anuncios patrocinados y se hubican en la parte superior de todos los resultados.

Pero esto no es todo, los AdWords son cobrados unicamente si el usuario hace click sobre el vinculo lo cual significa que cualquier empresa sobre cualquier producto sin importar el presupuesto que tengan para invertir en publicidad pueden optar a colocar sus anuncios como AdWords de Google y la empresa debera parar unicamente por la cantidad de usuarios que hagan click sobre su hipervinculo.

AdSense
AdSense es otro modelo de negocio adoptado por Google, este consiste en generar ganancias a cada pagina web particular en la cual el webmaster de esta pagina particular se suscribe a los AdSense y con ello incluye un codigo dentro de su pagina.

Con este codigo aparecen los anuncios AdWords de Google y por cada usuario que da click en el anuncio gana un porcentaje el propietario de la pagina web y el otro porcentaje Google sobre el pago que realiza la empresa que ha colocado el AdWord.

Los AdSense se pueden visualizar al inicio de las paginas web, en medio o abajo, su caracteristica es que son identificados como busquedas de google con resultados sobre ofertas de productos o servicios de clientes Google.
.

Documentacion

La documentacion de un proyecto de software es importante debido a que ayuda a explicar y a poner en disponibilidad de los interesados la informacion importante del proyecto como lo son los objetivos, alcances, limites entre otros.

Tambien la documentacion es importante para entender el proyecto y el negocio tanto para los desarrolladores como para los clientes, usuarios y stakeholders.
La documentacion esta dividida en 5 tipos principales:
  • Documentacion General
  • Documentacion Economica.
  • Documentacion Tecnica.
  • Documentacion de Usuario.
  • Documentacion Gerencial o Resumen ejecutivo.

Documentacion General:
Es la documentacion en donde se plasma el analisis y pre-analisis del proyecto, este documento contiene:
  • Informacion del Negocio
  • Informacion de la organizacion
  • Objetivos del proyecto
  • Limites del proyecto
  • Alcances del proyecto
  • Descripcion del problema
  • Areas involucradas
  • Propuestas claras de solucion
  • Recursos
  • Calendarizacion
Documentacion Economica:
En esta documentacion el objetivo es analizar y mostrar el beneficio que obtendremos del proyecto y el costo que tiene involucrado el proyecto, frecuentemente esta documentacion sirve para hacer un analisis financiero en donde esta involucrado
  • La calidad del producto
  • La cantidad
  • El timpo
  • El beneficio
  • El costo
Indudablemente son variables que toman importancia para las empresas y que de ellas depende si ganamos la cotizacion para desarrollar o otra empresa ofrece mejores vantajas que nosotros.

En este documento es importante destacar las ventajas competitivas de nuestro equipo de desarrollo debido a que este aspecto pudiera ser el factor determinante para ser contratados.

Documentacion Tecnica
En la documentacion tecnica es donde se detallan los aspectos de estructura de la solucion de software, documentacion que en un futuro sera util para entender cualquier problema del software, para planificar el mantenimiento o para incrementar la funcionalidad del mismo.

La documentacion tecnica debe ser detallada y explicada porque esta documentacion debe ser entendible por personal que inclusive no estubo involucrado en el analisis ni el diseño.

Imaginemos que el software se desarrollo hace 10 años y las personas que participaron en ese proyecto de desarrollo ya no se encuentran laborando para la empresa, en cambo ahora hay otras personas encargadas del software.  Es en este caso que los nuevos desarrolladores acuden a la documentacion tencica para entender la estructura del software.
Entre las caracteristicas de la documentacion tecnica tenemos:
  • Diseño de la base de datos
  • Diseño de las aplicaciones (form)
  • Diseño de la red
  • Documentacion de codigo
  • Diagramacion UML en general

Documentacion de Usuario
La documentacion de usuario debe ser lo mas detallada en cuanto a la forma de uso del software, aqui debemos destacar la funcionalidad para que el usuario final entienda la forma de operar del software y que se reduzca la resistencia a utilizar el mismo.
Entre la documentacion de usuario debemos incluir:
  • Objetivo del software
  • Forma de funcionamiento
  • Datos de entrada (validados)
  • Informacion de salida
  • Secluencia de ejecucion.
  • Preguntas frecuentes
  • Ayuda
Si fuera posible en este manual hay que colocar imagenes con los pasos remarcados (rojo) para que el usuario se guie mejor, podemos incorporar videos y sonido demostrativo para mejorar la experiencia del usuario.

Documentacion Gerencial o Recumen ejecutivo 
Esta es una documentacion compuesta de las documentaciones anteriores, debemos colocar un resumen del software principalmente resaltando las ventajas del mismo para que sea atractivo nuestro trabajo para la gerencia, debemos incluir imagenes, graficas y resumenes pequeños.

Este documento se debe elaborar con poco contenido pero muy concreto y debe ser escrito con lenguaje claro y sencillo, sin tecniquismos.

Ademas tenemos que tener la habilidad de plantear la idea del proyecto de forma atractiva, que cause interes y logre que los gerentes se inclinen hacia nuestro proyecto.

Una buena practica es elaborar el resumen ejecutivo y darselo a un amogo o familiar ajeno al proyecto para que lo lea detenidamente, despues, debemos pedirle que nos describa el proyecto y asi sabremos que hemos logrado transmitir con el documento. tambien preguntarle si esta claro, que podria mejorarse, si causamos impacto y provocamos interes por el proyecto.

Finalmente debemos trabajar exaustivamente en el resumen ejecutivo debido a que muchos gerentes es lo unico que leen de los proyectos y si no logramos convencerlos con nuestro trabajo entonces sera un proyecto perdido.

martes, 1 de junio de 2010

Negociación y contratos

Contrataciones
Las contrataciones se llevan a cabo cando se ha negociado un bien o un servicio entre dos partes interesadas, las contrataciones deben ser de mutuo acuerdo las cuales deben ser reflejadas y formalizadas en un documento legal hecho por un profesional del derecho (notario). Para el area de informatica las contrataciones pueden ser:
  • Contratacion de Hardware
  • Contratacion de Software
  • Contratacion de Servicios
  • Contratacion de datos.
  • Contratacion Especial
Recordemos que el software se considera legalmente como una obra informatica, tanto las bases de datos como las aplicaciones propiamente las cuales estan protegidas por los derechos de autor.

Las contrataciones de software directamente se dividen en dos segmentos primordiales, el primero la contratacion de un software y el segundo la contratacion de desarrollo de un software a la medida.

En el primer caso, la contratacion de un software existente. Se elabora un documento legal el cual se firma por ambas partes en donde se pactan las condiciones de uso.

En el segundo caso, se elabora un documento legal el cual pacta las condiciones bajo las cuales el desarrollador se compromete a generar el software pero tambien ese mismo documento debe tener las condiciones en las cuales el cliente colabora y acepta el desarrollo del software.

En los contratos siempre existen clausulas de excepcion, por ejemplo si el proyecto no puede seguir adelante existe la manera de abortarlo, en ocaciones con sanciones economicas para el responsable.

Tambien en los contratos se pactan: 
  • Los tiempos
  • Los costos
  • El alcances
  • Los limites
  • Las caracteristicas tecnicas
  • El soporte
  • La garantia 
  • La forma de pago de la aplicacion.
Existen diferentes niveles de detalle en los contratos, esto principalmente depende de las partes interesadas quienes van pidiendo las clausulas del contrato, entre los contratos en frecuente encontrar restricciones de velocidad de respuesta del software, la seguridad del software, la aprobacion de pruebas funcionales y temas de confidencialidad.

Presupuestos
Los presupuestos son ofertas elaboradas por el desarrollador para el posible cliente en donde se detalla y se describe el software que se planea desarrollar conjunto con un costo monetario asociado y un tiempo de desarrollo establecido.

Los presupuestos son elaborados y entregados sin costo ni compromiso alguno, aunque el aspecto del costo puede depender de la empresa desarrolladora y de las condiciones que imponga al inicio, estos presupuestos son negociables entre el cliente y el desarrollador para llegar a un acuerdo de mutua conveniencia y conformidad.

Al momento de aprobar el presupuesto, se elabora el contrato por un notario el cual debe estar firmado por ambas partes, en el contrato deberan estar explisitas las sanciones por incumplimiento del mismo y deben detallarse las responsabilidades tanto del cliente como del desarrollador por ejemplo el hecho que el cliente entregue a tiempo los datos de muestra, acceso al lugar de trabajo para hacer una inspeccion, entre otras.

Negociaciones
La negociacion es un acto en donde se pretende alinear intereses, de tal manera que todos los participantes salgan satisfechos con un grado razonable para ellos mismos ge aceptacion.
Cuando hay intereses encontrados es que se requiere la habilidad de nogociacion y principalmente se trata de solucionar conflictos sin ganar enemigos.
Existen dos tipos de negociaciones:
Gana-Pierde: esta negociacion es la que una parte negociadora A gana siempre que la parte negociadora B pierda. Este es el ejemplo del comprador de autos A que va a salir ganando en la compra de un automovil a costa de que el vendedor B deje de ganar mas dinero por la venta del auto, es decir, que el negociante B pierda.
Gana-Gana: esta negociacion es donde la parte negociadora A gana pero conjuntamente la parte negociadora B gana tambien, por ejemplo en una empresa A con sus empleados B, aqui el empleado gana por oras extras de trabajo y la empresa gana subiendo la productividad debido al tiempo extra que el trabajador esta aportando.
Los objetivos de las negociaciones son:
  • Maximizar mi beneficio sin perjudicar a la parte contraria
  • Mantener las buenas relaciones
  • Convencer a la otra parte de que se ha logrado un buen acuerdo.
Las negiciaciones deben hacerse lo mas tranquilos posible porque de esta manera surge la imaginacion para mejores soluciones. Recordemos el caso del vendedor de autos, en esta negociacion Gana-Pierde la podemos transformar en una relacion Gana-Gana en donde el vendedor de autos nos baje el precio de nuestro auto a costa de que nosotros le presentemos a los vecinos y compañeros para que el ofrezca sus automoviles.
Las negociaciones tienen limites, los cuales estan determinados por cada parte negociadora de acuerdo a sus posibilidades y perspectivas. por ejemplo el vendedor de autos sabe que no puede bajar del precio que el pago por el auto porque en ese caso incluso piede de su dinero y el comprador sabe que no puede pagar mas de lo que el auto vale en el mercado. a esa diferencia de cantidades se le llama Zona Negociadora.
Intereses ocultos:
En una negociacion siempre existen intereses ocultos los cuales ambas partes guardan para ellas, por ejemplo en un negociador representante de alguna empresa le interesa obtener una buena reputacion dentro de la empresa, cosa que lograra con el exito de las negociaciones.


TIPS:
  • La forma mas segura de perder es dejarle ver a la parte contraria nuestro limite.
  • La situacion de no_acuerdo pone en una pocicion de fuerte al negociador, convirtiendo en debil al negociador opuesto y obligandolo a ser mas flexible.
  • Identificar lo maximo posible los limites, situaciones de no_acuerdo e intereses ocultos del negociador contrario.
  • Buscar una relacion Gana_Gana y que no represente mayor costo para nosotros.
  • Procurar estar solos en la negociacion, para que sea mas abierta.
  • Hacer ver al adversario que es el quien tiene que llegar a un acuerdo.
  • Si estamos por comprar iniciar la relacion no mostrando mucho interes, y si estamos vendiendo y nos atacan no mostrando mucho interes comentar "no me gustaria hacer negocios con alguien que no este interesado".
  • No cerrar una negociacion si no hay conformidad global.
  • Lanzar la primer oferta de primero siempre y cuando estemos informados,  esto pondra en pocicion de discucion al adversario y no a nosotros.
  • Ser duros con la empresa contraria pero amables con la persona que la representa.
  • Primer oferta debe estar lejos de lo que el oponente espera, asi lo despistamos de nuestros limites de negociacion y al mismo tiempo dejarle ver que es flexible.
  • Es conveniente quejarse de la dureza del adversario, pueda que se lo crea y termine por suavizar su postura.
  • NO HACER ATAQUES PERSONALES, en vez de decir "no me fio de ti" decir "no me fio de tu compañia".
  • NO PERDER EL OBJETIVO DE LO QUE SE ESTA NEGOCIANDO.
  • NO ENFRENTARSE FRONTALMENTE, no es conveniente decir "esto no lo acepto de ninguna manera" es mejor decir "no es conveniente hacerlo de esta forma para mi, discutamolo"
TRUCOS:
  • Involucrar a un tercero, por ejemplo la dreccion, diciendo "mi direccion no ha aprobado el precio tan alto" y si somos atacados con esta situacion podemos decir "permiteme explicar a tu direccion las ventajas" de seguro terminan por aceptar debido a que la direccion anda de viaje.
  • Imponer una condicion final ya cuando se ha aceptado la negociacion, por ejemplo decir "bueno y los intereses son pagados anticipados".
  • Poner condiciones para aceptar tambien resulta beneficioso, por ejemplo "no nos conviene este negocio, sin embargo si el envio corre por su cuenta entonces compramos el producto".


Recomendaciones:
  • Crear una relacion flexible: mecanismos para discutir, implementar y resolver disputas.
  • Utilice los conceptos dentro del contrato: no hay nada de malo en referirse al contrato para verificar un desacuerdo.
  • Documentar las deciciones de inmediato: automaticamente se crea una guia para futuras soluciones de conflictos.
  • Resolver los conflictos a como aparecen: se debe volver a las negociaciones.
  • Practique la equidad y la buena fe: el contrato debe ser de mutuo acuerdo y de mutua aceptacion.
Precauciones:
  • Estimacion de costos, saber diferenciar entre el precio del producto o servicio y su costo porque la diferencia es nuestra ganancia.
  • Ser flexibles, las soluciones tienen diferentes escenarios y diferentes plazos por lo cual es recomendable fijar los plasos en rangos no es fechas exactas.
  • Contar con un alcance descriptivo y alineado, tanto el que hace la solucion como el que la espera deben tener el mismo objetivo.
  • Dejar claras las restricciones y descripciones de la solucion.
  • Considerar la colaboracion del cliente, que este involucrado en el desarrollo.