3.26.2008

Cuando Windows No Quiere Abrir Más Ventanas (…o una razón más para instalar Vista SP1)

Quizá les haya sucedido que, cuando ya tenemos muchas ventanas abiertas las aplicaciones dejan de dibujarse bien o simplemente ya no abren más ventanas, tabs o controles. Esto sucede, por ejemplo, si abrimos aproximadamente unos 30 tabs en Internet Explorer o unas cuantas sesiones simultáneas de Visual Studio. Lo interesante es que pasa aún cuando según el administrador de tareas tengamos aun mucha memoria disponible. Pasa en Windows XP y en Windows Vista también.

El problema es que cada sesión de escritorio (desktop) interactiva de Windows cuenta con un espacio de memoria limitado que utiliza User32.Dll para crear objetos gráficos como ventanas, menús, controles, etc. Este espacio de memoria es de 3,072KB en Windows Vista (sin SP1) y se define en esta llave del registry:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\SubSystems]
Windows="%SystemRoot%\system32\csrss.exe ObjectDirectory=\Windows SharedSection=1024,3072,512 Windows=On SubSystemType=Windows ServerDll=basesrv,1 ServerDll=winsrv:UserServerDllInitialization,3 ServerDll=winsrv:ConServerDllInitialization,2 ProfileControl=Off MaxRequestThreads=16"

Si estén teniendo problemas con esta limitante, pueden incrementar el valor de 3072 a uno mayor. Es importante hacerlo en incrementos relativamente pequeños (por ejemplo, de 1024KB) hasta que ya no tengan en problema. Si lo incrementan de más Windows puede dejar de arrancar.

El service pack 1 de Windows Vista aumenta este valor a 12,288KB por lo que con SP1 no debe de presentarse más este problema. También vale la pena mencionar que las versiones de 64 bits de Windows Vista manejan 20MB para este espacio y tampoco presentan este problema. La discusión detallada de este tema la pueden encontrar en estos tres artículos (en inglés):

http://blogs.msdn.com/ntdebugging/archive/2007/01/04/desktop-heap-overview.aspx

http://blogs.msdn.com/ntdebugging/archive/2007/07/05/desktop-heap-part-2.aspx

http://blogs.msdn.com/ntdebugging/archive/2008/03/20/the-default-interactive-desktop-heap-size-has-been-increased-on-32-bit-vista-sp1.aspx

3.18.2008

WideOpen Web: When Things Go Wrong - A Restore Windows PowerShell Script for the December 2007 FolderShare Bug

Ok, so it's not that recently that FolderShare decided to delete all your files that had certain characters (accents, trademark signs, etc.). This happened at the beginning of December 2007. You can find a detailed description of the problem (and Microsoft's response) here: http://www.techcrunch.com/2007/12/11/foldershare-autodeletes-files-whoops/

I am a heavy user of FolderShare and have been mostly happy about it, using it to synchronize files between my Laptop and my two desktops. This bug really bit me, since I use those "special characters" a lot since I am Mexican and like to spell correctly in Spanish. Ever since the bug bit me I just copied all my deleted files from FolderShare's trash to a brand new folder under my documents that I creatively named "FolderShare Stupidity". Literally thousands of my files now lived there instead of in my carefully crafted personal structure. All that was left in the original folders was the FolderShare marker "*.p2p" files.

Today I had a little too much time on my hands so I decided to play a bit with Windows Powershell (I had never used it before). It sounded like the right tool for the job in trying to build a simple script to restore my files to their proper locations. I originally intended to write a quick C# program to fix this but after today I can tell you that PowerShell is definitely the right tool for the job.

This is the script that I wrote:

#* FileName: FixFolderShare.ps1

#*=============================================================================

#* Script Name: FixFolderShare.ps1

#* Created: 170308

#* Author: Hector Obregon

#* Company: emLink

#*=============================================================================

#* Purpose: Fix FolderShare incorrectly moved files

#*=============================================================================


$items = get-childitem -path "C:\Users\hobregon\Documents" -recurse -include *.p2p

foreach ($f in $items)

{

$origname = $f.name.Replace(".p2p", "")

Set-Location "C:\Users\hobregon\Documents\FolderShare Stupidity"

$origitem = get-childitem $origname

$origfile = $origitem.fullname

$destfile = $f.fullname.Replace(".p2p", "")

Write-Host $origfile

Write-Host $destfile

copy $origfile $destfile

del $f.fullname

}

Be very careful if you decide to use the script yourself. I don't make any guarantees and will not be held responsible for any loss of data you may experience. Caveat emptor.
Having gotten that out of the way, this is what you need to do:

1. Download and install Windows PowerShell 1.0 following instructions here: http://www.microsoft.com/windowsserver2003/technologies/management/powershell/download.mspx

2. Open notepad and copy the script above and save it somewhere on your disk. Do not execute it yet.

a. Replace "C:\Users\hobregon\Documents" in the first line of the script above with a root folder underwhich you have many "orphaned" p2p files.

b. Replace "C:\Users\hobregon\Documents\FolderShare Stupidity"
inside the foreach loop above with the folder path in which you restored all your FolderShare deleted files after the bug hit.

c. Save the modified script.

3. Launch PowerShell and execute this statement to allow it to execute local unsigned scripts: set-executionpolicy RemoteSigned

4. Execute the modified script by navigating to the directory where you saved it and typing .\ before the name of your modified script file.

5. If you are paranoid about script execution, restore PowerShell execution policy to deny scripts like this: set-executionpolicy Restricted

This script will try to find all of your orphaned P2P files and restore them to their proper locations. It will not delete any of your files except the orphaned P2P FolderShare marker files.

I just found out today that FolderShare has come out with a new "Windows Live" version. I will wait it out and make sure it is stable first.

3.11.2008

WideOpen Web: Conclusiones y Comentarios Finales de MIX ’08 en Las Vegas

El mejor momento de Mix '08 me pareció sin duda la conferencia magistral donde Guy Kawasaki entrevistó a Steve Ballmer. Guy es probablemente el "evangelista tecnológico" más reconocido de la industria y no se caracteriza precisamente por ser pro-Microsoft. Trató a Ballmer "sin miedo" haciéndole algunas preguntas difíciles (o al menos más difíciles de las que normalmente se le hacen a un ejecutivo de ese calibre). La sesión fue bastante divertida – chequen cuando Ballmer "Don't go monkey on me, Steve." si se fue monkey: http://www.news.com/1606-2-6233485.html . En cuanto al contenido real:

  • Microsoft tras Yahoo fundamentalmente por razones de escala. La publicidad en Internet es un gran negocio y la escala (a cuanta gente puedes llegar) cuenta.
  • Microsoft reconoce el liderazgo de Google en este espacio y quiere "recortar la distancia".
  • Reconoce el buen trabajo de Apple en el espacio del consumidor, aunque en mi opinión aquí le falta más humildad a Microsoft.

En general Kawasaki no tiene "pelos en la lengua" y fue tras Ballmer en todos los temas difíciles hoy para Microsoft.

Asistí también a varias sesiones técnicas después. Lo mejor sin duda Silverlight 2.0 como comenté en mi post anterior. Sin embargo, otros temas interesantes:

  • Un conjunto de adiciones para integrar Silverlight 2.0 con Microsoft Sharepoint en varios escenarios. Sharepoint es una de las tecnologías más "calientes" de Microsoft en este momento y la combinación con Silverlight 2.0 me parece muy buena. Los llamados Silverlight Blueprint for Sharepoint soportan varios escenarios comunes de negocio. Más información aquí: http://www.ssblueprints.net/sharepoint/
  • Mejoras a WPF 3.5. Aunque en el Mix WPF parecía un poco olvidado en relación a su hermano menor Silverlight, en una sesión que estuve se anunciaron mejoras que muestran que Microsoft sigue y seguirá invirtiendo en esta tecnología (finalmente es el futuro de las interfaces de usuario en Windows). Entre otras cosas, WPF soporta más aceleración de hardware y la posibilidad de hacer pequeños programas para efectos gráficos que se ejecutan en el GPU sin necesidad de usar DirectX. El foco principal del equipo de WPF parece estar en mejorar el desempeño y la estabilidad. Me parece una buena decisión antes de seguir agregando funcionalidad a un producto que ya es impresionante.
  • Silverlight para dispositivos móviles. Lo mejor fue el anuncio de que Nokia va a soportar Silverlight en varios de sus modelos. Sin embargo, Silverlight móvil por ahora soporta una funcionalidad más o menos equivalente a la versión uno de escritorio. Me parece pesado, difícil de programar (sin controles y todo en JavaScript) y como en el espacio móvil de consumidor la penetración de Windows Mobile es aun baja, creo que es un pequeño paso que no será hasta la versión 2 o 3 que funcione realmente para aplicaciones masivas. En los demos funcionaba bien, pero muy lento. En mi opinión la lentitud es algo que los usuarios no toleran fácilmente en su móvil. Me hubiera gustado más que Microsoft hiciera primero un WPF light para el Compact Framework, ya que su fuerte son las aplicaciones empresariales, que la mayoría de las veces funcionan en escenarios parcialmente desconectados. Silverlight móvil solo funciona en escenarios totalmente en línea.

Finalmente, lo mejor de MIX es que, aun si no estuviste allí, las sesiones están disponibles sin costo en http://sessions.visitmix.com/ .Te recomiendo checarlas.

3.06.2008

Primeras Impresiones de Mix ‘08

Los MSDN Regional Directors de todo el mundo estamos unificando nuestros esfuerzos editoriales alrededor de un tema mensual que llamamos WideOpen Web y nos estaremos enfocando durante marzo a blogear sobre las iniciativas web de Microsoft. Hoy inició la conferencia Mix '08 en Las Vegas y en ella Microsoft hizo anuncios y demostraciones muy importantes.

Dado que hay muchos sitios de noticias en Internet reportando sobre eso, más que repetir lo que hay en todos lados, quiero comentar aquellos aspectos que me parecieron más interesantes de hoy para los desarrolladores y diseñadores de aplicaciones web (de más a menos importante):

  1. Silverlight 2.0 Beta 1: Simplemente impresionante. Es increíble que una descarga de tan sólo 4.7 MB pueda hacer lo que hace Silverlight. Ahora si me parece una plataforma completa para desarrollar aplicaciones ricas basadas en el navegador. Funciona en Firefox (desde 1.5), IE (desde el 6.0) y Safari (desde 2.0). En Windows desde 2000 hasta Vista y en Mac OS X Tiger y Leopard. Está convirtiendo a .NET en multiplataforma. ¿Qué vimos hoy que hay de nuevo vs. Silverlight 1.0?


     

    1. Controles: Finalmente, no necesitamos codificar controles a mano. Me impresionó particularmente que incluye un DataGrid que se ve bastante bien. También una excelente noticia es que Microsoft proporcionará estos controles con todo y código fuente en una licencia totalmente permisiva. Los controles soportan el esquema de templates y estilos del WPF de escritorio, lo que los hace increíblemente flexibles.
      1. Vale la pena una mención aparte el control de "Deep Zoom" de Silverlight 2. Permite de manera muy sencilla exponer enormes bitmaps a través de Internet que ofrecen una experiencia de "acercamiento" que pareciera infinito. Entren a memorabilia.hardrock.com. Wow.
    2. Soporte a Lenguajes .NET como C#, VB.NET además de IronPython y, como siempre, JavaScript. Es un soporte a lenguajes .NET de primera clase que incluye genéricos y LINQ to XML.
    3. Detección de cambios en el estado de la conexión de red. Esto nos permite detectar si perdemos conexión al servidor y evitar el colapso de nuestra aplicación. Incluso puede ser el inicio de aplicaciones "ocasionalmente conectadas" basadas en el navegador.
    4. Integración con la "historia" del navegador. Esto sirve principalmente para que los botones de "adelante" y "atrás" del navegador funcionen dentro de nuestra aplicación Silverlight como el usuario lo esperaría.
    5. Soporte para obtener datos de un dominio diferente al de que descargamos la página, siempre y cuando en el tercer dominio haya un archivo de política que lo autorice.

    Las demostraciones de Silverlight 2.0 fueron muy completas y, al menos de primera instancia, parece bastante estable y completo – Microsoft ofreció el Beta 2 para el Q2 de este año con una licencia Go Live. Yo creo que si lo lograrán por lo que vimos hoy. El beta liberado hoy se acompaña de herramientas preliminares para Visual Studio 2008 que funcionan razonablemente bien. Puedes bajar las herramientas para Visual Studio 2008 (que incluyen el runtime de Silverlight 2) de aquí: http://www.microsoft.com/downloads/details.aspx?FamilyId=E0BAE58E-9C0B-4090-A1DB-F134D9F095FD&displaylang=en

  2. Internet Explorer 8 Beta 1: Sabemos que la competencia le hace bien a Microsoft. El avance de Firefox y otros navegadores provoca innovación en IE. ¿Qué hay de nuevo?


     

    1. El enfoque centrado en estándares. Microsoft afortunadamente decidió esta semana que el "modo por omisión" de IE8 será dibujar las páginas web de acuerdo a estándares en lugar de en un modo de compatibilidad con IE7. Esto facilitará mucho el trabajo para diseñadores de sitios web, que hasta ahora tienen que trabajar para "darle la vuelta" a las idiosincrasias particulares de IE7. Mediante un tag especial, los sitios web existentes podrán identificar si IE8 los dibuja en modo de estándares o en modo de compatibilidad con IE7.
    2. Depuración de scripts con una muy interesante forma de depurar la manera como IE aplica los estilos de CSS (ahora hasta 2.1). Podemos navegar a un objeto del DOM en nuestra página y con un click entender de que estilo CSS viene cada propiedad que está aplicando.
    3. Actividades: ¿Se acuerdan de los Smart Tags? Las activities son algo similar pero con una programación declarativa mucho más sencilla, totalmente declarativa.
    4. WebSlices: Son clips de nuestros sitios web. Se mostró un ejemplo con una subasta de eBay. También muy sencillos de programar.

    Los betas de Internet Explorer se pueden descargar aquí:

Me parece que Microsoft está realmente esforzándose para ser competitivo en el espacio de Internet y lográndolo. Mañana como parte de Mix habrá un keynote de Steve Ballmer con Guy Kawasaki. Probablemente habrá más noticias interesantes.

Finalmente, les recomiendo que visiten The Region. Este sitio agrega los blogs de todos los directores regionales de MSDN del mundo y este mes tendrá literalmente cientos de artículos sobre estas iniciativas WideOpen Web de Microsoft.