En Defensa de los Derechos Fundamentales en Internet

Ante la inclusión en el Anteproyecto de Ley de Economía sostenible de modificaciones legislativas que afectan al libre ejercicio de las libertades de expresión, información y el derecho de acceso a la cultura a través de Internet, los periodistas, bloggers, usuarios, profesionales y creadores de Internet manifestamos nuestra firme oposición al proyecto, y declaramos que:

1. Los derechos de autor no pueden situarse por encima de los derechos fundamentales de los ciudadanos, como el derecho a la privacidad, a la seguridad, a la presunción de inocencia, a la tutela judicial efectiva y a la libertad de expresión.

2. La suspensión de derechos fundamentales es y debe seguir siendo competencia exclusiva del poder judicial. Ni un cierre sin sentencia. Este anteproyecto, en contra de lo establecido en el artículo 20.5 de la Constitución, pone en manos de un órgano no judicial -un organismo dependiente del ministerio de Cultura-, la potestad de impedir a los ciudadanos españoles el acceso a cualquier página web.

3. La nueva legislación creará inseguridad jurídica en todo el sector tecnológico español, perjudicando uno de los pocos campos de desarrollo y futuro de nuestra economía, entorpeciendo la creación de empresas, introduciendo trabas a la libre competencia y ralentizando su proyección internacional.

4. La nueva legislación propuesta amenaza a los nuevos creadores y entorpece la creación cultural. Con Internet y los sucesivos avances tecnológicos se ha democratizado extraordinariamente la creación y emisión de contenidos de todo tipo, que ya no provienen prevalentemente de las industrias culturales tradicionales, sino de multitud de fuentes diferentes.

5. Los autores, como todos los trabajadores, tienen derecho a vivir de su trabajo con nuevas ideas creativas, modelos de negocio y actividades asociadas a sus creaciones. Intentar sostener con cambios legislativos a una industria obsoleta que no sabe adaptarse a este nuevo entorno no es ni justo ni realista. Si su modelo de negocio se basaba en el control de las copias de las obras y en Internet no es posible sin vulnerar derechos fundamentales, deberían buscar otro modelo.

6. Consideramos que las industrias culturales necesitan para sobrevivir alternativas modernas, eficaces, creíbles y asequibles y que se adecuen a los nuevos usos sociales, en lugar de limitaciones tan desproporcionadas como ineficaces para el fin que dicen perseguir.

7. Internet debe funcionar de forma libre y sin interferencias políticas auspiciadas por sectores que pretenden perpetuar obsoletos modelos de negocio e imposibilitar que el saber humano siga siendo libre.

8. Exigimos que el Gobierno garantice por ley la neutralidad de la Red en España, ante cualquier presión que pueda producirse, como marco para el desarrollo de una economía sostenible y realista de cara al futuro.

9. Proponemos una verdadera reforma del derecho de propiedad intelectual orientada a su fin: devolver a la sociedad el conocimiento, promover el dominio público y limitar los abusos de las entidades gestoras.

10. En democracia las leyes y sus modificaciones deben aprobarse tras el oportuno debate público y habiendo consultado previamente a todas las partes implicadas. No es de recibo que se realicen cambios legislativos que afectan a derechos fundamentales en una ley no orgánica y que versa sobre otra materia.

Constantes en C#

Las constantes son variables cuyo valor es siempre el mismo. La bueno de las constantes es que, en lugar de repetir un determinado valor en distintas operaciones, se referencia a una variable. De modo que si luego deseamos cambiar el valor 'constante' solo debemos reescribir un trocito de código: el de la declaración de la constante. Esto se podría hacer con una variable cualquiera pero, al ser de tipo constante, nos aseguramos de no poder modificarla por error en alguna sección del programa.

Declaración de una constante:

[public/private] const [TipoVariable] [NombreVariable] = [valor]

Ejemplo:

public const double Pi = 3,14

Tipos de variables en C#

Veamos los tipos de variables en C# :

Tipo de datos de enteros
TipoAncho en bitsRangoSignificado
byte8De 0 a 255Entero sin signo de 8 bits
sbyte8De -128 a 127Entero con signo de 8 bits
short16De -32.768 a 32.767Entero corto
ushort16De 0 a 65.535Entero corto sin signo
int32De -2.147.483.648 a 2.147.483.647Entero medio
uint32De 0 a 4.294.967.295Entero medio sin signo
long64De -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807Entero largo
ulong64De 0 a 18.446.744.073.709.551.615Entero largo sin signo


Tipo de datos de punto flotante
TipoAncho en bitsRangoSignificado
float32De 1,5E-45 a 3,4E+38Punto flotante corto
double64De 5E-324 a 1,7E+308Punto flotante largo
decimal128De 1E-28 a 7,9E+28Punto flotante monetario


Tipo de datos de carácteres
TipoAncho en bitsRangoSignificado
char16De 0 a 65,535 (código Unicode)Carácter


Variables Booleanas: Solo pueden contener True o False. Su código es ‘bool’.

Constantes: Variables que tienen un valor fijo. Su código es ‘const’.

Librerías NET de clase base

System.Collections: Colecciones de objetos. Provee las interfaces para crear colecciones y listas ordenadas.

System.Collections.Generic: Clases que representan colecciones

System.Configuration: Clases e interfaces para la manipulación por código de archivos .config

System.Diagnostics: Clases para interactuar con procesos de sistema (Como el registro de eventos) y para depurar la aplicación.

System.Globalization: Clases necesarias para escribir aplicaciones para más de una cultura u idioma.

System.IO: Clases para trabajar con archivos, secuencias de datos y directorios.

System.Net: Clases para acceder a recursos de redes.

System.Relection: Clases que permiten obtener información sobre códigos administrados leyendo metadatos.

System.Resources: Clases e interfaces que permiten manipular recursos (imagen, sonido,etc) almacenados en un ensamblado.

System.Security: Clases que permiten especificar y/o conocer el contexto de seguridad.

System.ServiceProcess: Clases que permiten crear e instalar servicios.

System.Text: Clases para manipular cadenas de texto y convertir cadenas de byte en texto (o viceversa).

System.Threading: Clases para la creación de aplicaciones multihilo y gestion de los mismos.

System.Runtime.InteropServices: Clases para crear aplicaciones que interactúen con componentes COM y código no administrado.

System.Runtime.Remoting: Clases e interfaces para aplicaciones distribuidas.

System.Runtime.Serialization: Clases para serializar y deserializar objetos.

System.Data: Clases fundamentales de ADO.NET

System.Data.Common: Clases compartidas y heredadas por todos los proveedores de acceso a datos.

System.Data.SqlClient: Clases que implementan proveedor de acceso a datos para SQL server.

System.Data.OracleClient: Clases que implementan proveedor de acceso a datos para Oracle.

System.Data.OleDb: Clases para acceder a datos mediante Oledb.

Systen.Data.SqlTypes: Clases para tipos nativos de sql server.

System.Xml: Clases para trabajar con documentos xml.

System.Windows.Forms: Contiene las clases básicas para crear aplicaciones basadas en ventanas, también las clases de diálogo y las de impresión.

System.Drawing: Clases para dibujar figuras y texto, manipular imágenes, usar tramas y degradados.

System.Web.UI: Clases e interfaces para la construcción de páginas webs.

System.Web.Service: Clases para crear servicios web.

System.Windows.Forms: Contiene las clases básicas para crear aplicaciones basadas en ventanas, también las clases de diálogo y las de impresión.

System.Drawing: Clases para dibujar figuras y texto, manipular imágenes, usar tramas y degradados.

System.Web.UI: Clases e interfaces para la construcción de páginas webs.

System.Web.Service: Clases para crear servicios web.

Namespace

Un namespace o espacio de nombres es un medio para organizar las clases dentro del entorno, agrupándolas de un modo más lógico y jerárquico, permitiendo la existencia de clases con el mismo nombre en secciones distintas (ej, Casa.Factura y Trabajo.Factura)

Cuando se crea un proyecto dentro de Visual Studio .NET, este crea de forma automática un namespace con el nombre del proyecto. Si el programador quiere crear un namespace de forma explícita, puede hacerlo mediante la palabra clave Namespace dentro del código del proyecto.

Para acceder desde el código de una aplicación a una clase contenida dentro de un espacio de nombre debemos indicarlo usando la palabra clave Imports en la cabecera del módulo de código junto al nombre del namespace (Ej. Imports Casas.Duplex) y clase a la que queremos acceder; o bien usando la descripción calificada completa en cada momento que necesitemos hacer referencia a la clase.

Type Checker

Es un componente del CLR que se asegura de que las conversiones automáticas que se deban realizar durante la ejecución del programa sean válidas y estén permitidas.
En otras palabras, detecta la incompatibilidad de tipos, impidiéndonos asignar un valor de otro tipo a una variable.

Common Type System (CTS)

El Common Type System (CTS) o Sistema de Tipo Común es el mecanismo del CLR que permite
definir el modo en que los tipos serán creados y manipulados por el entorno de ejecución o el conjunto de reglas que han de seguir las definiciones de tipos de datos para que el CLR las acepte. Es decir, aunque cada lenguaje gestionado disponga de su propia sintaxis para definir tipos de datos, en el MSIL resultante de la compilación de sus códigos fuente se han de cumplir las reglas del CTS.

Gracias al CTS, desde un lenguaje como VB.NET, podemos instanciar un objeto de una clase escrita en C#; y hacer una llamada a uno de los métodos del objeto sin realizar conversiones de tipos en los parámetros del método, funcionando todo de forma transparente, además no permite definir o diseñar el modo en cómo el código de la aplicación será ejecutado, pero no se encarga directamente de su ejecución.

Common Intermediate Language (CIL)

Common Intermediate Language  (anteriormente llamado Microsoft Intermediate Language o MSIL) es el lenguaje de programación legible por humanos de más bajo nivel en el Common Language Infrastructure y en el .NET Framework. Los lenguajes del .NET Framework (C#,Visual Basic :Net)  compilan a CIL, el cual a su vez es ensamblado en bytecode.

CIL es un lenguaje ensamblador orientado a objetos, y está basado en pilas. Es ejecutado por una máquina virtual. Los lenguajes .NET principales son C#, Visual Basic .NET, C++/CLI, y J#.

CIL fue conocido originalmente como Microsoft Intermediate Language (MSIL) durante las versiones de prueba de los lenguajes .NET. Debido a la estandarización de C# y CLI, el bytecode es ahora conocido oficialmente como CIL. Debido a esto, CIL es frecuentemente llamado MSIL. Es posible ejecutar este lenguaje en plataformas GNU/Linux gracias al Proyecto Mono, que implementa una maquina virtual similar a la de .NET pero de software libre.

Durante la compilación de los lenguajes de programación .NET, el código fuente es convertido a código CIL en lugar de código maquina especifico del procesador. CIL es un conjunto de instrucciones independientes de la plataforma y CPU que puede ser ejecutado en cualquier ambiente que soporte el .NET Framework.

La compilación en tiempo de ejecución (JIT, just-in-time) involucra convertir el código CIL en código inmediatamente ejecutable por la CPU. La compilación JIT proporciona optimización especifica para la CPU, seguridad de tipos en tiempo de ejecución, y verificación de ensamblados.

Aquí os dejo el código de un hola mundo en CIL:

.assembly Hello {}
.method public static void Main() cil managed
{
     .entrypoint
     .maxstack 1
     ldstr "Hello, world!"
     call void [mscorlib]System.Console::WriteLine(string)
     ret
}

Y el código C# que generaría este ensamblado:

 class Hello
 {
     static void Main()
     {
         System.Console.WriteLine("Hello, world!");
     }
 }

Common Language Runtime (CLR)

El Common Language Runtime o CLR (Lenguaje común en tiempo de ejecución) es el componente de máquina virtual de la plataforma .Net de Microsoft. Es la implementación del estándar Common Language Infrastructure (CLI) que define un ambiente de ejecución para los códigos de los programas. El CLR ejecuta una forma de código intermedio (bytecode) llamada Common Intermediate Language (CIL, anteriormente conocido como MSIL -- Microsoft Intermediate Language), la implementación de Microsoft del CLI.

La herramienta de desarrollo compila el código fuente de cualquiera de los lenguajes soportados por .NET en el código intermedio. Para generarlo, el compilador se basa en la especificación CLS (Common Language Specification) que determina las reglas necesarias para crear el código compatible con el CLR.

Para ejecutarse se necesita un segundo paso, un compilador JIT (Just-In-Time) es el que genera el código máquina real que se ejecuta en la plataforma del cliente. De esta forma se consigue con .NET independencia de la plataforma de hardware. La compilación JIT la realiza el CLR a medida que el programa invoca métodos. El código ejecutable obtenido se almacena en la memoria caché del ordenador, siendo recompilado de nuevo sólo en el caso de producirse algún cambio en el código fuente.

Hay alguna implementación de .Net en sistemas operativos no windows por ejemplo, Mono.

Microsoft .NET

.NET es un proyecto de Microsoft para crear una nueva plataforma de desarrollo de software con con independencia de plataforma de hardware y que permita un rápido desarrollo de aplicaciones. Basado en ella, la empresa intenta desarrollar una estrategia horizontal que integre todos sus productos, desde el sistema operativo hasta las herramientas de mercado.

.NET podría considerarse una respuesta de Microsoft al creciente mercado de los negocios entornos Web, como competencia a Java de Sun Microsystems. Su propuesta es ofrecer una manera rápida y económica, a la vez que segura y robusta, de desarrollar aplicaciones permitiendo una integración más rápida y ágil entre empresas y un acceso más simple y universal a todo tipo de información desde cualquier tipo de dispositivo.

Para crear aplicaciones para la plataforma .NET, tanto servicios Web como aplicaciones tradicionales (aplicaciones de consola, aplicaciones de ventanas, servicios de Windows NT, etc.), Microsoft ha publicado el denominado kit de desarrollo de software conocido como .NET Framework SDK, que incluye las herramientas necesarias tanto para su desarrollo como para su distribución y ejecución y Visual Studio.NET, que permite hacer todo la anterior desde una interfaz visual basada en ventanas.

Hello World!! Hola Mundo!!

Ésta es la primera entrada de mi blog y no podía faltar, como en cualquier otro proyecto que empiezo, el famosísimo 'Hello world!' o 'Hola mundo!' en el idioma de Cervantes. Claro está que esta famosa frase es usada cuando se aprende un nuevo lenguaje de programación, pero bueno quise usarla para hacer la inauguración de mi blog y ver si funcionaba, y si están leyendo esto quiere decir que si funcionó .

Bueno este primer post es para presentar este blog, el cual va estar relacionado con el mundo de Micrososft y su lenguaje .net, ya que agregare diferentes entradas sobre diferentes temas y noticias de .net que me llamen la atención en la red y creo que puedan ser útiles y que me puedan interesar y los cuales creo podrían ser del interés de todos.

Solo 3 cosas mas, perdonarme por la faltas las cometo y las cometeré, y por favor si me leen escribanme algo, seguro que me hará mucha ilusión, y por ultimo los que entren aquí que no esperen un experto, solo me dedico a ello y uso este blog como manera de recordar cosas, ya que mi memoria es bastante frágil.

Saludos a todo el que me lea.