Where are the Authentication views in AspNet Core App?

I am struggling with Visual Studio for Mac. I have been a Visual Studio user since it came in multiple CDs in a box. Visual Studio has been improved a lot, I like it more now than I did before. But there is a problem, the VS version for the Mac is a completely different product. I am both a Mac and PC user, I like both operating systems, Windows and Mac OS. However, I have been trying to use my personal laptop (MacBook Pro M1) for my personal software projects, and a lot of them were initially created with VS for Windows.

Visual Studio for Mac lacks some important things I use in my projects, for example, SQL Server Data Tools (SSDT) projects. I know that this is because we cannot install SQL in a Mac, and also know that there are alternatives to SSDT, like Azure Data Studio… but guess what? It’s not compatible with the ARM architecture which is what Apple’s new chip (M1) uses, and that’s the laptop I have 😕.

Anyways, that’s a topic for another post, this is about finding the Authentication views in an ASP.NET Core app. Since I couldn’t use this MacBook to continue working on my existing projects, I decided to use it only for new ones. That should be fine. So I have an idea for a book-sharing app, and I wanted to use VS for Mac to create this web app. I started with one of the templates and in less than a minute I had a working web app on my laptop. Next, I decided to scaffold the Authentication stuff to get authentication features and allow users to do stuff like the following:

  • Register
  • Login/Logout
  • Forgot Password
  • Reset Password
  • Confirm Email
  • Etc.

I ran the following commands in my Terminal and on my project’s root directory to add the ability to scaffold the identity stuff. You might not need to do this if you have already installed the aspnet codegenerator:

dotnet tool install -g dotnet-aspnet-codegenerator

dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.AspNetCore.Identity.EntityFrameworkCore
dotnet add package Microsoft.AspNetCore.Identity.UI
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Tools

dotnet aspnet-codegenerator identity -h

After this, I ran the following command to add the Authentication features to my project. The following command needs to be run inside your project’s directory:

dotnet aspnet-codegenerator identity -dc ReadMoreBooks.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.Logout"

After doing this, I didn’t see many changes in my solution, but when I ran my application again, I noticed I had the option to register, login, and logout. I registered a test user, and everything worked fine. Until I wanted to edit the page where a user confirms registration and also the page to reset the password. I was expecting to see ConfirmEmail and ResetPassword views under Areas > Identity > Pages > Account – but they weren’t there, only Register, Login, and Logout.

Where are they? After doing some research and spending a good amount of time searching for them in my solution, I found out that Microsoft hid these views to make projects smaller and more organized. This is the blog post where they announced that and that I clearly missed: https://devblogs.microsoft.com/dotnet/aspnetcore-2-1-identity-ui/

So, it turns out that by using the command line to scaffold these views I was already halfway from where I needed to be. What I mean by that is, by using the command tool (I think this is available through the UI but only in VS for Windows), all I had to do was either not specify which views I wanted to scaffold or specify all the views I wanted to include in my project so I could customize them.

The first command is what I ran initially, which helped create the Register, Login, and Logout views, and while everything else within the Authentication was available, the actual files were hidden.

dotnet aspnet-codegenerator identity -dc ReadMoreBooks.Data.ApplicationDbContext --files "Account.Register;Account.Login;Account.Logout"

So what I ran after was the following command, which added the views I wanted to my project so I could access them and customize them as much as I needed.

dotnet aspnet-codegenerator identity -dc ReadMoreBooks.Data.ApplicationDbContext --files "Account.ConfirmEmail;Account.ForgotPassword;Account.ForgotPasswordConfirmation;Account.Lockout;Account.LoginWith2fa;Account.ResetPassword;Account.ResetPasswordConfirmation"

That’s it! As soon as the command above was executed, all the authentication-related views appeared in my solution, just like in the old times. Perfect.

Now, I learned that I also have the option to run the same command without specifying the –files command, which will then add all of the available views related to Authentication to your project.

dotnet aspnet-codegenerator identity -dc ReadMoreBooks.Data.ApplicationDbContext

So there you have it folks, a feature by Microsoft was a bug for me, at least for a while, until I understood what was happening, and then I learned how to navigate through the changes and get what I wanted.

If you want to learn more about the scaffolding options and how you can use them in your projects, check out this page from Microsoft: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/scaffold-identity?view=aspnetcore-6.0&tabs=netcore-cli&viewFallbackFrom=aspnetcore-2.1

The moral of the story, read the documentation, keep up to date so you are aware of what’s changing and why, and maybe you’ll save some headaches and be more proficient with your coding. Hope this is useful. Cheers!

A Photographer and a Writer

I’d like to think of myself as someone who writes and someone who writes enough. What does that mean? Am I a writer? Yes, I am. I write. In fact, my day job involves a lot of writing, mostly code, and technical documentation but still, I write. So, am I a writer? I am a person who writes, and it does so a lot. But my writing is not what people see as the product of a writer. A writer is a person who writes novels and poetry and has books or columns published, you know what I mean. But I disagree. You don’t have to get paid as a photographer or a writer to call yourself one of those things.

I also take photographs, a lot of them. I take photos every day, sometimes a few and sometimes dozens, every day. Am I a photographer? I think I am. Do I get paid for my photography? No, I don’t. Not yet. I still have a lot to learn about photography, but I consider myself a photographer.

Our society likes differentiating people who get paid for a creative task vs. those who don’t. This has consequences. Many people are afraid to call themselves a photographer or a writer, for example, for fear of sounding ridiculous or pretentious. But why? If you take photos often, if it’s part of your life, you are a photographer. If you write anything, and you do it often, then you are also a writer. You might not be great at any of these things, or maybe you are superb, but that doesn’t matter. You are still those things.

Why is it important to use titles such as “Photographer” or “Writer”? I think it’s important because it makes you believe in yourself, makes you serious about your craft, and makes others think of you (professionally) as one of those things. If anyone asks, you can always clarify that you are not a “professional” writer or photographer, for example, because you are not getting paid for your work, not yet.

Labels and titles are important because people choose to give them importance, and instead of ignoring or pretending that I don’t care, I’d like to take advantage of the importance people give to these things to help me with my craft and career.

Don’t be afraid of using titles like these if you work hard and put enough time into any of these creative tasks.

Be proud of calling yourself a photographer or a writer, don’t be afraid of it. If you want people to recognize you as a photographer, a writer, or by any other title like that, then use it yourself first, and give them permission to do it too.

Credibilidad vs. Dinero

En algún momento de tu vida tendrás la oferta de recibir mucho dinero por algún proyecto en el cual podrías sacrificar tu credibilidad. En mi opinión, no lo hagas.

El dinero es una transacción y es además temporal. El dinero no es malo, todos tratamos de hacer dinero para poder substanciar nuestras vidas y nuestros proyectos. El dinero es una herramienta, y como tal, no debe ser la prioridad. Si tienes una oportunidad de hacer dinero, adelante, siempre y cuando no comprometa tus creencias y valores. Hay personas que son tan pobres que lo único que tienen es dinero.

Tu credibilidad (o la falta de esta) es algo con más valor y consecuencia que el dinero. Tu credibilidad es parte de ti, de tu persona, es algo con importancia. Una vez que hayas logrado credibilidad, no la pierdas, especialmente no por dinero. La credibilidad tiene mucho valor y es más difícil de conseguir que el dinero. . Cuida tu credibilidad celosamente, y el dinero, ese solo úsalo como lo que es, una herramienta y nada más.

Primeros pasos para empezar a programar y desarrollar software

Una de las primeras cosas que tienes que hacer es dejar las excusas a un lado, esto es primordial de otra manera te convencerás muy pronto de que no vale la pena seguir y solo perderás tu tiempo.

Una cosa que a mí me ha servido es escribir mis metas cuando empiezo con un proyecto, pero además de esto, también escribo las cosas que podrían empujarme a parar con el proyecto, las excusas.

Escribe una lista de excusas para evitarlas

Yo te recomiendo una lista simple de las cosas que normalmente piensas cuando te dan ganas de parar con un proyecto, por ejemplo:

  • No tengo tiempo
  • Es muy duro, no sé lo que estoy haciendo
  • Y que si no funciona?
  • No tengo motivación

Estas son algunas de las excusas que a lo largo de mi carrera me he inventado para reanimarme y parar mis proyectos. Tengo muchas más, pero estas son las que son comunes para varios de nosotros.

Escribir estas excusas y agregar una nota para responder a cada una de estas es una buena idea para que cuando se te presente cualquiera de estas en la mente, tengas una razón para convencerte de no parar y seguir adelante. Por ejemplo:

  • No tengo tiempo: Tiempo siempre hay, solo hay que darle la prioridad suficiente a nuestros proyectos, y reducir la cantidad de Netflix.
  • Es muy duro, no sé lo que estoy haciendo: Siempre que aprendes algo nuevo, te sentirás como un tonto/a en un principio, está bien, nadie es un experto para nada en un principio, y no hay nadie que lo sepa todo.
  • ¿Y que si no funciona? ¿La pregunta que te debes hacer es, y que pasa si no lo hago? ¿Si no trato? Como dice el dicho “Fallaras el 100% de los tiros que no intentaste”.
  • No tengo motivación: Esto es algo normal, ni te creas que estarás motivado todo el tiempo, nadie lo esta. Durante la vida de un proyecto, siempre hay latas y bajas, y la clave está en continuar, un paso a la vez.

Escribe metas a corto plazo que quieres obtener

Escribir metas a corto plazo que quieres obtener te ayuda a mantenerte enfocado. En un principio, cada vez que empezaba un proyecto solo tenía la meta final, o lo que yo pensaba que era la meta final en mente. Hacer esto no me ayudaba, ya que perdía el control de las cosas que tenían que suceder a corto plazo para poder lograr la gran meta.

Escribir y asignarte metas a corto plazo te ayuda a mantenerte enfocado, algo que es muy útil con proyectos largos y difíciles. Además, pensar y escribir metas cada semana (por ejemplo), te ayudará a evolucionar tu proyecto y te dará la flexibilidad de cambiar tus tareas conforme vas avanzando. Es normal que los proyectos acaben siendo muy distintos a lo que te imaginabas en un principio.

Ejemplo de metas a corto plazo cuando tu gran meta es aprender a programar:

Primera semana:

  • Instalar y configurar un editor de código o IDE, y aprender como utilizarlo.
  • Elegir un lenguaje de programación y aprender los comandos básicos.
  • Aprender como se organiza un proyecto de software utilizando el editor de texto o IDE que hayas instalado.
  • Bajar una aplicación de software open source y revisar el código fuente.

    Esta lista de arriba es un ejemplo de lo que podrías darte como tarea para aprender en tu primera semana, y es solo un ejemplo.

Elige un editor de código

El editor de código será tu herramienta principal como programador, y es por esto que te debes tomar tu tiempo y decidir cuál editor de texto te gusta más. En general, el editor de texto de Microsoft, VS Code, es muy popular, pero hay quienes prefieren o necesitan el editor más completo llamado Visual Studio.

También hay otros editores de código muy populares como:

En lo personal, te recomiendo empezar con VS Code, ya que es totalmente gratuito, es muy poderoso, y funciona muy bien con los lenguajes y librerías modernas.

Una vez que hayas elegido tu editor de código, te recomiendo que lo configures correctamente y que también aprendas como utilizarlo. Mientras más conozcas tus herramientas de trabajo, tu trabajo será más eficiente y agradable. Por ejemplo, si decides usar VS Code, te recomiendo este paquete de lenguaje de Español para hacer tu experiencia con VS Code más grata y en tu idioma.

También, puedes mejorar tu productividad y experiencia con VS Code instalando extensiones.

La configuración de texto de código depende en el que hayas elegido, puedes buscar por guías para hacer esto, hay muchas disponibles en la internet.

Elige un lenguaje de programación

Existen mucho programas de programación, muchísimos. Por esta razón, recomiendo pensar primero en la razón por la cual quieres aprender programación, la elección del lenguaje dependerá mucho de esto.

Por ejemplo, si quieres aprender a crear sitios y aplicaciones Web, el lenguaje que quieres aprender primero es probablemente JavaScript, y también el HTML (lenguaje de marcas de hipertexto), y CSS; estos son la base de los sitios en Internet.

Si tu interés en aprender programación es primordialmente para obtener un trabajo como programador, entonces te sugiero que veas cuáles son los lenguajes de programación más necesitados por empresas buscando por programadores.

Algunos lenguajes que son populares en este momento, son buenos para principiantes, y tienen mucha demanda laboral son los siguientes (no están en orden de popularidad):

  • JavaScript
  • Java
  • Python
  • C#
  • Swift
  • Go
  • PHP

Pero en realidad, mientras aprendas un lenguaje de programación y entiendas las mecánicas y fundamentos de cómo diseñar y crear aplicaciones con este será suficiente. Una vez que obtienes experiencia como programador, aprender un lenguaje no es tan difícil, la sintaxis será diferente, pero existirán muchas similitudes.

Aprender como crear y organizar un proyecto de software

Este punto se refiere a cómo organizar los archivos para que sea fácil trabajar con el código de tu aplicación de software. Cabe mencionar que esto puede ser algo muy básico, pero también se puede convertir en un dolor de cabeza, ya que existen muchas opiniones sobre cómo organizar los archivos en un proyecto de software.

Mi recomendación es tratar de seguir las mejores prácticas existentes para esto, y hacer modificaciones como lo necesites.

Aquí está un ejemplo de como está organizado una aplicación para un Blog creada con Ruby on Rails y utilizando el editor de código VS Code.

En la imagen de abajo puedes ver cómo la aplicación está contenida en un directorio con el nombre “blog”, y dentro de este existen otros directorios que describen los tipos de archivos que contienen.

Por ejemplo, dentro del directorio “blog” tenemos un directorio llamado “app” para la aplicación y dentro de este están el resto de los archivos.

Este es un ejemplo simple y muy claro de cómo puedes organizar tu código fuente para que sea más fácil trabajar con este. Además, te ayudará a diferenciar rápidamente el tipo de archivo y para que son utilizados:

screenshot of example Rails application

Baja una aplicación de fuente abierta “Open Source” y utilízala como una guía.

Esto es algo que siempre les recomiendo a todas las personas que les estoy ayudando a aprender programación. El beneficio de esto es obvio, es básicamente como leer libros y revisar cómo están escritos cuando quieres ser un escritor.

Existen muchas aplicaciones de fuente abierta que puedes bajar a tu computadora y usarlas como guía para aprender. Un lugar ideal para encontrar estas aplicaciones es GitHub, ahí encontrarás aplicaciones escritas con varios lenguajes de programación y distintas librerías de JavaScript.

Si estás interesada/o en aprender programación de sitios de Internet o aplicaciones Web, otra opción es bajar una planilla de HTML, existen varios lugares en donde las puedes encontrar. Un lugar que te recomiendo en este momento es Start Bootstrap.

¡Esto es todo por hoy amigos, hasta la próxima, échenle ganas!

Debugging life

A simple idea on how we can log our lives to help us troubleshoot them later

In programming, we use the term debugging to describe the exercise of testing and digging into the code’s details and inner functions to find out the source of an issue. For example, debugging can occur by running the code and reading values in variables as the application runs, review database connections, analyze errors, review requests, and responses to and from an API, etc. Also, you can look at logs with details of application events such as errors to aid the debugging.

How do we use the same idea but instead of debugging software, we debug our lives? I like the idea of it. To try it, I am focusing even more on writing notes about my day, things that come to mind, and ideally whenever there is an event that makes me feel good, sad, angry, peaceful, etc. I want to remember these things, and one way of doing it is by writing them down.

When troubleshooting a software program, you need to reproduce an issue by running through the same steps multiple times to try and catch any information that might help you find the problem. As a software engineer, I can do this because we store information about events such as errors and other information about the application’s state before, during, and after an error occurs. This information is what allows us to debug the software.

In our lives, we cannot replay our day unless we are in the movie Groundhog Day (a great movie, by the way). But if we have information about our day, such as notes, calendar entries, etc. We can use that information to go back and help ourselves remember the events and our feelings on a specific day and time. Having this information might help us remember certain moments better and maybe even find out why we did something or feel a certain way today or in the future. That’s the life debugging part. It will help you replay a day in the past with the help of your notes. These notes might help you remember the why and how of something that happened in the past.

I don’t keep a formal diary or journal, but something that I have been doing for a while is writing notes about things I learn, things I do, and how I feel about them, and I do it in a concise form, just a few words or a sentence. It’s helpful and more effortless than keeping a diary. It’s a logbook. I use a Moleskine daily diary for this. It’s small but includes one page for each day of the year. I find it perfect for logging my day, it’s my logging system, and it works well.

Remembering things is very important, and the older I get, the more I realize that capturing some of the events in your life and how you feel most days is beneficial. Most of us expose ourselves to an incredible amount of distractions, there are many tasks in front of us every day, and unless you try to capture some of them in a permanent form, your mind won’t have the space or capacity to store them. So writing things down helps a lot.

I want to think that at some point, I’ll go back to my logbook and will read it to help me with something in the future. However, this might never happen. But by writing things down in a logbook, I seem to be more in touch with my feelings, and I’m able to recognize the good and bad things that happen many times during a day, every day. It helps me think.

Maybe one day, I’ll be able to upgrade my brain to a version that will include a feature to capture this information reliably without the need to write things down. Maybe it will even have more storage, so it’s easy to save everything in there and without any compression. But in the meantime, writing things down in this logbook is a hack that works for me, and this is how I do my life app work for me. What about you? How do you capture your day and important moments?