lunes, 22 de octubre de 2018

139. Linq I

Estamos en un mundo en el que la información cobra vida, nunca antes en la historia de la humanidad se había tenido tal acceso a la información, sin embargo, la información es tanta que ha perdido el orden, como desarrolladores debemos poder analizar esta información, día a día se nos dan mas herramientas para hacer este tipo de análisis.

Así pues revisemos que opciones tenemos para poder manipular eficientemente la información.

¿Que es Lynq? 

Es un componente de la plataforma .NET que permite agregar capacidades de consulta de manera nativa a los lenguajes de .NET

Lynq nos permite tener acceso a objetos de datos y explorarlos de una manera sencilla.

Si sabes SQL sabes Lynq

veamos un ejemplo::



Revisemos la consulta

var lista = from c in lstAlumno where c.Edad > 15 select c;

Que hace, crea un objeto c que toma los datos de lstAlumno, busca en ese todos aquellos que tengan una edad mayor a 15 años y genera el nuevo objeto

Si ejecutamos el programa:




Felices Lineas



martes, 16 de octubre de 2018

138. Abrir un documento en una ventana nueva aspx

Para poder abrir un documento en aspx en una nueva ventana del lado de back end se debe poder este codigo, en la pagina en la que se envia el llamdo esto para invocar a window.open del lado de javascript

        Dim url As String = "MuestraDocumento.aspx?Documento=thinkpython.pdf"
        Dim target As String = "'_blank'"
        Dim script As String = "window.open('" & url & "'," & target & "," & "'status=no, menubar=no, toolbar=no,location=no');"
        Page.ClientScript.RegisterStartupScript(Me.GetType, "someUniqueId", script, True)

y en la pagina que recibe la informacion

    Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
        Response.ContentType = "application/pdf"
        Response.Clear()
        Response.TransmitFile("C:\Carlos\Libros\" + Request.QueryString("Documento"))
        Response.End()
    End Sub

Felices lineas

137. Abrir un pdf en asp.net en una nueva pestaña

Para poder abrir un pdf es necesario primero enviarlo, para ello seguimos el siguiente codigo

Response.ContentType = "application/pdf"
Response.Clear()
Response.TransmitFile("C:\Carlos\Libros\thinkpython.pdf")
Response.End()

Sin embargo esto no lo abre en una nueva pestaña, para ello es necesario al momento de llamar el boton del lado del cliente agregar lo siguiente:

OnClientClick="frmAyuda.target ='_blank';

por ejemplo


<asp:Button CssClass="btnAgregar" ID="btnAgregar" runat="server" Text="Agregar" OnClientClick="frmAyuda.target ='_blank';"/>

Felices lineas

136.Generar una cadena aleatoria de manera agil

Esta es una función rápida para generar una cadena alfanumérica aleatoria

 public string GeneraCadenaAleatoria(int longitud)
        {
            using (MD5 md5Hash = MD5.Create())
            {
                
                StringBuilder sb = new StringBuilder();
                while (sb.Length < longitud)
                {
                    byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(Guid.NewGuid().ToString());
                    byte[] hash = md5Hash.ComputeHash(inputBytes);
                    sb.Append(Convert.ToBase64String(hash));
                }
                return sb.ToString().Substring(0, longitud);
            }
        }

Felices lineas

jueves, 11 de octubre de 2018

135. MVC - Cambiar la complejidad del password usando identity framework

MVC permite la construcción de paginas ágiles, y un gran control sobre la estructura de las mismas, Visual Studio cuenta con plantillas para poder iniciar una pagina con características mínimas para poder empezar a trabajar, MVC emplea identity para poder efectuar la administración de accesos y autorizaciones, por default, Identity tiene algunas características definidas para los paswords pero en algunas ocaciones es necesario aumentar o reducir la complejidad, para ello se debe hacer esto:

Debemos ir a la carpeta App_Start donde encontraremos un archivo llamado IdentityConfig.cs


Abrimos el archivo y buscamos la sección:

public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context) 

Dentro de esta encontraremos las características para definir el password

 // Configure la lógica de validación de contraseñas
            manager.PasswordValidator = new PasswordValidator
            {
                RequiredLength = 8,
                RequireNonLetterOrDigit = false,
                RequireDigit = false,
                RequireLowercase = false,
                RequireUppercase = false,
            };

Felices lineas

miércoles, 10 de octubre de 2018

134. Deep Freeze

Hoy quiero recomendar un software que permite la experimentación, convirtiendo la PC en un cajón de arena, de esta forma cualquier cosa que se haga en la PC se recupera con un simple reinicio, (cualquier cosa que afecte al sistema, esto no necesariamente tiene que ver con archivos de documentos), como desarrolladores siempre existe la curiosidad de jugar con partes internas del S.O. o modificar configuraciones, si bien existen las maquinas virtuales que nos permiten hacer esto libremente o maquinas en Azure, existen algunas veces, que es necesario hacer alguna modificación sobre algún equipo que no tiene estas características, principalmente por que se requiere que se cumpla con las características exactas de software y configuración.

Es en estos casos en que el producto es útil, ya que basta un reinicio para volver a la configuración original.

Les dejo la liga, para que lo analicen. https://www.faronics.com/es/products/deep-freeze/enterprise

Felices lineas

133. ¿Que esta haciendo mi servidor de SQL?

La salud de un servidor de SQL es muy importante, ya que una consulta muy pesada, un bloqueo, puede acabar con una aplicación completa, los contadores de performance de un servidor son una herramienta gratuita muy importante que nos permite ver prácticamente todo lo que hace un servidor, y estos pueden ser consultados por diversos métodos, vamos a revisar este tema mas adelante, si ya se que tengo varios temas abiertos pero es que sistemas es un mundo muy grande y si realmente quieren ser buenos arquitectos de sistemas deben conocer y ser expertos en todos los frentes, su labor es orquestar todos los recursos que tienen y aprovecharlos al maximo.

Hoy les dejo un query que les permite saber la actividad de su servidor de base de datos, para saber si un usuario esta abusando del servidor

SELECT es.session_id
    ,es.program_name
    ,es.login_name
    ,es.nt_user_name
    ,es.login_time
    ,es.host_name
    ,es.cpu_time
    ,es.total_scheduled_time
    ,es.total_elapsed_time
    ,es.memory_usage
    ,es.logical_reads
    ,es.reads
    ,es.writes
    ,st.text
FROM sys.dm_exec_sessions es
    LEFT JOIN sys.dm_exec_connections ec
        ON es.session_id = ec.session_id
    LEFT JOIN sys.dm_exec_requests er
        ON es.session_id = er.session_id
    OUTER APPLY sys.dm_exec_sql_text (er.sql_handle) st
WHERE es.session_id > 50   
ORDER BY es.cpu_time DESC

Que tengan felices lineas

lunes, 1 de octubre de 2018

132. Cambiar el esquema de un objeto en una base de datos

Para poder cambiar un objeto de una base de un esquema a otro se usa la instrucción

ALTER SCHEMA [Nuevo esquema] TRANSFER [Objeto];

para que sirve un esquema, un esquema es un agrupador, que nos permite organizar los objetos en la base de datos, de esta forma podemos saber el uso de los objetos, e implementar una seguridad por uso definiendo limites entre lo que puede ver o acceder cada grupo de usuarios



martes, 25 de septiembre de 2018

131. Buscar una columna en toda la base de datos

Les dejo este script que les permite encontrar una columa en una base de datos

DECLARE @StrValorBusqueda NVARCHAR(100)

SET @StrValorBusqueda = '[Columna]'

CREATE TABLE #Resultado (NombreColumna NVARCHAR(370))

SET NOCOUNT ON

DECLARE @NombreTabla NVARCHAR(256)
,@NombreColumna NVARCHAR(128)

SET @NombreTabla = ''

WHILE @NombreTabla IS NOT NULL
BEGIN
PRINT @NombreTabla

SET @NombreColumna = ''
SET @NombreTabla = (
SELECT MIN(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME))
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME) > @NombreTabla
AND OBJECTPROPERTY(OBJECT_ID(QUOTENAME(TABLE_SCHEMA) + '.' + QUOTENAME(TABLE_NAME)), 'IsMSShipped') = 0
)

WHILE (@NombreTabla IS NOT NULL)
AND (@NombreColumna IS NOT NULL)
BEGIN
if @NombreColumna like ('%' + @StrValorBusqueda + '%')
Begin
insert into #Resultado values(@NombreTabla + '.' + @NombreColumna)
End
SET @NombreColumna = (
SELECT MIN(QUOTENAME(COLUMN_NAME))
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA = PARSENAME(@NombreTabla, 2)
AND TABLE_NAME = PARSENAME(@NombreTabla, 1)
AND DATA_TYPE IN (
'char'
,'varchar'
,'nchar'
,'nvarchar'
)
AND QUOTENAME(COLUMN_NAME) > @NombreColumna
)
END
END

SELECT NombreColumna
FROM #Resultado

lunes, 6 de agosto de 2018

130. Si una tabla existe SQL

El siguiente Query permite determinar si una tabla existe en SQL

IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE TABLE_SCHEMA = [Esquema] 
                 AND  TABLE_NAME = [Tabla]))
BEGIN
    --Codigo
END