[# VISUALSTUDIO2010] HowTo: Formatting XAMLs with an attribute per line

 

image47dd1de4

Hi,

I’m going to point out now that have shown me it 10 times, because if not I dizziness. The issue is the next, when you fight with WPF, Silverlight, or any other technology to make excessive use of formats with tags, because the theme of the Edition text can be quite complicated. A great “visual” solution for these cases is to take advantage of the formatting that it offers Visual Studio, where an attribute is separated by line. This option is activated from the menu [Tools / / Options], in the section [Text Editor / / XAML / / Formatting / / Spacing] the option selected [Position each attribute on separate line ]]

image

For example, returning to the example I posted 2 days ago we can see part of the XAML in this format

   1: <TextBlock Text="Merry Christmas" Grid.Row="0" Grid.Column="1" FontSize="24" Foreground="White"

   2: FontFamily="Segoe UI Semilight" FontWeight="Bold" Margin="0" HorizontalAlignment="Center" />

   3: <Canvas x:Name="canvasContent" Margin="10,10,0,0" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2">

   4: <Grid Grid.Column="1" Grid.Row="1"><Border BorderThickness="3" BorderBrush="White" CornerRadius="10"

   5: Padding="2" HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid>

   6: <Border x:Name="mask" Background="White" CornerRadius="7" /> <StackPanel><StackPanel.OpacityMask>

   7: <VisualBrush Visual="{Binding ElementName=mask}" /></StackPanel.OpacityMask><Image x:Name="CameraViewer"

   8: Stretch="UniformToFill" MaxWidth="640" MaxHeight="480" /></StackPanel></Grid></Border></Grid>

 

Or after a Ctrl+k, CTRL + d, we see it in a more “natural” way

   1: <TextBlock Text="Merry Christmas"

   2:            Grid.Row="0"

   3:            Grid.Column="1"

   4:            FontSize="24"

   5:            Foreground="White"

   6:            FontFamily="Segoe UI Semilight"

   7:            FontWeight="Bold"

   8:            Margin="0"

   9:            HorizontalAlignment="Center" />

  10: <Canvas x:Name="canvasContent"

  11:         Margin="10,10,0,0"

  12:         Grid.Row="0"

  13:         Grid.Column="0"

  14:         Grid.RowSpan="2">

  15:     <Grid Grid.Column="1"

  16:           Grid.Row="1">

  17:         <Border BorderThickness="3"

  18:                 BorderBrush="White"

  19:                 CornerRadius="10"

  20:                 Padding="2"

  21:                 HorizontalAlignment="Center"

  22:                 VerticalAlignment="Center">

  23:             <Grid>

  24:                 <Border x:Name="mask"

  25:                         Background="White"

  26:                         CornerRadius="7" />

  27:                 <StackPanel>

  28:                     <StackPanel.OpacityMask>

  29:                         <VisualBrush Visual="{Binding ElementName=mask}" />

  30:                     </StackPanel.OpacityMask>

  31:                     <Image x:Name="CameraViewer"

  32:                            Stretch="UniformToFill"

  33:                            MaxWidth="640"

  34:                            MaxHeight="480" />

  35:                 </StackPanel>

  36:             </Grid>

  37:         </Border>

  38:     </Grid>

  39:     <ContentControl x:Name="contentControlHat1">

  40:         <Image x:Name="imageHat1"

  41:                Width="64"

  42:                Height="64"

  43:                Source="/ElBruno.KinectViewer;component/Images/santa-hat.png"

  44:                Visibility="Hidden" />

  45:     </ContentControl>

 

Anyways, that tastes there is nothing written and perhaps this option more than one does not like, because well… here there is an option to test and choose.

 

Greetings @ Home

The Bruno

[#VISUALSTUDIO2010] HowTo: Dar formato a los XAMLs con un atributo por línea

image47dd1de4

Buenas,

me lo voy a apuntar ahora que me lo han mostrado 10 veces, porque si no me mareo. El tema es el siguiente, cuando te peleas con WPF, Silverlight, o alguna otra tecnología que haga un uso excesivo de formatos con etiquetas, pues el tema de la edición en modo texto puede ser bastante complicado. Una gran solución “visual” para estos casos es aprovechar el formateo que nos ofrece Visual Studio, donde se separa un atributo por línea. Esta opción se activa desde el menú [Tools // Options], en la sección [Text Editor // XAML // Formatting // Spacing] seleccionado la opción [Position each attribute on separate line]

image

Por ejemplo, volviendo al ejemplo que publiqué hace 2 días podemos ver parte del XAML con este formato

   1: <TextBlock Text="Merry Christmas" Grid.Row="0" Grid.Column="1" FontSize="24" Foreground="White" 

   2: FontFamily="Segoe UI Semilight" FontWeight="Bold" Margin="0" HorizontalAlignment="Center" />

   3: <Canvas x:Name="canvasContent" Margin="10,10,0,0" Grid.Row="0" Grid.Column="0" Grid.RowSpan="2">

   4: <Grid Grid.Column="1" Grid.Row="1"><Border BorderThickness="3" BorderBrush="White" CornerRadius="10" 

   5: Padding="2" HorizontalAlignment="Center" VerticalAlignment="Center"> <Grid>

   6: <Border x:Name="mask" Background="White" CornerRadius="7" /> <StackPanel><StackPanel.OpacityMask>

   7: <VisualBrush Visual="{Binding ElementName=mask}" /></StackPanel.OpacityMask><Image x:Name="CameraViewer" 

   8: Stretch="UniformToFill" MaxWidth="640" MaxHeight="480" /></StackPanel></Grid></Border></Grid>

 

O después de un Ctrl+k, Ctrl+d, lo vemos de una forma más “natural”

   1: <TextBlock Text="Merry Christmas"

   2:            Grid.Row="0"

   3:            Grid.Column="1"

   4:            FontSize="24"

   5:            Foreground="White"

   6:            FontFamily="Segoe UI Semilight"

   7:            FontWeight="Bold"

   8:            Margin="0"

   9:            HorizontalAlignment="Center" />

  10: <Canvas x:Name="canvasContent"

  11:         Margin="10,10,0,0"

  12:         Grid.Row="0"

  13:         Grid.Column="0"

  14:         Grid.RowSpan="2">

  15:     <Grid Grid.Column="1"

  16:           Grid.Row="1">

  17:         <Border BorderThickness="3"

  18:                 BorderBrush="White"

  19:                 CornerRadius="10"

  20:                 Padding="2"

  21:                 HorizontalAlignment="Center"

  22:                 VerticalAlignment="Center">

  23:             <Grid>

  24:                 <Border x:Name="mask"

  25:                         Background="White"

  26:                         CornerRadius="7" />

  27:                 <StackPanel>

  28:                     <StackPanel.OpacityMask>

  29:                         <VisualBrush Visual="{Binding ElementName=mask}" />

  30:                     </StackPanel.OpacityMask>

  31:                     <Image x:Name="CameraViewer"

  32:                            Stretch="UniformToFill"

  33:                            MaxWidth="640"

  34:                            MaxHeight="480" />

  35:                 </StackPanel>

  36:             </Grid>

  37:         </Border>

  38:     </Grid>

  39:     <ContentControl x:Name="contentControlHat1">

  40:         <Image x:Name="imageHat1"

  41:                Width="64"

  42:                Height="64"

  43:                Source="/ElBruno.KinectViewer;component/Images/santa-hat.png"

  44:                Visibility="Hidden" />

  45:     </ContentControl>

 

Ojo, que sobre gustos no hay nada escrito y tal vez esta opción a más de uno no le guste, pues bien … aquí hay una opción para probar y elegir.

 

Saludos @ Home

El Bruno

   

[#KINECT] Merry Christmas with Kinect and Visual Studio 2010 (gift of the Valentino)

image

Hi,

in these days of festivities, when you join the side 2 dwarves wanting to play, you got the kinect connected to the PC and the SDK that you strange, at the very least you get is something like the following:

image

An application for every person that appears on WebCam puts a Santa Claus Cap!!!!

Disclaimer: as they can be seen in the screenshot, in addition to the view of the WebCam I am showing the skeleton, but just as he gave a ray of sunshine to my dwarf in the arm, therefore not recognized him!

As well, after several post about Kinect, today the challenge was as follows

  1. identify the specific joint of the head of each skeleton
  2. calculate the relative coordinates of that joint before an image of the webcam
  3. paint a Santa Hat on webcam

The first point is easily solved once we iteramos by the skeletons recognized in mode Trackeable (lines 6 to 9), we can iterate between the Joints of the skeleton and verify that it is the head compared with [JointID.Head] (line 17).

Once identified the head Joint we come to the 2nd point which is a bit more complicated. Function GetDisplayPosition() (line 27) is in charge for the conversion of the position of the Joint to relative location in the image. The following capabilities of the SDK are used to this

- SkeletonEngine.SkeletonToDepthImage () using this function we can know the relative location in “depth” of a joint.

- NuiCamera.GetColorPixelCoordinatesFromDepthPixel () using this function, we can discover the position at coordinates x/Y from the depth we obtained earlier.

In both cases, it must make some adjustments on the one hand the webcam image is 640 * 480 resolution and depth capacity is only 320 * 240. But hey, with these few lines already we can define the specific location of our head and paint a SantaHat therein.

   1: void KinectSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)

   2: {

   3:     canvasSkeleton.Children.Clear();

   4:     this.HideImageHats();

   5:     var skeletonId = 0;

   6:     foreach (var skeleton in e.SkeletonFrame.Skeletons.Where

   7:                   (skeleton =>

   8:                             SkeletonTrackingState.Tracked == skeleton.TrackingState))

   9:     {

  10:         skeletonId++;

  11:         this.DisplayImageHats(skeletonId);

  12:         PaintBones(skeleton);

  13:         PaintJoints(skeleton);

  14:  

  15:         foreach (Joint joint in skeleton.Joints)

  16:         {

  17:             if (joint.ID != JointID.Head)

  18:             {

  19:                 continue;

  20:             }

  21:             var newPosition = this.GetDisplayPosition(joint);

  22:             this.MoveImageHats(newPosition, skeletonId);

  23:         }

  24:     }

  25: }

  26:  

  27: private Point GetDisplayPosition(Joint joint)

  28: {

  29:     float depthX, depthY;

  30:     kinect.SkeletonEngine.SkeletonToDepthImage(joint.Position, out depthX, out depthY);

  31:     depthX = Math.Max(0, Math.Min(depthX * 320, 320));

  32:     depthY = Math.Max(0, Math.Min(depthY * 240, 240));

  33:     int colorX, colorY;

  34:     var iv = new ImageViewArea();

  35:     kinect.NuiCamera.GetColorPixelCoordinatesFromDepthPixel(ImageResolution.Resolution640x480, iv, (int)depthX, (int)depthY, (short)0, out colorX, out colorY);

  36:     var newX = (int)(CameraViewer.ActualWidth * colorX / 640.0) - 30;

  37:     var intY = (int)(CameraViewer.ActualHeight * colorY / 480) - 30;

  38:     return new Point(newX, intY);

  39: }

 

This time I changed the mode of publication and if you want to download the code can do since CodePlex fromhttp://kinectmerrychristmas.codeplex.com/ .

If you already have a Kinect, SDK and wanted to test the application, you can install it directly fromhttp://kinectmerrychristmas.codeplex.com/releases/79524/clickOnce/ElBruno.MerryChristmas.application

 

Greetings @ Home and Merry Christmas

The Bruno

References:

[#KINECT] Merry Christmas with Kinect and Visual Studio 2010 (regalo del Valentino)

image

Buenas,

en estos días de fiestas, cuando se te juntan al lado 2 enanos con ganas de jugar, tenes el kinect conectado al PC y el SDK que te extraña, pues lo menos que te sale es algo como lo siguiente:

image

¡¡¡ Una aplicación que para cada persona que aparece en la WebCam le pone un gorro de Santa Claus !!!

Disclaimer: como pueden ver en el screenshot, además de la vista de la WebCam estoy mostrando el skeleton, pero como justo le dió un rayo de sol a mi enana en el brazo, pues no lo reconoció !!!

Pues bien, después de varios post sobre Kinect, hoy el desafío consistía en lo siguiente

  1. identificar el joint específico de la cabeza de cada skeleton
  2. calcular las coordenadas relativas de ese joint frente a la imagen de la webcam
  3. pintar un Santa Hat en la webcam

El primer punto se soluciona fácilmente, ya que una vez que iteramos por los skeletons reconocidos en modo Trackeable (líneas 6 a 9), podemos iterar entre los Joints del skeleton y verificar que el mismo sea el de la cabeza comparando con [JointID.Head] (línea 17).

Una vez identificado el Joint de la cabeza pasamos al 2do punto que es un poco más complicado. La función GetDisplayPosition() (línea 27), es la encargada de realizar la conversión de la posición del Joint a la ubicación relativa en la imagen. Para esto se utilizan las siguientes capacidades del SDK

- SkeletonEngine.SkeletonToDepthImage() utilizando esta función podemos conocer la ubicación relativa en “depth” de un joint.

- NuiCamera.GetColorPixelCoordinatesFromDepthPixel() utilizando esta función, podemos descubrir la posición en coordenadas X/Y a partir del depth que obtuvimos antes.

En ambos casos, hay que hacer algunos ajustes ya que por un lado la imagen de la webcam está en resolución de 640*480 y la capacidad de depth es solo de 320*240. Pero bueno, con estas pocas líneas ya podemos definir la ubicación específica de nuestra cabeza y pintar un SantaHat en el mismo.

 

   1: void KinectSkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)

   2: {

   3:     canvasSkeleton.Children.Clear();

   4:     this.HideImageHats();

   5:     var skeletonId = 0;

   6:     foreach (var skeleton in e.SkeletonFrame.Skeletons.Where

   7:                   (skeleton =>

   8:                             SkeletonTrackingState.Tracked == skeleton.TrackingState))

   9:     {

  10:         skeletonId++;

  11:         this.DisplayImageHats(skeletonId);

  12:         PaintBones(skeleton);

  13:         PaintJoints(skeleton);

  14:  

  15:         foreach (Joint joint in skeleton.Joints)

  16:         {

  17:             if (joint.ID != JointID.Head)

  18:             {

  19:                 continue;

  20:             }

  21:             var newPosition = this.GetDisplayPosition(joint);

  22:             this.MoveImageHats(newPosition, skeletonId);

  23:         }

  24:     }

  25: }

  26:  

  27: private Point GetDisplayPosition(Joint joint)

  28: {

  29:     float depthX, depthY;

  30:     kinect.SkeletonEngine.SkeletonToDepthImage(joint.Position, out depthX, out depthY);

  31:     depthX = Math.Max(0, Math.Min(depthX * 320, 320));

  32:     depthY = Math.Max(0, Math.Min(depthY * 240, 240));

  33:     int colorX, colorY;

  34:     var iv = new ImageViewArea();

  35:     kinect.NuiCamera.GetColorPixelCoordinatesFromDepthPixel(ImageResolution.Resolution640x480, iv, (int)depthX, (int)depthY, (short)0, out colorX, out colorY);

  36:     var newX = (int)(CameraViewer.ActualWidth * colorX / 640.0) - 30;

  37:     var intY = (int)(CameraViewer.ActualHeight * colorY / 480) - 30;

  38:     return new Point(newX, intY);

  39: }

Esta vez he cambiado el modo de publicación y si quieren descargar el código lo pueden hacer desde CodePlex desde http://kinectmerrychristmas.codeplex.com/ .
Si ya tienes un Kinect, el SDK y ganas de probar la aplicación, puedes instalar la misma directamente desde http://kinectmerrychristmas.codeplex.com/releases/79524/clickOnce/ElBruno.MerryChristmas.application

 

Saludos @ Home y Merry Christmas

El Bruno

   

Referencias:

[# WINDOWS8] HowTo: Avoid the message to enable.NET Framework 3.5 when you run a unit test in Visual Studio 2010

image47dd1de4

Hi,

Another thing to keep in mind with Windows 8 and Visual Studio 2010 that I gave in the front and had outstanding post. In this case is the following message that appears when you run unit tests and code coverage have enabled.

image

If you have not seen this message is that, or you don’t have the code coverage enabled or do not have unit testing; in both cases you deserve a horde of zombies you pursue and eat that part of your brain that you stop to do unit testing.

Anyway, back to what bothered me was having to enable this feature for each execution of Unit Tests; I started to see that it has Windows 8 below in this case.

Once enabled everything you need in "Turn Windows features on or off", the following test continued to show me the activation window, so I decided to bring down one level.

image

Before proceeding, the new Task Manager of Windows 8 is very good, but the Windows SysInternal Process Explorer is still the best tool to analyze processes in a Windows environment.

So I launched a meeting of unit tests with the active Process Explorer and it struck me that in addition to the calls tree for Visual Studio 2010

  • devenv.exe
  • QTAgent32.exe
  • VSPerfMon.exe
  • conhost.exe

Was an executable unknown to my > > fondue.exe

image

After browsing a bit on the internet (where there is nothing of information), I found the following

  • C:\Windows\System32\Fondue.exe "Windows Features on Demand UX"

That also helped me a lot, which is basically what indicates me the activation form, but if it helped me to see the same help

image

And of course, after 2 tests I found the command was in need

C:\Windows\System32 > Fondue.exe /enable-feature: NetFx3 /hideux:all

Once executed this command from a Command Prompt with Administrator permissions, we will have more problems with the execution of unit tests.

Greetings @ La Finca

The Bruno

[#WINDOWS8] HowTo: Evitar el mensaje para habilitar .NET Framework 3.5 cuando se ejecuta una prueba unitaria en Visual Studio 2010

image47dd1de4

Buenas,

otro detalle a tener en cuenta con Windows 8 y Visual Studio 2010 que me dí en la frente y que tenía pendiente de postear.  En este caso es el siguiente mensaje que te aparece cuando ejecutas pruebas unitarias y tienes habilitada la Cobertura de Código.

image

Si no has visto este mensaje es que, o bien no tienes habilitada la Cobertura de Código o no tienes pruebas unitarias; en ambos casos te mereces que una horda de zombies te persiga y coma esa parte de tu cerebro que te detiene para no hacer pruebas unitarias.

Pero bueno, volviendo a lo que me molestaba, que era tener que habilitar esta feature para cada ejecución de Unit Tests; me puse a ver que tiene Windows 8 por debajo en este caso.

Una vez habilitado todo lo necesario en “Turn Windows features on or off”, la siguiente prueba me siguió mostrando la ventana de activación, así que decidí bajar un nivel más.

image

Antes de seguir, el nuevo Task Manager de Windows 8 es muy bueno, pero el Process Explorer de Windows SysInternal sigue siendo la mejor tool para analizar procesos en un entorno Windows.

Asi que lancé una sesión de unit tests con el Process Explorer activo y me llamó la atención que además del árbol de llamadas propio de Visual Studio 2010

  • devenv.exe
  • QTAgent32.exe
  • VSPerfMon.exe
  • conhost.exe

Apareciese un ejecutable desconocido para mi >> fondue.exe

image

Después de navegar un poco por internet (donde no hay nada de información al respecto), encontré lo siguiente

  • C:\Windows\System32\Fondue.exe “Windows Features on Demand UX”

Que tampoco me ayudó mucho, ya que es básicamente lo que me indica el formulario de activación, pero si me ayudó a ver la ayuda del mismo

image

Y claro, después de 2 pruebas encontré el comando que estaba necesitando

C:\Windows\system32>Fondue.exe /enable-feature:NetFx3 /hideux:all

Una vez ejecutado este comando desde un Command Prompt con permisos de Administrator, no tendremos más problemas con la ejecución de pruebas unitarias.

 

 

Saludos @ La Finca

El Bruno

   

[# JETBRAINS] Beginning with # WebStorm

image

Hi,

in these days where with Javi and Roberto we do nothing more than stick with JavaScript and the chestnut of HTML5, because after a tweet of Hadi Hariri I learned of the existence of WebStorm 3.0 and decided to try it. The truth is that compared to Visual Studio 2010 is much more powerful to play with JavaScript. Details such as the following done to really take this into account for the next phase of the project:

  • Support for unit testing.
    JavaScript is a nutshell, I think that I’m not saying anything new and frameworks of Unit Testing that there are there are not very good, but from what I’ve seen in the integration and support, WebStorm IDE makes it quite natural to work with unit testing in this context. Reference > http://blog.jetbrains.com/webide/2011/10/javascript-unit-testing-support/#comments
  • Duplicated Code
    JavaScript is a chestnut, I repeat it here. And as well as I do in 2 clicks on the post to copy/paste of this judgment, copy/paste JavaScript is one of the practices most used. I don’t know why, it seems that people not know that every action of copy/paste launches a trigger that kills a kitten on the internet, but this is good. The duplicated code detector rather helps eliminate these "bad smells" in the code.
  • Integration with TFS
    Cool Risa

If you want to remove the sting of your ulcer, and live a few more years, then download the trial fromhttp://www.jetbrains.com/webstorm/index.html

Greetings @ the estate

The Bruno

[#JETBRAINS] Primeros días con #WebStorm

image

Buenas,

en estos días donde con Javi y Roberto no hacemos otra cosa más que pegarnos con JavaScript y la castaña de HTML5, pues después de un tweet de Hadi Hariri me enteré de la existencia de WebStorm 3.0 y decidí probarla. La verdad es que comparado con Visual Studio 2010 es mucho más potente para jugar con JavaScript. Detalles como las siguientes hace que realmente lo tenga en cuenta para la siguiente fase del proyecto:

  • Soporte para unit testing.
    JavaScript es una castaña, creo que no digo nada nuevo y los frameworks de Unit Testing que hay por allí no son muy buenos, pero por lo que he visto en la integración y soporte, el IDE de WebStorm hace que sea bastante natural trabajar con pruebas unitarias en este contexto. Como referencia > http://blog.jetbrains.com/webide/2011/10/javascript-unit-testing-support/#comments
  • Duplicated Code
    JavaScript es una castaña, lo repito aquí. Y así como al copy/paste de esta sentencia lo hago en 2 clicks en el post, el JavaScript el copy/paste es una de las prácticas mas utilizadas. No sé porqué, parece que la gente no supiera que cada acción de copy/paste lanza un trigger que mata un gatito en internet, pero bueno esto es así. El detector de duplicated code ayuda bastante a eliminar esos “bad smells” que hay en el código.
  • Integración con TFS
    Cool Risa

 

Si quieres eliminar el ardor de tu úlcera y vivir unos años más, pues descarga el trial desde http://www.jetbrains.com/webstorm/index.html

 

Saludos @ La Finca

El Bruno

   

[# POWERSHELL] Enabling execute permissions for PowerShell scripts

Hi,

I am going to sign up for that next time I see this error

   1: C:\>;;powershell.exe -command ./New-Scriptazo.ps1

   2: File C:\\New-Scriptazo.ps1 cannot be loaded because the execution of scripts is disabled on this system.

   3: Please see "get-help about_signing" for more details.

   4: At line:1 char:22

   5:   + ./New-Scriptazo.ps1 <;;<<<

   6:   + CategoryInfo          : NotSpecified: (:) [], PSSecurityException   

   7:   + FullyQualifiedErrorId : RuntimeException

I agree that the sentence from the console of PowerShell to enable executing commands is

   1: Set-ExecutionPolicy RemoteSigned

Brunito ready?

Greetings @ the estate

The Bruno

Source: http://technet.microsoft.com/en-us/library/ee176949.aspx

[#POWERSHELL] Habilitando permisos de ejecución para scripts de PowerShell

Buenas,

me lo voy a apuntar para que la próxima vez que me aparezca este error

   1: C:\>;powershell.exe -command ./New-Scriptazo.ps1

   2: File C:\\New-Scriptazo.ps1 cannot be loaded because the execution of scripts is disabled on this system. 

   3: Please see "get-help about_signing" for more details.

   4: At line:1 char:22

   5: + ./New-Scriptazo.ps1 <;<<<

   6:     + CategoryInfo          : NotSpecified: (:) [], PSSecurityException

   7:     + FullyQualifiedErrorId : RuntimeException

me acuerde que la sentencia desde la consola de PowerShell para habilitar la ejecución de comandos es

   1: Set-ExecutionPolicy RemoteSigned

Listo Brunito???

 

Saludos @ La Finca

El Bruno

   

Fuente: http://technet.microsoft.com/en-us/library/ee176949.aspx