domingo, 30 de junio de 2019

TIPOS DE LICENCIAS DE SOFTWARE


SOFTWARE LIBRE O FREE SOFTWARE:
Es un software disponible para cualquiera que desee utilizarlo, copiarlo y distribuirlo, ya sea en su forma original o con modificaciones, si un programa es libre, puede ser potencialmente incluido en un sistema operativo también libre. Es importante no confundir software libre con software gratis, porque la libertad asociada al software libre de copiar, modificar y redistribuir, no significa gratuidad.

COPYLEFT:
 La función del copyright es evitar que algún material sea modificado y distribuido por alguien ajeno a la autoría de dicho producto; sin embargo, esto se contrapone con la filosofía del software libre y es por ello que nació el copyleft. Así que, esta legislación se encarga de impedir que sea usado el código fuente sin autorización; y, además, define las condiciones bajo las cuales se puede hacer uso de él.



GPL (Licencia Pública General Reducida de GNU):
Es un ejemplo de software libre con protección copyleft; sin embargo, sus términos le permiten integrarse con módulos de software no libre y también poderse comercializar. Ya que está licencia declara de forma explícita que cualquier obra con licencia GPL puede ser vendida a cualquier precio o distribuida gratuitamente; dando así libertad a las empresas para beneficiarse con el uso de su extenso acervo de librerías; o bien, seguir aportando más software gratuito a la comunidad.


DEBIAN (Debian Free Software Guidelines):
Se trata de una licencia para software libre que posee lineamientos bastante estrictos en cuanto a la distribución del código,ya que exige, que cualquier distribución hecha bajo la licencia Debian deba estar acompañada de su código fuente, y además debe ser libre.
Así mismo, se menciona que estos lineamientos no deben variar dependiendo del sitio donde se encuentre; y cualquier proyecto derivado debe ser puesto bajo la misma licencia. También, la licencia no tiene permitido discriminar a ninguna persona o grupo de personas; así como, no puede “contaminar” otro software.


BSD (Distribución del Software Berkeley): 
Puede considerarse como de las más permisivas en el software libre; ya que, a pesar de imponer restricciones, no se compara en absoluto con los casos anteriores. Los principales lineamientos de esta licencia son la libertad para poder comercializar el software libremente, no hay obligación de compartir tu código fuente, y se garantiza el crédito para los desarrolladores que participaron en su elaboración.


X.ORG: 
Se trata de una licencia que podría llamarse híbrida, ya que puede ser aplicada a software libre y software que no lo es. Por lo tanto, sus lineamientos no están apegados al ya mencionado copyleft. Su principal exponente es X Windows System, un sistema que nació para dotar de interfaz gráfica a los sistemas basados en Unix y actualmente se encuentra en uso la versión 11 (X11).



SOFTWARE CON DOMINIO PÚBLICO: 
El Software con dominio público es software sin copyright, algunos tipos de copia o versiones modificadas pueden no ser libres si el autor impone restricciones adicionales en la redistribución del original o de trabajos derivados.

SOFTWARE SEMI-LIBRE: 
Es un software que no es libre, pero permite que otros individuos lo usen, lo copien, lo distribuyan y hasta lo modifiquen. Ejemplos de software semi-libre son las primeras versiones de Internet Explorer de Microsoft, o algunas versiones de browsers de Netscape, y StarOffice.


FREEWARE: 
Esta licencia de software es utilizada para programas que permiten la redistribución, pero no la modificación, y que incluyen su código fuente. Estos programas no son software libre.
Es un programa gratuito, sin embargo, no es libre, en este tipo de licencia el autor puede restringir su programa al uso empresarial, redistribución no autorizada, modificación por usuarios y otro tipo de restricciones.
Algunos ejemplos de este tipo de software son Microsoft Edge, Google Chrome, el archiconocido Adobe ReaderAdobe Flash Player, Windows Live Messenger y muchos otros.


SHAREWARE: 
Es el software disponible con el permiso para que sea redistribuido, pero su utilización implica el pago, generalmente, el código fuente no se encuentra disponible, y por lo tanto es imposible realizar modificaciones.
Es un programa distribuido gratuitamente, pero por tiempo limitado o con algunos recursos restringidos. A través del pago de un valor definido por el autor del programa, se puede obtener el registro del programa o la versión integral con todos los recursos. Abarca las licencias adwares, trial y demo.


Software Propietario
El Software propietario es aquel cuya copia, redistribución o modificación están, en alguna medida, prohibidos por su propietario. Para usar, copiar o redistribuir, se debe solicitar permiso al propietario o pagar.

Software Comercial
El Software comercial es el software desarrollado por una empresa con el objetivo de lucrar con su utilización. Nótese que “comercial” y “propietario” no son lo mismo. La mayor parte del software comercial es propietario, pero existe software libre que es comercial, y existe software no-libre que no es comercial.


Adware
Subprograma que descarga publicidad sobre otro programa principal. Esto ocurre cuando un programa tiene versiones comerciales o más avanzadas que necesitan ser compradas para poder ser utilizadas. Pagando por la versión comercial, esos anuncios desaparecen. Es una licencia muy poco usada. Un ejemplo es el Ashampoo Burning Studio 2009.

Trial
Versión de programa pago, distribuido gratuitamente con todos los recursos activos, pero por un tiempo determinado. Es como un programa freeware, que después de determinado tiempo deja de funcionar. Para continuar con la utilización del programa, se debe comprar la clave de registro e insertarla en el programa, para que vuelva a ejecutarse. Ejemplo: Nero, Alcohol 120% y Photoshop.


Demo
Versión de demostración, liberada por el autor, que no contiene todas las funciones del programa original. Es distribuida gratuitamente, y no tiene plazo de validez, pero también tiene pocos recursos y funciones. Ejemplo: Need for Speed DEMO, FIFA DEMO.

Crippleware
Es un programa con menos recursos y funciones. Muy conocido como «versión lite». Ideal para ser usado en computadoras viejas. Ejemplo: BurnAware Free.

Donationware
Versión de programa en la que el autor solicita una donación, para cubrir los gastos del desarrollo del programa. No es obligatoria, pero si solicitada. El programa no sufre variantes por realizar o no la donación. Ejemplo: FreeRapid Downloader, Linux Slax.

Abandonware
Programa cuyo desarrollo fue abandonado. El autor debe anunciar públicamente el abandono del programa para ser “abandoware”, mientras tanto el programa está protegido contra los derechos de copia (copyright). Si la discontinuidad es anunciada, el programa puede ser distribuido y modificado por cualquier usuario o desarrollador.

Licencias de software extrañas o muy poco utilizadas

Careware
Licencia de programa que solicita la ayuda de donaciones para fondos de caridad y organizaciones de ayuda humanitaria.

Postcardware (o cardaware)
Tipo de licencia en la que el autor solicita que una tarjeta o postal se le sea enviada. El usuario es sólo invitado a hacer eso. Muy similar al Emailware, en que los usuarios mandan e-mails al autor del programa.




¿QUÉ ES ARDUINO?


Arduino es una plataforma de hardware libre, basada en una placa con un microcontrolador y un entorno de desarrollo,diseñada para facilitar el uso de la electrónica en proyectos multidisciplinares.

Nos proporciona un  software consistente en un entorno de desarrollo (IDE) que implementa el lenguaje de programación de arduino y el bootloader ejecutado en la placa,la principal característica del software de programación y del lenguaje de programación es su sencillez y facilidad de uso,se puede utilizar para desarrollar elementos autónomos, conectándose a dispositivos e interactuar tanto con el hardware como con el software. 

Nos sirve tanto para controlar un elemento, pongamos por ejemplo un motor que nos suba o baje una persiana basada en la luz existente es una habitación, gracias a 
un sensor de luz conectado al Arduino, o bien para leer la información de una fuente, como puede ser un teclado, y convertir la información en una acción como puede 
ser encender una luz y pasar por un display lo tecleado.

En resumen:
Arduino=HW+SW+Comunidad

HW ARDUINO:Es básicamente una placa con un microcontrolador(abreviado µC, UC o MCU) es un circuito integrado programable, capaz de ejecutar las órdenes grabadas 
en su memoria.Está compuesto de varios bloques funcionales, los cuales cumplen una tarea específica,un microcontrolador incluye en su interior las tres principales 
unidades funcionales de una computadora: unidad central de procesamiento, memoria y periféricos de entrada/salida.

Caracteristicas de un Microcontrolador:
-Velocidad del reloj u oscilador
-Tamaño de palabra
-Memoria: SRAM, Flash, EEPROM, ROM, etc..
-I/O Digitales
-Entradas Analógicas
-Salidas analógicas (PWM)
-DAC (Digital to Analog Converter)
-ADC (Analog to Digital Converter)
-Buses
-UART
-Otras comunicaciones

Arduino dispone de una amplia variedad de placas y shields para usar dependiendo de nuestras necesidades.


Las shields son placas de circuitos modulares que se montan unas encima de otras para dar funcionalidad extra a un Arduino. Esta Shields son apilables.


Las shields se pueden comunicar con el arduino bien por algunos de los pines digitales o analógicos o bien por algún bus como el SPI, I2C o puerto serie, así como usar 
algunos pines como interrupción. Además estas shields se alimenta generalmente a través del Arduino mediante los pines de 5V y GND,cada Shield de Arduino debe tener el mismo 
factor de forma que el estándar de Arduino con un espaciado de pines concreto para que solo haya una forma posible de encajarlo.

Cabe destacar alguna placas Arduino:

ARDUINO UNO: Es la placa estándar y posiblemente la más conocida y documentada. Salió a la luz en septiembre de 2010 sustituyendo su predecesor Duemilanove con varias mejoras de hardware que consisten básicamente en el uso de un USB HID propio en lugar de utilizar un conversor FTDI para la conexión USB. Es 100% compatible con los modelos Duemilanove y Diecimila. Viene con un Atmega328 con 32Kbytes de ROM para el programa.


ARDUINO MEGA:Es con mucha diferencia el más potente y el que más pines i/o tiene, apto para trabajos ya algo más complejos aunque tengamos que sacrificar un poco el espacio, cuenta con el microcontrolador Atmega2560 con más memoria para el programa, más RAM y más pines que el resto de los modelos.


ARDUINO MKR1000: Versión para IoT con procesador Atmel ARM Cortex M0+ de 32bits ATSAMW25 que es el mismo procesador que Genuino Zero pero con wifi integrado, chip de cifrado y antena integrada.

ARDUINO YUN: Con MCU Atmel AVR de 8 bits ATmega32U4 y procesador MIPS Qualcomm Atheros AR9331 a 400 MHz con wifi integrado y SO linux Linino basado en OpenWRT y ethernet,su principal característica es la capacidad de comunicar la MCU con el SO linux mediante un puerto serie interno.

PLACAS COMPATIBLES ARDUINO:
El HW Arduino no solo se queda en las placas oficiales, sino que en los últimos años han aparecido muchas placas de prototipado basadas en los mismos o diferentes microcontroladores que bien por acuerdos con Arduino, por los propios fabricante de los microcontroladores o por la propia comunidad de usuarios, estas placas tienen soporte del IDE de Arduino y es posible programarlas como el resto de Arduinos oficiales con el mismo lenguaje de programación.

Placas no oficiales Arduino con soporte para el IDE de Arduino son: 
-ESP8266
-ESP32(Datasheet)
-Chipkit(placas basadas en el microcontrolador PIC32)
-Moteino
-Windows 10 IoT Core


SW ARDUINO:El software de Arduino es un IDE, entorno de desarrollo integrado (siglas en inglés de Integrated Development Environment),es un programa informático compuesto por un conjunto de herramientas de programación.

El IDE de Arduino es un entorno de programación que ha sido empaquetado como un programa de aplicación; es decir, consiste en un editor de código, un compilador, un depurador y un constructor de interfaz gráfica (GUI). Además incorpora las herramientas para cargar el programa ya compilado en la memoria flash del hardware.


COMUNIDAD ARDUINO: Un factor del éxito de Arduino ha sido la comunidad que está apoyando este proyecto y que día a día publica nuevo contenido, divulga y responde a las dudas.

Arduino playground es un wiki donde todos los usuarios de Arduino pueden contribuir,es el lugar donde publicar y compartir código, diagrama de circuitos, tutoriales, trucos, cursos, etc.. y sobretodo el lugar donde buscar cuando tengamos dudas, un problema, una librería adecuada para nuestro proyecto, etc… Esa la base de datos de conocimiento por excelencia de Arduino.

También existen lugares no oficiales de Arduino donde resolver nuestras dudas:

-Stackexchange
-Stackoverflow
-Stackexchange electronica

Otro lugar de encuentro de la comunidad son diversos portales donde se publican proyectos con Arduino:
-Hackster
-Hackaday
-Instructables
-Arduino project hub
-OpenHardware
-Make
-Makehouseof

ARDUINO VS RASPBERRY PI: Existe la creencia popular que Arduino es una Raspberry Pi pero con menos capacidades.
 Obviamente si comparamos los valores de memoria RAM, frecuencia de CPU y capacidad de almacenamiento, podemos creer que así es, pero se trata de dos placas con funcionalidades diferentes.

Las diferencias principales entre una Raspberry Pi y un Arduino son:
-Número de entradas y salidas disponibles y sus capacidades de corriente y voltaje.
-La programación, Arduino se usa para programación en tiempo real, en Raspberry Pi se usa para programación intensiva con gran cantidad de datos.
-Como se ejecuta la aplicación del usuario

Raspberry Pi:

Arduino:


ANALOGÍA: Arduino es un Autómata programable y Raspberry Pi es un Ordenador, así que a la hora de decidirse que utilizar para un proyecto deberíamos pensar si usar un autómata o un ordenador.
Comparativa:

Conexiones Raspberry Pi:

Conexiones Arduino:


CONCLUSIÓN:Todos los pines de Raspberry Pi tienen un nivel lógico de 3.3V incluido puerto serie, bus I2C y SPI.
-Los pines de Raspberry Pi no soportan entradas de 5V. 
-Para Arduino UNO el nivel lógico es de 5V.
-Cada pin de Raspberry Pi soporta un máximo de 16mA hasta un total de 51mA para toda la placa.
-Arduino Uno soporta un máximo de 40mA por pin (20mA recomendado) y hasta 300mA en total para la placa.

REFERENCIAS BIBLIOGRÁFICAS:
https://www.hwlibre.com/que-es-arduino/
http://arduino.cl/que-es-arduino/
https://hetpro-store.com/TUTORIALES/que-es-arduino/

LENGUAJES DE PROGRAMACIÓN


Es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras,Pueden usarse para crear programas que controlen el comportamiento físico y lógico de una máquina, para expresar algoritmos con precisión, o como modo de comunicación humana.

Permite especificar de manera precisa sobre qué datos debe operar una computadora, cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias,todo esto , a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural, tal como sucede con el lenguaje Léxico.Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción del programa de forma colaborativa.

Por lo general suelen estar orientados a objetosa eventos o a funciones, pudiendo estos combinarse. Asimismo, pueden ser compilados o interpretados. Algunos ejemplos son: JavaPHPPythonJavascriptC++.

LENGUAJE DE ALTO NIVEL:
Se refiere al nivel más alto de abstracción de lenguaje de máquina,en lugar de tratar con registros, direcciones de memoria y las pilas de llamadas, lenguajes de alto nivel se refieren a las variables, matrices, objetos, aritmética compleja o expresiones booleanas, subrutinas y funciones, bucles, hilos, cierres y otros conceptos de informática abstracta, con un enfoque en la facilidad de uso sobre la eficiencia óptima del programa.


VENTAJAS:
  • Genera un código más sencillo y comprensible.
  • Escribir un código válido para diversas máquinas o sistemas operativos.
  • Permite utilizar paradigmas de programación.
  • Permite crear programas complejos en relativamente menos líneas de código.

INCONVENIENTES:
  • Reducción de velocidad al ceder el trabajo de bajo nivel a la máquina.
  • Algunos requieren que la máquina cliente posea una determinada plataforma.

LENGUAJE DE BAJO NIVEL:
Un lenguaje de programación de características de bajo nivel o de primera generación, es aquel en el que sus instrucciones ejercen un control directo sobre el hardware y están condicionados por la estructura física de las computadoras que lo soportan.
 El uso de la palabra bajo en su denominación no implica que el lenguaje sea menos potente que un lenguaje de alto nivel, sino que se refiere a la reducida abstracción entre el lenguaje y el hardware.

Los lenguajes de bajo nivel tales como el lenguaje ensamblador pueden ser más difíciles de programar que los lenguajes de alto nivel debido a que están más íntimamente relacionados con las características técnicas del hardware. Además estos suelen carecer de abstracciones de mayor nivel. No es posible una abstracción fuera de lo estipulado para el conjunto del microcódigos del microprocesador de un ordenador. Por otro lado, es más fácilmente traducible a lenguaje de máquina, tarea que realiza esencialmente un compilador.

En este tipo de lenguajes se trabaja a nivel de instrucciones, es decir, su programación es al más fino detalle, además, está completamente orientado a la máquina.
  • Adaptación - Máxima entre programación y aprovechamiento del recurso de la máquina.
  • Velocidad - Máxima al contar con un acceso directo a los recursos, sin capas intermedias.
  • Portabilidad - Mínima por estar restringido a las especificaciones del fabricante.
  • Abstracción - Mínima por depender completamente de la técnica del hardware.
  • Uso - Requiere de la máxima atención y de una organización estructurada sobre la base de los planos del hardware y del objetivo del software.
  • isomorfismo - Conceptualización de los datos de la información, que se complementaran

LENGUAJE DE MÁQUINA:
El lenguaje máquina es el único lenguaje que puede ejecutar una computadora,es específico en cada arquitectura, es un código que es interpretado directamente por el microprocesador, está compuesto por un conjunto de instrucciones ejecutadas en secuencia que representan acciones que la máquina podrá tomar.


El lenguaje máquina es el único que entiende directamente la computadora, utiliza el alfabeto binario que consta de los dos únicos símbolos 0 y 1, denominados bits; físicamente, se materializan con tensiones comprendidas entre 0 y 4.0 voltios y entre 4 y 5 voltios, respectivamente. Para representar datos que contengan una información se utilizan una serie de unos y ceros cuyo conjunto indica dicha información.

Todo código fuente en última instancia debe llevarse a un lenguaje máquina mediante el proceso de compilación o interpretación para que la computadora pueda ejecutarlo,
el código máquina, o lenguaje de máquina, está formado por instrucciones sencillas, que dependiendo de la estructura del procesador pueden especificar:
  • Registros específicos para operaciones aritméticas, direccionamiento o control de funciones.
  • Posiciones de memoria específicas (offset).
  • Modos de direccionamiento usados para interpretar operando.
Las instrucciones de máquina o instrucciones del computador son las que determinan el funcionamiento de la CPU que las ejecuta, la CPU puede realizar una diversidad de funciones que son el reflejo de la variedad de las instrucciones definidas para dicha CPU, el programador tiene un repertorio de instrucciones como medio para controlar la CPU.
Las operaciones más complejas se realizan combinando estas instrucciones sencillas, que pueden ser ejecutadas secuencialmente o mediante instrucciones de control de flujo.

 Ventajas del Lenguaje Máquina:
  • Posibilidad de cargar (transferir un programa a la memoria) sin necesidad de traducción posterior, lo que supone una velocidad de ejecución superior a cualquier otro lenguaje de programación.
Desventajas del Lenguaje Máquina:
  • Dificultad y lentitud en la codificación.
  • Poca fiabilidad.
  • Gran dificultad para verificar y poner a punto los programas.
  • Los programas solo son ejecutables en el mismo procesador (CPU).

PROBLEMAS EN LOS MEDIOS FÍSICOS


De acuerdo con el medio físico que utilice una red para implementar sus enlaces, la red puede ser  clasificada como una red de fibra óptica, red satélital, red de microondas,etc. Cada medio físico tiene características propias que lo hacen apropiado para soportar diferentes tipos de redes y/o verificar los tipos de problemas mas comunes. 

CABLE UTP/STP(PAR TRENZADO):
- Sujeto a interferencias como la estática y los ruidos
-Tiene un limite de distancia bastante corto comparado con otras alternativas.

SOLUCIONES:
- El UTP presenta una mera cubierta de plástico que protege el cable de contacto directo, mientras que el STP dispone de una cobertura exterior en forma de malla conductora, ademas de la de plástico final, que sirve para reducir las interferencias electromagnéticas externas.
- La LAN tiene una limitación de presupuesto
-Se desea una instalación relativamente sencilla, donde las conexiones de los equipos sean simples.
-Bajo precio
-Fácil de empalmar

CABLE COAXIAL:
- Pesado y voluminoso
-Necesidad de un amplificador según la distancia
- Atenuación
-Ruido térmico/ intermodulación

SOLUCIONES:
-Aunque es mas caro que el par trenzado, se puede utilizar a mas larga distancia,con velocidades de transmisión superiores y menos interferencias
- Transmite mas rápido
-Menor atenuación



CABLE FIBRA ÓPTICA:
-Alto precio
-Dificultad al instalar o modificar

SOLUCIONES:
-Para poder conectar un cable de fibra a un equipo es necesario que en cada fibra se arme un conector, o bien, cada fibra se empalme con un PIGTAIL,que es un cable de una sola fibra que posee un conector en una de sus puntas, armado en fabrica.



LENGUAJES DE PROGRAMACION II

LENGUAJE C También conocido como "lenguaje de programación de sistemas", fue creado en el año 1972 por Dennis Ritchie para UNIX...