sábado, 31 de octubre de 2015

¿QUÉ ES LA BIOS?


Aunque pase inadvertida para la mayoría de los usuarios, la BIOS del sistema es la pieza fundamental para que cualquier computadora cumpla con su función, sin este chip, el equipo sólo serviría de pecera, tal es la importancia del mismo dentro de un sistema de cómputo.
BIOS es la abreviatura de Binary Input Output System, y es un software que reside en un chip instalado en la motherboard de la PC, y que realiza su tarea apenas presionamos el botón de encendido del equipo. Si quieres conocer más acerca de la BIOS del sistema, te invitamos a seguir leyendo el resto del artículo.
Qué es la Bios
Básicamente, la BIOS, nombre que proviene de las primeras épocas de la computación personal, cuando este hardware era el encargado de realizar las operaciones de entrada y salida, es un chip o circuito integrado que en su interior almacena una serie de rutinas de software que ponen en funcionamiento el resto del hardware de la placa base. También es el primer programa que se ejecuta al encender la PC.
Cómo funciona la BIOS
El propósito de esta pieza de hardware es, una vez que prendemos la computadora,inicializar y configurar, además de testear si encuentre en buen estado de funcionamiento, todo el hardware del sistema, incluyendo la memoria RAM, discos duros y demás placas del sistema, para una vez finalizado este paso, cargar el gestor de arranque para que comience a ejecutarse el sistema operativo predeterminado de la computadora.
Si la BIOS detecta cualquier problema de funcionamiento en alguno de los elementos mencionados, no permitirá que se llegue a la instancia de arranque del sistema operativo hasta que el problema sea solucionado.
Qué es la Bios
Cabe destacar que la información necesaria para realizar su tarea se almacena en otro chip del tipo CMOS ubicado en la misma placa base, llamado CMOS, en este caso, para que los datos que contiene el chip no se pierdan, se utiliza una batería para alimentarlo.
En el caso de que esta pierda su energía, o tenga algún problema, todos los datos en el chip CMOS se perderán, teniéndose que configurar nuevamente la BIOS para poder seguir usando la PC.
¿Se actualiza la BIOS?
La respuesta a la pregunta es un rotundo sí. Con el avance de la tecnología, también se modernizaron este tipo de chips de BIOS, los que ahora utilizan tecnología de almacenamiento Flash, es decir que no será necesario remover el integrado de la BIOS para reescribir su contenido, los que nos permite modificar parámetros, o añadir nuevas características de manera sencilla y rápida.
La actualización de la BIOS nos permite, en términos concretos, hacer funcionar nuestra placa con un procesador que antes no podíamos instalar, o solucionar temas de compatibilidad con ciertos tipos de hardware como memorias o placas, claro está quesiempre dependerá del fabricante y tipo de placa si existen actualizaciones para realizar.
Qué es la Bios
Sin embargo, la actualización de la BIOS no es un tema que deba tomarse a la ligera, ya que cualquier paso erróneo podría llevar a la computadora al final de su vida activa.Una actualización de BIOS sólo deberá llevarse a cabo siempre y cuando sea necesario.
Por último, cabe destacar que esta tecnología, a pesar de haber dado sobradas muestras de eficiencia y capacidad, se encuentra en pleno proceso de ser reemplazada por UEFI, (Unified Extensible Firmware Interface), una tecnología que permite al usuario tener un mayor control de su equipo.

jueves, 15 de octubre de 2015

Es algo muy sencillo de hacer, solo basta con 3 lineas de comandos

lo primero que debemos de hacer es abrir una terminal y escribir lo sigiente

Este comando sirve para actualizar el sistema
sudo apt-get update

Despues instalaremos codeblocks
sudo apt-get install codeblocks build-essential 

nos preguntara si queremos haceptar la instalacion (s/n)
pulsaremos a la "s" de si y daremos un enter y se comensara a instalar 
al final de la instalacion solo escribiremos en la misma terminal

codeblocks 
y tendremos todo listo para empezar a programar en c/c++
eso es todo 
Gracias.

miércoles, 14 de octubre de 2015

Hola esta vez les voy a enseñar como mostrar un simple mensaje ..
Estoy usando el S.O "ubuntu" a si que recomiendo que usen el mismo

lo primero es abrir la terminal

Despues la abriremos y buscaremos el Escritorio, para los que tienen ubuntu en ingles se encontrara como desktop
 tenemos que entrar a escritorio con el comando: 
cd Escritorio
Despues lo que aremos es crear una carpeta con el comando
mkdir scrpits
 

        ahora entramos en la carpeta scripts como entramos al escritorio con el comando
                                     cd scripts
ahora creamos el script con el comando
nano primer.sh
(primer es el nombre que quieran le puse primer por ser el primero)
Despues se abrira el editor (en la terminal) para hacer este script
lo que tendremos que escribir es
#!/bin/bash
echo hola mundo
la primera linea siempre tiene que ir
el mensaje se muestra con la palabra echo seguido de lo que queremos mostrar
lo guardamos con  control + o 
y nos salimos con control +x
despues lo ejecutamos con 
source primer.sh

                                         nos mostrara el mensaje que escribimos.


 
  
  





Bash (Bourne again shell) es un programa informático, cuya función consiste en interpretar órdenes, y un lenguaje de programación de consola. Está basado en la shell de Unix y es compatible con POSIX.
Fue escrito para el proyecto GNU por Brian Fox y es el intérprete de comandos por defecto en la mayoría de las distribuciones de GNU con Linux. Es el sustituto libre de Bourne Shell1 2 Su nombre es un acrónimo de Bourne-Again Shell (otro shell bourne) — haciendo un juego de palabras (born-again significa renacimiento) sobre el Bourne shell (sh), que fue uno de los primeros intérpretes importantes de Unix.
Hacia 1978 Bourne era el intérprete distribuido con la versión del sistema operativo Unix Versión 7. Stephen Bourne, por entonces investigador de los Laboratorios Bell, escribió la versión original de Bourne. Brian Fox escribió Bash en 1987. En 1990, Chet Ramey se convirtió en su principal desarrollador. Bash es el intérprete predeterminado en la mayoría de sistemas GNU/Linux, además de Mac OS X Tiger, y puede ejecutarse en la mayoría de los sistemas operativos tipo Unix. También se ha llevado a Microsoft Windows por el proyecto Cygwin.

Sintaxis de Bash

La sintaxis de órdenes de Bash es un superconjunto de instrucciones basadas en la sintaxis del intérprete Bourne. La especificación definitiva de la sintaxis de órdenes de Bash, puede encontrarse en el Bash Reference Manual distribuido por el proyecto GNU. Esta sección destaca algunas de sus únicas características.
La mayoría de los shell scripts (guiones de intérprete de órdenes) Bourne pueden ejecutarse por Bash sin ningún cambio, con la excepción de aquellos guiones del intérprete de órdenes, o consola, Bourne que hacen referencia a variables especiales de Bourne o que utilizan una orden interna de Bourne. La sintaxis de órdenes de Bash incluye ideas tomadas desde el Korn Shell (ksh) y el C Shell (csh), como la edición de la línea de órdenes, el historial de órdenes, la pila de directorios, las variables $RANDOM y $PPID, y la sintaxis de substitución de órdenes POSIX: $(...). Cuando se utiliza como un intérprete de órdenes interactivo, Bash proporciona autocompletado de nombres de programas, nombres de archivos, nombres de variables, etc, cuando el usuario pulsa la tecla TAB.
La sintaxis de Bash tiene muchas extensiones que no proporciona el intérprete Bourne. Varias de las mencionadas extensiones se enumeran a continuación.

Acceso a los parámetros

Los guiones de Bash reciben los parámetros que le pasa la shell como $1, $2, ..., $n. Podemos saber cuantos hemos recibido con el símbolo $#.
Por ejemplo, si nuestro guion necesita dos parámetros pondremos:
 if [ $# -lt 2 ]; then
   echo "Necesitas pasar dos parámetros."
   exit 1
 fi
Además disponemos del array $@, el cual contiene todos los parámetros pasados al guion y podemos iterar sobre estos de la siguiente manera:
  for param in "$@"
  do
    echo "$param"
  done

Matemáticas con enteros

Una gran limitación del intérprete Bourne es que no puede realizar cálculos con enteros sin lanzar un proceso externo. En cambio, un proceso Bash puede realizar cálculos con enteros utilizando la orden ((...)) y la sintaxis de variables $[...] de la siguiente manera:
 VAR=55             # Asigna el valor entero 55 a la variable VAR.
 ((VAR = VAR + 1))  # Suma uno a la variable VAR.  Observe la ausencia del carácter '$'.
 ((++VAR))          # Otra forma de sumar uno a VAR.  Preincremento estilo C.
 ((VAR++))          # Otra forma de sumar uno a VAR.  Postincremento estilo C.
 echo $[VAR * 22]   # Multiplica la variable VAR por 22 y sustituye la orden por el resultado.
 echo $((VAR * 22)) # Otra forma de realizar lo mismo.
La orden ((...)) también se puede utilizar en sentencias condicionales, ya que su código de retorno es 0 o 1 dependiendo de si la condición es cierta o falsa:
 if ((VAR == Y * 3 + X * 2))
 then
         echo Si
 fi
 
 ((Z > 23)) && echo Si
La orden ((...)) soporta los siguientes operadores relacionales: '==', '!=', '>', '<', '>=', y '<='.
Un proceso Bash no puede realizar cálculos en coma flotante. Los únicos shell Unix capaces de esto son el Korn Shell (versión de 1993) y el zsh (a partir de la versión 4.0).

Redirecciones de entrada/salida

La sintaxis de Bash permite diferentes formas de redirección de entrada/salida de las que el Shell Bourne tradicional carece. Bash puede redirigir la salida estándar y los flujos de error estándar a la vez utilizando la sintaxis:
 orden >& archivo
que es más simple que teclear la orden Bourne equivalente, "orden > archivo 2>&1". Desde la versión 2.05b, Bash puede redirigir la entrada estándar desde una cadena utilizando la siguiente sintaxis (denominada "here strings"):
 orden <<< "cadena a leer como entrada estándar"
Si la cadena contiene espacios en blanco, deben utilizarse comillas.

Ejemplo: Redirige la salida estándar a un archivo, escribe datos, cierra el archivo y reinicia stdout
 # hace que el descriptor de archivo 6 sea una copia de stdout (descriptor archivo 1)
 exec 6>&1
 # abre el archivo "test.data" para escritura
 exec 1>test.data
 # genera algún contenido
 echo "data:data:data"
 # recupera stdout original, al hacer que sea una copia del descriptor de archivo 6
 exec 1>&6
 # cierra el descriptor de archivo 6
 exec 6>&-
Abre y cierra archivos
 # abre el archivo test.data para lectura
 exec 6<test.data
 # lee hasta el final del archivo
 while read -u 6 dta
 do
   echo "$dta" 
 done
 # cierra el archivo test.data
 exec 6<&-
Captura la salida de órdenes externas
  # ejecuta 'find' y guarda los resultados en VAR
  # busca nombres de archivos que terminan con la letra "h"
  VAR=$(find . -name "*h")

Expresiones regulares

Los procesos Bash 3.0 soportan emparejamiento de expresiones regulares utilizando la siguiente sintaxis, reminiscente de Perl:
[[ string =~ regex]]
La sintaxis de expresiones regulares es la misma que documenta la página de manual regex(3). El estado de salida de la orden anterior es 0 si la cadena concuerda con la expresión regular, y 1 si no casan. En las expresiones regulares puede accederse a las partes delimitadas por paréntesis, utilizando la variable shell BASH_REMATCH, de la siguiente manera:
 if [[ foobarbletch =~ 'foo(bar)bl(.*)']] 
 then
         echo The regex matches!
         echo $BASH_REMATCH      -- outputs: foobarbletch
         echo ${BASH_REMATCH[1]} -- outputs: bar
         echo ${BASH_REMATCH[2]} -- outputs: etch
 fi
Esta sintaxis proporciona un rendimiento superior a lanzar un proceso separado para ejecutar una orden grep, porque el emparejamiento de las expresiones regulares tiene lugar en el propio proceso Bash. Si la expresión regular o la cadena contiene un espacio en blanco o un metacarácter del shell (como '*' o '?'), debe ser entrecomillada.

Escape con contrabarra

Las palabras con la forma $'string' se tratan de un modo especial. Estas palabras se expanden a string, con los caracteres escapados por la contrabarra reemplazados según especifica el lenguaje de programación C. Las secuencias de escape con contrabarra, se decodifican del siguiente modo:
Escapes con contrabarra
Backslash
Escape
Se expande a...
\b Un carácter de retroceso
\e Un carácter de escape
\f Un carácter de alimentación de línea (form feed)
\n Un carácter de nueva línea
\r Un carácter de retorno de carro
\t Un tabulador horizontal
\v Un tabulador vertical
\\ Un carácter contrabarra
\' Un carácter de comilla simple
\nnn El carácter de 8 bits cuyo valor es el número octal nnn (de uno a tres dígitos)
\xHH El carácter de 8 bits cuyo valor es el número hexadecimal HH (uno o dos dígitos hexadecimales)
\cx Un carácter control-X
El resultado expandido se encuentra entrecomillado con comilla simple, como si el signo $ no estuviese presente.
Una cadena entrecomillada con comillas dobles precedida por un signo $ ($"...") será traducida de acuerdo al LOCALE actual. Si fuese C o POSIX, se ignora el símbolo $. Si la cadena es traducida y reemplazada, el reemplazo estará entrecomillado por comilla doble.

Guiones de inicio de Bash

Cuando Bash arranca, ejecuta las órdenes que se encuentran en diferentes guiones.
Cuando se invoca a Bash como un shell interactivo para el inicio de una sesión (login shell), o como un shell no interactivo con la opción --login, en primer lugar lee y ejecuta órdenes desde el archivo /etc/profile, si existe. Después, busca ~/.bash_profile, ~/.bash_login, y ~/.profile, en este orden, y lee y ejecuta las órdenes desde el primero que existe y es legible. La opción --noprofile puede utilizarse al comenzar un nuevo shell para inhibir este comportamiento.
Cuando un login shell termina, Bash lee y ejecuta las órdenes de ~/.bash_logout, si existe.
Cuando un shell interactivo que no es un login shell arranca, Bash lee y ejecuta órdenes desde ~/.bashrc, si existiese. Esto puede evitarse utilizando la opción --norc. La opción --rcfile archivo forzará a Bash a leer y ejecutar órdenes desde archivo en lugar de ~/.bashrc.
Cuando Bash arranca de un modo no interactivo, por ejemplo para ejecutar un guion de consola diferente, busca la variable de entorno BASH_ENV, si existe expande su valor, y lo utiliza como el nombre del archivo para leer y ejecutar. Bash se comporta como si se ejecutase la siguiente orden:
 if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
pero el valor de la variable PATH no se utiliza para buscar el archivo.
Si se invoca a Bash con el nombre sh, intenta replicar el comportamiento de las versiones antiguas de sh, a la vez que se mantiene la conformidad con el estándar POSIX. Cuando se invoca como un login shell interactivo, o un shell no interactivo con la opción --login, primero intenta leer y ejecutar órdenes desde /etc/profile y ~/.profile, en este orden. La opción --noprofile puede utilizarse para evitar este comportamiento.
Cuando se invoca como un shell interactivo con el nombre sh, Bash busca la variable ENV, si está definida expande su valor, y utiliza el valor expandido como el nombre de un archivo para leer y ejecutar. Como un shell invocado como sh no intenta leer y ejecutar órdenes desde ningún otro archivo de arranque, y la opción --rcfile no tiene efecto. Un shell no interactivo invocado con el nombre sh no intenta leer ningún otro archivo de arranque. Cuando se invoca como sh, Bash entra en el modo posix después de leer los archivos de inicio.
Cuando se inicia Bash en el modo posix, por ejemplo con la opción --posix, sigue el estándar POSIX para los archivos de inicio. En este modo, los shells interactivos expanden la variable ENV y se leen, y ejecutan, las órdenes desde el archivo cuyo nombre es el valor de la variable expandida. No se lee ningún otro archivo de arranque.
Bash intenta determinar cuando está siendo ejecutado por un dominio de shell remoto, normalmente rshd. Si Bash determina que está siendo ejecutado por rshd, lee y ejecuta órdenes desde ~/.bashrc, si este archivo existe y es legible. No hará esto si se invoca como sh. La opción --norc puede utilizarse para evitar este comportamiento, y la opción --rcfile puede utilizarse para forzar a leer otro archivo, pero rshd normalmente no invoca al shell con estas opciones o permite que sean especificadas.


Si quieres ver mas a fondo este articulo visita el link original Link

martes, 6 de octubre de 2015

El Lado Oscuro De La Programación

Todos sabemos que EL PROGRAMADOR  O LOS PROGRAMADORES Literalmente son o es una de las ramas principales de las empresas, siempre están depurando, actualizando e implementando algoritmos para los programas de la empresa donde trabaja.
Específicamente, un programador de computadoras lo que hace es escribir,  testear, depurar y mantener el código de programación de los programas. También conciben, diseñan y testean las estructuras lógicas para por resolver  problemas computadora. En general, los programadores escriben los programas de acuerdo a las especificaciones formales dadas por analistas de sistemas (Ver análisis). Ellos transforman el diseño en instrucciones concretas que pueden ejecutarse en la computadora. Su próxima tarea es testear el programa en busca de bugs (errores de programación), este proceso es llamado prueba y depuración de errores. El software luego se actualiza, repara, modifica y expande, lo que se llama mantenimiento; tarea realizada en parte por los programadores.
Muchas veces los programadores que trabajan desde casa no tienen orden en su entorno laboral todo siempre hay trozos de comida latas de refresco y es parecido a esto

Pero muchas veces por el afán del día a día hacemos que la programación tenga un lado oscuro los cuales son los siguientes:
  • Se olvidan de las necesidades diarias hasta de bañarse, comer entre otras.
  • Abandonan a sus esposas, no le dedican tiempo a su familia entonces vienen los problemas que muchas veces llevan a la rotura de una familia.
  • Se olvidan que existe un mundo exterior detrás de la puerta, existen programadores que cuando se sientan a programar se olvidan de los demás y hasta no terminar lo que empezaron.
  • Cuando algo le sale mal o no dan con algún algoritmo o formula anda de mal humor y pueden hasta mandar a la mierda a las personas cercanas a ellos.                                                                             (Articulo original:http://streettecnology.com/index.php/2015/10/02/el-lado-oscuro-de-la-programacion/ )

viernes, 2 de octubre de 2015

Hola a todos! en este articulo les enseñare como mostrar un simple mensaje en pantalla en el lenguaje Java

Este es el codigo
quiero decir que estoy usando Netbeans

Despues solo hay que hacer click en el boton de play (run) para correr el programa
         En la parte de la consola se mostrara esto:

jueves, 1 de octubre de 2015

Hace unos dias alguien me dijo una frase que dice asi "podras ser ingeniero y el mejor programando! en diferentes lenguajes si quieres pero si no sabes hacer diagramas de flujo no eres nada!" y esto es cierto puesto que un diagrama de flujo es muy importante son enormemente relevantes es distintas áreas técnicas en donde es necesario dejar asentado de forma comprensible una determinada secuencia de pasos. En efecto, de esta manera es fácilmente esquematizable un determinado proceso lógico que puede ser de utilidad para algún tipo de tarea. Así, actividades como la ingeniería industrial o la programación suelen hacer uso de este tipo de herramientas con cierta recurrencia dada la utilidad que tiene para estos propósitos. Cuando alguien genera una determinada estructura lógica que resuelve un determinado problema, pueden existir trabas a la hora de mostrar a un tercero esta secuencia debido a su complejidad; los diagramas de flujo ayudan a solucionar esta circunstancia.

Para confeccionar un diagrama de flujo se suelen utilizar diversas figuras geométricas tales como rombos, cuadrados o círculos. Mediante las mismas se pretende dar cuenta de un determinado proceso o resultado. El diagrama siegue una determinada dirección, generalmente hacia abajo o hacia la derecha. Existen al respecto bifurcaciones en el accionar, o también vueltas a un punto anterior según sea necesario para representar a la lógica del proceso. En determinados ámbitos en donde el proceso tiene una implicancia espacial, como por ejemplo en una fábrica, el diagrama puede estar trazado en las mismas instalaciones como para dar cuenta a los operarios acerca de qué tipo de accionar deben tener.

A pesar de su utilidad, este tipo de estrategia para reflejar una determinada secuencia de pasos tiene pocos años entre nosotros. En efecto, existen dificultades a la hora de establecer su origen exacto, pero el mismo no debe superar los ciento cincuenta años. Con el paso del tiempo fue popularizándose en distintas actividades en donde el trazado de procedimientos secuenciales es un tema recurrente, llegando finalmente a enseñarse en el ámbito universitario; así, cualquier egresado de una carrera técnica suele tener conocimientos en lo que respecta a este tipo de esquemas.

Hoy en día, se puede realizar un diagrama de flujo valiéndose de distintas herramientas informáticas que facilitan la cuestión de forma extrema. Así, este tipo de tareas es mucho más fácil de implementar que lo que era en el pasado. Por otro lado, si existe alguna duda en la forma en que un diagrama debe trazarse, la red es una gran ayuda debido al gran caudal de información que provee. En este sentido ha existido un enorme progreso y la generación de un diagrama de flujo ya no es una tarea circunscrita al terreno de especialistas.


diagramasdeflujo
flujo son enormemente relevantes es distintas áreas técnicas en donde es necesario dejar asentado de forma comprensible una determinada secuencia de pasos. En efecto, de esta manera es fácilmente esquematizable un determinado proceso lógico que puede ser de utilidad para algún tipo de tarea. Así, actividades como la ingeniería industrial o la programación suelen hacer uso de este tipo de herramientas con cierta recurrencia dada la utilidad que tiene para estos propósitos. Cuando alguien genera una determinada estructura lógica que resuelve un determinado problema, pueden existir trabas a la hora de mostrar a un tercero esta secuencia debido a su complejidad; los diagramas de flujo ayudan a solucionar esta circunstancia.

Para confeccionar un diagrama de flujo se suelen utilizar diversas figuras geométricas tales como rombos, cuadrados o círculos. Mediante las mismas se pretende dar cuenta de un determinado proceso o resultado. El diagrama siegue una determinada dirección, generalmente hacia abajo o hacia la derecha. Existen al respecto bifurcaciones en el accionar, o también vueltas a un punto anterior según sea necesario para representar a la lógica del proceso. En determinados ámbitos en donde el proceso tiene una implicancia espacial, como por ejemplo en una fábrica, el diagrama puede estar trazado en las mismas instalaciones como para dar cuenta a los operarios acerca de qué tipo de accionar deben tener.

A pesar de su utilidad, este tipo de estrategia para reflejar una determinada secuencia de pasos tiene pocos años entre nosotros. En efecto, existen dificultades a la hora de establecer su origen exacto, pero el mismo no debe superar los ciento cincuenta años. Con el paso del tiempo fue popularizándose en distintas actividades en donde el trazado de procedimientos secuenciales es un tema recurrente, llegando finalmente a enseñarse en el ámbito universitario; así, cualquier egresado de una carrera técnica suele tener conocimientos en lo que respecta a este tipo de esquemas.

Hoy en día, se puede realizar un diagrama de flujo valiéndose de distintas herramientas informáticas que facilitan la cuestión de forma extrema. Así, este tipo de tareas es mucho más fácil de implementar que lo que era en el pasado. Por otro lado, si existe alguna duda en la forma en que un diagrama debe trazarse, la red es una gran ayuda debido al gran caudal de información que provee. En este sentido ha existido un enorme progreso y la generación de un diagrama de flujo ya no es una tarea circunscrita al terreno de especialistas.

... de Importancia: http://www.importancia.org/diagramas-de-flujo.php
flujo son enormemente relevantes es distintas áreas técnicas en donde es necesario dejar asentado de forma comprensible una determinada secuencia de pasos. En efecto, de esta manera es fácilmente esquematizable un determinado proceso lógico que puede ser de utilidad para algún tipo de tarea. Así, actividades como la ingeniería industrial o la programación suelen hacer uso de este tipo de herramientas con cierta recurrencia dada la utilidad que tiene para estos propósitos. Cuando alguien genera una determinada estructura lógica que resuelve un determinado problema, pueden existir trabas a la hora de mostrar a un tercero esta secuencia debido a su complejidad; los diagramas de flujo ayudan a solucionar esta circunstancia.

Para confeccionar un diagrama de flujo se suelen utilizar diversas figuras geométricas tales como rombos, cuadrados o círculos. Mediante las mismas se pretende dar cuenta de un determinado proceso o resultado. El diagrama siegue una determinada dirección, generalmente hacia abajo o hacia la derecha. Existen al respecto bifurcaciones en el accionar, o también vueltas a un punto anterior según sea necesario para representar a la lógica del proceso. En determinados ámbitos en donde el proceso tiene una implicancia espacial, como por ejemplo en una fábrica, el diagrama puede estar trazado en las mismas instalaciones como para dar cuenta a los operarios acerca de qué tipo de accionar deben tener.

A pesar de su utilidad, este tipo de estrategia para reflejar una determinada secuencia de pasos tiene pocos años entre nosotros. En efecto, existen dificultades a la hora de establecer su origen exacto, pero el mismo no debe superar los ciento cincuenta años. Con el paso del tiempo fue popularizándose en distintas actividades en donde el trazado de procedimientos secuenciales es un tema recurrente, llegando finalmente a enseñarse en el ámbito universitario; así, cualquier egresado de una carrera técnica suele tener conocimientos en lo que respecta a este tipo de esquemas.

Hoy en día, se puede realizar un diagrama de flujo valiéndose de distintas herramientas informáticas que facilitan la cuestión de forma extrema. Así, este tipo de tareas es mucho más fácil de implementar que lo que era en el pasado. Por otro lado, si existe alguna duda en la forma en que un diagrama debe trazarse, la red es una gran ayuda debido al gran caudal de información que provee. En este sentido ha existido un enorme progreso y la generación de un diagrama de flujo ya no es una tarea circunscrita al terreno de especialistas.

... de Importancia: http://www.importancia.org/diagramas-de-flujo.php
flujo son enormemente relevantes es distintas áreas técnicas en donde es necesario dejar asentado de forma comprensible una determinada secuencia de pasos. En efecto, de esta manera es fácilmente esquematizable un determinado proceso lógico que puede ser de utilidad para algún tipo de tarea. Así, actividades como la ingeniería industrial o la programación suelen hacer uso de este tipo de herramientas con cierta recurrencia dada la utilidad que tiene para estos propósitos. Cuando alguien genera una determinada estructura lógica que resuelve un determinado problema, pueden existir trabas a la hora de mostrar a un tercero esta secuencia debido a su complejidad; los diagramas de flujo ayudan a solucionar esta circunstancia.

Para confeccionar un diagrama de flujo se suelen utilizar diversas figuras geométricas tales como rombos, cuadrados o círculos. Mediante las mismas se pretende dar cuenta de un determinado proceso o resultado. El diagrama siegue una determinada dirección, generalmente hacia abajo o hacia la derecha. Existen al respecto bifurcaciones en el accionar, o también vueltas a un punto anterior según sea necesario para representar a la lógica del proceso. En determinados ámbitos en donde el proceso tiene una implicancia espacial, como por ejemplo en una fábrica, el diagrama puede estar trazado en las mismas instalaciones como para dar cuenta a los operarios acerca de qué tipo de accionar deben tener.

A pesar de su utilidad, este tipo de estrategia para reflejar una determinada secuencia de pasos tiene pocos años entre nosotros. En efecto, existen dificultades a la hora de establecer su origen exacto, pero el mismo no debe superar los ciento cincuenta años. Con el paso del tiempo fue popularizándose en distintas actividades en donde el trazado de procedimientos secuenciales es un tema recurrente, llegando finalmente a enseñarse en el ámbito universitario; así, cualquier egresado de una carrera técnica suele tener conocimientos en lo que respecta a este tipo de esquemas.

Hoy en día, se puede realizar un diagrama de flujo valiéndose de distintas herramientas informáticas que facilitan la cuestión de forma extrema. Así, este tipo de tareas es mucho más fácil de implementar que lo que era en el pasado. Por otro lado, si existe alguna duda en la forma en que un diagrama debe trazarse, la red es una gran ayuda debido al gran caudal de información que provee. En este sentido ha existido un enorme progreso y la generación de un diagrama de flujo ya no es una tarea circunscrita al terreno de especialistas.

... de Importancia: http://www.importancia.org/diagramas-de-flujo.php

miércoles, 30 de septiembre de 2015

Los diagramas de flujo son una manera de representar visualmente el flujo de datos a travéz de sistemas de tratamiento de información. Los diagramas de flujo describen que operaciónes y en que secuencia se requieren para solucionar un problema dado.
Un diagrama de flujo u organigrama es una representación diagramática que ilustra la secuencia de las operaciones que se realizarán para conseguir la solución de un problema. Los diagramas de flujo se dibujan generalmente antes de comenzar a programar el código frente a la computadora. Los diagramas de flujo facilitan la comunicación entre los programadores y la gente del negocio. Estos diagramas de flujo desempeñan un papel vital en la programación de un problema y facilitan la comprensión de problemas complicados y sobre todo muy largos. Una vez que se dibuja el diagrama de flujo, llega a ser fácil escribír el programa en cualquier idióma de alto nivel. Vemos a menudo cómo los diagramas de flujo nos dan ventaja al momento de explicar el programa a otros. Por lo tanto, está correcto decir que un diagrama de flujo es una necesidad para la documentación mejor de un programa complejo.
Reglas para dibujar un diagramas de flujo.
Los Diagramas de flujo se dibujan generalmente usando algunos símbolos estándares; sin embargo, algunos símbolos especiales pueden también ser desarrollados cuando séan requeridos. Algunos símbolos estándares, que se requieren con frecuencia para diagramar programas de computadora se muestran a continuación:
Inicio o fin del programa
Pasos, procesos o líneas de instruccion de programa de computo
Operaciones de entrada y salida
Toma de desiciónes y Ramificación
Conector para unir el flujo a otra parte del diagrama
Cinta magnética
Disco magnético
Conector de pagina
Líneas de flujo
Anotación
Display, para mostrar datos
Envía datos a la impresora
Observación: Para obtener la correcta elaboración de los símbolos, existen plantillas. Las puedes conseguir en Papelerías.
Simbolos gráficos
Dentro de los simbolos fundamentales para la creaación de diagramas de flujo, los símbolos gráficos son utilizádos especificamente para para operaciónes aritméticas y relaciónes condicionales. La siguiente es una lista de los símbolos más comunmente utilizados:
+ Sumar
- Menos
* Multiplicación
/ División
± Mas o menos
= Equivalente a
> Mayor que
< Menor que
³ Mayor o igual que
£ Menor o igual que
¹ o <>
Diferente de
  Si
  No
  True
  False
Reglas para la creacion de Diagramas
  1. Los Diagramas de flujo deben escribirse de arriba hacia abajo, y/o de izquierda a derecha.
  2. Los símbolos se unen con líneas, las cuales tienen en la punta una flecha que indica la dirección que fluye la información procesos, se deben de utilizar solamente líneas de flujo horizontal o verticales (nunca diagonales).
  3. Se debe evitar el cruce de líneas, para lo cual se quisiera separar el flujo del diagrama a un sitio distinto, se pudiera realizar utilizando los conectores. Se debe tener en cuenta que solo se vana utilizar conectores cuando sea estrictamente necesario.
  4. No deben quedar líneas de flujo sin conectar
  5. Todo texto escrito dentro de un símbolo debe ser legible, preciso, evitando el uso de muchas palabras.
  6. Todos los símbolos pueden tener más de una línea de entrada, a excepción del símbolo final.
  7. Solo los símbolos de decisión pueden y deben tener mas de una línea de flujo de salida.
Ejemplos de diagramas de flujo
Diagrama de flujo que encuentra la suma de los primeros 50 numeros naturales

Bueno, y ahora la descripción del diagrama anterior

Suma, es la variable a la que se le va agregando la valor de cada número natural. N, es el contador. Éste recorrerá lo números hasta llegar al 50.
  • El primer bloque indica el inicio del Diagrama de flujo Inicio del Diagrama de flujo
  • El segundo bloque, es un Símbolo de procesos Bloque de proceso En este bloque se asume que las variables suma y N han sido declaradas previamente y las inicializa en 0 para comenzar a el conteo y la suma de valores (Para declararlas existe el bloque Tarjeta perforada).
  • El tercer bloque, es también un Símbolo de procesos Bloque de procesos En éste paso se incrementa en 1 la variable N (N = N + 1). Por lo que, en la primera pasada esta N valdrá 1, ya que estaba inicializada en 0.
  • El cuarto bloque es exactamente lo mismo que el anterior Bloque de procesos Pero en éste, ya se le agrega el valor de N a la variable que contendrá la suma (En el primer caso contendrá 1, ya que N = 1).
  • El quinto bloque es uno Símbolo de Toma de decisiones y Ramificación Lo que hay dentro del bloque es una pregunta que se le hace a los valores que actualmente influyen en el proceso 
  • Símbolo de toma de desiciónes y Ramificación  
  • ¿Es N=50?, Obviamente la respuesta es no, ya que N todavía es 1. por lo que el flujo de nuestro programa se dirigirá hacía la parte en donde se observa la palabra no: Tercer Bloque, éste le sumará 1 (N=N+1) y vuelve a llegar a éste bloque, donde preguntará ¿Es N=50?... ¡No!, todavía es 2. Ha pues, regresa al Tercer bloque y vuelve hacer lo mismo. Y así hasta llegar a 50, obteniendo así la suma de los primeros 50 primeros números naturales.
  • Por último indicamos que el resultado será mostrado en la impresora (Este lo puedes cambiarlo por el display para mostrar datos). Bloque de Display
  • Fin del programa (o diagrama) Fin del diagrama

martes, 29 de septiembre de 2015

¿”Java es lento”?
Java tuvo sus inicios en 1991, y Sun Microsystems lo liberó al público en 1995. Aunque el lenguaje heredó mucha de sus sintaxis de C/C++, los objetivos de Java en aquél entonces pueden resumirse en los siguientes principios:
• Simple, orientado a objetos y familiar.

• Robusto y seguro.

• Arquitectónicamente neutro y portable.

• Ejecutándose en “alto desempeño”.

• Interpretado, con soporte a paralelismo y dinámico.
El compilador de Java convierte el código fuente en archivos bytecode, que posteriormente son interpretados por la Máquina Virtual de Java o JVM, en un modelo de ejecución en pila o stack. Las primeras versiones de Java – previas a la 1.2 – no realizaban optimizaciones en el bytecode y debido a que las diferentes versiones de JVM eran más bien genéricas, la ejecución tenía un desempeño pobre.
A partir de la versión 1.2 (Diciembre de 1998), Java incluyó un compilador Just-In-Time o JIT, que optimizaba el bytecode en tiempo real de acuerdo a la carga de trabajo sobre el programa. Como contraste, un modelo de compilación estática como C/C++ “adivina” dónde se encuentran los cuellos de botella y se enfoca en esa parte del código para realizar la optimización, pero en el caso de ambientes dinámicos como las aplicaciones web, el compilador JIT mantiene una relativa ventaja. Por otro lado, con cada nueva versión de Java, el lenguaje ha ido mejorando su desempeño, ya sea por optimización en la JVM, el recolector de basura o el compilador JIT. De acuerdo a este artículo, podemos ver la comparación en desempeño entre C++ y Java en algunas funciones relativamente sencillas. Lo sorprendente es lo malo que se desempeña C++ si durante la secuencia de compilación y enlace (linking) se deshabilitan todas las banderas de optimización de código. Adicionalmente, de la versión 6 a la 7, Java mejora su desempeño en alrededor de un 33%:
Función Ejemplo Java SE 6 (2010) Java SE 7 (2012) C++ (optimizado) C++ (sin optimizar)
Aritmética entera int Y = rand(X) * 2 25 16 0.001427 70
Aritmética de punto flotante double Y = rand(X) * 2.0 47 28 0.001477 85
Comparación de enteros if A == B then X = B else X = B 50 33 0.001971 56
Acceso a memoria indexada for i = 0 to N: int X = array[n] 53 25 11 136
Asignación de memoria – tipo primitivo for i = 0 to N: int array[n] = X 12,994 7,589 3,661 8,567
Asignación de memoria – objetos for i = 0 to N: Object array[n] = X 710,788 191,581 29,348 70,436

Tiempos de ejecución en milisegundos (excepto la asignación de memoria, dada en nanosegundos) para algunas funciones en C++ y Java. La ejecución de J2SE 7 se realizó el 10/12/2012. Fuente: developer.com
Podemos deducir que el problema de desempeño no reside en el lenguaje mismo, sino en el compilador y en su caso, la JVM. De hecho, existen dos ejemplos de esta dependencia:
• Es bien sabido por muchos que JRockit, la JVM construida por BEA Systems (ahora Oracle) y publicada en 2002, es mucho más escalable en ambientes con una fuerte demanda de recursos que HotSpot, la JVM originalmente concebida por Sun Microsystems. Tanto así que la próxima Java SE 8, por liberar en Septiembre de 2013, tendrá integrado el core de JRockit.
• Por el contrario, algunas versiones de C++ para Linux sobre Intel pueden tener un nivel de optimización tan mediocre (por ejemplo, G++ [gcc] 3.3.1), que incluso con código escrito por el mejor programador, pueden tener un desempeño equivalente o más lento que el de Java, con lo que muchos fans de éste lenguaje justifican la afirmación de que “Java es más rápido que C++” (idea que por cierto, también es errónea).
Finalmente, debemos considerar la manera en que se está usando el lenguaje cuando hablamos de desempeño. En el caso de Java, tenemos el clásico ejemplo de Vector vs. ArrayList: mientras un Vector es una colección de datos “segura” para implementar hilos de ejecución y paralelismo, ésta genera un fuerte golpe al desempeño debido a que controla el acceso concurrente sobre los elementos que ésta almacena. Por ello, tampoco es sano realizar nuestras comparaciones sin primero verificar que el código fuente está optimizado, ya que en algunos casos la programación es tan mala que el tiempo de ejecución se incrementará enormemente.
Java vs. C++: una comparación histórica
¿Cómo se comparan Java y C++ en términos de programas “de la vida real”? Actualmente abundan muchos microbenchmarks como el arriba mostrado, donde se verifican funciones muy simples, como manipulación de arreglos o acceso a memoria. Sin embargo, la mayoría de los casos de prueba son demasiado básicos como para ser un indicador confiable del desempeño. En la actualidad, existe un estudio comparativo formal: desarrollado por J. P. Lewis y Ulrich Neumann, investigadores de la Universidad del Sur de California (USC), el estudio se basa en 5 pruebas con diferentes versiones de Java y C++. Sus resultados, en términos generales, fueron los siguientes:
• Al comparar algoritmos numéricos como FFT, factorización de matrices o SOR en diferentes arquitecturas y compiladores, los investigadores encontraron que el desempeño de Java en plataformas Intel es razonablemente cercano al de C++ y que Java era más rápido que al menos un compilador en C (KAI sobre Linux Red Hat 5.0). En hardware con Intel Pentium, especialmente con Linux, la diferencia en desempeño es lo suficientemente pequeña como para carecer de importancia.
• Al utilizar el benchmark SciMark2 en una plataforma Intel, ellos encontraron que el IBM JDK 1.3.0 generaba un poder de procesamiento de 84.5 MFlops, mientras que el compilador de linux2.2 gcc (2.9x) era marginalmente mejor con 87.1 MFlops. Es decir, Java era tan sólo 3% más lento que C++.
• Utilizando implementaciones de métodos numéricos mediante objetos, ellos encontraron que Java se aproximaba bastante a los tiempos que tardaba C++ en ejecutarse. Por ejemplo, para generar el Triángulo de Pascal, Java tardaba 9 milisegundos mientras C++ tardaba 1.1 segundos. Para una Factorización LU, Java tardaba 1 segundo en resolver el problema mientras C++ tardaba hasta 3.9 segundos.
• Implementando microbenchmarks con y sin cache, los investigadores encontraron que Java se encuentra justo a la mitad entre los mejores y los peores compiladores de C++. Es decir, Java 3 es mejor que gcc 3.2, pero nunca le ganará a un gcc 4.1.0.
El problema que tengo con este estudio es que fue desarrollado hace ya algún tiempo – en aquél entonces, Lewis y Neumann compararon Java 2 o 3 contra las versiones de C++ disponibles entre 2003 y 2004 – por lo que si bien podemos darnos una mejor idea de que la velocidad de los programas definitivamente depende del compilador, hoy por hoy tendríamos que correr todas estas pruebas en plataformas multi-core, con la última versión de software disponible para darnos cuenta cuál es el estatus actual de esta “carrera armamentista”.
Java 7 vs. C++ (gcc) 4.6.3
Afortunadamente, los amigos de Debian han hecho su tarea de forma magnífica. Mediante crowdsourcing, ellos han estado comparando no sólo Java y C++, sino también implementaciones de otros lenguajes como Fortran, Ruby o Perl. Incluyendo árboles binarios, fractales de Mandelbrot o el cálculo de Pi (π), los resultados son bastante coherentes. Aunque las pruebas se desarrollaron en diferentes plataformas, para este caso nos enfocaremos en los resultados de correr estos programas en Intel Q6600 (Quad Core) con Ubuntu 5.10 x64:
Prueba Java SE 7 C++ 4.6.3 Mejor de su tipo (factor = 1.0)
N-Body 2.1 1.0 C++
Fannkuch-redux 1.9 1.4 ADA 2005 GNAT
Meteor-contest 15.0 1.0 C++
Fasta 3.4 1.7 C
Spectral-norm 2.3 1.0 Fortran Intel, ADA 2005 GNAT, C++ (empate)
Reverse-complement 1.9 1.0 C++
Mandelbrot 1.9 1.7 Fortran Intel
K-nucleotide 1.1 1.0 C++
Regex-dna 5.3 1.7 C
Pidigits 2.4 1.2 ATS
Chameneos-redux 7.8 1.1 ADA 2005 GNAT, C (empate)
Thread-ring 41.0 21.0 Haskell GHC
Binary-trees 1.6 1.6 C

Factor de desempeño en Java y C++ para diversos algoritmos matemáticos. El factor se mide como 1.0 = tiempo con el mejor desempeño. En la tabla se muestra que para el programa Fannkuch-redux, Java tardó 1.9 veces el mejor tiempo, mientras que C++ tardó 1.4 veces el mejor tiempo. En este ejemplo, el mejor tiempo se lo llevó el lenguaje ADA 2005 GNAT. Fuente: debian.org
Obteniendo la media, mejores y peores tiempos, también incluidos en el estudio, nos damos cuenta que Java no está lejos de alcanzar la velocidad de C++, aunque todavía permanece por debajo del desempeño logrado por éste lenguaje y sus optimizaciones:
Lenguaje Mejor Tiempo Peor Tiempo Media
C++ 1.00 1.69 1.21
Java 7 1.13 3.46 1.95

Comparación de desempeño para todas las pruebas en Java y C++. Fuente: debian.org
De hecho, si sólo tomamos los valores de la media, nos daremos cuenta que el factor de desempeño de Java es de 3.46/1.69 = 2.06 contra el de C++. Es decir, una relativamente amplia variedad de programas escritos en Java tardarían aproximadamente el doble de lo que tardarían si fueran escritos en C++. Esto es un precio a pagar muy pequeño si tomamos en cuenta los otros beneficios de Java, como portabilidad, facilidad de uso, o impedir que los programadores administren la memoria directamente (apuntadores, ¿alguien?).
Conclusiones
Aunque todavía le falta camino por recorrer, durante los últimos años Java ha disminuido su factor de desempeño contra C++ hasta alrededor del doble en plataformas Linux-Intel. Por lo que es necesario “iluminar a los no iniciados” para que se den cuenta que la “lentitud de Java” es una leyenda urbana que ha perdurado por más de 15 años sin un verdadero análisis que lo respalde. Por otro lado, es importante reconocer que ningún lenguaje es la “bala de plata”, por lo que Java o C++ deben implementarse de acuerdo al problema que queremos resolver: para acceder a recursos de bajo nivel como drivers, rutinas matemáticas o código embebido de alto desempeño, la respuesta la encontramos en C++. Para programas orientados a negocios o web que requieran facilidad de modificación, portabilidad o simplemente, cuyos problemas de desempeño puedan ser “matados a billetazos” (es decir, pagando por agregar hardware más potente), Java es una buena opción. Para finalizar, esto no debería ser una competencia para ver “quién es el mejor”, sino encontrar la manera de complementar ambos lenguajes. Después de todo, ambos son los más populares entre los programadores. En nuestro caso particular, una opción interesante será tener el procesamiento geoespacial en C++, mientras dejamos todo lo demás en Java y sus múltiples frameworks de desarrollo.