Archives (old content)

Visual Studio 2005 Extensions for WWF RC5

Another release candidate is just out Microsoft’s door. This one pairs up nicely with RC1 of the .NET 3.0 Framework.

Microsoft .NET Framework 3.0 RC1

Microsoft .NET Framework 3.0 (formerly known as WinFX) RC1 is now available here.

Windows Vista - Lemon Lime Flavour

My boss brought this can of softdrink back from his recent visit to Redmond. Apperantly this is some sort of internal Vista PR as the can points to an internal Microsoft IT server… According to him, all the refrigirators in the campus are filled with these… Thats good PR !🙂

XNA Express - Microsoft to Enable User-Created Games on XBox360

Its already all over the news, Microsoft is releasing an express edition of its XNA toolkit targeted at the hobbyist game developers.
Here’s a collection of news posts about the topic:

Windows LiveWriter

I just downloaded and installed the new Windows Live Writer.

One important thing to note about Windows Live Writer (and Zoundry as well) is the support for RSD – Really Simple Discovery. This feature is supported in dasBlog’s latest source code but since I’m running the last official build I had to configure the settings myself.
Live Writer supports dasBlog so all I had to do in the configuration wizard was to specify that my blog is using dasBlog and the host url and that’s it.

InternetNews.com Interviews Dennis Moore about Duet

Dennis Moore, who is the general manager of emerging solutions at SAP, was interviews by internetnews.com about Duet.
Read the interview here: https://www.internetnews.com/ent-news/article.php/3623976

Switched to Nokia 6280

Jeff Nolan just posted that he switched to chocolate and on the same note I just switch my LG U8120 for brand new Nokia’s 6280.

The Pennsylvania Turnpike Commission to Combine the Power of SAP and Microsoft Office with Selection of Duet

The Pennsylvania Turnpike Commission has started rolling out a $36.5 million SAP AG software installation that will include the much-touted Duet technology, which enables interoperability between SAP’s ERP applications and Microsoft Corp.’s desktop products.

The Net of R&D

There’s an interesting discussion on John Battelle’s blog about the amount the different software companies spend on research and development.

[Code Snippet] SyncStringDictionary - A synchronized StringDictionary

Here’s a code snippet for a thread-safe (synchronized) StringDictionary class:

class SyncStringDictionary : StringDictionary
{
  /// <summary>
  /// Initializes a new instance of the SyncStringDictionary class.
  /// </summary>
  public SyncStringDictionary()
  {
  }

  /// <summary>
  /// Gets the number of key/value pairs in the SyncStringDictionary.
  /// </summary>
  /// <returns>The number of key/value pairs in the SyncStringDictionary.Retrieving the value of this property is an O(1) operation.</returns>
  public override int Count
  {
    get { lock (this.SyncRoot) { return base.Count; } }
  }

  /// <summary>
  /// Gets a value that indicates whether access to the SyncStringDictionary is synchronized (thread safe).
  /// </summary>
  /// <returns>true if access to the SyncStringDictionary is synchronized (thread safe); otherwise, false.</returns>
  public override bool IsSynchronized { get { return true; } }
  /// <summary>
  /// Gets a collection of keys in the SyncStringDictionary.
  /// </summary>
  /// <returns>An System.Collections.ICollection that provides the keys in the SyncStringDictionary.</returns>
  ///
  public override System.Collections.ICollection Keys
  {
    get
    {
      lock (this.SyncRoot)
      {
        return base.Keys;
      }
    }
  }

  /// <summary>
  /// Gets a collection of values in the SyncStringDictionary.
  /// </summary>
  /// <returns>An System.Collections.ICollection that provides the values in the SyncStringDictionary.</returns>
  public override System.Collections.ICollection Values { get { lock (this.SyncRoot) { return base.Values; } } }

  /// <summary>
  /// Gets or sets the value associated with the specified key.
  /// </summary>
  /// <param name=”key”>The key whose value to get or set.</param>
  /// <returns>The value associated with the specified key. If the specified key is not found, Get returns null, and Set creates a new entry with the specified key.</returns>
  /// <exception cref=”System.ArgumentNullException”><paramref name=”key”/> is null.</exception>
  public override string this[string key]
  {
    get { lock (this.SyncRoot) { return base[key]; } }
    set { lock (this.SyncRoot) { base[key] = value; } }
  }

  /// <summary>
  /// The value of the entry to add. The value can be null.
  /// </summary>
  /// <param name=”key”>The key of the entry to add.</param>
  /// <param name=”value”>The value of the entry to add. The value can be null.</param>
  /// <exception cref=”System.NotSupportedException”>The SyncStringDictionary is read-only.</exception>
  /// <exception cref=”System.ArgumentException”>An entry with the same key already exists in the SyncStringDictionary.</exception>
  /// <exception cref=”System.ArgumentNullException”><paramref name=”key”/> is null</exception>
  public override void Add(string key, string value)
  {
    lock (this.SyncRoot)
    {
     base.Add(key, value);
    }
  }

  /// <summary>
  /// Removes all entries from the SyncStringDictionary.
  /// </summary>
  /// <exception cref=”System.NotSupportedException”>The SyncStringDictionary is read-only.</exception>
  public override void Clear()
  {
    lock (this.SyncRoot)
    {
     base.Clear();
    }
  }

  /// <summary>
  /// Determines if the SyncStringDictionary contains a specific key.
  /// </summary>
  /// <param name=”key”>The key to locate in the SyncStringDictionary.</param>
  /// <returns>true if the SyncStringDictionary contains an entry with the specified key; otherwise, false.</returns>
  /// <exception cref=”System.ArgumentNullException”><paramref name=”key”/> is null.</exception>
  public override bool ContainsKey(string key)
  {
    lock (this.SyncRoot)
    {
      return base.ContainsKey(key);
    }
  }

  /// <summary>
  /// Determines if the SyncStringDictionary contains a specific value.
  /// </summary>
  /// <param name=”value”>The value to locate in the SyncStringDictionary. The value can be null.</param>
  /// <returns>true if the SyncStringDictionary contains an element with the specified value; otherwise, false.</returns>
  public override bool ContainsValue(string value)
  {
    lock (this.SyncRoot)
    {
     return base.ContainsValue(value);
    }
  }

  /// <summary>
  /// Copies the string dictionary values to a one-dimensional System.Array instance at the specified index.
  /// </summary>
  /// <param name=”array”>The one-dimensional System.Array that is the destination of the values copied from the SyncStringDictionary.</param>
  /// <param name=”index”>The index in the array where copying begins.</param>
  /// <exception cref=”System.ArgumentNullException”><paramref name=”array”/> is null.</exception>
  /// <exception cref=”System.ArgumentOutOfRangeException”><paramref name=”index”/> is less than the lower bound of array.</exception>
  /// <exception cref=”System.ArgumentException”>
  /// <paramref name=”array”/> is multidimensional.-or- The number of elements in the SyncStringDictionary
  /// is greater than the available space from <paramref name=”index”/> to the end of array.
  /// </exception>
  public override void CopyTo(Array array, int index)
  {
    lock (this.SyncRoot)
    {
      base.CopyTo(array, index);
    }
  }

  /// <summary>
  /// Returns an enumerator that iterates through the string dictionary.
  /// </summary>
  /// <returns>An System.Collections.IEnumerator that iterates through the string dictionary.</returns>
  public override System.Collections.IEnumerator GetEnumerator()
  {
    lock (this.SyncRoot)
    {
      return base.GetEnumerator();
    }
  }

  //
  // Summary:
  // Removes the entry with the specified key from the string dictionary.
  //
  // Parameters:
  // key:
  // The key of the entry to remove.
  //
  // Exceptions:
  // System.ArgumentNullException:
  // The key is null.
  //
  // System.NotSupportedException:
  // The SyncStringDictionary is read-only.
  /// <summary>
  /// Removes the entry with the specified key from the string dictionary.
  /// </summary>
  /// <param name=”key”>The key of the entry to remove.</param>
  /// <exception cref=”System.ArgumentNullException”><paramref name=”key”/> is null.</exception>
  /// <exception cref=”System.NotSupportedException”>The SyncStringDictionary is read-only.</exception>
  public override void Remove(string key)
  {
    lock (this.SyncRoot)
    {
      base.Remove(key);
    }
  }
}