Standing on the shoulders of giants. RSS 2.0
Page 1 of 2 in the Codesnippet category Next Page
# Tuesday, December 30, 2008

String.Join concatenates an array of strings together without checking for empty entries. This means the separator character is added twice, between non-empty items sometimes.

String[] input = {foo, null, bar};

var result = String.Join(",", input);

// result == "foo,,bar"

My alternative uses the IEnumerable.Aggregate extension method, it checks for there empty entries and when it finds one doesn't add a redundant separator.

 string[] input = { "foo", null, "bar" };
 string result = input.Aggregate((x, y) => String.IsNullOrEmpty(y) ? x : string.Concat(x, ",", y));

// result == "foo,bar"
Tuesday, December 30, 2008 2:40:12 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [1] - Trackback
Codesnippet
# Sunday, March 04, 2007

Although generally a bad idea [0], there is another problem. The System.Web.Caching.Cache doesn't call dispose on the items removed from the cache, causing a resource leak. To prevent this resource leak, add a CacheItemRemovedCallback in which you dispose of the object.

 

// add the item to the cache, note the callback

HttpRuntime.Cache.Add("myKey", myClass, null, DateTime.Now.AddSeconds(5), 
     Cache.NoSlidingExpiration, CacheItemPriority.Default, 
     new CacheItemRemovedCallback( OnRemoved ) );

// callback function

void OnRemoved( string key, object value, CacheItemRemovedReason reason ) {

     IDisposable disposable = value as IDisposable;
     if (disposable != null) {
          disposable.Dispose();
     }
}

 

[0] Should you really be caching an object containing unmanaged resources, which usually are scarce?

Sunday, March 04, 2007 5:58:57 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] - Trackback
Codesnippet | C#
# Friday, January 05, 2007

public class A {
    public virtual void AA(){}
}

public abstract class B : A{
    public abstract override void AA();
}


If you now would define a class C : B, then C must implement the method AA again.
Friday, January 05, 2007 11:23:52 AM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] - Trackback
Codesnippet | C#
# Wednesday, September 20, 2006

The best new feature in iTunes 7 is the cover art browser, the not so good feature is the fact that it doesn't work so good on Windows Vista. So after moving back to Mediaplayer and missing the cover art, which takes forever to download for a decent sized library in iTunes. I put together this codesnippet, which lets downloads the cover art from the iTunes store for the specified artist/album.

The interesting part is the headers you have to send with your request:

request.Headers.Add("X-Apple-Tz", "7200");
request.Headers.Add("X-Apple-Store-Front", "143457");
request.Headers.Add("Accept-Language", "en-us, en;q=0.50");
request.Headers.Add("Accept-Encoding", "gzip, x-aes-cbc");
request.UserAgent = "iTunes/7.0 (Macintosh; U; PPC Mac OS X 10.4.7)";
request.AutomaticDecompression = DecompressionMethods.GZip;

Also note that the HttpWebRequest class automatically decompresses the response.

Program.cs (3.44 KB)Program.txt (3.44 KB)

Note: this code is based on the perl library by Jesper Nøhr and works as long as Apple doesn't change anything.


Wednesday, September 20, 2006 3:38:22 PM (W. Europe Daylight Time, UTC+02:00)  #    Comments [2] - Trackback
Codesnippet | Fun
# Thursday, January 12, 2006

Well, maybe...

 

public class GenericComparer : IComparer {

public GenericComparer( CompareDelegate doCompare ){

if( doCompare == null ){

throw new ArgumentNullException("doCompare");

}

this.doCompare = doCompare;

}

public int Compare( object x, object y ){

if( x == null ){

if( y == null ){

return 0;

}

return -1;

}

if( y == null ){

return 1;

}

return doCompare(x,y);

}

private CompareDelegate doCompare;

}

public delegate int CompareDelegate( object x, object y );

Update:
My colleague Branimir did a little experimentation and found this implementation is similar in performance to a 'regular' methodcall when sorting around 10.000 items.

LastComparer.zip (30.65 KB)
Thursday, January 12, 2006 1:42:19 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] - Trackback
Codesnippet | Development
# Thursday, December 08, 2005

Code to create a random validationKey and decryption for use in the machinekey element of the web.config.

Note: valid values for the decryptionKey length are 8 (for DES) or 24 (for 3DES), the resulting key is twice as long and for validationkey 20 to 64.

using System;

using System.Text;

using System.Security.Cryptography;

namespace Crypto {

public class KeyCreator {

public static void Main(String[] args) {

String[] commandLineArgs = System.Environment.GetCommandLineArgs();

string decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs[1]));

string validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs[2]));

Console.WriteLine("<machineKey validationKey=\"{0}\" decryptionKey=\"{1}\" validation=\"SHA1\"/>", validationKey, decryptionKey);

}

static String CreateKey(int numBytes) {

RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();

byte[] buff = new byte[numBytes];

rng.GetBytes(buff);

return BytesToHexString(buff);

}

static String BytesToHexString(byte[] bytes) {

StringBuilder hexString = new StringBuilder(64);

for (int counter = 0; counter < bytes.Length; counter++) {

hexString.Append(String.Format("{0:X2}", bytes[counter]));

}

return hexString.ToString();

}

}

}

source: mskb312906

Thursday, December 08, 2005 3:33:01 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] - Trackback
Codesnippet
# Wednesday, December 07, 2005

<?xml version="1.0" encoding="utf-8" ?>

<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">

<CodeSnippet Format="1.0.0">

<Header>

<Title>sourcesafe header</Title>

<Shortcut>header</Shortcut>

<Description>Code snippet for sourcesafe header.</Description>

<Author>Paul van Brenk</Author>

<SnippetTypes>

<SnippetType>Expansion</SnippetType>

</SnippetTypes>

</Header>

<Snippet>

<Declarations>

<Literal />

</Declarations>

<Code Language="csharp" Kind="file" Delimiter="*">

<![CDATA[#region SourceSafe header

// $Author: $

// $Modtime: $

// $Workfile: $

// $Revision: 1 $

#endregion

*end*]]>

</Code>

</Snippet>

</CodeSnippet>

</CodeSnippets>

File Attachment: sourcesafe_header.zip (550 bytes)

Wednesday, December 07, 2005 2:27:25 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] - Trackback
Codesnippet | Visual Studio 2005
# Sunday, November 27, 2005

Update: Still haven't found what is causing the exception, but I think the message of the exception is incorrect. For now I'm sticking with the Knuth Shuffle algorithm from the PowerCollections. As suggested by Cyrus.

int[] ints = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };

System.Random rand = new System.Random((int)DateTime.Now.Ticks);

Array.Sort(ints, delegate(int x, int y){

// since you’re not allowed to return anything else than 0 for x.CompareTo(x)

if (x == y) {

return 0;

}

return rand.Next(-1,2);

}

);

note: This still throws an exception sometimes, claiming x.CompareTo(x) didn't return 0. I haven't found out why this happens or a pattern when this is happening, but I'll keep looking.

Sunday, November 27, 2005 1:10:40 PM (W. Europe Standard Time, UTC+01:00)  #    Comments [0] - Trackback
Codesnippet
# Thursday, October 13, 2005

public static string GeneratePassword(int length) {

string allowedChars = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789!@$?";

Random rnd = new Random( (int)DateTime.Now.Ticks );
            
char[] chars = new char[length];


for(int i = 0;i<length;i++) {
chars[i] = allowedChars[ rnd.Next( allowedChars.Length ) ];
}

return new string(chars);
}

When running in a tight loop, you're better of pulling the initialisation of the randomGenerator outside the method, or not use DateTime.Now.TickCount as the seed.

Thursday, October 13, 2005 3:12:54 PM (W. Europe Daylight Time, UTC+02:00)  #    Comments [0] - Trackback
Codesnippet
# Tuesday, August 23, 2005

The easiest way on sql server 2000 is to change the collation on the column you want to do the search on:

ALTER TABLE dbo.Customers ALTER COLUMN CustID char(8) COLLATE SQL_Latin1_General_CP1_CS_AS NOT NULL

Tuesday, August 23, 2005 6:32:39 PM (W. Europe Daylight Time, UTC+02:00)  #    Comments [1] - Trackback
Codesnippet | SQL
Ads
About
© Copyright 2010
Paul van Brenk
Sign In
newtelligence dasBlog 2.3.9074.18820
All Content © 2010, Paul van Brenk
DasBlog theme 'Business' created by Christoph De Baene (delarou)