Monthly Archives: septiembre 2012

[#GADGETS] HowTo: Integrar el USB Email Notifier para mostrar los estados de Lync 2013 Beta (III)

image

Buenas,

hoy cierro la serie donde comento como utilizando C# podemos controlar el estado de las luces de un USB Email Notifier de poco más de U$S 8.00.

En primer lugar el ejemplo real que estaba armando era una aplicación que mostraba las alertas para un servidor de Builds con Team Foundation Server 2012. Como alguna vez hace tiempo ya armé algo parecido con el lanza misiles USB y Team Foundation Server 2008, pues hoy haré algo diferente.

Hace un tiempo me llamo la atención este post de Scott Hanselman, donde comenta como ha puesto un BusyLight en la puerta de su oficina para que su familia sepa si está en una call, conferencia, etc. Además de sentirme bastante identificado con su situación, me llamó la atención de que nadie haya creado una solución “barata” para esto. Pues bien, aquí está por unos U$S 20 y con la satisfacción de haberlo hecho uno mismo.

Lo único que necesitamos es un light notifier y un par de extensiones USB, por ejemplo

Lo siguiente es crear una aplicación WPF donde utilicemos los controles de presencia de Lync. En este caso estoy utilizando LYNC 2013 BETA, con lo que tuve que descargar el SDK también en modo Beta desde aquí. Lo bueno de este SDK, es que además del clásico modelo de objetos, también tenemos una serie de controles WPF que nos permiten crear una aplicación como la que podemos ver la siguiente imagen en pocos minutos:

image

El código WPF

   1: <Window x:Class="ElBruno.LyncLightNotifier.MainWindow"

   2:         xmlns:controls="clr-namespace:Microsoft.Lync.Controls;assembly=Microsoft.Lync.Controls"

   3:         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

   4:         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

   5:         Title="El Bruno - LYNC 2013 Light Alert"

   6:         Height="264"

   7:         Width="405">

   8:     <Grid>

   9:         <Grid.RowDefinitions>

  10:             <RowDefinition />

  11:             <RowDefinition />

  12:         </Grid.RowDefinitions>

  13:         <Grid.ColumnDefinitions>

  14:             <ColumnDefinition Width="187*" />

  15:             <ColumnDefinition Width="384*" />

  16:         </Grid.ColumnDefinitions>

  17:         <Grid.Background>

  18:             <ImageBrush ImageSource="Lync.png" />

  19:         </Grid.Background>

  20:         <StackPanel Orientation="Vertical"

  21:                     Margin="10,0,0,10"

  22:                     HorizontalAlignment="Stretch"

  23:                     VerticalAlignment="Center"

  24:                     Height="106"

  25:                     Grid.Column="1"

  26:                     Grid.Row="1">

  27:             <controls:MyPresenceChooser x:Name="myPresence"

  28:                                         HorizontalAlignment="Stretch" />

  29:             <controls:MyStatusArea x:Name="myStatus" />

  30:         </StackPanel>

  31:     </Grid>

  32: </Window>

Ahora bien, como no he invertido mucho tiempo en ver como funciona el SDK, en los primeros 10 minutos no encontré un evento que me indique el cambio de estado. Es por eso que el siguiente código es casi igual de dañino para el mundo de la programación como asesinar al último unicornio o hacer un par de kilómetros en mi coche (lo último es dañino para la ecología).

   1: using System;

   2: using System.Timers;

   3: using System.Windows;

   4: using System.Windows.Threading;

   5: using ElBruno.LightNotifier;

   6: using Microsoft.Lync.Controls;

   7:  

   8: namespace ElBruno.LyncLightNotifier

   9: {

  10:     public partial class MainWindow

  11:     {

  12:         private readonly Timer _timer = new Timer(1000);

  13:         public MainWindow()

  14:         {

  15:             InitializeComponent();

  16:             Loaded += MainWindowLoaded;

  17:             Unloaded += MainWindowUnloaded;

  18:         }

  19:  

  20:         void MainWindowUnloaded(object sender, RoutedEventArgs e)

  21:         {

  22:             _timer.Elapsed -= TimerElapsed;

  23:             _timer.Stop();

  24:         }

  25:  

  26:         void MainWindowLoaded(object sender, RoutedEventArgs e)

  27:         {

  28:             _timer.Elapsed += TimerElapsed;

  29:             _timer.Enabled = true;

  30:         }

  31:  

  32:         void TimerElapsed(object sender, ElapsedEventArgs e)

  33:         {

  34:             Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(CheckLyncState));

  35:         }

  36:         void CheckLyncState()

  37:         {

  38:             var state = myPresence.AvailabilityState;

  39:             var lightController = new LightController();

  40:             lightController.TurnLight(state == ContactAvailability.DoNotDisturb);

  41:         }

  42:     }

  43: }

Pues bien, la solución es bastante simple: un timer que cada segundo verifica el estado en LYNC 2013 y si el mismo es Do Not Disturb, pues enciende el light notifier. Las líneas 32 hasta la 41 te harán feliz.

Si una imagen vale más que mil palabras, el siguiente valor debe valer 2 o 3 monosílabos

Video: http://youtu.be/Tah42D8Vozw

El código de la aplicación completa se puede descargar desde http://sdrv.ms/PkgQ4L.

Referencias:

Saludos @ Home

El Bruno

image image image


Archivado en: Code Sample, Gadgets, HowTo, Visual Studio 2012

[#RESHARPER] ReSharper 7.1 EAP ya esta abierto para todos

Buenas,

desde ayer ya podemos descargar la versión para prueba de ReSharper 7.1. Como todas las versiones no finales, pues estamos jugando con fuego. Sin embargo hay 2 o 3 features interesantes en esta versión:

  • No more regions después de un Code CleanUp
  • Hay un par de cosillas nuevas que afectan a ASP.Net MVC. Tengo que darle un vistazo a este listado para ver que han arreglado e incorporado.
  • Si sos un fan de .Net Framework 4.5, pues ya tenemos soporte para CallerInfo en las propiedades.
  • Etc ….

El listado completo en el siguiente link.

Fuente: http://blogs.jetbrains.com/dotnet/2012/09/resharper-71-early-access-is-open/

Descarga: http://confluence.jetbrains.net/display/ReSharper/ReSharper+7.1+Nightly+Builds

Saludos @ Home

El Bruno

image image image


Archivado en: ReSharper, ReSharper, Visual Studio 2012

[#WINDOWS8] HowTo: Obtain the Windows 8 application version number

image

Buenas,

after the greatest hits on how get the version of an Assembly and envelope number How to obtain the version number of a ClickOnce application , today plays a little help to get an application version number of Windows 8 .

   1: string GetVersion()
   2: {
   3:     Package package = Package.Current;
   4:     PackageId packageId = package.Id;
   5:     PackageVersion version = packageId.Version;
   6:     return String.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision);
   7: }

Saludos @ La Finca

El Bruno

image image image


Archivado en: EnglishPost, HowTo, Visual Studio 2012, Windows 8

[#WINDOWS8] HowTo: Obtener el numero de version de una aplicacion Windows 8

image

Buenas,

después de los grandes éxitos sobre cómo obtener el número de versión de un ensamblado y de sobre cómo obtener el número de versión de una aplicación ClickOnce, hoy toca un poco de ayuda para obtener el número de versión en una aplicación de Windows 8.

   1: string GetVersion()

   2: {

   3:     Package package = Package.Current;

   4:     PackageId packageId = package.Id;

   5:     PackageVersion version = packageId.Version;

   6:     return String.Format("{0}.{1}.{2}.{3}", version.Major, version.Minor, version.Build, version.Revision);

   7: }

Saludos @ Home

El Bruno

image image image


Archivado en: HowTo, Visual Studio 2012, Windows 8

[#ALM] Check your maturity level in your software development processes

ALM 03

Buenas,

Maybe some do not know, there is a very complete table that allows us to identify the degree of maturity of our Basic, Standard, Advanced and Dynamic software development processes.

This table is available to download from one of the sites in CodePlex ALM Rangers and can be downloaded from here .

image

Well, the table discussed various points such as “Deployment and operations” or “Software Configuration Management”. It is likely that we will have a different maturity level for each of them, but the most important thing is that we will have clear what steps we need to follow in order to level up.

Excellent resource!

Download: http://vsaralmassessment.codeplex.com/downloads/get/488960

Saludos @ Home

El Bruno

image image image

e


Archivado en: ALM, CodePlex, EnglishPost

[#ALM] Comprueba en que estado de madurez se encuentran tus procesos de desarrollo de software

ALM 03

Buenas,

tal vez algunos no lo conozcan, existe una tabla muy completa que nos permite identificar el grado de madurez de nuestros procesos de desarrollo de software en Basic, Standard, Advanced y Dynamic.

Esta tabla se encuentra disponible para descargar desde uno de los sites en CodePlex de los ALM Rangers y se puede descargar desde aquí.

image

Ahora bien, en la tabla se analizan diferentes puntos como por ejemplo “Despliegue y Operaciones” o “Software Configuration Management”. Es probable que para cada uno de ellos tengamos un nivel de madurez diferente, pero lo más importante es que tendremos claro cuales son los pasos que deberemos seguir para subir de nivel.

Excelente recurso!

Descarga: http://vsaralmassessment.codeplex.com/downloads/get/488960

Saludos @ Home

El Bruno

image image image

2


Archivado en: ALM, CodePlex

[#PERSONAL] Difference between a programmer and a good programmer

image

Buenas,

while I am reading a couple of books very good leave a sentence that I never tire of reading:

The difference between a tolerable programmer and a great programmer is not how many programming languages they know, and it’s not whether they prefer Python or Java. It’s whether they can communicate their ideas. By persuading other people, they get leverage. By writing clear comments and technical specs, they let other programmers understand their code, which means other programmers can use and work with their code instead of rewriting it.Absent this, their code is worthless. By writing clear technical documentation for end users, they allow people to figure out what their code is supposed to do, which is the only way those users can see the value in their code. There’s a lot of wonderful, useful code buried on sourceforge somewhere that nobody uses because it was created by programmers who don’t ‘ can’t write very well (or don’t write at all), and so nobody knows what they’ve done and their brilliant code languishes.

I won’t hire a programmer unless they can write, and write well, en Español. If you can write, wherever you get hired, you’ll soon find that you’re getting asked to write the specifications and that means you’re already leveraging your influence and getting noticed by management.

Joel Spolsky, How To Write Without Writing

Saludos @ Home

El Bruno

image image image

Archivado en: EnglishPost, Opinion

[#PERSONAL] Diferencia entre un programador y un buen programador

image

Buenas,

mientras sigo leyendo un par de libros muy buenos deja una frase que no me canso de leer:

The difference between a tolerable programmer and a great programmer is not how many programming languages they know, and it’s not whether they prefer Python or Java. It’s whether they can communicate their ideas. By persuading other people, they get leverage. By writing clear comments and technical specs, they let other programmers understand their code, which means other programmers can use and work with their code instead of rewriting it. Absent this, their code is worthless. By writing clear technical documentation for end users, they allow people to figure out what their code is supposed to do, which is the only way those users can see the value in their code. There’s a lot of wonderful, useful code buried on sourceforge somewhere that nobody uses because it was created by programmers who don’t write very well (or don’t write at all), and so nobody knows what they’ve done and their brilliant code languishes.

I won’t hire a programmer unless they can write, and write well, in English. If you can write, wherever you get hired, you’ll soon find that you’re getting asked to write the specifications and that means you’re already leveraging your influence and getting noticed by management.

Joel Spolsky, How To Write Without Writing

Saludos @ Home

El Bruno

image image image


Archivado en: Opinion, Personal

[#VS2012].REG to change the action by default for "Resolve" to "Associate" in Visual Studio 2012

image

Buenas,

some time ago the friend Luis showed us the entry in the windows registry that we must change to change the default action of “Resolve” to “Associate” when we do a CheckIn with Visual Studio 2010 .

I then wrote a post about where you also put a .reg to change this entry. Today update this file to modify the registry to Visual Studio 2012.

It has the following content

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\TeamFoundation\SourceControl\Behavior]
“ResolveAsDefaultCheckinAction” = “False”

and can be downloaded from here: http://sdrv.ms/QFopEN

Saludos @ La Finca

El Bruno

image image image


Archivado en: EnglishPost, HowTo, Visual Studio 2012, WorkItemTracking

[#VS2012] .REG para cambiar la acción por defecto de “Resolve” a “Associate” en Visual Studio 2012

image

Buenas,

hace un tiempo el amigo Luis nos mostraba la entrada en el registro de windows que debemos cambiar para cambiar la acción por defecto de “Resolve” a “Associate” cuando hacemos un CheckIn con Visual Studio 2010.

Yo luego escribí un post al respecto donde además ponía un .reg para cambiar esta entrada. Hoy actualizo este archivo para modificar el registro para Visual Studio 2012.

El mismo tiene el siguiente contenido

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\11.0\TeamFoundation\SourceControl\Behavior]
“ResolveAsDefaultCheckinAction”=”False”

y se puede descargar desde aquí: http://sdrv.ms/QFopEN

 

Saludos @ Home

El Bruno

image image image


Archivado en: HowTo, Visual Studio 2012
Página 1 de 41234