Muchos desarolladores y amigos me preguntan como acelerar su pc pues todos sabemos que con el paso del tiempo nuestro sistema operativo, si no somos cuidadosos, puede ir cada vez mas lento conforme vamos instalando programas hasta que llega un momento que se ralentiza demasiado y tenemos que limpiarlo si no queremos formatear como ultimo recurso porque tardamos más en reinstalar todo de nuevo.

He ido recolectando una serie de trucos y herramientas gratuitas que espero os sean de utilidad. En primer lugar
hay que asegurarse que el sistema esta libre de virus e spyware con un buen antivirus actualizado, desinstalar los programas
innecesarios o que ya no usamos reiniciando correctamente,  eliminar los
archivos temporales que dejan las instalaciones , limpiar el registro y despues de reiniciar , desfragmentar
los discos duros. Para ello podemos usar las siguientes herramientas:

1) Antivirus gratuito: AVG http://www.avg.com. No se te ocurra instalar dos antivirus a la vez que se pelearan ;-) y actualizalo
con frecuencia.

2) Limpiador de sistema y de registro: Ccleaner http://www.ccleaner.com. Te limpia los archivos temporales, el sistema y te repara las
entradas incorrectas del registro que dejan algunas desinstalaciones mal hechas.

3) Desfragmentador de disco duro: Defraggler .
Tiene una opcion de desgragmentación rápida interesante. Lo puedes descargar e instalar desde http://www.piriform.com

Otros consejos a tener en cuenta son:

-Si vas a hacer pruebas de software es mejor que te bajes e instales una maquina virtual con Virtual PC para no ensuciar tu sistema operativo. Puedes descargarlo gratuitamente desde la web de Microsoft.

- Actualiza tu sistema operativo con Windows Update para mantenerlo al dia y seguro e Instala los Service Packs.
El ultimo de Windows XP es el servide Pack 3.

-El sistema operativo suele sufrir fugas de memoria RAM conforme lo vamos usando por lo que es recomendable reiniciarlo y no tener el pc encendido todo el dia para liberar recursos. Si no quieres reiniciar puedes cerrar la sesion de usuario y abrir una nueva para liberar procesos.

-En windows XP, que es el sistema operativo más usado actualmente, tiene una pega importante y es que
se abusa del archivo de paginación pagefile.sys para usarlo como si fuera RAM, ralentizando el disco duro. Si tienes
mas de 512 mb de ram, puedes seguir una serie de pasos para hacer que tu sistema use toda la RAM en vez de dicho archivo de intercambio
que es recomendable tener en un segundo disco:

1) Ir a inicio-Ejecutar: msconfig.exe
2) Pestaña SYSTEM.INI
3) click en 386ehn en +
4) Introduce una nueva entrada con este valor ConservativeSwapfileUsage=1
5) Acepta y reinicia

- Si usas el equipo para ejecutar programas y no como servidor, puedes indicarselo a windows asi:

1) MI pc- Propiedades
2) Opciones avanzadas
3) Rendimiento-Configuracion
4) Opciones avanzadas- Ajustar para el mejor rendimiento de programas para uso de memoria y progreamacion del procesador

Como ultimo recurso puedes añadir mas ram al sistema (El coste de la ram ha bajado mucho) para poder cargar mejor o ejecutar mas programas o
bien formatear y reinstalar el sistema operativo.

Espero que os gusten y si quereis compartir alguna idea más por favor dejad algun comentario que será bienvenido y podemos aprender todos ;-)

Nos vemos.

Sergio.

 

Publicado por Sergio Vazquez | 3 comment(s)

El pasado Viernes 20 y sábado 21 de Noviembre tuve la ocasión de realizar un excelente curso de peritación avanzada y análisis forense organizado por el Colegio de Ingenieros en Informática de la Región de Murcia e impartido en la Facultad de Informática de la Universidad de Murcia por una autoridad a nivel nacional por su dilatada experiencia como es Javier Pagés donde aprendimos las fases de un análisis forense para juicios civiles, penales y laborales y los principales principios forenses que hay que seguir para hacer correctamente una peritación.

 

Opino que es una parte de la informática poco conocida por los Ingenieros en informática que obliga a estar al día por la constante actualización de herramientas y sistemas. También suelen darse defectos de forma por no seguir correctamente una metodología que pueden invalidar una prueba clave en un juicio.

 

Aquí os dejo una lista imprescindible de recursos de análisis forense en entornos Windows para aprender:     

 

Libro:

 

-         Libro análisis forense digital en entornos Windows de Informatica 64 de Juan Garrido Caballero alias Silverhack cuyo Indice se puede ver en http://www.informatica64.com/RecursosLibros/IndiceAnalisisforense.pdf

 

Herramientas:

 

-         Herramientas gratuitas Sysinternals de Mark Russinovich.

-         Herramientas gratuitas Foundstone

De pago:

-         Helix 1.9: http://www.e-fense.com/products.php

-         XWay Forensics  en http://www.x-ways.net/index-e.html

 

Enlaces:

 

http://www.informatica-forense.es

http://www.javierpages.com

http://www.infoperitos.com

http://www.issa.org

 

Espero que os sean de utilidad e interés

 

Nos vemos

 

Sergio

 

Publicado por Sergio Vazquez | con no comments

Como suelo decir  en mis charlas y ya comentaba nuestro amigo J.M.Alarcón en el primer capítulo de su excelente nuevo libro de ASP.NET 4.0 muchos desarrolladores web aún desconocen que existen varias formas de desarrollar aplicaciones web gratuitas al igual que con PHP  tanto a nivel de estudiante, aficionado como a nivel profesional y empresarial con herramientas Microsoft que antes no existían. Os las enumero:

  •  Para estudiantes y aficionados:

 Versiones Express de las herramientas de desarrollo en http://www.microsoft.com/Express que vienen acompañados de excelentes recursos de formación y auto aprendizaje y código fuente gratuito en http://www.codeplex.com. . Podeis aprender y desarrollar en casa con visual studio 2008 Express para hacer prácticas y administrar bases de datos SQL Server 2008 de hasta 4GB de tamaño, más que suficiente para empezar. 

  •  Para Profesionales emprendedores:

 Si quieres emprender un negocio tecnológico o acelerar el proceso de éxito de tu negocio desde su comienzo puedes conseguir software, soporte y visibilidad con el nuevo programa Microsoft BizSpark. La inscripción a este programa y los requisitos los puedes ver en http://www.microsoft.com/bizspark/. Creo que es la forma más sencilla para emprender tu negocio innovador sin costes de este tipo. También puedes visitar Microsoft Startup Zone en http://www.microsoftstartupzone.com.

  •  Para Profesionales web: 

Podemos conseguir software, soporte, formación, acciones de marketing y networking en el nuevo programa Microsoft WebSiteSpark. Tendremos acceso gratuito de manera inmediata a las herramientas de diseño y desarrollo web tanto para desarrollo como para producción de las aplicaciones que desarrollemos con estas herramientas siguientes:

 - Visual Studio 2008 profesional (3 Licencias)

- Expression Studio (1 Licencia)

- Expression Web (2 Licencias)

- Windows Web Server 2008 (3 Licencias)

- Sql Server 2008 web (3 Licencias)

aunque te adelanto que suele ser suficiente con ser una empresa privada que esté creando un negocio o servicio en base a un software, lleves menos de 3 años y tienes menos de un millón de dólares en ingresos.Con esto podeis formar un equipo formado por uno o dos diseñadores web, 3 desarrolladores y 1 administrador de sistemas para alojar aplicaciones web de tipo comercio electrónico por ejemplo.

 Mas info en http://www.microsoft.com/web/websitespark

 Espero que os sea util e interesante.

Saludos

Publicado por Sergio Vazquez | con no comments

Este viernes 27  por la tarde a las 16.30 tenemos nuevo Evento del Gusenet  en Facultad de Informatica de Murcia para los interesados que puedan venir. Este es el link de registro que  acabamos de publicar   en la web de Microsoft para registrarnos al evento en la siguiente dirección web:

http://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032409964&Culture=es-ES

Os pongo la informacion del evento para los interesados:

GUSENET: Migración De SQL 2000 a 2008 y Windows 7

  Día : 27/03/2009

 

Agenda:


16:30 : Planifica y vencerás: Migrando de SQL Server 2000 a SQL Server 2008

                Rubén Garrigós y Enrique Catalá de SolidQ

17:30:  Preguntas.

18:00:  Descanso.

18:30: Un acercamiento a Windows 7.

Javier Yagüe (coordinador dotnetclub de UA).

Y Oscar Montesinos de JPA,sl

19:30: Ofertas de empleo y debate del grupo.

 

Lugar:

Universidad de Murcia.
A
ula 0.01 de la Facultad de Informática del Campus de Espinardo
(Murcia)

Saludos

Publicado por Sergio Vazquez | con no comments
Archivado en: ,

Hay veces que tenemos una aplicacion web ASP.NET que está alojada en un Proveedor de Internet o ISP y se instala en una granja de servidores web o "WebFarm" que no es ni más ni menos que varios servidores en paralelo que actúan como si fuera uno solo por si se cae uno y responda a las peticiones web otro servidor de la granja de forma transparente al usuario. En esos casos a veces despues de entrar en un area privada de nuestra aplicacion web que usa variables de sesion inexplicablemente nos sale un error parecido a esto y nos dice que debemos tocar el Machine.config pero el servidor no es nuestro!:

Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that <machineKey> configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster.

Esto está muy bien para conseguir Redundancia y alta disponibilidad mediante los servicios de Clustering de Windows 2003 pero tiene una pega para nuestros compañeros los desarrolladores web. ¿Cual? Pues que cuando usamos variables de sesión en nuestra aplicación web , estas quedan almacenadas por defecto en el servidor web que estaba ejecutando la aplicación y si este cae por un fallo hardware o de comunicación por ejemplo entonces otro servidor web que no tiene tus variables de sesion recogerá las peticiones http a tu web y no sabrá quien eres si identificabas a tu visitante con un Session("idusuario") recogido por ejemplo al autentificarse en la web.

Para esto veo 2 soluciones posibles :

1- Poner esto en el web.config <pages enableViewStateMac="false" /> como sugieren algunos ISP. Ojo, esto debe ponerse dentro de <system.web></system.web>
Esta propiedad tambien puede aplicarse a paginas web aspx individuales en la directiva <@Page %>  y por defecto suele ser false. Aqui teneis mas informacion sobre la propiedad en la MSDN. Para el que no lo sepa , esta directiva se usa para evitar la corrupxion o alteración de los datos conforme se envían a una pagina web.

2- Habilitar el estado de las sesiones en SQL Server. Al estar las sesiones en el servidor de base de datos, es independiente de que se caiga el servidor web, pues podrá recuperar las sesiones de una base de datos externa al servidor web. En este articulo podeis ver como configurar sql server para ello, pero tened en cuenta que debéis ser administradores del servidor y no servirá en un alojamiento compartido a no ser que seais "amigo" del propietario del servidor :-)

http://support.microsoft.com/kb/317604/es

NOTA: Por defecto en el web config que se genera en Visual Studio el estado de sesion se guarda asi:

<sessionState

mode="InProc"

stateCon蠌ectionString="tcpip=127.0.0.1:42424"

sqlConnectio蚼String="data source=127.0.0.1;Trusted_Connection=yes"

cookieless="false"

timeout="20"

/>

 

AVISO IMPORTANTE:

No olvideis nunca cuando paséis a produccion vuesrtas web asp.net generar los ensamblados en modo Release y no Debug y cambiar estas lineas en el web.config para que queden así

<compilation defaultLanguage="vb" debug="false" /> 

¿Acaso vais a depurar la aplicacion en el servidor web de desarrollo? Con esto no teneis que subir a bin el fichero .pdb que se genera en asp.nett 1.x sino solo los ensamblados .dll

<customErrors mode="RemoteOnly" /> Para que los errores asp.net no aparezcan a usuarios que no estén en el servidor local y no puedan recopilar información para un ataque ;-)

Saludos

Sergio

 

 

Publicado por Sergio Vazquez | 2 comment(s)
Archivado en:

Hay veces que me encuentro a desarrolladores escribiendo codigo para calcular los tiempos de carga de una página o ver el valor de una variable de sesion sin saber que existe una atributo de la directiva Page que nos obtiene esta información sin programar una sola línea de codigo.

Se trata del atributo Trace de la directiva Page. Para verlo funcionando solo tenéis que dejarlo así en una pagina aspx 2.0  de Visual Studio 2005 aunque este atributo tambien se puede poner en Visual Studio 2003 y es valido para asp.net 1.x

<%@ Page Language="VB" trace="true" AutoEventWireup="false" CodeFile="prueba.aspx.vb" Inherits="prueba" %>

Con esto podreis ver al cargarse la pagina informacion como:

  • El tipo de peticion GET o POST , el codigo de estado tal como 200 Ok o los errores que empiezan por 400 
  • La colección de Headers o encabezados de la petticion http actual con sus cookies
  • El Arbol de controles de la pagina con su Id y tamaño
  • Las variables del servidor tales como  PATH_INFO, REQUEST_METHOD, SERVER_SOFTWARE...
  • Las variables de sesion y su estado.
  • Los tiempos de carga de cada uno de los metodos de servidor tales como Page_Load, Page Prerender en el orden exacto en que ocurren

 Esta información os puede servir para analizar errores que ocurren con frecuencia como por ejemplo cuando terminais de desarrollar una pagina web en vuestro equipo de desarrrollo y luego la publicais en el servidor de producción o de un ISP de Internet.

Espero os sea de utilidad

Sergio

Publicado por Sergio Vazquez | 1 comment(s)
Archivado en:

El pasado miércoles 20 de Febrero me tocó presentar el Curso de ASP.NET 2.0 y SQL server 2005 de 40 h que impartiremos en Mayo de 2008 un servidor la parte de ASP.NET y un colega Salva Ramos, MVP de SQL Server la parte de SQL.

Para los interesados en el curso dirigido tanto a profesionales como a alumnos de la universidad os dejo el enlace

 http://dis.um.es/~jfernand/facultad/promocioneducativa.html#net

en el cual podréis ver los precios, horarios, fechas y plazos de inscripcion y descargaros un triptico en papel para imprimirlo y apuntarse aqui :

http://dis.um.es/~jfernand/facultad/promoedu/folletopreinscripcion2008dotNET.pdf

Si teneis cualquier duda,sugerencia o pregunta sobre el curso podéis enviarmela usando el formulario de contacto del blog.

Esperamos veros por el curso y os animéis a conocer .NET!!

 Saludos

Publicado por Sergio Vazquez | 1 comment(s)
Archivado en: ,

En una aplicación web desarrollada en asp.net  de importacion de 24000 registros en una base de datos  después de unos minutos insertando filas en la base de datos a partir de un fichero de texto convenientemente formateado nos lanzaba  la siguiente excepcion [HttpException (0x80004005): Tiempo de espera agotado para esta solicitud.]. Esta aplicacion estaba alojada en un servidor web compartido en un ISP y funcionaba correctamente en nuestros servidores de desarrollo.

Despues de un rato pensando te das cuenta de que tu aplicacion no termina de ejecutarse porque vence algun time-out
o tiempo de espera que impide acabar la operacion sobre la base de datos .Si mirais aqui la solución es aumentar el TimeOut en el web.config em el directorio raiz de la aplicación
http://msdn2.microsoft.com/en-us/library/e1f13641.aspx

Por lo tanto las lineas que tienes que escribir al principio de tu web.config para aumentar el tiempo de espera a 36000 segundos  son:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
  <httpRuntime
            maxRequestLength="10240"
            executionTimeout="36000"
/>

Espero que os sea de utilidad si os da este error alguna vez en vuestra aplicacion

Saludos

 

Publicado por Sergio Vazquez | 5 comment(s)
Archivado en:


Recuerdo Cuando fui a publicar una de mis primeras aplicaciones web ASP.NET 2.0 con VS2005 con la opcion publicar de Visual Studio 2005 al querer  acceder a mi aplicacion usando por ejemplo http://localhost/miaplicacionnet2 encontré el siguiente error en el navegador:

No se pudo acceder a la metabase de IIS

System.Web.Hosting.HostingEnvironmentException: Failed to access IIS metabase. The process account used to run ASP.NET must have read access to the IIS metabase (e.g. IIS://servername/W3SVC).

Lo que ocurre es que la cuenta ASPNET no puede acceder a la metabase para poder publicar el sitio web y ejecutar la aplicacion en el servidor web IIS.Lo que tenemos que hacer es  simplemente ejecutar esta linea desde la consola de MS-DOS aspnet_regiis -ga ASPNET para dar permisos de acceso a la cuenta ASPNET del sistema operativo a la metabase de IIS.

Por si las moscas os recomiendo antes hacer una copia de seguridad de la metabase (fichero del cual heredan configuraciones los web.config de cada aplicacion web) de IIS que esta en la siguiente carpeta por defecto

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\machine.config

Podéis encontrar más información sobre los permisos de la metabase en este enlace http://support.microsoft.com/?kbid=267904

Aprovecho para comunicaros que la nueva dirección de mi sitio web ha cambiado a  http://www.pangeaes.com/mutisdotnet/ que proximamente actualizaré.

Saludos
Sergio

Publicado por Sergio Vazquez | con no comments
Archivado en: ,

Hola de nuevo a todos, tras una temporada sin escribir por vacaciones, pereza y cambio de domicilio vuelvo a las andadas en mi blog para contaros experiencias que os puedan servir a otros en nuestro divertido trabajo diario. Aprovecho también para agradecer los ánimos de algunos lectores de mi blog que echaban de menos que les diera la lata con algún artículo interesante J para la comunidad. Y es que particularmente creo que es mejor hacer de Homo Sapiens que de Neanderthal como menciona David en su Blog.

 En esta ocasión, en medio de un hermoso SP (No , no hablo de un Stored Procedure sino de un hermoso Síndrome Post Vacacional! J) me encontré un error en una aplicación Web asp.net que me dejó algo extrañado pues mi aplicación Web funcionaba correctamente en asp.net 1.1 en servidores de desarrollo y producción pero no cuando la alojaba en un conocido ISP  Decía así al intentar cargar una página aspx :"el compilador falló con código de error 128”  Y al mostrar los errores del compilador detallados salia una línea muy larga que empezaba por: 

c:\windows\system32\inetsrv> "c:\windows\microsoft.net\framework\v1.1.4322
\vbc.exe" /t:library /utf8output /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\root\0c1c7a12\a8dd6495\assembly\dl2
\852a5f9e\0b42d1d6_a988c701\componentart.web.ui.dll" /R:"c:\windows\microsoft.net\framework\v1.1.4322\temporary asp.net files\root\0c1c7a12
\a8dd6495\assembly\dl2\483641e1\a9101cc6_2788c701
\busyboxdotnet.dll" /R:"c:\windows\assembly\gac\system.web.services\1.0.5000.0__b03f5f7f11d50a3a\system.web.services.dll" /R:"c:\windows\assembly\gac\system\1.0.5000.0__b77a5c561934e089
\system.dll" /R:"c:\windows\assembly\gac\system.web\1.0.5000.0__b03f5f7f11d50a3a\system.web.dll"  

  Aquí se ve como la compilación falla al intentar cargar y ejecutar los ensamblados de la Web y se produce cuando usamos un componente de terceros como por ejemplo Busyboxdotnet que se ejecuta en el proceso W3wp.exe 
  
Este error es un bug del framework 1.1 y 1.0 que se subsana con el SP1 de W2003 o bien como dice en el siguiente artículo de la KB de Microsoft con un par de métodos: http://support.microsoft.com/kb/919085/es 

Evidentemente le tuve que advertír al ISP que “Algo pasaba con Mary” (Su servidor IIS que alojaba mi aplicación Web) y lo subsanaron sin problema :-)

 

Publicado por Sergio Vazquez | 3 comment(s)
Archivado en:

Se acerca la primavera que, como muchos sabéis, la sangre altera y puede producir errores en nuestro código con más frecuencia de la habitual :-). Hay veces que queremos personalizar los mensajes de error en tiempo de ejecución que arroja nuestra aplicación cuando se produce una excepción en nuestro código porque no está disponible la base de datos o cuando no se encuentra una página de nuestro sitio web. Para ello veo tres opciones muy claras y habituales:

1- Configurar la web para que no de información detallada del error que pueda servir a un atacante

Esto se hace desde el web.config. Unas líneas de código creo que valen mas que mil palabras y muchos conocemos codigos http 404 de pagina no encontrada y 403 de acceso no permitido para redirigirlos a una página .aspx hecha por nosotros:

<customErrors mode="RemoteOnly" defaultRedirect="AppErrors.aspx">
   <error statusCode="404" redirect="NoSuchPage.aspx"/>
   <error statusCode="403" redirect="NoAccessAllowed.aspx"/>
</customErrors>

2.- Control estructurado de excepciones con Try.Catch. Aquí tenéis otro ejemplo sencillo de captura de error en la conexion a una base de datos donde la propiedad Message de la excepcion ex guarda el error producido. Recordar que el bloque finally siempre se ejecuta

Try
   SqlConnection1.Open()
   SqlDataAdapter1.Fill(Me.DsPubs1)
Catch ex As Exception
   If HttpContext.Current.Request.UserHostAddress = "127.0.0.1" Then
      Session("CurrentError") = ex.Message
    Else
      Session("CurrentError") = "Error processing page."
    End If
    Server.Transfer("ApplicationError.aspx")
Finally
       SqlConnection1.Close()
End Try

3.- Crear un manejador global de errores en el global.asax.

 Hay un evento en el global.asax que nos permite capturar el error y redirigir a otra página como se ve en estas líneas de código en el que se guarda en  Server.GetLastError.Message el último error producido en la aplicacion:

Sub Application_Error(ByVal sender As Object, ByVal e As EventArgs)
   Session("CurrentError") = "Global: " & Server.GetLastError.Message
   Server.Transfer("lasterr.aspx")
End Sub


Espero os sean de utilidad para vuestras aplicaciones web ASP.NET como lo son para mi en mi trabajo diario.

Saludos

Sergio Vázquez

Publicado por Sergio Vazquez | 2 comment(s)
Archivado en:

En ASP.NET 1.x existen en el ciclo de vida de una página los eventos Init, Load, Prerender y Unload que se disparaban en este orden y podiamos escribir código asociado a dichos eventos para poder modificar la salida de la página y el estado de los controles que la constituían.

La nueva versión de ASP.NET añade nuevos eventos para seguir el procesamiento de las peticiones de forma más precisa. Estos nuevos eventos son:

PreInit  Ocurre antes de que la página empiece a inicializarse y es el primer evento en el ciclo de vida de una página ASP.NET 2.0

Initcomplete Tiene lugar cuando se completa la inicialización de una página

PreLoad  Ocurre después de la inicialización y antes de que la página empiece a cargar la información del estado.

LoadComplete Ocurre despues de cargarse la página

PreRenderComplete Tiene lugar cuando la fase de Prerender esta acabada y todos los controles han sido creados. Despues de este evento el ViewState es guardado y se genera el HTML de la página.

Publicado por Sergio Vazquez | 1 comment(s)
Archivado en:

ASP.NET 1.x soporta compilación dinamica de los ficheros (.aspx), (.asmx),  (.ascx),  (.ashx), y global.asax. Estos tipos de ficheros son compilados automáticamente bajo demanda cuando se solicitan por primera vez en una aplicación web. La copia compilada es invalidada tan pronto como se detecta un cambio en el código fuente mientras que en ASP.NET 2.0 la característica de compilación bajo demanda se extiende a otros tipos de ficheros como los (.vb and .cs),  (.resx), (.wsdl),  (.xsd).  Despues de cambiar estos ficheros no es necesario forzar una compilación en VS.

Mediante la siguiente tabla trato de reflejar las principales diferencias entre el famoso Code -Behind (usa el atributo Codebehind) de las paginas ASP.NET 1.x y el Code-Separation de las paginas ASP.NET 2.0 en  las dos versiones de Visual Studio que mas se usan hoy en día. El nuevo modelo de código se implementa usando clases parciales usando el atributo CodeFile.

Modelo Code-Behind en Visual Studio .NET 2003.  Modelo clases parciales en Visual Studio 2005.

Necesita un directorio virtual IIS.

Puede acceder directamente a la instalación local de  IIS.

Carece de soporte FTP, acceso al sistema de archivos e IIS.

Tiene varias formas de abrir sitios web.

Necesita IIS en el pc de desarrollo.

Tiene su propio servidor web Cassini.

No permite abrir páginas individuales fuera de un proyecto.

No necesita abrir el proyecto entero; las páginas idividuales puede ser abiertas sin ser compiladas.

Necesita añadir explícitamente los ficheros al proyecto,

Elimina la necesidad de añadir explícitamente ficheros al proyecto.

 

Saludos

Sergio

Publicado por Sergio Vazquez | con no comments
Archivado en:

Hay veces que en vez de instalar un certificado digital SSL en el servidor web IIS, tal y como expliqué en el número 19 de Dotnetmania hace algún tiempo (próximamente estará disponible para su descarga gratuita en PDF), tenemos que leer un certificado digital de cliente que se instala en Internet Explorer para asegurarnos la identidad del visitante leyendo su nombre y DNI. Estos certificados los puede expedir una Entidad emisora de certificados como puede ser la Fábrica nacional de Moneda FNMT. Si lo que quieres es obtener la firma digital como ciudaddno puedes hacerlo en esta url http://www.cert.fnmt.es/index.php?cha=cit&sec=obtain_cert donde están todas las intrucciones detalladas. Ya sabéis que estos certificados se renuevan periódicamente como los SSL de servidor (puede no ser válido si ha caducado) y se pueden exportar en formato pfx de un pc a otro e incluso ponerle una clave o PIN.

 Aqui os copio un código sencillo en ASP.NET que os lee las características del certificado del cliente  en una petición http a través del famoso objeto Request que os puede ser de utilidad a más de uno:

Dim cert As HttpClientCertificate = Request.ClientCertificate

If cert.IsPresent Then

'Get the Organization (O) field from the Subject section.

' certData.Text = cert.Get("Subject O")

Response.Write("ServerSubject = " & cert.ServerSubject & "<br>")

Response.Write("Subject = " & cert.Subject & "<br>")

Response.Write("issuer = " & cert.Issuer & "<br>")

Response.Write("Valido desde = " & cert.ValidFrom & "<br>")

Response.Write("valido hasta = " & cert.ValidUntil & "<br>")

Response.Write("valido ? = " & cert.IsValid & "<br>")

Response.Write("tamaño de la clave secreta = " & cert.SecretKeySize & "<br>")

Response.Write("Server issuer = " & cert.ServerIssuer & "<br>")

Response.Write("Serial number hasta = " & cert.SerialNumber & "<br>")

Response.Write("Codificacion = " & cert.CertEncoding & "<br>")

ElseIf Not cert.IsValid Then

Response.Write("el certificado no es valido")

 

Else

Response.Write("No se ha encontrado certificado")

 

End If

Dim desc As New X509Certificate(cert.Certificate)

Dim resultsTrue As String = desc.ToString(True)

Response.Write("<br>despues de sacar flujo de bytes : " & resultsTrue)

Response.Write("<br>Hash string : " & desc.GetCertHashString)

Response.Write("<br>Algoritmo (parametros): " & desc.GetKeyAlgorithmParametersString)

Response.Write("<br>Clave publica: " & desc.GetPublicKeyString)

Saludos

Sergio Vázquez

Publicado por Sergio Vazquez | 4 comment(s)
Archivado en:

Viernes 23 de febrero: “dotNet day”

- 16:00 / 16:30: Bienvenida y registro
- 16:30 / 17:30: La platorma .Net, overview y evolución hasta 3.0. Sergio Vázquez
- 17:30 / 18:15: Descanso
- 18:15 / 19:00: Windows Presentation Fundation (WPF): Diseñas o Desarrollas ? Óscar Montesinos
- 19:00 / 19:30: Organización de LABs en próximos eventos, ofertas de empleo, y otros

Lugar:   Universidad de Murcia

            Campus de Espinardo

Aula A.04 bis

            Aulario Norte

Plano del lugar: (es en el edificio nº 6 del plano)

http://www.um.es/universidad/planos/plano-espinardo/espinardo.php

 Saludos

Publicado por Sergio Vazquez | con no comments
Archivado en: ,

Como es habitual en nosotros el último viernes de cada mes celebramos el evento mensual del Grupo de Usuarios de .NET del Sureste Español, del cual , como algunos lectores saben , formo parte de la directiva. Esta vez el evento pretende dar una introducción a .net y a WPF(Windows Presentation Foundation). La agenda del evento es la siguiente y tendrá lugar en las instalaciones de Clave Informatica en Elche

 Agenda:

- 16:00 / 16:30: Bienvenida y registro
- 16:30 / 18:00: Windows Presentation Fundation (WPF) y .Net Framework 3.0
- 18:00 / 18:15: Descanso
- 18:15 / 19:00: .Net - vision general
- 19:00 / 19:30: cuestiones técnicas, ofertas de empleo, y otros

 Se repartirán CD de versiones Express de Visual Studio para los principiantes que deseen iniciarse en .NET por lo que será una buena ocasión para asistir los que desconocen esta tecnología .

 La URL de registro del evento está publicada en la web de la MSDN y esta vez me toca a mi dar la charla de Vision General de .NET

http://www.microsoft.com/spanish/msdn/spain/eventos/comunidad.mspx#uno

Esperamos veros por allí y pasar otro rato agradable con Murphy como no! :-)

Saludos

Sergio Vázquez

Publicado por Sergio Vazquez | 2 comment(s)
Archivado en:

Aquí teneis todas en este enlace de la MSDN, caben destacar entre ellas las muy conocidas siguientes, algunas de las cuales os he comentado en anteriores post:

- Herramienta Registro de IIS en ASP.NET (Aspnet_regiis.exe)

- Herramienta Registro de SQL Server para ASP.NET (Aspnet_regsql.exe)

- Herramienta de compilación de ASP.NET (Aspnet_compiler.exe)

- Herramienta de comprobación de certificados (Chktrust.exe)

-Desensamblador de MSIL (Ildasm.exe)

- Ensamblador de MSIL (Ilasm.exe)

- Herramienta Installer (Installutil.exe)

 Saludos

Sergio Vázquez

Publicado por Sergio Vazquez | 2 comment(s)
Archivado en:

 Todos necesitamos alguna vez una "chuleta" por si se nos olvida de memoria algún comando en una profesión donde abundan siglas, comandos, instrucciones etc.. Os copio una esperando que le sea útil a más de uno como "regalo de reyes majos" como a mi me lo fue en su día :-)

Los procedimientos almacenados de sistema siguientes  permiten ver estadísticas o información en tiempo real acerca de la base de datos o el servidor.

sp_who Usuarios y procesos actuales de SQL Server

sp_lock Bloqueos activos, así como información de bloqueos e interbloqueos

sp_spaceused Espacio en disco que utiliza una tabla o base de datos

sp_helpdb Bases de datos y sus objetos

sp_monitor Estadísticas de SQL Server, como el tiempo total de procesamiento, el número de lecturas y escrituras, y las conexiones

sp_helpindex Índices de una tabla

sp_statistics Todos los índices de una tabla específica

Variables global Objetivo

@@connections Contiene el número de inicios de sesión o intentos de inicio de sesión desde la última vez que se inició SQL Server.

@@error Contiene el número de error de la última instrucción de Transact-SQL ejecutada.

@@spid Contiene el identificador de proceso de servidor del proceso de usuario actual. Puede usar este valor para identificar el proceso de usuario actual en la salida de sp_who.

@@procid Contiene el identificador de procedimiento almacenado del procedimiento actual.

Instrucciones T-SQL

set statistics IO Muestra información acerca del volumen de actividad de disco que generan las instrucciones de Transact-SQL. Útil para afinar índices junto con los planes de ejecución.

set statistics time Muestra el número de milisegundos necesarios para analizar, compilar y ejecutar cada instrucción.

set statistics profile Muestra un conjunto de resultados después de cada consulta ejecutada que represente un perfil de ejecución de la consulta.

set showplan_text on/off Hace que SQL Server no ejecute la consulta y que, en su  lugar, muestre información detallada acerca del modo en que se ejecutan las instrucciones.

Instrucciones DBCC

SQLPERF Estadísticas desde la última vez que se inició el servidor. Puede establecerlas para reunir información acerca del uso del espacio del registro de transacciones en todas las bases  de datos (LOGSPACE), la entrada y salida de disco (IOSTATS), el uso de memoria y caché (LRUSTATS), o la actividad de red (NETSTATS).

OPENTRAN La transacción activa más antigua, así como las transacciones duplicadas distribuida y no distribuida más antiguas, si las hay, en la base de datos especificada.Los resultados sólo se muestran si hay una transacción activa o si la base de datos contiene información de duplicación.

SHOW_STATISTICS Selectividad de un índice, lo que supone la base para determinar si un índice es útil para el optimizador de consultas.

CHECKDB Asignación e integridad estructural de todos los objetos de una base de datos.

CHECKFILEGROUP Asignación e integridad estructural de todas las tablas delgrupo de archivos.

CHECKTABLE Integridad de las páginas de datos, índice o de datos de tipo text, ntext o image de la base de datos especificada.

Saludos

Sergio Vázquez

http://www.pangeaes.com/mutisdotnet

 

Publicado por Sergio Vazquez | 4 comment(s)
Archivado en:

Gracias a mi amiga Ethel de MS no me queda mas remedio que confesaros algunas intimidades:

1.- De peque lo mío eran los Pokes del spectrum 48K y juegos que reventaba conun amigo como el Fernando Martín de Dynamic. Seguro que a mas de uno le habrá pasado :-) Evidentemente ya os podéis imaginar como acabé de viciado , y eso que ahora me gusta menos programar. Serán los años? Tambien empece con Internet por el 1994 con el flamante modem de 9600 baudios y el NEtscape 1.0, Eudora, Gopher, IRC. Ha llovido mucho desde entonces y he pasado por unos 20-30 lenguajes de programación de los cuales no soportaba LISP.

2.- Suelo comprar la ropa nueva a golpes en verano  y en Invierno en tiendas conocidas como Springfield,Zara, Pull and Bear y no suelo lucir marcas en la ropa porque no me considero "hombre anuncio". Es una de mis manías.

3.- Mi padre era un hombre aficionado a los dichos y suelo recurrir mucho a ellos. Soy un tio de pocas palabras por eso me llamaban Mutis antes. Sinceramente no me suelo enrollar como las persianas. Algunos de los dichos los suelto en clases que doy y no puedo evitarlo e incluso podeis ver algunos en este blog

4.- Una vez me enteré que fui el primer ingeniero informático sordo profundo de la historia de la Universidad. E incluso os puedo contar como anécdota que llegué a hacer unas prácticas de la carrera con un compa ciego. Aquello era como la peli "No me chilles que no te veo!" XDD. Me leia todos los libros de la biblioteca y hasta el bibliotecario el muy !"·$%$·& me llegaba a preguntar si sabia si estaba disponible un libro jeje , lo mandaba al carajo de vez en cuando. Y pasaba por todos los despachos de la facultad uno a uno a preguntar dudas pues no me enteraa de mucho en clase y llegué a hacer amistad con algún profesor pues los había de todos los tipos como os podéis imaginar. Incluso algunos compas son profesores.

5.- Soy un fanático de la ACB y del tenis, no suelo perderme un partido del equipo de Murcia de baloncesto Polaris desde que está un colega de tercer entrenador e incluso le doy consejos y le paso dvds de .NET porque hizo parte de la carrera conmigo (hay que evangelizar a los colegas jeje xDD). Si alguno/a quiere echar un partido de tenis que me lo diga! La verdad es que me gusta la vida sana para poder soportar el stress de la profesión.

Bueno a ver... a quien mando el TAG, a algun lector: a ver a ver: Vargas,Jorge Serrano,Spakinz, Miguel Llopis, Salva Ramos y Óscar Montesinos alias XINO, tenéis que seguir la cadena chicos!

Publicado por Sergio Vazquez | 2 comment(s)
Archivado en:

Muchos clientes se quejan de consultas lentas, para ello os voy a dar unas guías básicas como una e-pildora que ampliaré en vista de la utilidad y éxito ahora que tengo un ratito más:

Para acelerar las consultas en SQL Server y en cualquier motor de base de datos debemos usar apropiadamente los índices

Las columnas que se aconseja indexar son:

- Las que son clave primaria o ajena

- Aquellas que se usan frecuentemente en búsquedas de rangos de valores con BETWEEN

- Aquellas que se usan frecuentemente en ordenaciones con ORDER BY

- Aquellas que se usan frecuentemente en cruces de tabla o JOIN

- Aquellas que se usan frecuentemente en agrupaciones con GROUP BY

 Tampoco se trata señores de ponerse a indexar todos los campos! No es oro todo lo que reluce pues penalizará el rendimiento de la base de datos
en las inserciones , actualizaciones y borrados por la cantidad de índices a mantener. De lo que se trata es de seleccionar las consultas que más se usan en nuestra aplicación todos los días y coger las más importantes y fijarse en la parte WHERE.

Es importante indicar que no merece la pena indexar campos con pocos valores como true, false, o 1,2,3 por ejemplo porque tienen poca selectividad y
una alta densidad de valores habitualmente.  También decir que solo puede haber un índice agrupado por tabla y hasta 249 índices no agrupados.

Hay otras consideraciones que se deben tener en cuenta como consultar el Plan de Ejecución de la consulta CTRL+L en el QueryAnalizer, os comento algunas más aunque alguno se ha adelantado ;-)

- Usar procedimientos almacenados

- Usar la opción FILLFACTOR al crear el indice para envitar divisiones de página en las modificaciones si nuestra base de datos sufre muchas modificaciones.

- Usar DBCC SHOWCONTIG para ver la fragmentación de un índice y ver si merece la pena desfragmentarlo con DBCC INDEXDEFRAG

- Usar la opción WITH DROP EXISTING al crear el indice para no tener que eliminarlo y volver a crearlo

Os pongo algunas sentencias de ejemplo ilustrativas sobre la archiconocida NorthWind que seguro ayudarán a más de uno:

USE Northwind
DBCC SHOWCONTIG (nombre tabla,indice)

DBCC INDEXDEFRAG(credit, member, mem_no_CL)

USE ClassNorthwind
CREATE INDEX OrderID_ind
 ON Orders(OrderID)
 WITH PAD_INDEX, FILLFACTOR=10

Para encontrar duplicados antes de crear un índice único sobre la tabla products

SELECT ProductName, COUNT(ProductName) AS '# of Duplicates'
FROM Northwind.dbo.Products
GROUP BY ProductName
HAVING COUNT(ProductName)>1
ORDER BY ProductName

Creación del índice no agrupado único compuesto sobre 2 campos

Use ClassNorthwind
CREATE UNIQUE NONCLUSTERED INDEX U_LastName_FirstName
ON Employees (LastName, FirstName)

Para ver la fragmentación sobre la tabla member:

DBCC SHOWCONTIG ('member')

Para ver los índices y restricciones y espacio ocupado por los datos y por los índices: 

USE Northwind
EXEC sp_helpindex  Customers
EXEC sp_help  Customers
EXEC sp_spaceused products

Saludos

Sergio Vázquez

http://www.pangeaes.com/mutisdotnet

 

 

Publicado por Sergio Vazquez | 13 comment(s)
Archivado en:
Más artículos Página siguiente >