¿Cómo hacer que todas las cadenas en todos los ViewModel en un proyecto en MVC .Net se les aplique Trim o ToUpper? DefaultModelBinder

Cuando se trabaja en un equipo de desarrollo que sobre pasa los 3 programadores muchas veces se debe obligar a que se realicen tareas básicas como recortar los espacios en las cadenas por medio de Trim, o quizá si existe un requerimiento del cliente de que todas las cadenas estén en mayúsculas realizar un ToUpper o por lo contrario un ToLower, bueno, cualquier función sobre algún tipo de dato en todos nuestros modelos de nuestra aplicación.

Para asegurarnos de que siempre sean ejecutadas este tipo de operaciones existe en MVC .Net algo llamado Binder o ModelBinder el cual trabaja como cubierta de la información y puede transformarla a lo que deseemos, validar o realizar una operación.

A continuación incluyo una clase la cual hará que todas las cadenas que existan en nuestros View Model se les aplique una función Trim y una función ToUpper, así evitamos ponerlas en todos los controles, haciendo que esto ya sea un proceso por defecto en toda la aplicación.


namespace Sistema.Models.Binders
{
    public class TrimToUpperBinder : DefaultModelBinder
    {

        protected override void SetProperty(ControllerContext controllerContext,
         ModelBindingContext bindingContext,
         System.ComponentModel.PropertyDescriptor propertyDescriptor, object value)
        {
             //Solo modificaremos los string, por lo cual detectamos el tipo de dato
            if (propertyDescriptor.PropertyType == typeof(string))
            {
                var stringValue = (string)value;
                if (!string.IsNullOrEmpty(stringValue))
                {
                    stringValue = stringValue.Trim(); //trimeamos
                    stringValue = stringValue.ToUpper(); //mayuscula
                }

                value = stringValue;
            }

            base.SetProperty(controllerContext, bindingContext,
                                propertyDescriptor, value);
        }
    }
}

Y para que sea ejecutado en toda la aplicación debemos inicializar nuestra clase en el archivo Global.asax en el método Application_Start() de la siguiente manera:


 protected void Application_Start()
        {
            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);

            //Aquí remplazamos el binder por defecto con el nuestro
            ModelBinders.Binders.DefaultBinder = new Sistema.Models.Binders.TrimToUpperBinder();
        }

¿Cómo convertir archivos XSD a clases de C# .Net? cfdi 3.3 SAT

En este video describo como se puede generar las clases a partir de un archivo XSD.

También explico cómo convertir las clases en archivos XSD que tienen dependencia de otros archivos XSD.

Para ello aprovecho para generar las clases necesarias para crear el archivo XML que sirve para la facturación electrónica 3.3 del SAT en México.

Utilizaremos Visual Studio Command Prompt.

Si desean que haga un curso completo para la facturación electrónica, dime en los comentarios.

¿Cómo verificar automáticamente si existe la sesión web en un desarrollo web? C# .Net

En este video describo cómo es posible estar verificando si el usuario sigue teniendo la sesión en un sistema web.

Muchas veces nuestra sesión ha terminado por inactividad, y esta logística te servirá para tomar una decisión, si mandar al usuario a la pantalla de autentificación o simplemente mostrarle un mensaje de que su sesión expiro.

Ahora ya podrás ser capaz de detectar si la sesión ha terminado sin necesidad de que el usuario se entere hasta que de clic en algún elemento de tu pagina.

Descargar ejemplo

Free code, software for gym in C# .Net – GYM Hdeleon 1.0 (English)

There is a premium software with more features, and you can see it here

I created gym software which is a success, this software is free, and not only that, the code is free too.
The next video describe the software.

This software was downloaded more than 20 thousand times, and now it’s in English.

If you want to thank me for my source code in a monetary way you can donate money for a beer in the next link: https://www.paypal.me/HectorDeLeonGuevara 

The technology is C# .Net with mysql database.

The software has the next modules:

  • Authentication
  • Members
  • Memberships
  • Registry of visits
  • Products
  • Purchases
  • Sales
  • Reports
  • Backup/Restore

Download

If you want this software with registry by fingerprint, I have a new version in 15 usd. (Include the code too and others extra modules)

Spanish version

¿Cómo copiar el contenido al portapapeles de un elemento HTML al dar clic en él?

Para que el contenido que tiene un elemento sea copiado automáticamente al portapapeles del usuario, anexo la siguiente función en javascript ayudándome de los selectores de jquery.

Cada paso esta comentado, para en caso de utilizarla con un distinto elemento puedas modificarla sin dificultad.

En el ejemplo realizo la copia del contenido html que existe dentro de un elemento td de una tabla.

HTML


<table>
      <tr>
           <td onclick="Copiar(this)">Hola soy un texto que se copia al darle clic</td>
           <td onclick="Copiar(this)">Hola yo soy otro texto que se copia al darle clic</td>
      </tr>
</table>


JAVASCRIPT


 function Copiar(element) {
        //creamos un input que nos ayudara a guardar el texto temporalmente
        var $temp = $("<input>");
        //lo agregamos a nuestro body
        $("body").append($temp);
        //agregamos en el atributo value del input el contenido html encontrado
        //en el td que se dio click
        //y seleccionamos el input temporal
        $temp.val($(element).html()).select();
        //ejecutamos la funcion de copiado
        document.execCommand("copy");
        //eliminamos el input temporal
        $temp.remove();
    }

How many planets are there in the universe?

[quads id=5]

Translated from my original publication in Spanish

Every time we look at the sky we always see the stars that appear throughout the night, some are planets, others a cluster of stars and others are like our sun, but we always ask ourselves how many stars there are in the universe, but why not? how many planets there will be, and we also wonder, how many have living beings.

There is an equation to calculate the number of existing civilizations, but I will not focus on those aspects, since I am not a mathematician, and in that equation there are many unknown parameters and they are only suppositions, that equation is the Drake equation.

Now we will calculate curious facts by means of basic mathematics, without a scientific method, since it is absurd to do it when we do not have the real parameters, so I will only do some leisure with the data that we know through the observation that has been made of the universe for years.

It is estimated that there are one hundred billion (100,000,000,000) galaxies in the observable universe, from these galaxies there are several classifications in terms of the number of stars that exist in them, ranging from dwarfs, with 107 (10,000,000 ten million), to the giants, with 1012 (1,000,000,000,000 one trillion) but since we do not have an exact figure of how many dwarfs or giants we will take the average number that would be 109, which would be 1,000,000,000, a billon stars per galaxy.

We already have that there are 100,000,000,000 one hundred thousand million galaxies on the Universe of which each galaxy has (1,000,000,000) at least billion stars, so with a multiplication we would have to: 1011 x 109 = 1020 one hundred trillion stars in the universe (100,000,000,000,000,000,000).

Now we will remove the average planets per star, for this I will not get into much trouble; if we suppose that our solar system has 8 planets and 5 dwarf planets (those known until today 24-March-2012, Ceres, Pluto, Haumea, Makemake and Eris) we will take into account that most extrasolar systems that have been detected do not surpass the number of planets in our planetary system, perhaps due to lack of observation, that does not mean that they have less number, but so far is what we know, we will take as a reference half of our planetary system to get the number of planets, by which would have on average 5 planets plus 3 dwarf planets by planetary system, then we would have by a few simple multiplications to remove the planets of the universe:

1020 x 5 = 5020 five hundred trillion planets (500,000,000,000,000,000,000) and

1020 x 3 = 3020 three hundred trillion dwarf planets (300,000,000,000,000,000,000)

So in the universe with the data we know, there are approximately 3020 + 5020 = 8020 eight hundred trillion planets (800,000,000,000,000,000,000).

800 trillion planets of which if we assume that of every 15 one has life (fifteen planets of our solar system and only one has life) then:

8020/15 = 5319 fifty-three trillion habitable planets (53,000,000,000,000,000,000)

Although I do not think that of every 15 there is one alive but the number must be much smaller, but as we see that amount even though the number is huge, maybe there may be life in several satellites but those do not take them into account since the number would grow radically.

In summary:

  • In the universe there are 100,000,000,000 one hundred billion galaxies
  • Of which each galaxy has 1,000,000,000 billion stars
  • This gives us 100,000,000,000,000,000,000 one hundred trillion stars in the universe
  • Of which each star has an average of 8 planets (5 planets and 3 dwarfs)
  • This gives us a total of 800,000,000,000,000,000,000 eight hundred trillion planets in the universe.
  • Of which at best 53,000,000,000,000,000,000 fifty-three trillion planets alive in the universe

This last data is exaggerated but the point of this article is not to be exact, we should also take other factors such as how long a civilization or a planet lives and things like that, but the purpose of this article is to take as a curious fact, that In spite of our planet that seems enormous, the universe is too big, that only when one starts to see things carefully, we begin to see that we are only a grain of sand in this ocean, called the Universe.

As a detail since we are with this number and multiplication, the number of planets that exists approximately in the universe if for each planet we use the measure of a grain of sand (1 millimeter) and put each grain one on another forming a building, our structure would measure close to the width of the Milky Way.

Writted by Hector de Leon Guevara (2012)

 

 

¿Cómo convertir archivo PDF a Docx en C# .Net? – Spire.Pdf vs SautinSoft.PdfFocus

Te muestro como convertir un archivo PDF a un archivo Docx con dos librerías que tienen precio pero hacen su trabajo.

Código del ejemplo:


  class Program
    {
        //ORIGEN PDF
        static string pathPDF = @"C:\AlgunaRuta\archivo.pdf";

        //DESTINOS ARCHIVO DOCX
        static string pathDoc1 = @"C:\AlgunaRuta\archivo-spire.docx";
        static string pathDoc2 = @"C:\AlgunaRuta\archivo-sautin.docx";

        static void Main(string[] args)
        {
            //llamamos para convertir el pdf con spire
            UsandoSpirePdf();

            //llamamos para convertir el pdf con sautinsoft
            UsandoSautin();

        }

        public static void UsandoSpirePdf()
        {

            PdfDocument pdf = new PdfDocument();
            //cargamos el pdf
            pdf.LoadFromFile(pathPDF);

            //guardamos el docx
            pdf.SaveToFile(pathDoc1, FileFormat.DOCX);

            //abrimos el archivo
            System.Diagnostics.Process.Start(pathDoc1);

        }

        public static void UsandoSautin()
        {

            SautinSoft.PdfFocus oPdfFocus = new SautinSoft.PdfFocus();

            //cargamos el pdf
            oPdfFocus.OpenPdf(pathPDF);

            //si se tiene mas de 1 pagina
            if (oPdfFocus.PageCount > 0)
            {
                //asignamos el tipo de documento al que convertiremos
                oPdfFocus.WordOptions.Format = SautinSoft.PdfFocus.CWordOptions.eWordDocument.Docx;

                //guardamos el dox
                int resultado = oPdfFocus.ToWord(pathDoc2);

                if (resultado == 0)
                {
                    //abrimos el documento
                    System.Diagnostics.Process.Start(pathDoc2);
                }
            }
        }
    }

Spire.Pdf: https://www.e-iceblue.com/Introduce/pdf-for-net-introduce.html

SautinSoft.PdfFocus: http://www.sautinsoft.com/products/pdf-focus/

¿Como recorrer una tabla con la instrucción while en SQL?

Te muestro cómo es posible recorrer una tabla por medio de una instrucción while en sql.

En el caso de mysql u otro motor solo remplazar top por su equivalente, por ejemplo en mysql: limit 0,1.

Tabla people

Código utilizado:


insert into @tabla(id,name) select id,name from people

declare @count int = (select count(*) from @tabla)

while @count > 0
begin

	declare @name varchar(max) = (select top(1) name from @tabla order by id)
	declare @id int = (select top(1) id from @tabla order by id)

	print 'Hola '+@name

	delete @tabla where id=@id

	set @count = (select count(*) from @tabla)

end 

¿Cómo liberar el espacio en el archivo .ldf de una base de datos en SQL SERVER?

El archivo .ldf de toda base de datos en sql server sirve para llevar un log de toda consulta hecha en la base de datos (todos los insert, update, select, etc etc).

Esto es útil para regresar en un punto en el tiempo y ver la base de datos como se encontraba en ese punto en su estructura y en sus datos.

Pero qué pasa cuando nuestra base de datos pesa ya un tamaño exagerado y queremos liberar el espacio de nuestro servidor. Optamos por realizar una liberación de este archivo (obviamente después de hacer los backups correspondientes).

A continuación te muestro como se debería hacer para una base de datos llamada PATODB:


ALTER DATABASE PATODB SET RECOVERY SIMPLE

GO

/* el 5 es 5 MB, se dejara el log con un tamaño de 5MB*/
DBCC SHRINKFILE (PATODB_Log, 5)

GO

ALTER DATABASE PATODB SET RECOVERY FULL

GO

Y así de simple liberamos el espacio de nuestro archivo .ldf.