Mostrando las entradas con la etiqueta Visual Studio. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Visual Studio. Mostrar todas las entradas

viernes, 19 de febrero de 2016

62. This platform could not be created becouse a solution platform of the same name alrready exists (Ayuda Rápida XIX)

Cuando trabajamos con muchos datos y requerimos que se saque el máximo provecho del procesador, es necesario también considerar la compilación sobre la que se hará la aplicación, compilar a 64 bits nos puede traer buenos resultados cuando los milisegundos cuentan.

El error:

This platform could not be created becouse a solution platform of the same name alrready exists

es un error común, que genera Visual Studio cuando a un proyecto que ya se encuentra previamente configurado para compilar a 64 bits, se agrega otro nuevo proyecto, que no trae esta configuración por defecto.


La solución a esto, es la creación manual de un perfil para la compilación a 64 bits, 

¿Como hacemos esto?

Es necesario que abramos en un editor de texto el archivo de proyecto del nuevo proyecto que estamos agregando (csproj).


Dentro de el, encontraremos la siguiente seccion:



La sección que se encuentra delimitada por PropertyGroup indica el tipo de compilación, en este caso vamos a agregar el tipo de compilación a 64 bits, para ello debemos agregar la siguiente configuración
.
Guardamos el archivo.

abrimos nuevamente nuestra solución, y ya tendremos la configuración de proyecto para compilar a 64 bits.




jueves, 14 de enero de 2016

44. Reinstalar todos los paquetes nuget de una aplicación (Ayuda Rápida VIII)

Nuget es una gran herramienta que nos facilita el desarrollo de software, algunos lo comparan como una gran dulceria para los programadores, en ella tenemos cientos de dll a nuestra disposición para facilitarnos el trabajo.

Otra forma de usarlo es como un organizador de dll en nuestra organización tal como lo describí en el articulo: http://carlosamonroy.blogspot.mx/2015/07/herramientas-mi-propio-nuget.html, esto nos permite estar al día con la ultima versión de nuestras dll con un costo muy bajo y con una alta reutilización de los componentes.

Trabajamos menos hacemos mas y mejor.

Sin embargo existen casos en los que una dll puede corromperse, por copiado, desarrollo, una y mil maneras, ante nuget, la dll seguirá instalada, pero podemos tener un comportamiento no deseado en nuestra aplicación, o simplemente esta no funcionara.

¿Que hacer en ese caso?

Mi recomendación es reinstalar las dll de nuget, esto se realiza en forma automática, y para ello es necesario hacer lo siguiente:

1. Ir al menú herramientas en Visual Studio

2. Abrir la consola de administración de paquetes nuget.


3. Ejecutar la siguiente instrucción:

Update-Package -Reinstall

Esto reinstalara todas las dll del proyecto, como buena practica antes de hacer esto, les recomiendo sacar una copia del proyecto sobre el que están trabajando.

Felices lineas



miércoles, 30 de septiembre de 2015

23. C# - HASH - Calculo de digestivo SHA1 para un archivo (Ayuda Rápida II)

Problema: Calcular el digestivo (HASH) SHA1 de un archivo
Proyecto: Genérico

Solución:

Esta función es muy útil por que nos permite obtener el hash de un archivo, por este medio podemos validar la integridad del mismo, una función hash nos entrega una cadena de caracteres que es equivalente a otra que se ha dado como entrada, estas funciones entregan una cadena de un tamaño arbitrario.

Una función hash es muy utilizada en la autenticación de usuarios o en la validación de la integridad de un archivo como es este caso, al ejecutar esta función sobre un archivo se obtiene una cadena especial que la podemos usar para determinar si dicho archivo ha sufrido una modificación.

Bueno la función para calcular el SHA-1 es la siguiente:


Y que hace?

Bueno el proceso que hacemos para obtener este digestivo es el siguiente:

1. Inicializamos el motor de criptografía

System.Security.Cryptography.SHA1CryptoServiceProvider oSHA1 =
            new System.Security.Cryptography.SHA1CryptoServiceProvider();

2. Leemos el archivo como un stream

            System.IO.FileStream fArchivo = new System.IO.FileStream(Archivo, System.IO.FileMode.Open,
                      System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite);

3. Obtenemos el digestivo como un arreglo de datos

byte[] arrbytHashValue = oSHA1.ComputeHash(fArchivo);

4. Cerramos el stream como buena practica

fArchivo.Close();

5. Convertimos el arreglo de bytes a una cadena para que pueda ser visualizado

            string strHashData = System.BitConverter.ToString(arrbytHashValue);
            strHashData = strHashData.Replace("-", "");
            return strHashData;


Continuaremos con esta serie de Ayuda Rápida, sin embargo no he olvidado los pendientes que tengo con ustedes

Felices lineas

martes, 29 de septiembre de 2015

22. WinForm - ListBox - Copiar todos los elementos (Ayuda Rápida I)

Problema : Deseo copiar todos los elementos de un listbox
Proyecto: Winform

Solución:
El proceso para hacer esto es realmente sencillo, solo es necesario recorrer cada uno de los items que integra el listbox y agregarlo a un StringBuilder, ¿Por que a un StringBuilder? por que esta es la mejor opción cuando construimos cadenas, tiene un rendimiento mucho mayor a concatenar cadenas, aprovechamos que el StringBuilder nos permite formar una cadena con saltos de pagina, y esto lo enviamos al portapaleles.

Para este ejemplo, mi listbox tiene comonombre lstDetalle



Esta sección del blog incluirá tip sencillos para poder hacer ciertas actividades de desarrollo, en busca de facilitarnos el desarrollo, sin embargo continuare con todas las otras secciones y los temas que tengo pendientes con ustedes,

Saludos

viernes, 25 de septiembre de 2015

20. Métricas (Indice de Mantenibilidad)

Tengo varios temas que retomar con ustedes, temas que he dejado en este blog, pero que continuare escribiendo sobre estos, principalmente los patrones de diseño y el análisis de queries, ambos parte fundamental en el proceso de desarrollo.

Como he comentado en otros Post, Visual Studio, nos proporciona herramientas para poder medir el código, para darle una valoración al mismo, esto es importante ya que el código debe ser sencillo de entender por más de un desarrollador, es decir debe poder dársele mantenimiento de una manera sencilla.
Mientras más especializados son los componentes son más fáciles de controlar, estos se convierten en piezas esenciales de algo más grande.


Hoy vamos a hablar de la última métrica, que se encuentra en Visual Studio, el índice de mantenimiento, ¿Por qué la deje al último? Porque esta es la más sencilla, su nombre nos dice por si sola que es, esta nos dice que tan fácil es modificar  nuestro código, y mejor aún, nos lo indica con una bandera que va de rojo a verde.


Mientras el valor se encuentre más cercano al 100 es mejor, pero entonces me dirá, un índice de mantenimiento de 59 es bueno, la respuesta es sí, para el caso de .NET, como lo veremos a continuación.

Se puede decir que es un resumen de las otras métricas, el índice de mantenimiento  es una métrica creada allá por 1992 por Pau Oman y Jack Hagermeister, esta métrica agrupa varias otras como son el Volumen de Halstead (HV) esta es la única métrica que no hemos tocado en esta serie de post esta se define como el número de operaciones por el logaritmo base dos de operaciones distintas (N log2 n) , la complejidad ciclomatica (CC), las líneas de código (LOC) y la cantidad de comentarios.

Con estos valores se propuso una fórmula que nos da que tan mantenible es el código, la formula propuesta fue:

171-25ln(HV) – 0.23CC – 16.2ln(LOC) + 50.0Sin sqr(2.46*COM)

El paper original se encuentra en esta liga: ColemanPaper.pdf

Visual Studio no implementa en su totalidad esta fórmula, Visual Studio implementa una versión reducida de la misma, esta es:

Indice de Mantenibilidad = MAX(0,171-5.2 * ln(HV) – 0.23(CC) – 16.2*ln(LOC) * 100/171

Como se puede ver el equipo de Visual Studio elimino la parte que corresponde a los comentarios en el código.

Microsoft toma en cuenta estos rangos para limitar la mantenibilidad del código
El índice de mantenimiento cambia a amarillo entre 10 y 19 y a rojo ente 0 y 9, pero que es realmente el índice de mantenimiento.

0 – 9 Índice pobre
10 – 19 Índice Moderado
20 – 100 Índice Alto

Codificar no es solo colocar una instrucción tras otra, es necesario que seamos constructores de código de calidad, para reducir el esfuerzo de construcción, mejorar la calidad, disminuir los errores, mejorar el rendimiento, y lo más importante reducir el stress que se genera por códigos con problemas, que al final repercuten en la salud del desarrollador

Felices líneas

19. Métricas (Numero de lineas)

Número de líneas, esta es una de las métricas clásicas, incluso durante mucho tiempo se medían los programas por la cantidad de líneas de código que hubiera en ellos.

¿Pero que tan útil es?

Cuando hablamos de un desarrollo una operación puede ser por pocas o por muchas líneas de código dependiendo del desarrollador, por lo que una complejidad real de la solución no nos la puede dar.
Medir el trabajo en líneas de código no es una buena idea.

Sin embargo si nos ayuda en algo, nos ayuda a ver que métodos y funciones poseen gran tamaño, cuando un método es de un tamaño elevado, este se vuelve muy complejo, empieza a tener una responsabilidad muy alta, como consecuencia es más difícil de manipular.

Tradicionalmente se ha dicho que un método debe ocupar únicamente el espacio de la pantalla del equipo para ser correcto, esta observación no es del todo correcta, un método debe ser un ente altamente especializado, encargado de una actividad, esto muchas veces se puede lograr con muchas o con pocas líneas de código, el hecho de que un método tenga muchas líneas de código no necesariamente dice que está mal, o el hecho de tener muchos métodos muy pequeños con muy pocas líneas nos dice que es lo mejor. Hay que analizar cada caso, ver en que las operaciones se encuentren agrupadas, si bien divide y vencerás debe ser nuestra política, una división muy alta puede provocar que la complejidad se incremente.

Un método puede tener muchas líneas de código (no es lo deseable) pero si esto es justificado, es correcto.



Felices lineas

viernes, 11 de septiembre de 2015

16. Metricas (Cohesión y Acoplamiento)

Cuántas veces hemos escuchado, un buen diseño tiene alta cohesión y bajo acoplamiento, en cuantos documentos hemos leído… una de las características de este diseño es su alta cohesión.

¿Qué es eso?

Ambas son características de la programación orientada a objetos características que son muy importantes durante la etapa de diseño que pueden ser definidas de la siguiente forma:

Cohesión: Lo podemos entender como que cada uno de nuestros módulos sea altamente especializado en sus características o componentes, dicho en un lenguaje más coloquial, hablar siempre del mismo tema, esto nos facilita el diseño, la programación, las pruebas y el mantenimiento, así mientras mayor sea la cohesión mejor es el resultado en el sistema.

Sin embargo este es un concepto abstracto, que no puede ser fácilmente evaluado por una máquina, para determinar el grado de cohesión de un sistema es necesario validar el diseño, y ver que cada módulo sea un módulo especializado.

Y que pasa con el acoplamiento, bueno este es el grado en que una clase conoce a otras, las clases no son independientes, pese a que se recomienda un acoplamiento bajo, las clases requieren conocer a otras, este grado de conocimiento entre las clases genera el acoplamiento, de tal forma que una clase con alto acoplamiento tiene acceso a muchos métodos de diferentes clases, como consecuencia la clase es más compleja, y esta complejidad es la que debemos cuidar cuando tenemos un acoplamiento muy alto.

Mientras más compleja sea una clase, más difícil será el mantenimiento, mayor cantidad y complejidad de pruebas tendrá y será más propensa a errores.

Pero también hay que considerar algo, clases sin acoplamiento no son útiles, porque ningún ente vive aislado en este mundo.


A diferencia de la coherencia, para el acoplamiento, Visual Studio si nos permite obtener por medio de una herramienta el acoplamiento, para ello debemos ir al menú analizar y solicitar las métricas de la solución.


 “Calcular métricas de código para la solución”

Visual Studio inicia con la compilación del código y posteriormente, obtenemos los resultados.


¿Qué valor es óptimo? Este número siempre se debe encontrar en un valor inferior a 9, que incluso puede ser validado por medio de la herramienta de Code análisis de Visual Studio.

Hasta pronto

jueves, 10 de septiembre de 2015

15. Métricas (Complejidad Ciclomatica)

¿Qué es eso?

Cuando hablamos de arquitectura, empezamos a buscar medidas que nos indiquen la calidad de nuestros diseños, una medida que es ampliamente usada es la complejidad ciclomatica, en palabras sencillas esta nos indica que tan compleja es una función o una clase, es decir la cantidad de rutas que existen para ella. ¿Y en que no ayuda esto? Nos enseña la cantidad de casos de prueba que se necesitan para que este componente se pueda probar al 100%.

Una declaración como esta lo hace muy importante, si bien es prácticamente imposible probar un software al 100%, mientras más complejas sean las pruebas, es más difícil garantizar la calidad del software.

Esta es una de las métricas más importantes en la ingeniería de software, principalmente por 2 características:

1.       Da una visión general de la calidad de la solución

2.       Es independiente del lenguaje

Ahora bien para nosotros como programadores de .NET Visual Studio es capaz de calcular esta métrica, para que nosotros la verifiquemos.

¿Y cómo lo interpretamos? Esto es algo que es importante de esta medida, se interpreta de una forma muy sencilla, mientras en número sea menor es mejor.


Entonces, ¿Qué valores se recomiendan? , Los valores de la complejidad ciclomatica dependen de la organización, pero es recomendable seguir la siguiente tabla:

Mínimo
Máximo
Descripción
1
10
Riesgo pequeño
11
20
Riesgo Moderado
21
50
Alto Riesgo
50

Muy alto riesgo

Bueno ya que entendemos esto, ¿Cómo lo usamos en Visual Studio?
Realmente es muy sencillo, el menú de Visual Studio, nos da una opción que es analizar


Y en esta opción tenemos un menú que dice “Calcular métricas de código para la solución”, simplemente lo seleccionamos, Visual Studio inicia con la compilación del código y posteriormente, obtenemos los resultados.


Pero entonces me dirán, ese código que les muestro tiene una complejidad ciclomatica de 173, es muy alta, sí y no.

Estoy mostrando la complejidad de toda una solución, cada uno de los métodos que da vida a la solución es evaluado, de tal forma que un método solo por el hecho de existir sube en uno dicha complejidad.



¿En qué casos se enciende una alarma? Cuando un método tiene una complejidad ciclomatica alta, es decir hace demasiadas cosa tiene muchas posibilidades, el método ya no es controlable.

Saludos

lunes, 10 de agosto de 2015

11. Visual Studio Threads



Visual Studio es un IDE de desarrollo muy completo que nos permite efectuar una gran variedad de actividades más allá de la simple codificación de un programa.


En estos días en que los equipos de cómputo son cada vez más poderosos, el uso de múltiples threads para reducir tiempos de procesamiento se hace cada día más común.


Al deportar un programa Visual Studio nos permite ver que es lo que está haciendo, pero además existe una herramienta visual, que nos permite ver, que threads se están ejecutando.


¿Cuál es la ventaja de esto?, cuando hablamos de una aplicación que tenga varios módulos, varias capas, para dar el mantenimiento adecuado, es necesario saber con qué procesos nos encontramos trabajando al mismo tiempo.


El ver como se distribuyen los procesos nos ayuda a identificar errores de seguridad, de programación, o cuellos de botella.


¿Cómo se hace esto?

Bueno creemos una pequeña aplicación de consola que ejecute múltiples threads

        static void Main(string[] args)
        {
            System.Threading.Thread th1 = new System.Threading.Thread(ProcesoParalelo1);
            System.Threading.Thread th2 = new System.Threading.Thread(ProcesoParalelo2);
            th1.Start();
            th2.Start();
            System.Threading.Thread.Sleep(10000);
            Console.WriteLine("hola");
            Console.ReadLine();
        }

        static void ProcesoParalelo1()
        {
            while (true)
            {
                Console.WriteLine("proceso 1");
                System.Threading.Thread.Sleep(100);
            }
        }

        static void ProcesoParalelo2()
        {
            while (true)
            {
                Console.WriteLine("proceso 2");
                System.Threading.Thread.Sleep(1000);
            }
        }

La aplicación es muy sencilla, únicamente efectúa llamadas a proceso que toman diferente tiempo en llevarse a cabo pero que se efectúan de manera simultánea.

Si ejecutamos la consola, observamos lo siguiente:


Bien ahora pongamos un punto de interrupción

Y veamos quienes son los procesos paralelos que tenemos en nuestra aplicación, para ello iremos a el menú Degug -> Windows -> Parallel Stacks
Esto nos abre un diagrama, en el que podemos ver cuales subprocesos se ejecutan de manera simultanea
Analicemos esto:
El diagrama indica lo siguiente:
1.       Tenemos un thread que se ejecuta sobre el proceso principal
2.       Tenemos un thread en el primer proceso paralelo
3.       Tenemos un thread en el segundo proceso paralelo
Esos 3 threads los esperábamos desde un inicio, ahora ¿Por qué Visual Studio nos indica que hay 5 threads?.
Bueno coloquemos el cursor sobre el diagrama para ver que nos indica
Tenemos 2 procesos que corresponden a los threads paralelos, y uno que corresponde al thread principal, pero aparte tenemos otros 2 .Net SystemEvents, esta clase es la clase que proporciona el acceso al sistema de notificaciones de .NET, además hay un segundo thread en ejecución, este es vsHost.RunParkingWindow, este corresponde a la depuración de Visual Studio.
Saber usar las herramientas quitan dolores de cabeza al implementar aplicaciones, no solo es codificar hay mucho mas.

viernes, 7 de agosto de 2015

10. Instaladores (I)


Lo he pensado bastante en tocar este tema, ya que es un tema que fue incluido desde la versión 2.0 sin embargo he visto que aún existe un desconocimiento del mismo.

Hablo de una instalación tipo Clickonce.

¿Para que me sirve este tipo de instalación?

Este tipo de instalación es muy especial porque permite que un software se actualice, de una manera sencilla, permitiendo que todos mis usuarios tengan la misma versión de una aplicación, y lo mejor de todo esto funciona tanto en Internet como en una Intranet.

Yo puedo establecer una versión mínima con la que puede trabajar uno de mis usuarios, y tengo la ventaja de que puede trabajar desconectado sin ningún problema

Mucho se ha hablado de que las aplicaciones web son la mejor opción, pero en ciertas ocasiones se justifica crear un cliente Windows, con todo el poder de una aplicación de escritorio, con la capacidad de aprovechar el procesamiento local, y que además puede actualizarse de manera tan sencilla como lo es una aplicación web.

Otra gran ventaja de un desarrollo Windows es que siempre se verá igual no hay problema con el aspecto, al poder procesar de manera local, puedo tener aplicaciones desconectadas, que solo se conecten a la red cuando sea necesario.

La aplicación es segura, ya que puede ser firmada por un certificado digital que valide quien es el emisor del producto.

Visual Studio tiene un asistente que me ayuda a hacer este tipo de instalación, sin embargo, lo que haremos en este tutorial será configurarlo de forma manual, para determinar para que sirve cada parámetro de configuración.
  • Creemos una pequeña aplicación, un formulario sencillo en Visual Studio

  • Pongamos alguna funcionalidad, un botón que diga hola mundo

  • Al ejecutarlo obtenemos lo siguiente:


  • Ahora vamos a configurar ClickOnce Seleccionemos el proyecto, y con el botón derecho seleccionamos propiedades


  • Seleccionamos Publicar
Y que es esto, esta es nuestra pantalla de configuración de clickonce, con ella vamos a poder publicar la aplicación de manera rápida.
¿Qué tenemos en esta página?
La primera sección se denomina ubicación de la publicación, en esta sección indicaremos en donde queremos publicar nuestra aplicación, nos pide 2 rutas, una que es en donde Visual Studio dejara la publicación , y una segunda que se emplea cuando Visual Studio no tiene acceso a la ruta en la cual se publicara la aplicación


La segunda sección es Modo y Configuración de Instalación, en esta sección se establecen las principales opciones de cómo operara nuestro instalador, contamos con 4 Botones que nos abren nuevas secciones, así como la posibilidad de generar la aplicación en 2 modos:
·         La aplicación solo está disponible en línea, esta es la opción más cercana a una aplicación Web, pese a que es un winform, solo se puede usar si nos encontramos conectados a la Red.
·         La aplicación también está disponible sin conexión, esta opción nos crea una aplicación que se instala en nuestra computadora, una aplicación completa que podemos actualizar a distancia.


Cada uno de los botones nos ayuda configurar nuestro instalador, de esta forma tenemos:
Este botón abre la siguiente pantalla:
Esta nos permite elegir que archivos se incluirán dentro de la aplicación.
Es muy importante ya que esta le indica a Nuestro paquete cuáles serán los requisitos previos, y de donde los obtendrá, un requisito previo por ejemplo puede ser una base de datos de SQL o un Framework especifico


Una de las pantallas más importantes y la que hace interesante este tipo de instalador

Esta permite mostrar cómo se llevara a cabo la actualización, en que momento la debe ejecutar, y si las actualizaciones se encuentran en una ruta distinta a la aplicación, cual será esta ruta
Además aquí se puede especificar cuál será la versión mínima de ejecución para la aplicación
Datos particulares de la aplicación, ¿Quién la hizo? Si estará ligada a alguna extensión ¿Cómo se mostrara la página web de descarga?


Y por ultimo

La versión de la publicación, es muy importante llevar un order por que las actualizaciones se llevaran a cabo en forma automática.
Ahora si publicamos la aplicación
Instalando




Ahora si necesitan una actualización de su aplicación, solo necesitan modificar la aplicación y publicar nuevamente, y si configuran que debe buscar actualizaciones, la aplicación se actualizara automáticamente.

Saludos