Hi,

Un lenguaje de programación es un lenguaje formal diseñado para realizar procesos que pueden ser llevados 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.​

Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila (de ser necesario) y se mantiene el código fuente de un programa informático se le llama programación.

También la palabra programación se define como el proceso de creación de un programa de computadora, mediante la aplicación de procedimientos lógicos, a través de los siguientes pasos:
El desarrollo lógico del programa para resolver un problema en particular.
Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa).
  • Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina.
  • Prueba y depuración del programa.
  • Desarrollo de la documentación.
Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más, como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación, sino un conjunto de instrucciones que permiten estructurar el contenido de los documentos).

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. 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 de un programa de forma colaborativa.

Historia:
Para que la computadora entienda nuestras instrucciones debe usarse un lenguaje específico conocido como código máquina, el cual la máquina comprende fácilmente, pero que lo hace excesivamente complicado para las personas. De hecho sólo consiste en cadenas extensas de números 0 y 1.

Para facilitar el trabajo, los primeros operadores de computadoras decidieron hacer un traductor para reemplazar los 0 y 1 por palabras o abstracción de palabras y letras provenientes del inglés; éste se conoce como lenguaje ensamblador. Por ejemplo, para sumar se usa la letra A de la palabra inglesa add (sumar). El lenguaje ensamblador sigue la misma estructura del lenguaje máquina, pero las letras y palabras son más fáciles de recordar y entender que los números.

La necesidad de recordar secuencias de programación para las acciones usuales llevó a denominarlas con nombres fáciles de memorizar y asociar: ADD (sumar), SUB (restar), MUL (multiplicar), CALL (ejecutar subrutina), etc. A esta secuencia de posiciones se le denominó "instrucciones", y a este conjunto de instrucciones se le llamó lenguaje ensamblador. Posteriormente aparecieron diferentes lenguajes de programación, los cuales reciben su denominación porque tienen una estructura sintáctica semejante a la de los lenguajes escritos por los humanos, denominados también lenguajes de alto nivel.

El primer programador de computadora que se haya conocido fue una mujer: Ada Lovelace, hija de Anabella Milbanke Byron y Lord Byron. Anabella inició en las matemáticas a Ada quien, después de conocer a Charles Babbage, tradujo y amplió una descripción de su máquina analítica. Incluso aunque Babbage nunca completó la construcción de cualquiera de sus máquinas, el trabajo que Ada realizó con éstas le hizo ganarse el título de primera programadora de computadoras del mundo. El nombre del lenguaje de programación Ada fue escogido como homenaje a esta programadora.

A finales de 1953, John Backus sometió una propuesta a sus superiores en IBM para desarrollar una alternativa más práctica al lenguaje ensamblador para programar la computadora central IBM 704. El histórico equipo Fortran de Backus consistió en los programadores Richard Goldberg, Sheldon F. Best, Harlan Herrick, Peter Sheridan, Roy Nutt, Robert Nelson, Irving Ziller, Lois Haibt y David Sayre.​

El primer manual para el lenguaje Fortran apareció en octubre de 1956, con el primer compilador Fortran entregado en abril de 1957. Esto era un compilador optimizado, porque los clientes eran reacios a usar un lenguaje de alto nivel a menos que su compilador pudiera generar código cuyo desempeño fuera comparable al de un código hecho a mano en lenguaje ensamblador.

En 1960, se creó COBOL, uno de los lenguajes usados aún en la actualidad, en informática de gestión.

A medida que la complejidad de las tareas que realizaban las computadoras aumentaba, se hizo necesario disponer de un método más eficiente para programarlas. Entonces, se crearon los lenguajes de alto nivel, como lo fue BASIC en las versiones introducidas en los microordenadores de la década de 1980. Mientras que una tarea tan sencilla como sumar dos números puede necesitar varias instrucciones en lenguaje ensamblador, en un lenguaje de alto nivel bastará una sola sentencia.

Elementos de un lenguaje de programación:
Variables y vectores
Las variables son títulos asignados a espacios en memoria para almacenar datos específicos. Son contenedores de datos y por ello se diferencian según el tipo de dato que son capaces de almacenar. En la mayoría de lenguajes de programación se requiere especificar un tipo de variable concreto para guardar un dato específico. Por ejemplo, en Java, si deseamos guardar una cadena de texto debemos especificar que la variable es del tipo String. Por otra parte, en lenguajes como PHP este tipo de especificación de variables no es necesario. Además, existen variables compuestas llamadas vectores. Un vector no es más que un conjunto de bytes consecutivas en memoria y del mismo tipo guardadas dentro de una variable contenedor. A continuación, un listado con los tipos de variables y vectores más comunes:
  1. Char: Estas variables contienen un único carácter, es decir, una letra, un signo o un número.
  2. Int: Contienen un número entero.
  3. Float: Contienen un número decimal.
  4. String:Contienen cadenas de texto, o lo que es lo mismo, es un vector con varias variables del tipo Char.
  5. Boolean: Solo pueden contener un cero o un uno.
En el caso de variables booleanas, el cero es considerado para muchos lenguajes como el literal falso ("False"), mientras que el uno se considera verdadero ("True").

Condicionales
Las sentencias condicionales son estructuras de código que indican que, para que cierta parte del programa se ejecute, deben cumplirse ciertas premisas; por ejemplo: que dos valores sean iguales, que un valor exista, que un valor sea mayor que otro... Estos condicionantes por lo general solo se ejecutan una vez a lo largo del programa. Los condicionantes más conocidos y empleados en programación son:
  1. If: Indica una condición para que se ejecute una parte del programa.
  2. Else if: Siempre va precedido de un "If" e indica una condición para que se ejecute una parte del programa siempre que no cumpla la condición del if previo y si se cumpla con la que el "else if" especifique.
  3. Else: Siempre precedido de "If" y en ocasiones de "Else If". Indica que debe ejecutarse cuando no se cumplan las condiciones previas.
Bucles
Los bucles son parientes cercanos de los condicionantes, pero ejecutan constantemente un código mientras se cumpla una determinada condición. Los más frecuentes son:
  1. For: Ejecuta un código mientras una variable se encuentre entre 2 determinados parámetros.
  2. While: Ejecuta un código mientras que se cumpla la condición que solicita.
Hay que decir que a pesar de que existan distintos tipos de bucles, todos son capaces de realizar exactamente las mismas funciones. El empleo de uno u otro depende, por lo general, del gusto del programador.

Funciones
Las funciones se crearon para evitar tener que repetir constantemente fragmentos de código. Una función podría considerarse como una variable que encierra código dentro de si. Por lo tanto cuando accedemos a dicha variable (la función) en realidad lo que estamos haciendo es ordenar al programa que ejecute un determinado código predefinido anteriormente.
Todos los lenguajes de programación tienen algunos elementos de formación primitivos para la descripción de los datos y de los procesos o transformaciones aplicadas a estos datos (tal como la suma de dos números o la selección de un elemento que forma parte de una colección). Estos elementos primitivos son definidos por reglas sintácticas y semánticas que describen su estructura y significado respectivamente.

Sintaxis
A la forma visible de un lenguaje de programación se le conoce como sintaxis. La mayoría de los lenguajes de programación son puramente textuales, es decir, utilizan secuencias de texto que incluyen palabras, números y puntuación, de manera similar a los lenguajes naturales escritos. Por otra parte, hay algunos lenguajes de programación que son más gráficos en su naturaleza, utilizando relaciones visuales entre símbolos para especificar un programa.

La sintaxis de un lenguaje de programación describe las combinaciones posibles de los símbolos que forman un programa sintácticamente correcto. El significado que se le da a una combinación de símbolos es manejado por su semántica (ya sea formal o como parte del código duro de la referencia de implementación). Dado que la mayoría de los lenguajes son textuales, este artículo trata de la sintaxis textual.

La sintaxis de los lenguajes de programación es definida generalmente utilizando una combinación de expresiones regulares (para la estructura léxica) y la Notación de Backus-Naur (para la estructura gramática). Este es un ejemplo de una gramática simple, tomada de Lisp:

expresión ::= átomo | lista 
átomo ::= número | símbolo 
número ::= [+-]? ['0'-'9']+ 
símbolo ::= ['A'-'Z'] ['a'-'z'].* 
lista ::= '(' expresión* ')' 

Con esta gramática se especifica lo siguiente:
  • una expresión puede ser un átomo o una lista;
  • un átomo puede ser un número o un símbolo;
  • un número es una secuencia continua de uno o más dígitos decimales, precedido opcionalmente por un signo más o un signo menos;
  • un símbolo es una letra seguida de cero o más caracteres (excluyendo espacios); y
  • una lista es un par de paréntesis que abren y cierran, con cero o más expresiones en medio.
Algunos ejemplos de secuencias bien formadas de acuerdo a esta gramática:
'12345', '()', '(a b c232 (1))'

No todos los programas sintácticamente correctos son semánticamente correctos. Muchos programas sintácticamente correctos tienen inconsistencias con las reglas del lenguaje; y pueden (dependiendo de la especificación del lenguaje y la solidez de la implementación) resultar en un error de traducción o ejecución. En algunos casos, tales programas pueden exhibir un comportamiento indefinido. Además, incluso cuando un programa está bien definido dentro de un lenguaje, todavía puede tener un significado que no es el que la persona que lo escribió estaba tratando de construir.

Usando el lenguaje natural, por ejemplo, puede no ser posible asignarle significado a una oración gramaticalmente válida o la oración puede ser falsa:
"Las ideas verdes y descoloridas duermen furiosamente" es una oración bien formada gramaticalmente pero no tiene significado comúnmente aceptado.
"Juan es un soltero casado" también está bien formada gramaticalmente pero expresa un significado que no puede ser verdadero.

El siguiente fragmento en el lenguaje C es sintácticamente correcto, pero ejecuta una operación que no está definida semánticamente (dado que p es un apuntador nulo, las operaciones p->real y p->im no tienen ningún significado):
complex *p = NULL; complex abs_p = sqrt (p->real * p->real + p->im * p->im); 

Si la declaración de tipo de la primera línea fuera omitida, el programa dispararía un error de compilación, pues la variable "p" no estaría definida. Pero el programa sería sintácticamente correcto todavía, dado que las declaraciones de tipo proveen información semántica solamente.

La gramática necesaria para especificar un lenguaje de programación puede ser clasificada por su posición en la Jerarquía de Chomsky (es una clasificación jerárquica de distintos tipos de gramáticas formales que generan lenguajes formales. Esta jerarquía fue descrita por Noam Chomsky en 1956.). La sintaxis de la mayoría de los lenguajes de programación puede ser especificada utilizando una gramática Tipo-2, es decir, son gramáticas libres de contexto. Algunos lenguajes, incluyendo a Perl y a Lisp, contienen construcciones que permiten la ejecución durante la fase de análisis. Los lenguajes que permiten construcciones que permiten al programador alterar el comportamiento de un analizador hacen del análisis de la sintaxis un problema sin decisión única, y generalmente oscurecen la separación entre análisis y ejecución. En contraste con el sistema de macros de Lisp y los bloques BEGIN de Perl, que pueden tener cálculos generales, las macros de C son meros reemplazos de cadenas, y no requieren ejecución de código.

Semántica estática
La semántica estática define las restricciones sobre la estructura de los textos válidos que resulta imposible o muy difícil expresar mediante formalismos sintácticos estándar. Para los lenguajes compilados, la semántica estática básicamente incluye las reglas semánticas que se pueden verificar en el momento de compilar. Por ejemplo el chequeo de que cada identificador sea declarado antes de ser usado (en lenguajes que requieren tales declaraciones) o que las etiquetas en cada brazo de una estructura case sean distintas. Muchas restricciones importantes de este tipo, como la validación de que los identificadores sean usados en los contextos apropiados (por ejemplo no sumar un entero al nombre de una función), o que las llamadas a subrutinas tengan el número y tipo de parámetros adecuado, puede ser implementadas definiéndolas como reglas en una lógica conocida como sistema de tipos. Otras formas de análisis estáticos, como los análisis de flujo de datos, también pueden ser parte de la semántica estática. Otros lenguajes de programación como Java y C# tienen un análisis definido de asignaciones, una forma de análisis de flujo de datos, como parte de su semántica estática.

Sistema de tipos
Un sistema de tipos define la manera en la cual un lenguaje de programación clasifica los valores y expresiones en tipos, cómo pueden ser manipulados dichos tipos y cómo interactúan. El objetivo de un sistema de tipos es verificar y normalmente poner en vigor un cierto nivel de exactitud en programas escritos en el lenguaje en cuestión, detectando ciertas operaciones inválidas. Cualquier sistema de tipos decidible tiene sus ventajas y desventajas: mientras por un lado rechaza muchos programas incorrectos, también prohíbe algunos programas correctos aunque poco comunes. Para poder minimizar esta desventaja, algunos lenguajes incluyen lagunas de tipos, conversiones explícitas no verificadas que pueden ser usadas por el programador para permitir explícitamente una operación normalmente no permitida entre diferentes tipos. En la mayoría de los lenguajes con tipos, el sistema de tipos es usado solamente para verificar los tipos de los programas, pero varios lenguajes, generalmente funcionales, llevan a cabo lo que se conoce como inferencia de tipos, que le quita al programador la tarea de especificar los tipos. Al diseño y estudio formal de los sistemas de tipos se le conoce como teoría de tipos.

Lenguajes tipados versus lenguajes no tipados
Se dice que un lenguaje es tipado si la especificación de cada operación debe definir los tipos de datos para los cuales es aplicable, con la implicación de que no es aplicable a otros tipos. Por ejemplo, "este texto entre comillas" es una cadena de caracteres. En la mayoría de los lenguajes de programación, dividir un número por una cadena de caracteres no tiene ningún significado. Por tanto, la mayoría de los lenguajes de programación modernos rechazarían cualquier intento de ejecutar dicha operación por parte de algún programa. En algunos lenguajes, estas operaciones sin significado son detectadas cuando el programa es compilado (validación de tipos "estática") y son rechazadas por el compilador, mientras en otros son detectadas cuando el programa es ejecutado (validación de tipos "dinámica") y se genera una excepción en tiempo de ejecución.

Un caso especial de lenguajes de tipo son los lenguajes de tipo sencillo. Estos son con frecuencia lenguajes de marcado o de scripts, como REXX o SGML, y solamente cuentan con un tipo de datos; comúnmente cadenas de caracteres que luego son usadas tanto para datos numéricos como simbólicos.

En contraste, un lenguaje sin tipos, como la mayoría de los lenguajes ensambladores, permiten que cualquier operación se aplique a cualquier dato, que por lo general se consideran secuencias de bits de varias longitudes. Lenguajes de alto nivel sin datos incluyen BCPL y algunas variedades de Forth.

En la práctica, aunque pocos lenguajes son considerados con tipo desde el punto de vista de la teoría de tipos (es decir, que verifican o rechazan todas las operaciones), la mayoría de los lenguajes modernos ofrecen algún grado de manejo de tipos. Si bien muchos lenguajes de producción proveen medios para evitar o rodear el sistema de tipado.

Tipos estáticos versus tipos dinámicos
En lenguajes con tipos estáticos se determina el tipo de todas las expresiones antes de la ejecución del programa (típicamente al compilar). Por ejemplo, 1 y (2+2) son expresiones enteras; no pueden ser pasadas a una función que espera una cadena, ni pueden guardarse en una variable que está definida como fecha.

Los lenguajes con tipos estáticos pueden manejar tipos explícitos o tipos inferidos. En el primer caso, el programador debe escribir los tipos en determinadas posiciones textuales. En el segundo caso, el compilador infiere los tipos de las expresiones y las declaraciones de acuerdo al contexto. La mayoría de los lenguajes populares con tipos estáticos, tales como C++, C# y Java, manejan tipos explícitos. Inferencia total de los tipos suele asociarse con lenguajes menos populares, tales como Haskell y ML. Sin embargo, muchos lenguajes de tipos explícitos permiten inferencias parciales de tipo; tanto Java y C#, por ejemplo, infieren tipos en un número limitado de casos.

Los lenguajes con tipos dinámicos determinan la validez de los tipos involucrados en las operaciones durante la ejecución del programa. En otras palabras, los tipos están asociados con valores en ejecución en lugar de expresiones textuales. Como en el caso de lenguajes con tipos inferidos, los lenguajes con tipos dinámicos no requieren que el programador escriba los tipos de las expresiones. Entre otras cosas, esto permite que una misma variable se pueda asociar con valores de tipos distintos en diferentes momentos de la ejecución de un programa. Sin embargo, los errores de tipo no pueden ser detectados automáticamente hasta que se ejecuta el código, dificultando la depuración de los programas, no obstante, en lenguajes con tipos dinámicos se suele dejar de lado la depuración en favor de técnicas de desarrollo como por ejemplo BDD y TDD. Ruby, Lisp, JavaScript y Python son lenguajes con tipos dinámicos.

Tipos débiles y tipos fuertes
Los lenguajes débilmente tipados permiten que un valor de un tipo pueda ser tratado como de otro tipo, por ejemplo una cadena puede ser operada como un número. Esto puede ser útil a veces, pero también puede permitir ciertos tipos de fallas que no pueden ser detectadas durante la compilación o a veces ni siquiera durante la ejecución.

Los lenguajes fuertemente tipados evitan que pase lo anterior. Cualquier intento de llevar a cabo una operación sobre el tipo equivocado dispara un error. A los lenguajes con tipos fuertes se les suele llamar de tipos seguros.

Lenguajes con tipos débiles como Perl y JavaScript permiten un gran número de conversiones de tipo implícitas. Por ejemplo en JavaScript la expresión 2 * x convierte implícitamente x a un número, y esta conversión es exitosa inclusive cuando x es null, undefined, un Array o una cadena de letras. Estas conversiones implícitas son útiles con frecuencia, pero también pueden ocultar errores de programación.

Las características de estáticos y fuertes son ahora generalmente consideradas conceptos ortogonales, pero su trato en diferentes textos varia. Algunos utilizan el término de tipos fuertes para referirse a tipos fuertemente estáticos o, para aumentar la confusión, simplemente como equivalencia de tipos estáticos. De tal manera que C ha sido llamado tanto lenguaje de tipos fuertes como lenguaje de tipos estáticos débiles.

Implementación:
La implementación de un lenguaje es la que provee una manera de que se ejecute un programa para una determinada combinación de software y hardware. Existen básicamente dos maneras de implementar un lenguaje: compilación e interpretación.
  1. Compilación: es el proceso que traduce un programa escrito en un lenguaje de programación a otro lenguaje de programación, generando un programa equivalente que la máquina será capaz interpretar. Los programas traductores que pueden realizar esta operación se llaman compiladores. Éstos, como los programas ensambladores avanzados, pueden generar muchas líneas de código de máquina por cada proposición del programa fuente.
  2. Interpretación: es una asignación de significados a las fórmulas bien formadas de un lenguaje formal. Como los lenguajes formales pueden definirse en términos puramente sintácticos, sus fórmulas bien formadas pueden no ser más que cadenas de símbolos sin ningún significado. Una interpretación otorga significado a esas fórmulas.
Se puede también utilizar una alternativa para traducir lenguajes de alto nivel. En lugar de traducir el programa fuente y grabar en forma permanente el código objeto que se produce durante la compilación para utilizarlo en una ejecución futura, el programador sólo carga el programa fuente en la computadora junto con los datos que se van a procesar. A continuación, un programa intérprete, almacenado en el sistema operativo del disco, o incluido de manera permanente dentro de la máquina, convierte cada proposición del programa fuente en lenguaje de máquina conforme vaya siendo necesario durante el procesamiento de los datos. El código objeto no se graba para utilizarlo posteriormente.

La siguiente vez que se utilice una instrucción, se la deberá interpretar otra vez y traducir a lenguaje máquina. Por ejemplo, durante el procesamiento repetitivo de los pasos de un ciclo o bucle, cada instrucción del bucle tendrá que volver a ser interpretada en cada ejecución repetida del ciclo, lo cual hace que el programa sea más lento en tiempo de ejecución (porque se va revisando el código en tiempo de ejecución) pero más rápido en tiempo de diseño (porque no se tiene que estar compilando a cada momento el código completo). El intérprete elimina la necesidad de realizar una compilación después de cada modificación del programa cuando se quiere agregar funciones o corregir errores; pero es obvio que un programa objeto compilado con antelación deberá ejecutarse con mucha mayor rapidez que uno que se debe interpretar a cada paso durante una ejecución del código.

La mayoría de lenguajes de alto nivel permiten la programación multipropósito, aunque muchos de ellos fueron diseñados para permitir programación dedicada, como lo fue el Pascal con las matemáticas en su comienzo. También se han implementado lenguajes educativos infantiles como Logo mediante una serie de simples instrucciones. En la actualidad son muy populares algunos lenguajes especialmente indicados para aplicaciones web, como Perl, PHP, Ruby, Python o JavaScript.

Técnica:
Para escribir programas que proporcionen los mejores resultados, cabe tener en cuenta una serie de detalles.
  • Corrección. Un programa es correcto si hace lo que debe hacer tal y como se estableció en las fases previas a su desarrollo. Para determinar si un programa hace lo que debe, es muy importante especificar claramente qué debe hacer el programa antes de desarrollarlo y, una vez acabado, compararlo con lo que realmente hace.
  • Claridad. Es muy importante que el programa sea lo más claro y legible posible, para facilitar así su desarrollo y posterior mantenimiento. Al elaborar un programa se debe intentar que su estructura sea sencilla y coherente, así como cuidar el estilo en la edición; de esta forma se ve facilitado el trabajo del programador, tanto en la fase de creación como en las fases posteriores de corrección de errores, ampliaciones, modificaciones, etc. Fases que pueden ser realizadas incluso por otro programador, con lo cual la claridad es aún más necesaria para que otros programadores puedan continuar el trabajo fácilmente. Algunos programadores llegan incluso a utilizar Arte ASCII para delimitar secciones de código. Otros, por diversión o para impedir un análisis cómodo a otros programadores, recurren al uso de código ofuscado.
  • Eficiencia. Se trata de que el programa, además de realizar aquello para lo que fue creado (es decir, que sea correcto), lo haga gestionando de la mejor forma posible los recursos que utiliza. Normalmente, al hablar de eficiencia de un programa, se suele hacer referencia al tiempo que tarda en realizar la tarea para la que ha sido creado y a la cantidad de memoria que necesita, pero hay otros recursos que también pueden ser de consideración al obtener la eficiencia de un programa, dependiendo de su naturaleza (espacio en disco que utiliza, tráfico de red que genera, etc.).
  • Portabilidad. Un programa es portable cuando tiene la capacidad de poder ejecutarse en una plataforma, ya sea hardware o software, diferente a aquella en la que se elaboró. La portabilidad es una característica muy deseable para un programa, ya que permite, por ejemplo, a un programa que se ha desarrollado para sistemas GNU/Linux ejecutarse también en la familia de sistemas operativos Windows. Esto permite que el programa pueda llegar a más usuarios más fácilmente.
Paradigmas
Los programas se pueden clasificar por el paradigma del lenguaje que se use para producirlos. Los principales paradigmas son: imperativos, declarativos y orientación a objetos.

Los programas que usan un lenguaje imperativo especifican un algoritmo, usan declaraciones, expresiones y sentencias.​ Una declaración asocia un nombre de variable con un tipo de dato, por ejemplo: var x: integer;. Una expresión contiene un valor, por ejemplo: 2 + 2 contiene el valor 4. Finalmente, una sentencia debe asignar una expresión a una variable o usar el valor de una variable para alterar el flujo de un programa, por ejemplo: x := 2 + 2; if x == 4 then haz_algo();. Una crítica común en los lenguajes imperativos es el efecto de las sentencias de asignación sobre una clase de variables llamadas "no locales".​

Los programas que usan un lenguaje declarativo especifican las propiedades que la salida debe conocer y no especifican cualquier detalle de implementación. Dos amplias categorías de lenguajes declarativos son los lenguajes funcionales y los lenguajes lógicos. Los lenguajes funcionales no permiten asignaciones de variables no locales, así, se hacen más fácil, por ejemplo, programas como funciones matemáticas.​ El principio detrás de los lenguajes lógicos es definir el problema que se quiere resolver (el objetivo) y dejar los detalles de la solución al sistema.​ El objetivo es definido dando una lista de sub-objetivos. Cada sub-objetivo también se define dando una lista de sus sub-objetivos, etc. Si al tratar de buscar una solución, una ruta de sub-objetivos falla, entonces tal sub-objetivo se descarta y sistemáticamente se prueba otra ruta.

La forma en la cual se programa puede ser por medio de texto o de forma visual. En la programación visual los elementos son manipulados gráficamente en vez de especificarse por medio de texto.

Algunos lenguajes de programación:
Ada: Es un lenguaje de programación orientado a objetos y fuertemente tipado de forma estática que fue diseñado por Jean Ichbiah de CII Honeywell Bull por encargo del Departamento de Defensa de los Estados Unidos. Es un lenguaje multipropósito, orientado a objetos y concurrente, pudiendo llegar desde la facilidad de Pascal hasta la flexibilidad de C++.
Fue diseñado con la seguridad en mente y con una filosofía orientada a la reducción de errores comunes y difíciles de descubrir. Para ello se basa en un tipado muy fuerte y en chequeos en tiempo de ejecución (desactivables en beneficio del rendimiento). La sincronización de tareas se realiza mediante la primitiva rendezvous.
Ada se usa principalmente en entornos en los que se necesita una gran seguridad y fiabilidad como la defensa, la aeronáutica (Boeing o Airbus), la gestión del tráfico aéreo (como Indra en España) y la industria aeroespacial entre otros.


Lenguaje Ensamblador: es un lenguaje de programación de bajo nivel. Consiste en un conjunto de mnemónicos que representan instrucciones básicas para los computadores, microprocesadores, microcontroladores y otros circuitos integrados programables. Implementa una representación simbólica de los códigos de máquina binarios y otras constantes necesarias para programar una arquitectura de procesador y constituye la representación más directa del código máquina específico para cada arquitectura legible por un programador

Java: Es un lenguaje de programación de propósito general, concurrente, orientado a objetos que fue diseñado específicamente para tener tan pocas dependencias de implementación como fuera posible. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once, run anywhere"), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. 

PHP: Es un lenguaje de programación de uso general de código del lado del servidor originalmente diseñado para el desarrollo web de contenido dinámico. Fue uno de los primeros lenguajes de programación del lado del servidor que se podían incorporar directamente en el documento HTML en lugar de llamar a un archivo externo que procese los datos. El código es interpretado por un servidor web con un módulo de procesador de PHP que genera la página web resultante. PHP ha evolucionado por lo que ahora incluye también una interfaz de línea de comandos que puede ser usada en aplicaciones gráficas independientes. Puede ser usado en la mayoría de los servidores web al igual que en casi todos los sistemas operativos y plataformas sin ningún costo.

B: Es un lenguaje orientado a la implementación de Sistemas operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones, predecesor del lenguaje de programación C.

C: Es un lenguaje orientado a la implementación de Sistemas operativos, concretamente Unix. C es apreciado por la eficiencia del código que produce y es el lenguaje de programación más popular para crear software de sistemas, aunque también se utiliza para crear aplicaciones, es una evolución del anterior lenguaje B, a su vez basado en BCPL.

C#:​ (pronunciado si sharp en inglés) es un lenguaje de programación orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que después fue aprobado como un estándar por la ECMA (ECMA-334) e ISO (ISO/IEC 23270). C# es uno de los lenguajes de programación diseñados para la infraestructura de lenguaje común.

Su sintaxis básica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes.

El nombre C Sharp fue inspirado por el signo '#' que se compone de cuatro signos '+' pegados.​

Aunque C# forma parte de la plataforma .NET, ésta es una API, mientras que C# es un lenguaje de programación independiente diseñado para generar programas sobre dicha plataforma. Ya existe un compilador implementado que provee el marco Mono - DotGNU, el cual genera programas para distintas plataformas como Windows, Unix, Android, iOS, Windows Phone, Mac OS y GNU/Linux.

C++: Es un lenguaje de programación diseñado a mediados de los años 1980 por Bjarne Stroustrup. La intención de su creación fue el extender al lenguaje de programación C mecanismos que permiten la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido.

Posteriormente se añadieron facilidades de programación genérica, que se sumaron a los paradigmas de programación estructurada y programación orientada a objetos. Por esto se suele decir que el C++ es un lenguaje de programación multiparadigma.

Actualmente existe un estándar, denominado ISO C++, al que se han adherido la mayoría de los fabricantes de compiladores más modernos. Existen también algunos intérpretes, tales como ROOT.
Una particularidad del C++ es la posibilidad de redefinir los operadores, y de poder crear nuevos tipos que se comporten como tipos fundamentales.

Basic: En la programación de computadoras, siglas de Beginner's All-purpose Symbolic Instruction Code​ (Código simbólico de instrucciones de propósito general para principiantes en español), es una familia de lenguajes de programación de alto nivel. El BASIC original, el Dartmouth BASIC, fue diseñado en 1964 por John George Kemeny y Thomas Eugene Kurtz en el Dartmouth College en Nuevo Hampshire, Estados Unidos, como un medio para facilitar la programación en ordenadores a estudiantes (y profesores) que no fueran de ciencias. De aquella, casi todo el uso de los ordenadores requería codificar software hecho a medida, con lo cual quedaba restringida a personas con formación como científicos y matemáticos. BASIC originalmente fue desarrollado como una herramienta de enseñanza. El lenguaje y sus variantes llegaron a estar ampliamente disponibles en los microcomputadores a finales de los años 1970 y en los años 1980. BASIC sigue siendo popular a día de hoy en un puñado de dialectos altamente modificados, y en nuevos lenguajes, influenciados por BASIC tales como Microsoft Visual Basic o Gambas en GNU/Linux. En el año 2006, el 59% de los desarrolladores para la plataforma .NET usaban Visual Basic .NET como su único lenguaje.​

Es importante aclarar que una de las grandes desventajas en comparación con lenguajes como COBOL, RPG es que no maneja como parte integrada el acceso a archivos directos o RANDOM. Se tenía que apoyar en una aplicación externa para poder acceder de manera directa un registro de algún archivo.

COBOL: (acrónimo de COmmon Business-Oriented Language, Lenguaje Común Orientado a Negocios) fue creado en el año 1959 con el objetivo de crear un lenguaje de programación universal que pudiera ser usado en cualquier ordenador (ya que en los años 1960 existían numerosos modelos de ordenadores incompatibles entre sí), y que estuviera orientado principalmente a los negocios, es decir, a la llamada informática de gestión (es una disciplina que combina la tecnología de información (IT) o la informática con conceptos de la gerencia).

Perl: es un lenguaje de programación diseñado por Larry Wall en 1987. Perl toma características del lenguaje C, del lenguaje interpretado bourne shell (sh), AWK, sed, Lisp y, en un grado inferior, de muchos otros lenguajes de programación.

Estructuralmente, Perl está basado en un estilo de bloques como los del C o AWK, y fue ampliamente adoptado por su destreza en el procesado de texto y no tener ninguna de las limitaciones de los otros lenguajes de script.

Fortran: Es un lenguaje de programación de alto nivel de propósito general,​ procedimental​ e imperativo, que está especialmente adaptado al cálculo numérico y a la computación científica.

Lisp: (o LISP) es una familia de lenguajes de programación de computadora de tipo multiparadigma con una larga historia y un uso intensivo de paréntesis en su sintaxis, creado originalmente como una notación matemática práctica para los programas de computadora, basada en el cálculo lambda de Alonzo Church. Se convirtió rápidamente en el lenguaje de programación favorito en la investigación de la inteligencia artificial (AI).

JavaScript: (abreviado comúnmente JS) es un lenguaje de programación interpretado, dialecto del estándar ECMAScript. Se define como orientado a objetos,​ basado en prototipos, imperativo, débilmente tipado y dinámico.

Se utiliza principalmente en su forma del lado del cliente (client-side), implementado como parte de un navegador web permitiendo mejoras en la interfaz de usuario y páginas web dinámicas​ aunque existe una forma de JavaScript del lado del servidor (Server-side JavaScript o SSJS). Su uso en aplicaciones externas a la web, por ejemplo en documentos PDF, aplicaciones de escritorio (mayoritariamente widgets) es también significativo.

Ruby: Es un lenguaje de programación interpretado, reflexivo y orientado a objetos, creado por el programador japonés Yukihiro "Matz" Matsumoto, quien comenzó a trabajar en Ruby en 1993, y lo presentó públicamente en 1995. Combina una sintaxis inspirada en Python y Perl con características de programación orientada a objetos similares a Smalltalk. Comparte también funcionalidad con otros lenguajes de programación como Lisp, Lua, Dylan y CLU. Ruby es un lenguaje de programación interpretado en una sola pasada y su implementación oficial es distribuida bajo una licencia de software libre.

Python: Es un lenguaje de programación interpretado cuya filosofía hace hincapié en una sintaxis que favorezca un código legible.

Se trata de un lenguaje de programación multiparadigma, ya que soporta orientación a objetos, programación imperativa y, en menor medida, programación funcional. Es un lenguaje interpretado, usa tipado dinámico y es multiplataforma.

Es administrado por la Python Software Foundation. Posee una licencia de código abierto, denominada Python Software Foundation License,​ que es compatible con la Licencia pública general de GNU a partir de la versión 2.1.1, e incompatible en ciertas versiones anteriores.

Logo: es un lenguaje de programación de alto nivel que se utiliza para el programa de Winlogo, en parte funcional, en parte estructurado; de muy fácil aprendizaje, razón por la cual suele ser el lenguaje de programación preferido para trabajar con niños y jóvenes. Fue diseñado con fines didácticos por Danny Bobrow, Wally Feurzeig y Seymour Papert, los cuales se basaron en las características del lenguaje Lisp. Logo fue creado con la finalidad de usarlo para enseñar programación y puede usarse para enseñar la mayoría de los principales conceptos de la programación, ya que proporciona soporte para manejo de listas, archivos y entrada/salida. Logo cuenta con varias versiones.

Papert desarrolló un enfoque basado en su experiencia con Piaget a principios de los sesenta. Fundamentalmente consiste en presentar a los niños retos intelectuales que puedan ser resueltos mediante el desarrollo de programas en Logo. El proceso de revisión manual de los errores contribuye a que el niño desarrolle habilidades metacognitivas al poner en práctica procesos de autocorrección. Es conocido por poder manejar con facilidad gráficas tortuga, listas, archivos y recursividad.

Logo es uno de los pocos lenguajes de programación con instrucciones en español en algunos intérpretes, entre ellos: FMSLogo, LogoWriter, WinLogo, Logo Gráfico, XLogo, MSWLogo y LogoEs. Logo tiene más de 180 intérpretes y compiladores, según constan en el proyecto "Logo Tree".
El programa Logo existe en varias versiones.
XLogo, MSWLogo y LogoES tienen la particularidad de ser además software libre.

Fuente:

Buenas noches,


A veces cuando se tiene un pase de incursión y se intenta realizar una incursión (misiones cooperativas para entrenadores de un nivel superior al 20 en las que se enfrentan a un Pokémon con sus estadísticas de Puntos de Combate potenciadas.) en un gimnasio, al utilizar el pase en el gimnasio y tocar el Líder de la incursión para combatir, aparece el mensaje: "El tiempo se ha acabado, inténtalo mas tarde." y no deja permitir realizar ninguna incursión.
Esto es debido a que la hora del dispositivo móvil no es detectada automáticamente.

Solución:
Cambiar en el dispositivo móvil, en las configuraciones de hora, para que el dispositivo la detecte automáticamente y listo, eso es todo.
Saludos,
Hace un tiempo ya, para ser mas precisos el 8 de noviembre de 1519, los españoles que descubrieron Tenochtitlan, el cual fue ejecutado y conseguido por Hernán Cortés en el nombre del rey Carlos I de España y a favor del Imperio español entre los años 1519 y 1521, mientras realizaban el sometimiento del Estado Mexica o Azteca, encontraron cosas terroríficas mientras conquistaban o mejor dicho, mientras tomaban a la fuerza a fuego, sangre y espada la capital del imperio Azteca. 
La más escalofriante de ellas y la que hoy en duda era la mas extraña y poco creíble de ellas, describía una torre hecha con miles de cráneos humanos. Algo que puede considerarse un mito o mejor dicho una espantosa leyenda, pero la ciencia, mas específicamente los arqueólogos, han encontrado pruebas que respaldan esta leyenda azteca.

Mercado de Tlatelolco, con vista a Tenochtitlan, mural de Diego Rivera.

Los aztecas tenían la costumbre de decapitar a las víctimas de sus sacrificios humanos. Tras el ritual, los sacerdotes practicaban agujeros en los cráneos y los colgaban unos junto a otros formando una empalizada de planta cuadrada o circular, como si fuera una torre. La estructura se llama tzompantli, y su visión debía de ser aterradora. No en vano los aztecas lo usaban precisamente para infundir miedo en el corazón de sus enemigos.

Ilustración de un tzompantli en el códice escrito por el soldado Andrés de Tapia, más conocido como el códice Ramirez. 

Los arqueólogos han descubierto algunos tzompantli en lugares como Chichen Itzá o Tula, pero el más famoso de ellos había eludido todos los intentos de encontrarlo. Se trata del tzompantli del templo mayor de Tenochtitlan, una torre de calaveras que, según los registros del soldado español Andrés de Tapia, a su llegada en 1521, contaba con más de 60.000 cráneos en su estructura.

Esa torre legendaria es precisamente lo que un equipo de investigadores del Instituto Nacional de Arqueología e Historia de México (INAH) ha encontrado por fin enterrado en el mismo centro de Ciudad de México, en las inmediaciones de la catedral metropolitana.


Las primeras excavaciones en el lugar se remontan a 2015, pero es ahora cuando los investigadores realmente están convencidos de haber encontrado la mítica estructura que se calcula que tiene 6 metros de diámetro. El descubrimiento arroja un dato aún más siniestro a la ya de por sí infame leyenda del tzompantli del templo mayor. La estructura no solo tiene cráneos de guerreros rivales. También hay calaveras de mujeres y niños, un detalle hasta ahora desconocido que obliga a reinterpretar las tradiciones bélicas y religiosas de los aztecas.

Por el momento han aparecido más de 676 calaveras dispuestas en una estructura circular, pero se cree que aún tienen que aparecer muchas más. Los cráneos formaban una pared mirando hacia el exterior.





Aunque se tiene constancia de los tzompantli, no se sabe con exactitud qué se guardaba en el centro de estas estructuras. El siguiente objetivo de los arqueólogos es precisamente excavar el centro para desentrañar sus misterios. Todavía ni siquiera han llegado a la base.

Tomado de:

Hola!

Actualmente el sistema de las editoriales científicas, son el administrador odiado pero necesario, debido que aunque apoya e impulsa publicaciones, esta haciendo daño a la libre circulación de la misma. La ciencia esta en venta, cada vez a un precio más caro, el oligopolio (la situación del mercado en la que el número de vendedores es muy reducido, de manera que controlan y acaparan las ventas de determinados productos como si hubiera monopolio) editorial cada vez se asemeja más a una mafia, con los científicos como principales víctimas.


Un sistema win/win
Anualmente se publican cerca de 2.5 millones de publicaciones científicas. Buena parte de ellas se subvencionan con fondos públicos, pero sólo un 20% se encontrará libre para consultarse después. El resto estará bloqueado previo pago en alguna revista. Eso es así, en principio, hasta para los propios científicos.

Ocurre porque, lógicamente, publicar un estudio científico no consiste en hacer una investigación según unos criterios personales, redactarla y ponerla en Internet. El proceso es más complicado. Los artículos siempre pasan por revisiones por pares —también denominada arbitraje, un método para validar trabajos escritos antes de publicarse donde se deja abierto el trabajo al escrutinio, y frecuentemente a la anotación o modificación, por otros científicos expertos en el campo particular de la publicación—. Los que no lo hagan, no contarán con la credibilidad suficiente.

Este es el principal argumento, y probablemente el único que hay, para mantener en funcionamiento a la industria editorial como está hasta la fecha: aseguran el funcionamiento de verificación. El problema es que a menudo se llevan no un porcentaje, sino la práctica totalidad del premio por ello.
Los revisores trabajan gratis para las revistas. Y en el caso de los autores de la investigación, incluso pueden llegar a pagar por ser revisados y, por tanto, optar a ser publicados.

La ciencia progresa gracias a este sistema que hermana de alguna manera al propio proceso científico, al menos a la hora de contrastar hipótesis. El círculo se cierra dentro de la propia rama y un profesional experto evalúa la veracidad del trabajo de otro. Aquí es donde surge la primera particularidad: el sistema es un win-win para las revistas. Tanto los autores como los revisores de los artículos trabajan gratis. Dicho de otra forma: el autor y su corrector no cobran nada, pero su artículo es vendido por la revista a 40 dólares la copia.
A vueltas con el factor de impacto

¿Por qué permitir eso? El truco está en que la visibilidad de un paper depende en buena medida del factor de impacto de la revista que lo publica. Este índice tiene una influencia enorme, pero controvertida, en cuanto a la forma en que las publicaciones científicas de investigación son percibidas y evaluadas. Esto quiere decir que todo científico desea publicar en alguna de las revistas más punteras, para ello, creará el contenido de la forma que a la revista más le puede interesar. En caso contrario, se arriesga a que su trabajo sea rechazado.
“Mis primeros cuatro artículos en revistas con índice de impacto se publicaron en el año 1994, y fueron aceptados de forma directa (no me exigieron ningún cambio). Tampoco lo hicieron en ninguno de mis diez primeros artículos. Cambió con las siguientes decenas, en la mayoría me exigieron cambios menores (a veces mayores), incluso me han rechazado varios. Algunos los he enviado a otra revista donde han sido aceptados y otros los he olvidado en un cajón” — Francisco R. Villatoro.
En realidad, según varias fuentes consultadas por Gizmodo en Español, llega un punto en el que el estudio o trabajo se torna secundario y las modificaciones exigidas giran entorna a: el tipo de letra, reformulaciones para cumplir funciones de marketing y nimiedades variadas que consiguen que un paper, tan caro para el consumidor final, ni siquiera se pueda entender bien por la infinidad de requisitos de diseño.

Sobrevivir en el ecosistema científico
En esta situación, ¿por qué publicar? La realidad es que, para sobrevivir en el ecosistema científico, el profesional de la ciencia lo necesita. Es lo que le da reconocimiento y le permite obtener las subvenciones necesarias para seguir trabajando. Para ser alguien reconocido en la ciencia, ha de publicar trabajos que la comunidad pueda apreciar (la comunidad lo apreciará más según la revista donde publique) y, a su vez, para publicar ha de hacerlo como la editorial quiere. Es un círculo vicioso donde la editorial vende el hacer y el consumir la ciencia. La editorial es, en realidad, el centro de todo.

Irónicamente, aún en esta situación, resulta difícil que los científicos se animen a hablar de forma crítica del asunto. Hace poco cuatro premios nobeles publicaban un vídeo hablando del problema, pero no deja de ser notable que, para poder llegara a ese Nobel, los cuatro utilizaron el actual sistema de publicación científica.

Francisco R. Villatoro, profesor en la UMA, informático, físico y doctor en matemáticas amplía: “Publicando se ganan méritos que sirven para promocionar, o para lograr pequeños suplementos económicos (como los famosos sexenios). Además, para solicitar proyectos de investigación y recibir financiación es necesario demostrar una buena capacidad para publicar artículos”.
En cuanto al pagar por publicar (pay per publish) y a la publicación con acceso gratuito (open access), “yo me niego a hacerlo (no lo he hecho en ninguno de mis artículos); sin embargo, entiendo que haya quienes estén obligados a ello, o lo consideren relevante para su carrera investigadora. Todo científico desea publicar en The Lancet, Cell, Science o Nature; esto no me parece mal y no me parece un problema. Pero todos los años se publican más de dos millones de artículos en unas decenas de miles de revistas científicas. Más del 90% de dichos artículos y de dichas revistas son prescindibles para el progreso de la ciencia. Pero las grandes editoriales las necesitan para ganar dinero”.

Cinco editoriales: Reed-Elsevier, Taylor & Francis, Wiley-Blackwell, Springer y Sage, controlan más del 50% de todas las publicaciones desde 2006. La consolidación de la industria ha sido desde entonces centro del debate, especialmente en relación a los grandes márgenes de ganancia de los principales editores. Márgenes de ganancia de aproximadamente 22 mil millones de euros en ingresos y beneficios del 40%—.

Aunque no es una comparación directa, sirve para hacerse una idea: ese margen de beneficios es mayor del que tienen Apple, Google o Amazon.

¿Quién hace ciencia y quién la compra?
Los propios científicos necesitan publicaciones de otros para trabajar en sus propios proyectos, así que son el principal cliente y proveedor. Idealmente, los científicos son los que alimentan todo el sistema y las editoriales sólo administran.


Normalmente, estos no suelen comprar artículos a título personal sino que se negocian licencias para que las universidades o los centros de investigación, en las que trabajan o son estudiantes, puedan acceder. La realidad, sin embargo, es que el acceso papers de manera pirata es un fenómeno que ocurre en todo el mundo y de manera generalizada. Llegados a ese punto, la duda es obvia: 

¿Compensa mantener a las editoriales?
El 5 de enero de 2016, un artículo revisado por pares y publicado en la revista PLoS ONE tuvo que ser retirado. El documento exploraba el vínculo entre la arquitectura biomecánica de la mano y su capacidad para coordinar los movimientos, pero en el proceso los investigadores usaban términos con mensajes creacionistas y religiosos. Afirmaban que “la coordinación de la mano indica el misterio de la invención del Creador”, o que “el diseño fue dado por el Creador para realizar multitud de tareas diarias de una manera cómoda”, entre otras frases.

Evidentemente, esto provocó estupor en la comunidad científica pues la mención a un “creador” debería haber hecho sonar las alarmas de los revisores. Los mismos revisores que para cuestiones de marketing son tan estrictos y que hacen a más de un investigador claudicar a la hora publicar su trabajo. En cambio, varios expertos “leyeron” el artículo y recomendaron la publicación sin consultar o enmendar los pasajes.

Por supuesto, es solo un caso, pero también existen casos de revisiones falsas que han acabado en verdadera polémica. Las personas pueden fallar, lógicamente, pero como ejemplos vienen a confirmar que el sistema con el que trabajan las editoriales, en el que ellas actúan de juez, testigo y verdugo, es desde luego lucrativo, pero no perfecto.
El otro lado de la ciencia

En relación al pirateo de artículos científicos, cada día se descargan más de 150 mil artículos por vías alternativas. Sci-hub, el mayor repositorio pirata de ciencia, registró 28 millones de eventos de solicitudes de descarga desde el 1 de septiembre de 2015 hasta el 29 de febrero de 2016.

Más de 2,6 millones de solicitudes procedían de Irán, 3,4 millones de la India y 4,4 millones de China. No es cosa de países pobres o lejanos, en los Estados Unidos y Europa los usuarios de Sci-Hub se concentran donde los investigadores académicos son más numerosos. Por ejemplo, en los últimos 6 meses 74.000 solicitudes vinieron de direcciones IP en la ciudad de Nueva York, hogar de múltiples universidades e instituciones científicas.

Los artículos abarcan todos los temas, desde los experimentos de física publicados hace décadas hasta los últimos avances en biotecnología. Alguien en Nuuk, Groenlandia, está leyendo sobre la mejor manera de proporcionar tratamiento contra el cáncer a las poblaciones indígenas. Alguien en Benghazi está investigando un método para transmitir datos entre computadoras. Alguien cerca de la ciudad de Sabha está profundizando en la dinámica de fluidos. La lista es innumerable.

Sci-hub es, por supuesto, ilegal. Alexandra Elbakyan, la ciudadana rusa creadora, está en busca y captura en los EEUU y no puede pisar sus tierras sin ser detenida.

Alexandra Elbakyan.

La historia tras Sci-Hub es la imaginable: Elbakyan, una típica estudiante de postgrado de ciencias, nació en Kazajstán cuando la Unión Soviética estaba empezando a desmoronarse. Para su tesis tenía que consultar una treintena de estudios. Todos eran de pago, con el acostumbrado precio medio de 40 dólares la copia, y era demasiado para ella. Ocurrió lo que ocurre cuando cualquier pirata informático encuentra algo bloqueado pero que necesita. A día de hoy, su discurso es más robinhoodiano con afirmaciones como: “Es cierto: robo a los editores para dárselo a los científicos”.

Evidentemente, la ilegalidad de su página deja poco posible debate sobre la web en sí misma, pero la opinión de la comunidad sobre la moralidad de usarla es variable.
“Se trata de algo ilegal y punible, luego es amoral en todos los sentidos.  Pero el oligopolio de las editoriales de revistas científicas es alegal. Es decir, existen leyes antimonopolio, pero no existen leyes antioligopolio, al menos en los grandes países industrializados. En mi opinión, los gobiernos deberían tomar cartas en el asunto de este oligopolio, apoyando las iniciativas en su contra. La ciencia es de todos y el oligopolio nos está estafando a todos” — Francisco R. Villatoro.
“Me siento muy identificada con la filosofía de que no se debe traficar con la ciencia, pero ¿qué deberían hacer los investigadores que no tienen posibilidad legal para acceder a las novedades de su sector? La ciencia es un bien universal y cualquier ciudadano, con independencia de sus circunstancias, debería tener acceso al conocimiento. Por tanto, creo que parte de la solución pasa por lograr una verdadera ciencia abierta, que conlleve un cambio de filosofía en todos los agentes implicados” — Lydia Gil, Social Investigación en el Institut Català d’Arqueologia Clàssica (ICAC)
El sistema de las editoriales científicas es enorme y tremendamente lucrativo, y es evidente que la balanza de beneficios para el progreso general de la ciencia y sus investigadores versus ingresos de las editoriales no está equilibrada. Además, ni siquiera el resultado es perfecto. Para colmo, en cuanto a la piratería, nos encontramos con una doble respuesta, piratear la ciencia está mal, pero posiblemente bloquearla también lo esté. 

Villatoro afirma que tal vez la solución pase por que “los gobiernos valoren la ciencia como algo importante, como un patrimonio de toda la humanidad”. Y que para ello “deben legislar con leyes antioligopolio específicas que permitan a todo el mundo disfrutar de la producción científica. Tener casi un 40% de beneficios debería ser ilegal y los gobiernos deberían tomar cartas en el asunto”.

La respuesta correcta no es fácil, pero lo que sí queda claro es que la ciencia y sus profesionales se están encontrando oprimidos por un sistema editorial imperfecto. De la ciencia depende el progreso de la humanidad, y debe pertenecer a los científicos, no los editores. Ojalá algún día sea así. 

Tomado de:

Hola -_-
Hace rato no me dirijo a ustedes, por motivos personales y de trabajo pero hoy les traigo una genial historia que leí ayer en es.gizmodo.com sobre mi personaje favorito el Joker, espero y la disfruten.



Victor Hugo ha sido uno de los escritores más influyentes de la historia. Entre el amplio número de obras maestras cuenta con Les Miserables, el Jorobado de Notre-Dame o Les Orientales. Lo que mucha gente no sabe es que Hugo también fue el artífice de ese personaje demente y fascinante de la cultura popular: Joker.

Quien Fue Victor Hugo?
Hugo fue un escritor prolífico. Para que nos hagamos una idea, el conjunto de su extensa obra fue publicada por el editor y escritor Jean-Jacques Pauvert y representa casi cuarenta millones de caracteres reunidos en 53 volúmenes. Además, llevó a la práctica casi todos los géneros: novela, poesía, teatro, ensayo… todos ellos en la excelencia, con una pasión por la palabra, un sentido de lo épico y una imaginación fuera de lo común.

Ocurre que hablamos de uno de los grandes nombres intelectuales del siglo XIX, muy alejado de todo lo que tenga que ver con superhéroes y villanos de DC. Es más, que sepamos, el famoso Joker nace en la década de los 40 del siglo XX, con las primeras series independientes a Detective Comics de Batman. ¿Cómo demonios se enlaza la figura de Hugo con la del Joker?
  • El hombre que ríe


Portada de L´homme qui rit. 


En 1869 el autor francés publica L´homme qui rit (El que hombre que ríe), un drama escrito en prosa en una época donde Hugo destacaba como el líder del Romanticismo en Francia. Su sinopsis dice así:

El pequeño Gwynplaine, con la cara deformada, logra escapar y huir a través de un fantasmal paraje nevado lleno de ahorcados. Al pie de una de estas horcas encuentra a una joven muerta que porta en sus brazos el bebe de una niña y al cual rescata en la tempestad.

Con la niña en brazos llega hasta la caravana del cómico ambulante Ursus, misántropo que vive acompañado sólo de un lobo llamado Homo un viejo bonachón acoge a ambos, descubriendo que el bebé está ciego y advirtiendo la deformidad del pequeño que presenta la boca deformada dando la idea que siempre estaba riendo, le da cobijo y ambos crecen con él, que los trata como su benefactor y que los hace trabajar en las ferias.
Ilustración de L´homme qui rit. 

Victor Hugo escribe la obra durante su exilio en la isla de Guernsey, un lugar amado por el escritor, quién siempre dijo que admiraba la tranquilidad de sus habitantes y sus parajes. En el prefacio se explica que el libro formaría parte de una trilogía, de la que el libro sería el primero. Según el propio Hugo:

Hay dos tipos de drama: el drama que se puede representar, y el drama que no se puede representar. Este último participa de la epopeya. A los personajes humanos mezcla, como la naturaleza misma, otros personajes: las fuerzas, los elementos, lo infinito, lo desconocido. Siendo más grande, es más libre. Si se pregunta al autor de este libro por qué ha escrito “El hombre que ríe”, responderá que, como filósofo, ha querido afirmar el alma y la conciencia; como historiador, ha querido revelar hechos monárquicos poco conocidos e informar la democracia, y que, como poeta, ha querido escribir un drama. En la intención del autor, este libro es un drama. El Drama del Alma”

Como veíamos en la sinopsis, el libro es una historia triste sobre un huérfano en el siglo XVII. El protagonista, Gwynplaine, tiene un parentesco secreto, el joven fue desfigurado cuando era un niño, resultando en un rictus permanente que le hacía parecer que estaba riendo perpetuamente. 
  • Del hombre que ríe al Joker
Lo cierto es que la obra fue poco apreciada en su época, y eso que Hugo la consideraba una de las mejores que había escrito. En cualquier caso, eso no impidió que, como en muchos de sus escritos, surgieran adaptaciones años más tarde. En 1921 se estrenaba una versión en película, el film austríaco Das grinsende Gesicht.


En 1928 se estrena la adaptación en blanco y negro al cine mudo, en este caso, dirigida por el cineasta expresionista alemán, Paul Leni, y protagonizada por Conrad Veidt como Gwynplaine. La película contaba con la siguiente sinopsis:

Finales del siglo XVII. Un noble orgulloso se niega a besar la mano del despótico rey Jacobo II de Inglaterra, quien ordena a su bufón Barkilphedro deshacerse de él, por lo que será cruelmente ejecutado y su hijo quirúrgicamente desfigurado.

El film es bastante oscuro y convierte la trágica historia de Hugo de amor y política en algo parecido a una película de terror. Por supuesto, nadie en la película destaca más que el personaje de Gwynplaine, interpretado por Conrad Veidt.

El actor retrató a Gwynplaine con una sonrisa permanente distendida que no se parecía tanto a una deformidad, incluso en las escenas en las que simplemente estaba triste. Esto es especialmente cierto en la siguiente escena en la que el personaje principal revela su rictus a una multitud adoradora y la cámara simplemente se centra en los primeros planos de la expresión exagerada de Veidt.

La película no fue ninguna obra maestra, pero iba a ser recordada para siempre por otro detalle. En 1940, aparecen en escena los creadores de cómics Bob Kane, Bill Finger y Jerry Robinson, quienes estaban buscando historias nuevas ahora que el personaje de Batman iba a “volar” fuera de Detective Comics.

Bajo el guión de Finger y las artes de Kane y Robinson, aparece el primer número de Batman. Los artistas presentan un quinteto de historias, dos de ellas centradas en un siniestro villano que jamás había aparecido antes: el Joker (junto a Catwoman, todo hay que decirlo).

Primera aparición del Joker. W.C.

Aquella representación del asesino de piel blanca y cabello verde era inquietante incluso en su primera aparición. Pero lo más importante de toda la historia era que su nacimiento se debía a la mirada de Conrad Veidt en El hombre que ríe. Aunque era evidente viendo las imágenes, Kane y Robinson lo confirmaban en una entrevista de 1994:

Bill Finger y yo creamos el Joker. Bill era el escritor. Jerry Robinson vino a mí con una carta de juego del Joker. Y yo le dije, “se parece a Conrad Veidt ... ya sabes, el actor de “El hombre que ríe” ... Finger tenía un libro con una fotografía de Conrad Veidt, me la mostró y dijo: “Así es, aquí tenemos al Joker”.

Luego llegó la maravillosa interpretación de Jack Nicholson, la prodigiosa de Heath Ledger… y la última de Jared Leto. Sea como fuere, sin la majestuosa inventiva del gran Victor Hugo, jamás hubiésemos tenido a uno de los villanos más carismáticos de la historia de los tebeos. 

Tomado de:

Hola!

Hoy les explicare como configurar una impresora Epson TMU-T20 en un equipo con sistema operativo Linux Mint, un proceso que aunque es algo sencillo, es muy difícil de conseguir en la web, la verdad me tomo mucho tiempo configurarlo, de no ser por un compañero que me explico el paso a paso, ya que por la web no lo encontró, porque habían muchas páginas que exigían drivers que son innecesarios para este proceso.

Ahora sin más preámbulos, comencemos.

1. Se ingresa a la dirección IP: http://127.0.0.1:631/ o localhost:631.

2. Se selecciona Administración.

3. Se da clic en el botón Add Printer o Adicionar impresora, de la opción Impresoras o Printers. El sistema solicitara el usuario y la contraseña de root, se debe de ingresar y continuar con el proceso.

4. Al loguearse, aparece una lista de impresoras para configurar, se selecciona “EPSON TM-T20 (EPSON TM-T20)” y se da clic en el botón Continue o Continuar.

5. En esta nueva pantalla, lo que se realiza es cambiar el nombre de cómo va a quedar la impresora en el equipo y muy importante colocarle la localización (en este caso el nombre del home del usuario PRUEBA1), si así se requiere y se da clic en el botón Continue o Continuar. En este caso se le puso como Nombre o Name: oficial y Location: PRUEBA1.

6. Esta parte es la primordial para que la configuración quede perfecta, en esta pantalla en el Make o Hacer, se busca el driver RAW y se selecciona, se presiona el botón Continue o Continuar.

7. Aparece una nueva ventana y se selecciona el botón Add Printer o Adicionar impresora.

8. Aparece la ventana final y se informa en la esquina superior derecha, el mensaje de que la impresora fue añadida exitosamente.

9. Finalmente se da clic en el botón que aparece de Set Default Options.

10. Ahora se busca Impresoras o Printers en el sistema. 

11. Y se selecciona la impresora que se acabó de configurar, como predeterminada, dando clic derecho sobre la impresora y seleccionando la opción Set As Default o Establecer por defecto y listo.