Categoría: cosas técnicas

Posts relacionados con la programación o manejo o configuración de los oredenadores (computadores)

  • Tutorial para usar las APIs de Google con C# y Visual Basic

    Pues eso… que como yo me he encontrado con problemas a la hora de implementar las APIs de Google y de encontrar ejemplos (que de haberlos solo eran para C#), me he decido a escribir esta especie de tutorial para poder acceder a las siguientes APIs de Google: Drive, Docs y People. Es decir, poder manipular el contenido de Google Drive, los documentos y los contactos de Google que están asociados tu cuenta (o la cuenta que decidas usar) de GMail.

    Lo primero que necesitas (salvo que uses las que yo voy a crear para este tutorial) es crearte una cuenta en Google Cloud Platform, es gratuito al menos sino usas recursos que son de pago.
    La cuenta a usar será la que tengas ya de GMail o bien puedes crear una nueva cuenta y asociarla con Google Cloud.

    Cuandoi asocias una cuenta por primera vez, te darán una oferta de 300$ (US $) para que pruebes de forma gratuita los recursos de pago (siempre que no te pases de esos 300 dólares). Pero como te digo, para las cosas que te voy a explicar no te hace falta.

    Por ahora me voy a saltar el paso de crear tus propios poyectos en Google Cloud, eso lo dejaré para el final (salvo que cambie de opinión), lo que sí te digo es que si quieres utilizar los ejemplos que te voy a mostrar usando mis claves o las que yo indique en el código) antes debes decírmelo para poder añadir tu correo de GMail a los usuarios que pueden usar esas claves.

    Esto ultimo lo puedes hacer dejando un comentario en este mismo post y yo te agregaré, esto puede que no lo haga pasado unos meses, ya que solo quiero que la gente lo pruebe en este tiempo reciente, mientras publico los tutoriales. Y dejando, como mucho, unos tres meses de desde la publicación original, así que… si estás leyendo este tutorial después del 15 de marzo de 2021, es posible que o bien no admita más usuarios o simplemente que no lo siga «soportando», además de que hay un límite de 100 usuarios por proyecto, y si ya están esos usuarios registrados con la aplciación, es posible que, incluso antes del 15 de marzo del 2021 no pueda admitir más usuarios.

    Dicho esto, empecemos.

    Nota:
    Los ejemplos los voy a hacer con .NET 5.0.1 pero son válidos para .NET Framework v4.5 y superiores, .NET Standard y .NET Core.

    Crear un proyecto en C# o Visual Basic

    Crea un proyecto de consola para C# o VB y ve a Tools>NuGet Package Manager>Manage NuGet Packages for Solution… (en español es: Herramientas>Administrador de paquetes NuGet>Administrar paquetes NuGet para la solución…)

    Busca y añade los siguientes paquetes de NuGet (entre paréntesis te indico las versiones que estoy usando al escribir este tutorial):

    Nota:
    Los enlaces son por si quieres ir a la página de NuGet y descargarlas desde allí o ver cómo instalarlas según estés usando Visual Studio 2019 o Visual Studio Code o simplemente creando los proyectos desde la consola con dotnet.
    Eso sí, necesitarás tener instlado el SDK de dotnet 5 para poder compilar el código.

    Esto añadirá las referencias necesarias para usar el código que te mostraré.

    Nota:
    Si te interesa ver el código fuente de las APIs de google puedes verlas en el siguiente enlace: google-api-dotnet-client.

    Las entregas

    1. Entrega 1: Crear Proyecto en Google Cloud
    2. Entrega 2: Código para acceder a los contactos con People API
    3. Entrega 3: Código para acceder a los documentos con Drive API y Docs API
    4. Entrega 4: Código para crear un documento con Docs API

    Nota:
    Voy a publicar ahora este post mientras creo el protyecto de prueba, escribo el código, lo convierto de C# a VB (ya tengo código escrito en C#) y lo publico, así podrás solicitar tu «permiso» para usar estos ejemplos con mi ID y clave secreta (que después de publicarla no será tan secreta 😉 )

    Nos vemos.
    Guillermo

  • ¿Te gustaría obtener más prestaciones de gsNotasNET?

    Pues eso… estoy pensando darle al programa más opciones para indicar dónde se guardarán las notas, actualmente se guardan en un fichero de texto en la carpeta documentos del usuario activo. Con lo cual no estarían esas notas disponibles en otro equipo distinto del que se usó para crearlas. Salvo que copies ese fichero y te lo lleves contigo… pero eso, creo que está demostrado que no es muy fiable, sobre todo para gente como yo que, en mi caso, soy más despistado que… en fin… que seguro que me cargaría alguna nota por olvidarme de actualizar el fichero en alguno de los ordenadores a los que me lo llevara… y según la ley de San Murphy, seguro que la nota que perdería sería la que más me interesaría mantener… ¿A ti también te ha pasado? pues ya sabes… sigue leyendo 😉

    Guardar las notas en la nube (un sitio de Internet)

    Te decía que estoy barajando la posibilidad de almacenar las notas «en la nube», concretamente en el Drive de Google, pero en tu Drive, ni en el mío… bueno, mis notas estarían en el Drive de mi cuenta de gmail, las tuyas en el Drive de tu cuenta de gmail y las de Pepito, en el Drive de la cuenta de gmail de Pepito, y así sucesivamente.

    El problema de esta opción es que solo tengo disponibles unas 90 cuentas que asignar, es decir, 90 usuarios podrían beneficiarse de esa opción de guardar las notas en Google Drive.

    Seguramente no habrá tantas peticiones, pero… nunca se sabe…jajaja.

    ¿Por qué 90 usuarios?

    Porque para cada aplicación (o proyecto) que se crea en la nube de Google (Google Cloud Platform) te da la opción de permitir hasta 100 usuarios, y de esos 100 yo me reservo al menos 10, por si se lo ofrezco a algunos de los currantes de la empresa de los kayaks en la que trabajo actualmente (Maro – Kayak Nerja).

    ¿Por qué hay que configurar una cuenta?

    Porque si un usuario (cuenta de gmail) no está registrado en el proyecto, no podrá usar su cuenta de correo para acceder al Drive.

    El mensaje de error es el mostrado en la figura 1.

    Figura 1. Error al intentar acceder con una cuenta de gmail no configurada.

    Nota:
    Repito lo de «cuenta de GMAIL» porque solo se pueden usar cuentas de gmail, al menos a mí no me ha dejado definir otra cuenta de otro servidor, por ejemplo Outlook.com.

    Otras opciones para tener las notas en la nube

    Otra opción sería crear una base de datos en el hosting donde tengo mis sitios alojados y sería menos problemático, ya que ahí no habría límite de usuarios, pero… no me mola esa opción.

    ¿Por qué en documentos de Google Drive?

    La idea era hacerlo con las notas de Google, (Keep) pero para esa aplicación no existen APIs con las que se puedan acceder, así que… me decidí por usar los documentos, ya que, al menos para mí, es más cómodo de leer, imprimir, etc.

    Nota del 20-oct-22:
    He entrado en las APIs de Google y resulta que ya hay una API para las notas de KEEP. Tendré que probarla a ver si la puedo usar en el nuevo proyecto que estoy preparando ahora usando .NET 6 (antes era .NET Framework) y con la nueva versión para móvil (aún pendiente, aunque en la que ya creé en su día no creo que implemente lo de KEEP, si es que llego a implementarlo).

    ¿Y de la privacidad qué?

    Si no te animas porque yo vaya a fisgonear en tus documentos o en tu Drive, no te preocupes que aunque tenga acceso para muchas cosas (tengo que poder crear y eliminar ficheros y carpetas en Drive), no haré nada que no sea solo para gestionar las notas, además de que todo lo que se guarde o se elimine, si esa opción la marcas cuando esté listo todo esto, solo lo hará en la carpeta gsNotas que se creará en Drive, y dentro de esa carpeta habrá una carpeta por cada grupo de notas que vayas creando.

    Lo de poner como opcional el que se borren las notas sustituidas es porque cada vez que se crea un documento en Drive, aunque ya exista el mismo nombre del documento, se mantienen copias independientes, de esa forma puedes tener una especie de copia de seguridad de cada nota. Así que… si no quieres que haya muchos ficheros repetidos, podrás marcarla opción de borrar la nota antes de guardar o no… pero, como siempre, eso será cosa tuya 😉

    Volviendo a la petición de guardar las notas en la nube…

    Así que… si quieres que te incluya en la lista, escribe por aquí (en los comentarios) que estás interesado en que ta añada a los que pueden guardar las notas en Google Drive.

    En el comentario no es necesario que indiques tu cuenta de correo, ya que para poder escribir un comentario tienes que indicar tu cuenta de correo (aunque no se muestra), así que… más fácil imposible… eso sí, en la cuenta de correo que uses para escribir el comentario/petición debes usar una cuenta de gmail que sea tuya (que tú tengas acceso).

    Si, de casualidad, hubiese más de las 90 peticiones, ya me las ingeniaré para poder tener otras 100 más… aunque creo que sin pagar (yo a Google) no se podrá hacer. 😉

    Ah, y esto no te va a costar nada… ni siquiera te voy a pedir que hagas un donativo con PayPal… ¡anda! ya lo he dicho… jajajaja pero no es obligatorio, aunque no estaría mal, que hasta el mes de junio o julio no tengo trabajo con lo de los kayak/piraguas 😉

    Y esto es todo… si no sabes de qué va esto de gsNotasNET, sigue estos enlaces:
    La página de gsNotas en elguillemola.com, el código fuente de gsNotasNET en GitHub.

    Gracias.

    Nos vemos.
    Guillermo

  • Simular discard de C# en Visual Basic

    Pues eso… haciendo pruebas con el conversor de C# a VB de Paul1956 comprobé que los discard de C# (asignación digamos que nula de una función o descartes según la traducción al español ) los generaba usando dos guiones bajo (undercore) y el «asistente» de VS indicó que creara una función para usar ese descarte. Y al ver que es válido usar el nombre __ (dos guiones bajos) como nombre de una función, pensé que también sería válido para una propiedad… de forma que se pudiese haccer ese tipo de asignación.

    Por ejemplo, si tenemos este código de C# en el que se «descarta» el valor devuelto por la función MostrarAyuda:

    class Program
    {
        static void Main(string[] args)
        {
            _ = MostrarAyuda(true, false);
    
            //Console.WriteLine(_);
    
            Console.WriteLine();
            Console.WriteLine("Pulsa una tecla para finalizar.");
            Console.ReadKey();
        }
    
        private static string MostrarAyuda(bool value1, bool value2)
        {
            var s = $"Valores: value1: {value1}, value2: {value2}";
            Console.WriteLine(s);
            return s;
        }
    }
    

    La conversión podría quedar de esta forma:

    Public Shared Sub Main(args As String())
        '__ = MostrarAyuda(True, False)
    
        __ = MostrarAyuda(True, False)
    
        Console.WriteLine(__)
    
        Console.WriteLine()
        Console.WriteLine("Pulsa una tecla para finalizar.")
        Console.ReadKey()
    End Sub
    
    Private Shared Property __ As Object
    
    Private Shared Function MostrarAyuda(value1 As Boolean, value2 As Boolean) As String
        Dim s = $"Valores: value1: {value1}, value2: {value2}"
        Console.WriteLine(s)
        Return s
    End Function
    

    Es un apaño, pero puede valer para equiparar los dos lenguajes.

    Nota:
    Fíjate que en VB al ser una propiedad válida la podemos usar como cualquier otra variable para mostrar el contenido.

    Y esto es todo… a ver si lo implementa y así no dará error cuando se convierta código de C# que tenga ese tipo de asignación (que la implementaron en C# 7.0)

    Nos vemos.
    Guillermo