sábado, 19 de julio de 2014

Por fin vacaciones

En fin, todo lo bueno se acaba. Ha sido un gusto conocerlos y trabajar con todos ustedes. Al menos yo lo pasé muy bien en el curso y espero que lo que aprendieron les sirva y le saquen provecho

Las notas finales del PAE-IAE las pueden ver aquí

Las notas de Isicg las pueden ver aquí

Si hay algún error tienen hasta el lunes 21 a las 24 hrs, me avisan a mi correo tombrad2@gmail.com yo compruebo el error y si corresponde lo arreglo. No hay subida de décimas ni nada por el estilo, solo errores de tipeo.

Muchas gracias y mucha suerte!



miércoles, 26 de marzo de 2014

1.- ÁREAS FUNCIONALES Y SUS SISTEMAS



Las empresas se desarrollan alrededor de cuatro áreas funcionales, estas áreas reciben distintos nombres según cada autor, aquí usaremos los nombres que yo considero más claros y descriptivos:

Producción
Toda empresa comercial vende un producto o servicio, y el área de producción es la que se ocupa de fabricarlo. Cuando se trata de productos físicos el área de producción es fácil de identificar, por ejemplo los procesos de producción de pan; de planchas de acero; confecciones, etc. en estos casos la producción consiste en la transformación de diversos recursos físicos (a veces llamados materias primas o insumos) en un producto terminado. Estas empresas también se conocen a veces con el nombre de "empresa productiva" y usan distintos sistemas para ayudar a la gestión y el control de sus procesos, por ejemplo:

Sistemas logísticos, que controlan y gestionan el almacenamiento y transporte de insumos y productos.
Sistemas de control de calidad
Sistemas de apoyo a la manufactura, por ejemplo en las máquinas computarizadas

Las empresas que no manufacturan productos sino que comercializan o venden servicios, por ejemplo una tienda de venta de ropa o de asesorías también producen -a su manera- porque los servicios son productos, tienen costos de intermediación y manejo, logística, es decir también tienen operaciones que se podrían considerar como productivas.

Ventas
Las ventas son el motor que mantiene circulando la sangre de la empresa, que es el flujo de caja. El flujo de caja es el beneficio o pérdida que queda cada período después de descontar todos los gastos. Algunos ejemplos de sistemas de apoyo a las ventas son:

Programas de gestión de clientes como los CMR
Sistemas de apoyo a la promoción y marketing como la presencia en redes sociales o web institucionales.

Personal
Los sistemas dedicados al manejo de personal se centran principalmente en
Remuneraciones

En empresas públicas también se usan
Sistemas de encasillamiento funcionario
Sistemas de apoyo al proceso de calificaciones
Carpetas electrónicas de antecedentes, etc. 
Últimamente se han usado de manera creciente con sistemas de capacitación al personal.

Contabilidad y Finanzas
La contabilidad es el control por excelencia, toma fotografías del estado financiero de la empresa que -bien interpretadas- pueden dar una imagen del estado de salud financiero. Esto se logra comparando dos períodos y usando indicadores como los de liquidez, deuda, test ácido, etc. Como tiene mucho que ver con el almacenamiento e interpretación de los números los sistemas contables computarizados son imprescindibles para tener el control y recibir las alarmas a tiempo.

Generalmente las empresas llevan dos tipos de contabilidad, una operativa para la toma de decisiones y otra tributaria para minimizar el pago de impuestos. Ejemplos de sistemas contables, también conocidos como estados financieros, son los de :
Cuentas corrientes
Balance contable
Balance tributario

Mientras que la contabilidad es estática, las finanzas son dinámicas: miran hacia el futuro, proyectan y tratan de predecir buscando señales que la contabilidad no puede dar, la contabilidad es aritmética y las finanzas son estratégicas, existen muchos sistemas para apoyar la toma de decisiones financieras a futuro como

Los que tratan de predecir precios futuros
Los de evaluación de proyectos 
Los que determinan el rendimiento del capital invertido.

Contabilidad y finanzas van de la mano porque las finanzas usan como insumo los datos generados por la contabilidad.

Existen sistemas que son transversales y cruzan dos o más de las áreas operacionales, por ejemplo:

Los sistemas de punto de venta (pos): son los que vemos en las cajas de supermercados o grandes tiendas, donde la caja registradora está conectada con otros sistemas de manera que al registrar una venta se descarga simultáneamente el inventario (área producción o logística), se acumulan las ventas del día (área contabilidad), se registran los datos del cliente en el sistema de CRM (área de ventas).

De estos sistemas multi área el más conocido y usado es el SAP que se implementa con módulos y puede integrar todos los procesos computacionales de una empresa, lo cual tiene ventajas y desventajas.

Recursos y lecturas recomendadas
  1. Software SICO, especificaciones
  2. Importancia de la tecnología computacional en las organizaciones empresariales para la toma de decisiones
  3. Sistema de información computacional

martes, 25 de marzo de 2014

2.- LENGUAJES DE COMPUTACIÓN


Tal como no existe un idioma mejor que otro, no se puede hablar que un determinado lenguaje de computación es "superior" o "más potente". La programación y en particular los lenguajes siempre enfrentan disyuntivas, cuando se gana en algún aspecto se pierde en otro y todo lenguaje en su etapa de diseño enfrenta estos compromisos por lo que se puede decir que para cierta clase de aplicaciones unos lenguajes son mejores, mientras que para otras son peores.

Durante muchos años se enseñó en las universidades con fanatismo y miopía que algunos lenguajes y particularmente algunas filosofías de diseño -especialmente la programación orientada a objetos- era absolutamente superior a otras, el tiempo se ha encargado de quitar credibilidad a estas pretensiones.

Todos los lenguajes de computación que existen son una interfaz entre nuestras ideas y el set de instrucciones de la CPU, algo más o menos así:
Finalmente cualquier lenguaje que usemos terminará convertido en una serie del set de instrucciones de la CPU en código binario, que es lo único que puede ejecutar el computador, los lenguajes son solo una manera de facilitarnos el uso del set de instrucciones de la CPU, algunos nos facilitan más otros menos ¿de que depende? como veremos más adelante, depende de la aplicación que estemos programando

Dos grandes familias de lenguajes

Esto no es muy riguroso, pero nos permite entender algunas cosas. Hay dos grandes "familias" de lenguajes, la más antigua son los que descienden del Fortran y la otra son los lenguajes que descienden del Pascal.

Los lenguajes que descienden del Fortran (en su filosofía, no necesariamente en su estructura) son Basic, Visual Basic, Phyton, Ruby on Rails, C# entre otros. Se caracterizan por ser lenguajes "desordenados", menos formales, poco estrictos, muy fáciles de aprender y que dan gran libertad al programador. Por lo mismo son ideales para programar sistemas pequeños o prototipos pero resultan una pesadilla si se quiere programar algo muy complejo, como un sistema operativo o un procesador de textos por ejemplo.

Pascal nació como una reacción al desorden y la informalidad de la familia de Fortran, fue creado por uno de los primeros profesores de computación Niklaus Wirth partiendo de la base que la programación debía ser más formal, restrictiva y estructurada. A partir del Pascal fueron surgiendo los conceptos de la Programación Orientada a Objetos, y los lenguajes que implementan esta teoría como C++ y Java.

Lenguajes compilados e interpretados

Los lenguajes de programación compilados producen archivos con extensión exe o com que se pueden ejecutar directamente, claro que a medida que las aplicaciones se van haciendo complejas necesitan de archivos de apoyo como las bibliotecas de enlace dinámico (extensión dll) y otras. Un programas simple puede consistir en un solo archivo exe o com, mientras que apicaciones complejas como Word o Excel requieren de cientos de dlls y archivos de apoyo. Ejemplo de lenguajes compilados son C++, Visual Basic

Los lenguajes de programación interpretados en cambio necesitan de otro programa llamado "intérprete" que va ejecutando una a una las instrucciones a medida que las va necesitando. Ejemplos de lenguajes interretados son Visual Basic Para Aplicaciones (donde los intérpretes son el Word, Excel, etc.), Python, Ruby on Rails, entre otros.

Java es un lenguje híbrido, parcialmente compilado y en parte interpretado.

Los lenguajes usados en Internet como JavaScript (nada que ver con Java) son interpretados por el explorador de Internet (por ejemplo el Iexplorer, Firefox o Chrome), otros lenguajes de Internet son interpretados por el programa de servidor, por ejemplo PHP es interpretado por los servidores Apache.

En resumen
Podemos establecer algunas ideas simples para guiarnos:

Para los programas simples, hechos por un solo programador como por ejemplo un programa de cuentas corrientes, inventario o contabilidad de una pequeña empresa, son mejores los lenguajes de la familia del Basic como Visual Basic y Visual Basic Para Aplicaciones.

Para los programas complicados o grandes (Sistemas de Información) donde deben trabajar desde decenas a miles de programadores simultáneamente en distintos equipos de trabajo, solo se pueden hacer con lenguajes de la familia de Pascal, principalmente C++ y Java 

Ejemplos de código

Basic
 Python
Java

lunes, 24 de marzo de 2014

3.- MICRO APLICACIONES PARA PEQUEÑOS NEGOCIOS



Los negocios pequeños y medianos se encuentran en un estado de transición entre una situación de:
  • Bajas ventas y costos
  • Altos márgenes
  • Poco o ningún control
Y el crecimiento les comienza a obligar a pasar a la siguiente etapa, donde
  • Los ventas y costos son más altos
  • Los márgenes menores
  • El control debe aumentar
Esa transición es el problema fundamental del crecimiento en la pequeña empresa: lograr vender más pese a los costos mayores, los márgenes más bajos y la pérdida de eficiencia que implican los sistemas de control. Por lo general los controles perjudican la eficiencia, la flexibilidad de operación, la capacidad de respuesta rápida y de adaptación. Control y eficiencia son dos fuerzas contrapuestas en tensión, mucho control sube los costos y agrega lastre a la empresa porque el control no es productivo en si, sino más bien preventivo.

Por otra parte un control insuficiente puede hacer quebrar a la empresa. ¿Por que se controla? básicamente para evitar el robo, para monitorear la situación real de la empresa y poder tomar buenas decisiones, por ejemplo para comprar mejor, mantener inventarios más bajos, conocer el flujo de caja y la situación del inventario, controlar las cuentas por cobrar (cobranza de créditos otorgados) y las cuentas por pagar (pago de los créditos adquiridos), estas son algunas de las principales propósitos del control.

Antes de decidir implementar un sistema de control se deben ordenar los problemas en escala de importancia, un control total es imposible así es que siempre queda un margen donde es más conveniente aceptar cierta pérdida que controlarla. Solo se deben controlar los problemas relevantes y que realmente destruyen valor a la empresa, muchas veces el dueño de una empresa pequeña puede estar muy preocupado por el robo de mercaderías, cuando en realidad las mayores pérdidas pueden venir de comprar mal y mantener inventarios excesivos.

El problema del inventario

El inventario es un lastre en toda empresa porque no crea valor mientras está almacenado, el ideal teórico es trabajar con inventarios cercanos a cero como lo hacen muchas tiendas online de ventas por correo y esa es la razón de su gran éxito de ventas. Pero todos conocemos la frustración de ir a comprar a un lugar y ver que no tienen lo que buscamos. Existe entonces una tensión entre tener inventarios mínimos para maximizar nuestro uso del capital y tener inventarios máximos para tener de todo y no perder ventas ni clientes.

Otro problema de inventario es al hacer las compras de reposición, cuando se repone mercadería deben reponerse en mayor cantidad los artículos de alta rotación y menos los de rotación baja, esto solo se puede saber con un informe del tiempo medio que pasan los productos almacenados antes que se vendan.

También debemos tener el dato de cuanto dinero representa el inventario, cuanto nos ha costado y cuanto podríamos obtener si lo vendemos completo bajo ciertas condiciones, lo que nos da una idea de la solvencia de la empresa. El control de los robos (mermas) es una gran preocupación para algunos dueños de empresa, pese a que normalmente tienen un efecto limitado en el desempeño.

El problema del flujo de caja

El flujo de caja consiste en controlar, a lo menos mensualmente el total de las ventas, el costo de las ventas, los gastos fijos, los gastos variables, el inventario valorizado, las cuentas por cobrar y las cuentas por pagar. Las ventas se controlan fácilmente por los registros de caja, el costo de las ventas solo se puede controlar si se está usando un sistema de punto de venta (POS) que rebaje el inventario al mismo momento de hacer las ventas, los demás costos fijos y variables son normalmente fáciles de determinar, no así el inventario valorizado, para esto también es necesario tener instalado un sistema de POS. Las cuentas por pagar se obtienen de la cartola bancaria o cuenta corriente proveedores, las cuentas por cobrar de la cuenta corriente deudores o ventas a crédito. El resultado final del sistema de flujo de caja es el saldo de caja, que indica cual es el beneficio o la pérdida neta del mes.

sábado, 22 de marzo de 2014

4.- MVC, DISEÑO EN CASCADA Y PROTOTIPOS



El esquema MVC o Modelo-Vista-Controlador se usa para separar el diseño de un sistema en tres partes. Lo explicaré en palabras muy sencillas que, aunque puedan no ser correctas técnicamente, ayudarán a entender que es y para que sirve.

El Modelo es la forma en que se almacenan los datos, es decir tiene que ver con el diseño de la estructura de almacenamiento, los campos de las tablas y bases de datos con sus especificaciones, el método para tener acceso (recuperar) un dato determinado, las transacciones, etc.

Las Vistas son las pantallas e informes que recibe el cliente que está usando el sistema, representa al modelo en una interfaz de usuario que puede ser fácilmente entendible para el cliente.

El Controlador es el que recibe las peticiones que ingresa el cliente y hace peticiones al modelo, es un intermediario o interfaz entre el cliente y el modelo.

Visual Basic, que fue uno de los primeros lenguajes visuales que se desarrollaron, hace esta distinción desde el principio y cualquier sistema que se diseñe consta al menos de dos partes: la primera es diseñar las pantallas de entrada de datos y los informes (las Vistas), la segunda parte es escribir los códigos para recuperar datos, modificarlos y hacer las transacciones (el Controlador). Si se trabaja con bases de datos, el diseño de estas es parte del Modelo.

En lenguajes más recientes (Ruby on Rails por ejemplo), las vistas se hacen en formato de páginas web usando el código HTML, otros lenguajes tienen sus propias herramientas gráficas para crear las interfaces de usuario.

Diseño en cascada y por prototipos
Existen dos metodologías que son las más usadas en la ingeniería de sistemas para el diseño: el diseño en cascada es el más antiguo, se usa mucho para los grandes sistemas muy complejos porque sigue un orden lógico riguroso, tiene las siguientes etapas que se ejecutan una tras otra de manera rígida:
  • Análisis de los Requisitos
  • Diseño del sistema
  • Diseño del programa
  • Codificación
  • Pruebas
  • Implementación
  • Mantenimiento
Su gran inconveniente es la rigidez, que si en una etapa se comete un error o una mala estimación, esta se arrastra y se amplifica lo que puede producir resultados desastrosos.

Diseño por prototipos
El diseño por prototipos parte centrado en los clientes y no es secuencial como el de cascadas sino cíclico. Se conversa con los clientes para determinar que es lo que necesita cada uno y se construye un prototipo, es decir un programa que tiene todas las entradas y muestra todos los informes que necesita, este prototipo normalmente no es funcional sino que sirve solo para que el usuario lo revise y lo ponga a prueba. Luego el prototipo se va refinando de acuerdo a los requerimientos del usuario y finalmente se ensamblan todos los prototipos creados o se codifica el diseño desde cero partiendo por lo aprendido con los prototipos. LAs etapas de esta metodología son:
  • Plan rápido
  • Modelado, diseño rápido
  • Desarrollo del prototipo, prueba de usuario y realimentación
  • Integración de los prototipos
  • Desarrollo definitivo
El inconveniente en este caso es que como se trata de un diseño basado en prueba y error, el código tienede a resultar parchado y poco limpio, es mucho más difícil desarrollar una documentación con especificaciones claras y completas, hay cosas que se pueden pasar por alto porque el desarrollo es menos sistemático.

viernes, 21 de marzo de 2014

5.- UN MODELO PARA PEQUEÑOS NEGOCIOS


Uno de los problemas más comunes que enfrenta  un pequeño negocio al usar computadores es dar con un diseño adecuado, que justifique la inversión en equipos y programas. A continuación va un modelo diseñado para una tienda comercial.

Los Productos del Sistema
¿Que le interesa saber al dueño de un pequeño negocio? hay dos datos fundamentales que todo sistema debería entregar:
Si ganó o perdió dinero en el mes
Cuanto fue esa ganancia o pérdida
Esta información que parece tan obvia es desconocida para la mayoría de las empresas. En los casi veinte años que llevo trabajando con negocios pequeños solo he conocido una empresa que ha logrado tener un estado de situación mensual claro con sistemas computacionales

Así el sistema debe entregar como mínimo la siguiente información mes a mes:
  • Ventas del mes
  • Compras del mes
  • Costo de las ventas
  • Gastos del mes
  • Impuestos
  • Utilidad del mes
  • Valor del inventario
Este informe mensual es el resumen ejecutivo que debe ser entregado por el sistema. Es el producto fundamental y de el pueden obtenerse subproductos como:
  • Items de mayor y menor venta
  • Items bajo el nivel de reposición
  • Items de mayor y menor utilidad etc.
Sin embargo es importante distinguir lo fundamental de lo accesorio, todos estos subproductos son de interés secundario pues la prioridad es lograr la entrega mensual del resumen ejecutivo.

No debe caerse en el error común de desviar los esfuerzos del objetivo principal tratando desde el principio de obtener una multitud de productos, esta es una de las causas más comunes de fracaso al implementar sistemas de información en negocios pequeños.

La Necesidad del Punto de Ventas
El resumen ejecutivo es muy difícicl de obtener en el caso de una tienda si no existe un sistema de punto de ventas, es decir, que el inventario se rebaje directamente en la caja en el mismo momento en que se hace la compra.
 Implementar un punto de ventas tiene dos dificultades principales: accesar con rapidez el artículo que se está rebajando y la necesidad de usar un programa multiusuario en el caso de que exista más de una caja

El primer problema se soluciona comunmente con el uso de códigos de barra.  Pueden usarse los códigos que ya vienen impresos en la mayoría de los artículos o podrían usarse códigos propios, etiquetando cada artíclo en venta.

De más está decir que la primera opción es preferible, aunque no es siempre factible ya que se podría estar trabajando con artículos que no traen códigos de barra (por ejemplo hortalizas, frutas, etc.). La solución que normalmente se escoge es mixta: se leen los artículos que ya vienen con código de barra y los que no tienen se ubican ingresando parte del nombre por el teclado (por ejemplo la operadora coloca "lapiz" y aparece en pantalla la lista con todos los lápices para que escoja cual es el que hay que rebajar, o bien se etiquetan.

Cuando existe más de una caja se usa a veces una red de área local para poder rebajar el mismo inventario desde distintos puntos, en los sistemas pequeños esta solución da algunos problemas especialmente por lo vulnerables que resultan las LAN ante cortes de energía.

Una alternativa económica y bastante segura es que solo una caja  descarge al inventario en línea y la(s) otra(s)  cree(n) un archivo temporal de descarga. La descarga real se haría por lotes al fin del día de una sola vez. Una vez descargado el inventario maestro se copiaría a la(s) caja(s) secundaria. Este sistema es robusto, económico y fácil de implementar y permite generar el resumen ejecutivo a fin de mes sin mayor problema

Para traspasar los archivos de descarga por lotes puede usarse una red sencilla de area local, un modem nulo de puerta serie e incluso diskettes o Internet (via ftp) en caso que se descarguen locales remotos

El programa de inventario deberá además entregar un cuadre diario de caja e incluir una opción para ingresar las compras con las respectivas cantidades y costos. De este programa se obtienen las ventas del mes, las compras del mes, el costo de las ventas y el valor del inventario

Control de los Gastos
Junto con el programa de punto de ventas que solucionará la rebaja del inventario y permitirá generar los datos de ventas del mes, compras del mes y costo de las ventas, debe funcionar un programa sencillo de cuenta corriente con cuentas, saldos y cartolas.

Las cuentas en este caso no tienen por que corresponder a la contabilidad legal del negocio, sino mas bien a una contabilidad operativa, desglosada según lo que al empresario le interese controlar. Por ejemplo es probable que quiera tener clara la evolución de los gastos fijos versus los variables, los retiros personales de caja, la caja chica, etc.

Así el saldo total de esta cuenta corriente, que será puesto en cero a principios de cada mes debe corresponder al item "Gastos del Mes" del informe ejecutivo.

Esta misma cuenta puede llevar además otros controles útiles para el empresario como por ejemplo las libretas de bancos (control de las chequeras), los retiros personales, etc. Lo usual es que este control se lleve en un PC aparte del inventario y lo opere la secretaria administrativa que lleva las chequeras, recibe la caja, etc.

Con los ingresos de este programa se obtienen los gastos del mes y los impuestos, en caso que estos no correspondan exactamente a un porcentaje de las ventas

Cierre del Mes
Al finalizar el mes  se debe hacer un proceso de cierre que emita el informe, guarde los resultados en un archivo histórico y limpie los saldos. Los datos de las cajas (cuadre de caja diaria) se transfieren diariamente al computador de la secretaria administrativa donde se van acumulando en las respectivas cuentas del informe ejecutivo.
En el archivo historico deben ir quedando registrados los resultados de los informes ejecutivos mes a mes de modo de obtener informes semestrales o bien anuales

Archivos Necesarios
Se recomienda usar una organización de archivos lo más simple posible. Para inventarios inferiores a los 8000 artículos no hay problemas en usar archivos ASCII planos y búsquedas secuenciales, basta con mantener en memoria un índice de correspondencias entre la ubicación física del registro y su código lógico), para archivos con menos de 3000 registros en índice es casi innecesario. Asi los archivos que se necesitan para un sistema que genere el resumen ejecutivo son:

  • Un archivo maestro de mercaderías, con la descripción, código, costo, cantidad, etc.
  • Un archivo de ventas que registre ventas del dia, compras del día y costo de las ventas (es decir los datos que se imprimen para el cuadre de caja diario)
  •  Opcionalmente se podria llevar un archivo que registre cada una de las ventas del día, aunque este archivo tiene tendencia a crecer bastante y rara vez se usa (excepto si se desea llevar una cartola por cada artículo)
  • Un archivo de saldos de cuenta corriente
  • Un archivo de cartolas que registre cada uno de los movimientos de la cuenta corriente
  • Un archivo que resuma los gastos de cada dia

Así vemos como se puede implementar un sistema bastante sencillo que dejará contento a cualquier empresario que sepa bien lo que le conviene.
Una de las tareas más difíciles de quien diseña un sistema es sacar de la cabeza del empresario las ideas fantasticas de "controlarlo todo" por medio de su computador.

El control en si no es tarea del computador ni de los programas sino que de los auditores y los unicos controles efectivos consisten en contar físicamente el inventario y revisar a mano la documentación.

El computador es principalmente una herramienta de información y de gestión, como herramienta de control es menos eficiente y poco confiable

Organización General del Sistema

Extensión del Sistema
Este modelo, por su simplicidad puede ser extendido a varias tiendas pequeñas apartadas geográficamente. Como las actualizaciones se hacen por lotes es sencillo enviar los archivos de un lugar a otro usando Internet. La actualización por lotes, a la manera antigua hace que la operación sea muy robusta y prácticamente a prueba de fallas

jueves, 20 de marzo de 2014

6.- VISUAL BASIC PARA APLICACIONES 1



Si están leyendo esta lección deben inscribirse y comenzar a seguir el curso Visual Basic para Oficinas en este mismo momento, no pueden seguir sin hacer ese curso online que es un requisito.

Visual Basic Para Aplicaciones (VBA) es un subconjunto muy completo del lenguaje Visual Basic que es prácticamente el estandar para programar aplicaciones comerciales de pequeños y medianos negocios. Practicamente todo lo que se puede hacer en Visual Basic se puede hacer también en VBA.

VB es compilado VBA interpretado
La diferencia es que Visual Basic es un lenguaje compilado, es decir genera un paquete con una serie de bibliotecas dll y un archivo ejecutable con extensión exe, cada vez que se desea instalar un programa hecho en Visual Basic en un equipo se debe ejecutar un instalador que descomprime los paquetes de software necesarios. Esto dificulta portar el programa de un computador a otro.

VBA en cambio es un lenguaje interpretado, su intérprete es el Office y cualquier computador que pueda abrir un documento de Office podra ejecutar el programa que lleve incrustado (los prograas se incrustan dentro de un documento de Word, una planilla Excel, etc.). Así un programa hecho en VBA es completamente portable en cualquier equipo que pueda abrir el documento que lo contiene.

Por ejemplo se puede incrustar un software de control de inventario dentro de una hoja de cálculo Exel, ese software funcionará en cualquier computador que tenga instalado el Office sin necesidad de instalar nada adicional. Esto se puede ver en la Clase 1: Para que podemos usar el VBA, del curso online.

Incrustar un programa en un documento del Office puede ser peligroso. Por ejemplo alguien maliciosamente podría -con solo un par de líneas de programa- hacer que cuando se abre un documento del word se formatee el disco duro del computador, o se corrompa su sistema de archivos. Por eso el Office tiene un sistema de seguridad que identifica cuando un documento tiene incrustado un programa y puede reaccionar de tres maneras distintas:

1.-Seguridad Alta, no ejecuta ningún programa incrustado o solo los que tienen firma digital incorporada
2.-Seguridad media: avisa que el documento tiene un software y que puede ser dañino, permite que el usuario decida si lo ejecuta o no
3.-Seguridad baja (no recomendado) permite que cualquier software se ejecute sin preguntar nada

En la Clase 2: Cambiando la seguridad de macros se muestra como cambiar el nivel de seguridad. En nuestro caso colocaremos la seguridad en nivel medio. Si están usando Office 2013, en lugar de cambiarlo como se muestra en la clase se cambia usando las siguientes opciones:
File-Options-Trust Center-Trust Center Settings-Disable all macros with notification (check)-Trust Acess to VBA Object Model (check). Normalmente Disable all macros with notification ya viene colocado.

miércoles, 19 de marzo de 2014

VBA PRÁCTICO: INVENTARIOS Y CUENTAS CORRIENTES



En estos videos aparece un repaso de la clase de esquemas en archivo de texto plano: Agenda, Inventario y Cuenta Corriente (clase 2), que será parte de un futuro curso online de VBA. Solo lo pongo como referencia, no es necesario comentarlo.Los comentarios a esta entrada no llevan nota. Otros videos del curso, por si le interesa a alguien:

Canal del curso (lleva 8 lecciones y un trailer)

martes, 18 de marzo de 2014

7.- CODIFICANDO VBA 1


Así como usamos lenguajes naturales para comunicarnos entre personas, los lenguajes de programación sirven para que nos comuniquemos con el computador, es decir para darle instrucciones. Un lenguaje de programación es similar a un lenguaje natural en que tiene un vocabulario de palabras (instrucciones), reglas gramaticales (sintaxis) y con eso podemos formar frases (líneas de código), la diferencia es que los lenguajes de programación son más restrictivos y estrictos: el error en un espacio, una coma o una letra hacen imposible que el computador entienda la instrucción.

Las líneas de código o "expresiones" están formadas por instrucciones colocadas según ciertas reglas. Las instrucciones son un conjunto de "palabras reservadas" que el computador las identifica y junto con las variables y datos instruyen al computador sobre lo que debe hacer. Las expresiones con que trabajaremos al principio serán If - Then - End If (expresión condicional) y For - To - Next (expresión de ciclo o loop).

If - Then - End If, la expresión condicional, su formato es:

If (condición) then
       (instrucción 1)
       (instrucción 2)
        etc.
End If
(instrucción siguiente)

Significa "Si la (condición) se cumple, entonces haga las siguientes instrucciones en orden: (instrucción 1), (instrucción 2), (instrucción 3), etc.. Si la (condición) no se cumple, entonces salte a la (instrucción siguiente)"

Las condiciones más usadas son: igual que, distinto de, mayor que, menor que (y combinaciones de estas), por ejemplo

A=B valor de A igual al valor de B
A<>B valor de A distinto del valor de B
A>B valor de A mayor que valor de B
A<B valor de A menor que valor de B

For - To -Next, el loop o ciclo, usa una variable que va incementando (o disminuyendo) su valor y repite las instrucciones secuencialmente, por ejemplo

 For i=1 to 100
        (instrucción 1)
        (instrucción 2)
        (instrucción 3)
        etc.
next i
(instrucción siguiente)

Esto repite 100 veces las instrucciones (instrucción 1), (ianstrucción 2), (instrucción 3), etc. generando en cada pasada una variable que tendrá valor 1, 2, 3, 4... etc.

Variables
Las instrucciones necesitan trabajar con datos y valores, estos se almacenan en variables. Una variable es un objeto que tiene un nombre y un valor, podemos pensar en ellas como un cajón donde guardamos algo, podemos almacenar o sacar cosas de allí.

Nombres de variable
Por ejemplo podemos definir una variable llamada "NombreCliente" donde almacenamos los nombres de nuestros clientes o la variable "PrecioVenta" donde almacenamos el precio de venta. Podemos poner el nombre que queramos pero con ciertas restricciones: un nombre de variable nopuede empezar con un número, no puede contener espacios ni caracteres raros. Es muy conveniente que los nombres de variable describan el tipo de datos que vamos a almacenar y usar combinaciones de mayúsculas y minúsculas en un nombre, eso ayuda a la depuración. Las reglas completas se pueden ver aquí.

Tipos de variables
Hay dos grandes tipos principales de variables: las que almacenan texto (tipo String) y las que almacenan números (tipo Integer, Single, Double, etc.), También en Visual Basic hay una variable que puede almacenar texto y número indistintamente se llama tipo Variant,  si no definimos eltipo de variable, VBA por defecto asume que es de tipo Variant. Hay otros tipos como Boolean, Long que no veremos por el momento. Una descripcción de los distintos tipos se puede ver aquí.

lunes, 17 de marzo de 2014

8.- UN EJEMPLO EN EL ANTIGUO BASIC


Palabras reservadas (instrucciones del lenguaje)
Así como los lenguajes naturales usan un vocabulario de palabras para construir frases, el VBA tiene un vocabulario de palabras reservadas que son las instrucciones y no las podemos usar como nombres de variable. Un lenguaje natural tiene muchísimas palabras (el castellano tiene entre 300.000 y 400.000), un lenguaje como el VBA tiene apensas unas decenas, y las que usamos normalmente son muy pocas. Una lista completa se puede ver aquí, y esta es una lista de las más comunes:

Dim, Do, Double, Else, Elseif, End, Exit, For, Function, Get, Global, Gosub, Goto, if, Integer, Long, Module, Private, Public, REM, Resume, Return, Single, Step, Stop, String, Then,  To, True, Variant, Wend, While, Xor, =, <, >

Como ven, para programar basta con manejar un vocabulario de menos de 40 palabras, que se combinan para hacer las diferentes expresiones. ¡Cualquiera puede aprenderlas!

Para efectos pedagógicos solamente, vamos a agregar dos instrucciones que son del antiguo Basic: Input, que permite recibir datos entrados desde el teclado y Print, que muestra datos en pantalla. Estas dos instrucciones ya no se usan en VBA pero son intuitivas y fáciles de comprender así es que haremos algunos ejemplos usando código Basic antiguo, lo que además les sirve si después quieren aprender Python u otros lenguajes que usan estas instrucciones.

Usando antiguo código Basic, explicaremos como funciona el condicional If y los loop con For, veamos

Ejemplo con If - Then -End if
Ingresar los datos de cantidad de un artículo comprado y precio unitario, almacenarlos en dos variables que llamaremos (arbitrariamente) CantCompra y PrecUnit, determinar si la compra excede o no el cupo de 500000, si no lo excede, poner en pantalla "Compra Autorizada", si lo excede poner "No Autorizada-Excede Cupo", luego, en cualquiera de los casos, debe poner el mensaje "FIN", el código en Basic es el siguiente:

Input "Ingrese Cantidad", CantCompra
Input "Ingrese Precio Unitario", PrecUnit
TotVta=CantCompra*PrecUnit
If TotVta > 500000 Then
         Print "No Autorizada-Excede Cupo"
End If
If TotVta <= 500000 Then
         Print "Compra Autorizada"
End If
Print "FIN"

Comentario del código:
Este código contiene 10 líneas o "expresiones", equivalentes a 10 frases en lenguaje natural, se ejecutan secuencialmente, una después de otra de arriba a abajo, es una lista de instrucciones. Las primeras dos líneas piden que entremos datos a las variables CantCompra y PrecUnit usando el teclado, para ello muestran dos mensajes constantes que son "Ingrese Cantidad" e "Ingrese Precio Unitario", los mensajes y valores de texto (String) constantes se escriben entre comillas para distinguirlos de las variables. Su valor es siempre el mismo. Las variables en cambio pueden almacenar cualquier valor que les ingresemos, o sea sus valores son distintos cada vez.

Las variables generalmente pueden recibir su valor de dos maneras: ingresadas por el usuario (por ejemplo desde el teclado) o generadas por el programa mediante un cálculo o una instrucción. En la línea 3 se define una nueva variable que le pusimos nombre TotVta y se genera por el programa mediante un cálculo: multiplicando la cantidad por el precio.

Las líneas 4, 5 y 6 comparan el valor de TotVta con el valor constante de 500000 (como es un número, no va entre comillas, si lo ponemos entre comillas sería tratado como String y no podríamos hacer la comparación). Entonces la condición es ¿TotVta es mayor que 500000?, si es mayor coloca un mensaje que niega la venta y si no es mayor salta a la instrucción siguiente.

Las líneas 7, 8, y 9 comparan nuevamente el valor de TotVta con el valor constante de 500000, pero esta vez la condición es ¿TotVta es menor o igual a 500000? (noten que la condición en este caso es menor o igual, o sea dos en una), si se cumple entonces autoriza la venta.

En cualquiera de los casos salta a la instrucción 10 que coloca en pantalla el mensaje constante "FIN"

Este ejemplo es trivial y no está optimizado, el código se puede mejorar un poquito -lo dejo como ejercicio- pero lo escribí así para una máxima claridad pedagógica. Ese código lo podemos representar en un Diagrama de Flujo que se muestra al comienzo de esta entrada (doble clic para verlo más grande).

Ejemplo con For - To - Next

For i = 1 to 100
      print "Pasada número ", i
Next i
Print "Fin de las pasadas"

Al ejecutarse este programa mostrara 100 mensajes del tipo: "Pasada número 1", "Pasada número 2", "Pasada número 3"... etc. hasta "Pasada número 100". Después de eso mostrará un solo mensaje que dirá  "Fin de las pasadas".


NOTA IMPORTANTE: ¿Se han fijado que todas las instrucciones que van "dentro de un If o un ciclo For aparecen "corridas" hacia la derecha? esto se llama "indentación" y aunque en VBA no es obligatorio es muy importante escribir siempre así es código, para su claridad de lectura, todo lo que sigue a un If o un For se escribe corrido un tab a la derecha, siempre (en otros lenguajes como Python esto es obligatorio).

domingo, 16 de marzo de 2014

9.-UN EJEMPLO EN VBA-EXCEL

Para esta clase veremos un ejemplo de lo aprendido en VBA-Excel. VBA y el antiguo Basdic tienen mucho en común, la diferencia principal es con la interfaz de usuario, es decir la entrada y salida de datos, que en Basic antiguo son caracteres que se entran por teclado mientras que en VBA son "eventos" en ventanas llamadas "Userform", ejemplo de estos eventos son clics del mouse sobre un botón, ingresos en cajas de texto, etc.

Por ello en VBA no se usan las instrucciones "Input" ni "Print" El el curso online (obligatorio) VBA para oficinistas, se muestra como la programación en VBA se hace en dos etapas: primero se dibujan las interfaces de usuario y luego se programan los componentes (como botones, cajas de texto, etc.) En estos dos videos vemos una aplicación sencilla para agregar datos a una agenda en una hoja de Excel, es un repaso detallado de lo que veremos en clase.



sábado, 15 de marzo de 2014

10.- ECONOMIA DE REDES E INTERNET

Clases de introducción a la economía de redes e Internet

Parte 1: Elementos de la economía clásica y microeconomía moderna (marginalista)



Parte 2: elementos de economía de redes



Charla de Chris Anderson (mini-caso)







Recursos adicionales

Como funciona Internet

Economía de redes


viernes, 14 de marzo de 2014

11.- COMO FUNCIONA INTERNET


Redes de computadores: 
Cuando varios computadores se comunican entre si forman una red. La conexión puede ser por cable, radio, fibra óptica, satélite, etc. ese es el medio físico. Las redes si están en un pequeño espacio (una casa o un edificio por ejemplo) se llama red de área local (LAN) si la conexión es a grandes distancias (entre ciudades o países por ejemplo) se llama red de área amplia (WAN). Internet es el sistema que conecta muchas redes LAN y WAN.

Dirección IP: 
Cada equipo que se conecta a Internet tiene un número IP formado por 4 grupos de números separados por puntos, por ejemplo 195.980.120.214, estos números son entre 1 y 255 máximo. Eso equivale al número de un teéfono que permite identificar al que nos llama y a quien llamamos. Algunos de estos números son siempre los mismos (IP fijas) pero otros varían, porque son asignados por nuestro servidor (DHCP), así un mismo equipo puede tener diferentes IP cada vez que se conecte (dentro de un rango). Los equipos por su parte tienen un número único llamado MAC Address, que se usa para propósitos  internos de las redes.

DNS y nombres de dominio: 
Como es muy difícil acordarse de los números IP, estos tienen asociados nombres fáciles de recordar, son los nombres de dominio como google.com, bradanovic.cl, estrellaarica.cl, etc. Estos nombres tienen un apellido que lo separa por un punto (.com, .cl, .edu, etc.) que indica de manera más amplia que clase de contenidos se está usando. Los servidores de DNS (domain name servers) son diccionarios que traducen números IP a nombres y viceversa.

¿Por que Internet no colapsa con miles de millones de conexiones? ¿por que nunca se ha caido a nivel global? 
Internet no colapsa por la forma en que se transmite la información. En lugar de usar canales fijos y caminos óptimos, se usa cualquier camino que se encuentre desocupado, aunque sea mucho más largo. Así al mandar un mail a nuestro vecino, la información podría atravesar todo el mundo antes de llegar, pero como viaja a velocidades cercanas a la velocidad de la luz, da lo mismo el largo del camino.

TCP/IP
Gracias a este sistema, llamado TCP/IP (Transfer Control Protocol/Internet Protocol) ocurre algo asombroso: mientras más usuarios se conectan, más rápido son las conexiones porque hay más caminos posible para la información. Ese es el truco de Internet.

Packets
La información no se manda completa, sino que se corta en pequeñas porciones llamadas "packets" estos no pueden tener un largo mayor a 65535 bytes (65 Kb), la información o "carga" es menor porque cada packet lleva también información para que sea reconstruido: direcciones de origen y destino, tiempo de vida, versión, encabezado, etc. Cada packet va por un camino distinto, el destinatario los va recogiendo a medida que llegan y reconstruye el mensaje completo en el destino.

Routers:
Aunque los packets no se optimizan de manera global, en Internet existen enrutadores (routers) que aprenden y conocen los caminos más cortos en su vecindad, gracias a eso, para llegar de cualquier máquina a otra en el mundo con billones de rutas posibles, típicamente el proceso se consigue en unos 12 a 15 saltos entre servidores, no más.

Identificar por IP:
Aunque existen formas de navegar de manera anónima (usando browsers Tor-Onion o proxys) esta se hace bastante lenta y es poco usada. La mayoría de las comunicaciones de Internet no enmascaran la Ip y se puede trazar por qejemplo quien visita algún sitio usando el software apropiado o revisando los logs del servidor. Una vez que tenemos la IP podemos usar un servicio del tipo WhoIs como http://centralops.net para saber quien es el dueño del servidor o la Ip que hemos detectado, de que país es, sus datos, etc.

Estructura de capas:
Trillones de packets cruzando por millones de caminos posibles simultáneamente, cada segundo del día ¿como es posible que algo tan complejo funcione? Internet funciona -igual que los lenguajes de computación- en una estructura de capas, cinco son sus capas principales

1.-Aplication (programas de usuario)
2.-Transport (TCP, reconstruye los packets y corrige los errores)
3.-Network (direcciones IP, DNS y armado de los packets)
4.-Link (Software de red)
5.-Phisical (conexiones físicas de cables, fibra, radio, etc.)

Cada capa es una caja negra que recibe entradas de la capa inferior y entrega su salida a la capa superior, cada capa solo se preocupa de resolver el problema que le corresponde sin preocuparse de lo que hacen las demás capas.

Seguridad:
El tráfico por Internet es por definición inseguro, todo lo que se envía por Internet puede ser interceptado y copiado fácilmente, se rata de un "canal sucio" sin requisitos de seguridad. Al enviar un mail por ejemplo es equivalente a enviar una carta abierta, puede ser interceptado en el camino o leído con facilidad por cualuiera que tenga acceso al servidor de correos. La solución (parcial) es colocar una capa de encripción justo bajo la capa de aplicación para enviar los datos encriptados, sin embargo esta encripción da un nivel de seguridad débil y desaparece para quienes tienen acceso a los servidores. La única forma de tener privacidad en Internet es con encriptación fuerte punto-a-punto con software tal como GPG, Truecrypt o similares. El algoritmo de encriptación más seguro en estos momentos es el AES (advanced encription system) sucesor del 3Des.

Servicios de Internet:
La mayoría de las personas solo conocen la Web (WWW, World Wide Web) , sin embargo este es solo uno de los servicios de Internet, hay muchos más como transferencia de archivos (FTP, etc.), correo electrónico (POP3, IMAP), VOIP (voz por IP, comunicaciones telefonicas, etc.), Streaming (TV por IP) y muchos más.

jueves, 13 de marzo de 2014

12.-NOCIONES DE SEGURIDAD INFORMATICA


"El problema con la seguridad es que, tal como el arquero de fútbol; solo toma importancia cuando falla".

1. QUÉ ES LO QUE SE PROTEGE
Lo que se protege fundamentalmente son los datos, porque los sistemas son normalmente fáciles de restaurar. Los datos reciben normalmente tres clases de ataques

A la confidencialidad: es decir cuando alguien no autorizado ve información confidencial almacenada en una máquina tal como correos electrónicos, contraseñas, fichas médicas, documentos secretos, etc. los ataques a la confidencialidad normalmente no dejan huella pues el atacante quiere pasar inadvertido

A la integridad, es cuando se modifica maliciosamente un dato, por parte de alguien no autorizado. Por ejemplo puede ser la modificación de una calificación en una planilla de notas, un depósito o deuda en un banco, la alteración de una suma en un asiento contable, etc. Esta clase de ataques se detecta normalmente mediante auditorías informáticas

A la disponibilidad, esto es cuando los datos se destruyen, se corrompen por medio de virus o desastres naturales o se bloquea su conexión hacia ellos mediante ataques de negación de servicio que saturan los servidores (ataques DOS Deny of Service)

2. La seguridad no solo se trata de prevenir ataques maliciosos sino que también existen daños por negligencia o por desastres naturales, entre otros, que normalmente afectan la disponibilidad de los datos

3 La seguridad de los datos se implementa por medio de políticas que deben tener el compromiso y respaldo desde el nivel más alto de la organización o empresa

4. Las políticas deben contemplar la asignación de responsabilidades, incentivos y sanciones

5. También se debe mantener actualizado un inventario de los activos informáticos disponibles, para evitar robos o alteraciones

6. Las auditorías informáticas tienen por objetivo comparar lo que dicen los datos almacenados en los sistemas informáticos con la realidad, por ejemplo en una pequeñaempresa que lleve un control de inventario, el conteo físico de las mercaderías es un ejemplo típico de auditoría informática.

7. Una política de seguridad informática debe dedicar parte importante de su quehacer a la elaboración de normas de operación, manuales de procedimientos, descripción de cargos, etc. de manera que las responsabilidades queden clara y formalmente establecidas

8. La asignación de permisos de acceso y contraseñas debe incluir restricciones por medio de la segmentación de los usuarios en niveles de seguridad de manera tal que nadie tenga más ni menos acceso que el que necesita para hacer su trabajo.

10. Se deben implementar estrategias contra ataques informáticos tales como virus, troyanos, gusanos, puertas traseras, etc. así como planes de contingencia según el nivel del daño en los casos que estos ataques tengan éxito.

11. Se debe incluir una política formal y sistemática de respaldos de datos usando sistemas redundantes, espejo, etc. según lo requiera la organización y dependiendo del posible daño que pueda causar la pérdida de esos datos.

Para los que deseen saber más del tema pueden ver este Curso completo de introducción a la seguridad informática.

La "deep web", a propósito de una consulta sobre la deep web, que son los datos que no están indexados por los buscadores, hay un buscador llamado http://pipl.com que dice tener datos que no están indexados en los buscadores tradicionales

miércoles, 12 de marzo de 2014

13. NOCIONES DE CRIPTOGRAFIA

A medida que el uso de Internet se expande la criptografía se hace cada vez más necesaria e intrusiva, recibimos y enviamos información encriptada de manera transparente, en muchas páginas que visitamos en la web, en nuestros mail, cada vez que entramos a un sitio de bancos, compras electrónicas, Paypal, etc.

Criptografía significa "escritura oculta" pero con el tiempo ha evolucionado a mucho más que eso, de una manera más amplia podemos decir que es la forma en que mantenemos el acceso confidencial a parte de la información que usamos.

Criptoanálisis es el reverso, es decir la ciencia o arte de romper la encriptación y tener acceso no autorizado a ella, ambas disciplinas son dos caras de una misma moneda.

Criptografía clásica

Desde los tiempos más remotos de la escritura se comenzaron a usar métodos para ocultar la información escrita, por ejemplo:

Los egipcios enrollaban un papiro sobre un cilindro de caña y escribían en espiral sobre el, el receptor, usando un cilindro del mismo largo lo podía leer, sin el cilindro el texto era incomprensible. En este caso el criptograma se basaba en el método secreto (escribir sobre un cilindro) y la clave era el largo del cilindro, porque con uno de largo diferente tampoco se entendía nada.

En la época de los griegos aparecieron las primeras tablas de sustitución, que reemplazaban ciertas letras por otros caracteres, en este caso el secreto era el método de sustituir por una tabla y la clave era la tabla de sustitución.

Julio César usó un metodo de desplazamiento del alfabeto conocido como "Código César", el secreto era el desplazamiento de las letras y la clave en cuanto se desplazaban. Hasta el día de hoy se utiliza un código simple llamado "ROT 13" que consiste en rotar el alfabeto en 13 lugares, hay muchos sitios donde se puede encriptar y desencriptar con este método simple, usado en las news de Usenet por los usuarios más antiguos. Por ejemplo http://rot13.com/



Por ese mismo tiempo el emperador Augusto escribía sus mensajes en un texto en relieve que llenaba con cera para que quedara plano, el receptor derretía la cera y lo leía.

Las reglas de Bacon, alredeor de 1300 eran:

1.-Reemplazar unas letras por otras
2.-Escribir palabras al revés
3.-Invertir letras alternadas en el texto del mensaje original
4.-Dar a las letras un valor numérico y escribir dichos valores con símbolos Reemplazar cada letra con otras dos de forma que la suma de sus valores numéricos fuera igual al valor numérico de la letra reemplazada
5.-Sustituir cada letra con el nombre de una persona o un objeto
6.- Sustituir las letras por signos lunares, pájaros, flores u otros signos inventados

Los métodos más exitosos por lo difíciles de desencriptar fueron las tablas de sustitución usando anillos y discos cifradores que sustituían las letras de manera  bastante impredecible y difícil de descifrar


La complejidad llegó a su máximo cuando estos anillos cifradores los implementaron con máquinas electromecánicas como el cifrador "Enigma" que fueron desarrollados en Alemania



Este código fue roto por los aliados mediante análisis estadístico usando la maquina "bomba" uno de los primeros computadores que existieron


Hacia el final de la guerra los alemanes cambiaron el sistema enigma por otro aún más complicado, las Máquinas de Lorentz que usaban técnicas similares pero mucho más complejas, este código también fue roto por los aliados de Bletchley Park usando Collosus, también uno de los primeros computadores


Transposición y sustitución

Los dos métodos que se usaron hasta los años sesenta del siglo XX eran basados en tablas de sustitución (cambiar caracteres por otros) y transposición (correr o cambiar de lugar el alfabeto).

Sin importar lo complicado que sea, los criptogramas creados por estos métodos tienen una debilidad que es el análisis estadístico. Todo código de sustitución puede ser roto por una combinación de análisis estadístico basado en que en cada idioma las letras, y las combinaciones de dos, tres y cuatro letras tienen cierta frecuencia. Así, aplicando la estadística es posible en teoría descifrar cualquier cifrado por sustitución, no importa cuan complicado parezca.

Un ejemplo de criptoanálisis simple basado en el cuento El Escarabajo de Oro de Edgar Allan Poe se puede ver en este link, paso a paso.