Intentaré explicar todos los apuntes que tengo sobre temas de software (Ubuntu, Windows, Blogger, Dynamics NAV...) y noticias que me llamen la atención.
Mostrando entradas con la etiqueta Mono. Mostrar todas las entradas
Mostrando entradas con la etiqueta Mono. Mostrar todas las entradas
Como convertir System.Type (Datos .NET) to Data.DbType (datos SQL)
Cuando trabajas con bases de datos SQL en .NET es útil tener una función que convierta los entre los diferentes tipos de .NET y SQL. Aquí les dejo dos posibles soluciones.
Con esta otra función estamos establecemos las equivalencias entre los posibles valores que puedan tener .NET y le damos su equivalencia en SQL.
Conectar con una BD de SQLite en Monodevelop
Para empezar explicaré que SQLite es una BD transacional bajo la forma de una librería que se embebe en las aplicaciones, sin necesidad de contar con un servidor y sin configuración.
El programa utiliza la funcionalidad de SQLite a través de llamadas simples a funciones. De esta forma se reduce la latencia en el acceso a la base de datos, debido a que las llamadas a funciones son más eficientes que la comunicación entre procesos. El conjunto de la base de datos (definiciones, tablas, índices, y los propios datos), son guardados en un sólo fichero en la máquina.
Bueno y después de esta pequeña introducción empecemos con la práctica. Para ello, crearemos un nuevo proyecto. abrimos MonoDevelop y creamos una solución nueva.
Al crearse la solución nos dirigimos a las Referencias del proyecto y desde allí seleccionamos el paquete "Mono.Data.Sqlite". Para ello seleccionáis pulsamos con el botón derecho sobre "Referencias" y seleccionamos "Editar referencias...".
De las tres opciones que aparecen en el diálogo entramos en "Paquete", buscamos la referencia "Mono.Data.Sqlite" y lo añadimos a las referencias de la solución.
Ahora ya estamos preparados para conectarnos a una base de datos SQLite desde la solución de MonoDevelop.
Aquí os dejo un código de ejemplo:
Si quieren ver el código fuente completo, aquí les dejo el código.
El patron de diseño singleton
Muchos problemas de rendimiento y de escalabilidad suceden cuando se utilizan las conexiones a las bases de datos. Hay que tener en cuenta que las conexiones son un recurso que consume memoria y tiempo de procesador, por lo que sólo se deben crear las conexiones necesarias y estas deben cerrarse tan pronto como se a posible.
Una buena práctica es que todas las clases accedan a los recursos de la base de datos usando siempre una única conexión sin importar el número de instancias que estas clases generen al ser ejecutadas en una aplicación.
El patrón Singleton (instancia única) es el más sencillos, conocidos y utilizados. Está diseñado para restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto, asegurando de que sólo exista una única instancia de la clase sin importar el número de veces que se intente crear y proporcionando un punto de acceso global.
Se podría suponer que utilizando miembros estáticos obtendríamos el mismo resultado, pero no es así, ya que en este caso la responsabilidad de tener una única instancia recae en el cliente de la clase.
El patrón Singleton hace que la clase sea responsable de su única instancia y se implementa creando en nuestra clase un método para la creación de la instancia del objeto sólo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con atributos como protegido o privado).
Resumiendo, el patrón Singleton, provee una única instancia global ya que:
- La propia clase es responsable de crear la única instancia.
- Permite el acceso global a dicha instancia mediante un método de clase.
- Declara el constructor de clase como privado para que no sea instanciable directamente.
Analizando la clase se puede observar el uso de los modificadores "private" y "static" en el constructor que hacen que no se pueda crear la clase de forma directa, sino a través del método public GetInstance() que devuelve la instancia creada.
A continuación voy a mostrar un ejemplo en c# en el que tendremos dos clases, que al crearse se guardan la fecha y hora de creación:
- "Instancia1", en la que no se utiliza el patrón Singleton
- "Instancia2" en la que implementaremos el patrón Singleton.
- Para utilizar esta clase se deberá invocar mediante el método "GetInstance()".
Como se puede observar cada vez que se crea una instancia sin el patrón Singleton obtenemos una fecha y hora diferente, es decir, son instancias diferentes que se crean en cada llamada. En cambio, utilizando el patrón Singleton obtenemos la misma fecha y hora, ya que se crea una sola instancia de acceso global.
Si quieren ver el código fuente completo, aquí les dejo el código.
Encriptar texto con Monodevelop
Las contraseñas e "información sensible" en una base de datos es muy importante, por lo que deben estar protegidas mediante algún algoritmo de encriptación.
Hoy os explicaré en pequeño código para poder encriptar y desencriptar texto.
Primero definiremos una variable global para tener acceso a los servicios criptográficos.
En esta la siguiente función se define la clave para la codificación e inicializan la variable que nos dará acceso a los servicios criptográficos.
Las siguientes funciones realizaran la codificación y decodificación de los datos.
La función "Initkey" la debes llamar antes de utilizar a las funciones "Codificar" o "Decodificar", de lo contrario el programa fallará. Como alternativa puedes llamar a "InitKey" desde las funciones "Codificar" y "Decodificar", así seguro que no se te olvida.
Sencillo verdad? Pues ya no tienes excusa para guardar contraseñas sin encriptarlas.
Aquí os dejo el enlace al proyecto. Encriptar.zip
Programación en tres capas en Monodevelop
La programación en capas es un estilo de programación cuyo objetivo principal es la segmentación horizontal del programa. El diseño más utilizado actualmente es el diseño en tres capas, capa de datos, la capa de negocio y la capa de representación.
La ventaja principal es que en el momento de realizar un cambio en una capa, estos no afectan al resto de capas por lo que no se deberá revisar el resto del código. Además, permite distribución del trabajo ya que cada grupo de trabajo está totalmente abstraído del resto de capas, de forma que basta con conocer la API que existe entre capas.
Tal como se muestra en la imagen, hay una solución que consta de tres proyectos, en este ejemplo cada proyectos equivale a una capa.
La capa de lógica de negocio tiene una referencia a la capa de acceso a datos. Y la capa de presentación tiene referenciada la capa de la lógica de negocio.
La ventaja principal es que en el momento de realizar un cambio en una capa, estos no afectan al resto de capas por lo que no se deberá revisar el resto del código. Además, permite distribución del trabajo ya que cada grupo de trabajo está totalmente abstraído del resto de capas, de forma que basta con conocer la API que existe entre capas.
- Capa de presentación: es la que ve el usuario, presenta el sistema al usuario, le comunica la información y captura la información del usuario en un mínimo de proceso (realiza un filtrado previo para comprobar que no hay errores de formato). Esta capa se comunica únicamente con la capa de negocio.
- Capa de lógica de negocio: es donde residen los programas que se ejecutan, se reciben las peticiones del usuario y se envían las respuestas tras el proceso. Esta capa se comunica con la capa de presentación, para recibir las solicitudes y presentar los resultados, y con la capa de datos, para solicitar al gestor de base de datos almacenar o recuperar datos de él.
- Capa de acceso a datos: es donde residen los datos y es la encargada de acceder a los mismos. Está formada por uno o más gestores de bases de datos que realizan todo el almacenamiento de datos, reciben solicitudes de almacenamiento o recuperación de información desde la capa de negocio.
Tal como se muestra en la imagen, hay una solución que consta de tres proyectos, en este ejemplo cada proyectos equivale a una capa.
La capa de lógica de negocio tiene una referencia a la capa de acceso a datos. Y la capa de presentación tiene referenciada la capa de la lógica de negocio.
Comandos Bash en Monodevelop
A veces necesitas hacer llamadas a programas externos desde la aplicación. Para poder hacer estas llamadas en Monodevelop debes escribir:
System.Diagnostics.Process.Start("convert -quality 85 imagen.jpg");
Crear un Web Service con Monodevelop
Antes de explicaros el ejemplo, explicaré ¿Que es es un Web Service?
Un Web Service es un componente de software que utiliza un conjunto de protocolos y estándares para permitir el intercambio de datos entre aplicaciones.
La comunicación se realiza mediante métodos que al ser invocados por otros sistemas vía una URL devuelven información usando protocolos estándares como HTTP, XML, SOAP, WSDL, UDDI, WS-Security
Este documento de información devuelto por el Web Service puede ser procesado por cualquier aplicación o sistema en cualquier sistema operativo con cualquier lenguaje de programación que tenga las capacidades de procesarlo.
Como inconveniente se encuentra su rendimiento "bajo" si se compara con otros modelos de computación distribuida, tales como RMI (Remote Method Invocation), CORBA o DCOM (Distributed Component Object Model). Es el inconveniente "a pagar" por adoptar un formato basado en texto (XML).
A nivel de programación un Web Service es una clase que generalmente heredada de System.Web.Services.WebService y que contiene métodos que se publicaran en una página .asmx que es la extensión predeterminada de las páginas donde se ejecutan los Web Service.
Los Web Service, como he explicado en la introducción están pensados para ser utilizados por aplicaciones, por lo que no requieren una interfaz gráfica. Aunque para probar su ejecución de forma local Monodevelop provee una plantilla.
Bueno y después de esta explicación vamos al ejemplo.
Lo primero será instalar Monodevelop. Y además se requiere tener el servidor de pruebas, para ello:
Ahora pulsamos sobre "Iniciar nueva solución". Elegimos "Aplicación web" e indicamos el título "WebService"
Una vez creada la estructura de la aplicación Web, deberemos añadir el archivo de los Web Service, para ello encima del proyecto "WebService", hacemos click con el botón derecho y vamos a Añadir -> Nuevo archivo...
y seleccionamos ASP.NET -> Servicio web con CodeBehind y le asignamos el nombre del Web Service, en nuestro caso “WebService”.
En el archivo de clase que se crea contiene la estructura mínima necesaria para tener la clase como Web Service. A la que deberemos añadir los métodos.
En el ejemplo he creado un método que devuelve la suma de dos enteros. Observa que el método lleva el atributo [WebMethod()] antes de su declaración, es obligatorio. Además he añadido la propiedad Description, que se mostrará en el método cuando se publique.
La propiedad tiene otros atributos:
Ahora ya podemos ejecutar el proyecto tecleando F5 y si instalamos bien el servidor de pruebas, se abrirá el navegador web y mostrará una página en donde sólo aparecerá un enlace que dice WebService.

Al hacer doble click en el enlace, aparecerá la plantilla que genera Monodevelop de pruebas. Para probar el método haz click en el enlace correspondiente, para que se muestren las opciones del método enlaces en la parte superior y como overview nos muestra sus parámetros y el tipo de dato que devuelve.
Si quieren ver el código fuente completo, aquí les dejo el código.
Un Web Service es un componente de software que utiliza un conjunto de protocolos y estándares para permitir el intercambio de datos entre aplicaciones.
La comunicación se realiza mediante métodos que al ser invocados por otros sistemas vía una URL devuelven información usando protocolos estándares como HTTP, XML, SOAP, WSDL, UDDI, WS-Security
Este documento de información devuelto por el Web Service puede ser procesado por cualquier aplicación o sistema en cualquier sistema operativo con cualquier lenguaje de programación que tenga las capacidades de procesarlo.
Como inconveniente se encuentra su rendimiento "bajo" si se compara con otros modelos de computación distribuida, tales como RMI (Remote Method Invocation), CORBA o DCOM (Distributed Component Object Model). Es el inconveniente "a pagar" por adoptar un formato basado en texto (XML).
A nivel de programación un Web Service es una clase que generalmente heredada de System.Web.Services.WebService y que contiene métodos que se publicaran en una página .asmx que es la extensión predeterminada de las páginas donde se ejecutan los Web Service.
Los Web Service, como he explicado en la introducción están pensados para ser utilizados por aplicaciones, por lo que no requieren una interfaz gráfica. Aunque para probar su ejecución de forma local Monodevelop provee una plantilla.
Bueno y después de esta explicación vamos al ejemplo.
Lo primero será instalar Monodevelop. Y además se requiere tener el servidor de pruebas, para ello:
$ sudo apt-get intall mono-xsp2Para crear el Web Service, abre MonoDevelop, para ello ve a Aplicaciones -> Programación -> MonoDevelop.Ahora pulsamos sobre "Iniciar nueva solución". Elegimos "Aplicación web" e indicamos el título "WebService"
Una vez creada la estructura de la aplicación Web, deberemos añadir el archivo de los Web Service, para ello encima del proyecto "WebService", hacemos click con el botón derecho y vamos a Añadir -> Nuevo archivo...
y seleccionamos ASP.NET -> Servicio web con CodeBehind y le asignamos el nombre del Web Service, en nuestro caso “WebService”.
Las páginas ASP .NET (aspx) y los páginas de los Web Service (asmx) pueden programarse como Server Side Scripting que es una mezcla de etiquetas aspx con código C# dentro de una misma página con extensión .asmx. Es más recomendable utilizar Code Behind ya que permite separar el funcionamiento o sea la lógica de programación en un archivo de clase C# y la presentación en la página .asmx, a la cual se asociada el archivo de clase C#.
En el archivo de clase que se crea contiene la estructura mínima necesaria para tener la clase como Web Service. A la que deberemos añadir los métodos.
En el ejemplo he creado un método que devuelve la suma de dos enteros. Observa que el método lleva el atributo [WebMethod()] antes de su declaración, es obligatorio. Además he añadido la propiedad Description, que se mostrará en el método cuando se publique.
La propiedad tiene otros atributos:
- BufferResponse, true o false para indicar o no si la respuesta del Web Service es serializado en un buffer de memoria hasta ser completada o hasta que el buffer este lleno.
- CacheDuration, establece el número de segundos que la respuesta estará contenida en el cache.
- EnableSession, false o true para el soporte de sesiones.
- MessageName, identifica mediante un alias los métodos sobrecargados.
- TransactionOption, habilita al método para participar o no en una transacción, si ocurre una excepción en el método la transacción es abortada.
Ahora ya podemos ejecutar el proyecto tecleando F5 y si instalamos bien el servidor de pruebas, se abrirá el navegador web y mostrará una página en donde sólo aparecerá un enlace que dice WebService.

Al hacer doble click en el enlace, aparecerá la plantilla que genera Monodevelop de pruebas. Para probar el método haz click en el enlace correspondiente, para que se muestren las opciones del método enlaces en la parte superior y como overview nos muestra sus parámetros y el tipo de dato que devuelve.
Si quieren ver el código fuente completo, aquí les dejo el código.
Trabajar con el conector de MySQL en MonoDevelop
Después de pelearme con el conector de MySQL os voy a explicar como se referencia dentro de una solución con MonoDevelop.
Lo primero será instalar Monodevelop y un servidor de MySQL si no lo tenemos todavía. Después tendremos que descargarnos del conector desde la página web de MySQL. Elige la opción .NET & Mono, como se indica en la imagen.
Una vez descargado, descomprime el archivo y busca el archivo mysql.data.dll, (Si estas trabajando desde Linux como es mi caso el archivo lo deberás renombrar a MySql.Data.dll, recuerda que Linux es "case sensitive") el cual deberemos instalar en la caché de ensamblados global de Mono. Para ello ejecuta, desde la carpeta donde se encuentra el archivo ejecuta:
Ahora abrimos a MonoDevelop y creamos una solución nueva.
Al crearse la solución nos dirigimos a las Referencias del proyecto y desde allí importamos el ensamblado. Para ello seleccionáis pulsamos con el botón derecho sobre "Referencias" y seleccionamos "Editar referencias...".
De las tres opciones que aparecen en el diálogo entramos en "Ensamblado .NET", buscamos el fichero MySql.Data.dll que acabamos de descargar y lo añadimos a las referencias de la solución.
Ahora ya estamos preparados para usar el conector de MySQL desde la solución de MonoDevelop.
Aquí os dejo un código de ejemplo:
Lo primero será instalar Monodevelop y un servidor de MySQL si no lo tenemos todavía. Después tendremos que descargarnos del conector desde la página web de MySQL. Elige la opción .NET & Mono, como se indica en la imagen.
Una vez descargado, descomprime el archivo y busca el archivo mysql.data.dll, (Si estas trabajando desde Linux como es mi caso el archivo lo deberás renombrar a MySql.Data.dll, recuerda que Linux es "case sensitive") el cual deberemos instalar en la caché de ensamblados global de Mono. Para ello ejecuta, desde la carpeta donde se encuentra el archivo ejecuta:
$ sudo gacutil -i MySql.Data.dllCon esto ya tendremos instalado el ensamblado para utilizarlo desde MonoDevelop. Y sólo nos queda crear el proyecto.Ahora abrimos a MonoDevelop y creamos una solución nueva.
Al crearse la solución nos dirigimos a las Referencias del proyecto y desde allí importamos el ensamblado. Para ello seleccionáis pulsamos con el botón derecho sobre "Referencias" y seleccionamos "Editar referencias...".
De las tres opciones que aparecen en el diálogo entramos en "Ensamblado .NET", buscamos el fichero MySql.Data.dll que acabamos de descargar y lo añadimos a las referencias de la solución.
Ahora ya estamos preparados para usar el conector de MySQL desde la solución de MonoDevelop.
Aquí os dejo un código de ejemplo:
Instalar monodevelop y mi primer programa
Mono es una implementación libre del lenguaje C# y MonoDevelop es un IDE para GNOME diseñado para programar en C# y otros lenguajes .NET.
Para instalarlo simplemente, desde la consola, ejecuta el siguiente comando:
$ sudo apt-get install monodevelopPara crear el primer programa, abre MonoDevelop, para ello ve a Aplicaciones -> Programación -> MonoDevelop.
Ahora pulsamos sobre "Iniciar nueva solución". Elegimos "Proyecto de consola" e indicamos el título "HelloWorld".
y pulsamos "Adelante". Se mostrará una pantalla en la que dejaremos en blanco las opciones que nos propone.
Y ya tenemos nuestro primer programa el código de Hello Wordl! en C#.
Para ejecutarlo pulsa "Ctrl + F5.
Suscribirse a:
Entradas (Atom)





























