Archivo por meses: noviembre 2018

Tiene una licencia para Visual Studio Professional 2017

Pues eso… que hace unos días mientras usaba el Visual Studio Community 2017 me salió un mensaje que decía (ver figura 1):

Tiene una licencia para Visual Studio Professional 2017. Obténgala ahora.

vs2017_licencia_01
Figura 1. El IDE de Visual Studio dice que tengo una licencia gratis

Pulsé en el enlace y me mandó a la página de descargas de Visual Studio 2017 (ver figura 2), pero allí decía (tal como sigue diciendo) que la versión Professional es de evaluación.

Aún y así, la descargué e instalé.

Nota:
Por si no lo sabes, ya no tengo “licencia” para la versión de Visual Studio Professional como antes cuando era MVP.

vs2017_licencia_02
Figura 2. Página de descargas de Visual Studio 2017

Como no me fiaba de este “bondadoso regalo de Microsoft” busqué en la web a ver si alguien comentaba algo y… ¡no hallé nada!
Lo que pensé es que si era solo para los 30 días de prueba, pues… bien está, si “caduca” seguiré con la versión gratuita (Community) ya que prácticamente es lo mismo que la Professional, al menos para las cosas que yo uso.
En realidad lo que me gusta de la versión Professional es que te dice en qué parte del código estás usando un método o tipo (indicado justo encima de la definición con “n referencias” y al pulsar en ese “enlace” te muestra una ventana (tipo Intellisense) con los sitios en los que llaman al método o tipo y puedes verlos, etc. (ver la figura 3), pero por lo demás, con la versión “de gratis” me apaño bien Smile

vs2017_licencia_03
Figura 3. Referencias a las que hacen a un método o tipo de datos

Esta tarde, me sale un aviso de que me quedan pocos días para que expire los 30 días de prueba (también puedes seleccionar la opción Registrar producto, que está en el menú de ayuda de Visual Studio Professional 2017), pulso en ese aviso y me sale una pantalla parecida a la que te muestro en la figura 4, con la diferencia de que había más texto en el mensaje que hay a la derecha (indicando cuándo expiraba y esas cosas) y pulso en el “enlace” Buscar una licencia actualizada (con ese texto o algo parecido, ya no recuerdo jejeje) y me dijo que La licencia se ha actualizado correctamente.

vs2017_licencia_04
Figura 4. Buscar una licencia actualizada

Esperaré al 14 de diciembre a ver si es cierto que está registrada “de por vida” Winking smile

Espero que te sea de utilidad, sobre todo si no te fiabas de que ese mensaje fuese “verdadero” Winking smile

Nos vemos.
Guillermo

Números aleatorios con decimales en .NET

Pues eso… aquí te explicaré cómo generar números aleatorios con decimales y cómo indicar los valores entre los que quieres que estén esos números usando la clase Random de .NET y con ejemplos tanto para Visual Basic .NET como para C# (e incluso para BASIC, bueno… al menos para Visual Basic 6.0 y anteriores).

Pero primero te contaré la “batallita del Guille” para que sepas el porqué a estas alturas de la vida te explico algo tan “elemental” Winking smile

Si no te quieres leer la batallita, pues… pasa un poco más abajo que ahí te muestro el código de ejemplo tanto para Visual Basic .NET como para C# e incluso para VB6.

La batallita del Guille

Estaba yo el otro día escribiendo un código en el que necesitaba generar dos números aleatorios (en realidad varios).
Dos de ellos eran números enteros, en esos no tuve mayor problema, ya que tenía este artículo publicado en mi sitio: Random.Next ese incomprendido  y me lo leí, y todo a la perfección… Winking smile

El problema me surgió al crear los números aleatorios con decimales.
Yo sabía que usando NextDouble de la clase Random era como tenía que hacerlo (la certeza era porque yo lo decía al final del artículo ese que te he comentado en el párrafo anterior Winking smile).
Y curiosamente en ese mismo comentario decía que lo más parecido a la función Rnd() de Visual Basic 6.0 era precisamente NextDouble.
Pero… ¿quieres creerte que ya no me acordaba cómo se usaba la función RND de BASIC? jajajaja, en fin… seguramente serán cosas de la edad o de que en los últimos años no tengo la programación como una de mis tareas diarias… en fin…

La cuestión es que volvía a buscar en la web (indicando elGuille) cómo usar RND o casi… y me encontré como mi Curso Básico de Programación en Visual Basic, concretamente en las soluciones de la décima entrega, lo explicaba… ¡menos mal que el Guille aún mantiene su sitio después de los 22 años que cumplió hace pocos días! Winking smile

Generar un número aleatorio con decimales entre dos cifras

El método NextDouble genera un número que será igual o mayor que 0.0 y menor (pero no igual) que 1.0.
Por tanto si lo multiplicaras, por ejemplo por 6, generaría un valor que iría desde 0.0 a 5.99.

Nota:
En Visual Basic 6.0 (o incluso en VB.NET y si me apuras hasta en C#) se utilizará la función Rnd para hacer el mismo papel que NextDouble, pero con valores de tipo Single en lugar de Double.

Tal como explico en las respuestas del curso básico, si quieres un número entero entre 20 y 50 debes escribir un código como este (este ejemplo es de VB6, las variables están declaradas en otra parte… supongo)

T = Int(Rnd * 31) + 20 ‘Número de rascadas, T valdrá de 20 a 50

Es decir la función Rnd (o el método NextDouble) debes multiplicarlo por  31 (50-20+1) y después añadirle el mínimo (20). De esa forma se genera el rango de valores que queremos usar.
En ese ejemplo se usa la función Int para convertir el resultado en un número entero, pero recuerda que ¡es código de VB6!

Ahora veremos ese mismo ejemplo pero haciendo las cosas bien y con .NET.

El código de ejemplo

El siguiente código creará un número aleatorio (con decimales) entre 20 y 50 (ambos incluidos).

Inserta este código en el método Main de una aplicación de consola.

Código para Visual Basic .NET

Dim r As New Random()

Dim minimo As Integer = 20
Dim maximo As Integer = 50

Dim res = (r.NextDouble() * (maximo - minimo + 1)) + minimo
Console.WriteLine("Un número Double entre {0} y {1} (incluidos)", minimo, maximo)
Console.WriteLine("(r.NextDouble * ({0} - {1} + 1)) + {1} = {2}", maximo, minimo, res)
Console.WriteLine()

Console.ReadLine()

Código para C#

var r = new Random();

int minimo = 20;
int maximo = 50;

var res = (r.NextDouble() * (maximo - minimo + 1)) + minimo;
Console.WriteLine("Un número Double entre {0} y {1} (incluidos)", minimo, maximo);
Console.WriteLine("(r.NextDouble * ({0} - {1} + 1)) + {1} = {2}", maximo, minimo, res);
Console.WriteLine();

Console.ReadLine();

La salida mostrada será algo así:

numeros_aleatorios_vb_02
Figura 1. Salida del código de ejemplo

Casualmente el número generado aleatoriamente es 50 y pico… para que veas que el máximo también se incluye Smile

Resumiendo

Para generar un número entre dos valores (ambos incluidos) usa el cálculo siguiente:

(r.NextDouble() * (maximo – minimo + 1)) + minimo

o este otro que también hace lo mismo:

(r.NextDouble() * (minimo – maximo)) + maximo

Resaltar aquí, que si quieres la misma funcionalidad que el método Next de la clase Random, es decir que el valor generado sea igual o mayor que mínimo pero menor que máximo tendrías que hacerlo de esta forma:

(r.NextDouble() * (maximo – minimo)) + minimo

Para finalizar, recordarte que le eches un vistazo a las explicaciones que doy en el artículo que te indiqué al principio:
Random.Next ese incomprendido

Espero que te sirva Winking smile

Nos vemos.
Guillermo

Las novedades de Visual Basic 15.5 y C# 7.3

Pues eso… esto es lo último que dicen en el sitio de Microsoft sobre las novedades de Visual Basic .NET y C#

En la página de Novedades de Visual Basic indica que es la versión 15.5 disponible en Visual Studio 2017 versión 15.5 (supongo que o superior, aunque en el Visual Studio Professional 2017 versión 15.9.2 las versiones de VB y C# son diferentes, al menos eso es lo que se muestra en la ventana Acerca de tal como puedes comprobar en la figura 1 donde se indica que ambas son la versión 2.10.0-beta2).

Versiones_csharp_vb_vs_pro_2017_15_9_2
Figura 1. Las versiones de VB y C# mostradas en Visual Studio 2017 v15.9.2

En cuanto a las Novedades de C# la última versión indicada en la página de Microsoft es C# 7.3 disponible en la versión 15.7 de Visual Studio 2017 y como se ve en la captura de la figura 1 (del Visual Studio Professional 2017 versión 15.9.2) la versión allí mostrada es la 2.10.0-beta2.

Si usas los ejecutables de compilación desde la línea de comandos (abre el acceso directo que te habrá creado la instalación de Visual Studio 2017 ya sea la Professional o la Community) tanto vbc como csc te muestran que es la versión 2.10.0.0.
Pero eso no es lo importante, lo que importan son las características indicadas en las páginas de novedades tanto de C# como de Visual Basic.

Espero que antes de que acabe este mes publique un artículo sobre cómo usar las “tuplas” (Tuples) tanto en Visual Basic como en C#, al menos en las incluidas en las versiones 7.2 de .NET), pero eso será otro día Winking smile

Nos vemos.
Guillermo

Evitar el aviso Saving changes is not permitted al modificar una tabla con Microsoft SQL Server Management Studio

Pues eso… ya me ha ocurrido varias veces que al modificar una tabla de una base de datos de SQL Server me daba un aviso indicando que no podía guardar los datos al modificar la estructura de la tabla: cambiar alguna columna, añadir alguna nueva o eliminar una existente. El aviso en inglés es el siguiente:

Saving changes is not permitted. The changes that you have made require the following tables to be dropped and re-created. You have either made changes to a table that can’t be re-created or enabled the option Prevent saving changes that require the table to be re-created.

La última vez que me pasó (hace unos días) me puse a buscar en la web el porqué de este mensaje (que después de saber la solución me resulta más evidente que en el propio mensaje te dice –o casi- el porqué Smile).

La solución para evitarlo es cambiar la configuración en el propio Management Studio de SQL Server (en mi caso estoy usando el de la versión 17.9 instalada con SQL Server Express 2017), ahora te lo explico.

La solución ahora está “destacada” al buscar con Google o con Bing esa frase (la indicada en el título) y muestra la dada en “stackoverflow.com“, pero esa no fue la que usé… – en realidad ya no me acuerdo I don't know smile, pero creo que fue un artículo de Confluence Support del que te dejo también el enlace), en cualquier caso lo que debes hacer es lo siguiente:

En el Management Studio ve al menú Tools (Herramientas) selecciona Options… (Opciones) y en el cuadro de diálogo mostrado selecciona en el panel izquierdo Designers (Diseñadores) y quita la marca en la opción Prevent saving changes that require table re-creation (no sé qué texto pone en el Management Studio en español, pero como verás en la siguiente captura de ducho cuadro de diálogo es la última de las casillas seleccionables –checkboxes-).

SQLMS_Tools_Designers_ed
Figura 1 – Opción a quitar para evitar el aviso

Y eso es todo… espero que te sirva Winking smile

Nos vemos.
Guillermo