<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>CUL Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/CUL/Wiki/View.aspx?title=Home</link><description>CUL Wiki Rss Description</description><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=30</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 4.0 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com"&gt;http://www.gutgames.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Follow progress of the Next Version&lt;/b&gt;&lt;br /&gt;For the next version of CUL, I want you to be able to see what I&amp;#39;m working on and be able to give feedback. In order to help with this, I&amp;#39;ve set up a board on Trello that will allow you to see the items that I&amp;#39;m currently working on, what&amp;#39;s done, and what is still in the planning stages. It should be public and you should have the ability to comment on every card and vote for items (more popular an item is, the more likely I am to push it forward faster). The board itself can be found here: &lt;a href="https://trello.com/b/CLOTGldq"&gt;https://trello.com/b/CLOTGldq&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download&lt;/b&gt;&lt;br /&gt;The easiest way to get CUL is to simply use NuGet:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=cul&amp;amp;DownloadId=479480" /&gt;&lt;br /&gt;&lt;br /&gt;There are also individual DLLs for each namespace available through NuGet. Whenever a new update is added to the library, a nightly build uploads a new version to NuGet. As such you&amp;#39;re getting the latest version as soon as possible (or just download version 3.3.0002 [issue with auto numbering adds the 0002 even though it&amp;#39;s actually straight 3.3]). Or if you can&amp;#39;t use NuGet or simply aren&amp;#39;t a fan, you can still download it here.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository here is Mercurial. Also note that there are repository mirrors available on Bitbucket and Github: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src"&gt;Bitbucket&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library"&gt;GitHub&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Version 3.3&lt;/b&gt;&lt;br /&gt;Version 3.3 contains a number of changes. In fact if you pull it into an existing project, you may be wondering where everything went. For instance:
&lt;ul&gt;&lt;li&gt;The Exchange code has been removed (If you&amp;#39;re using the Appointment class, you should use the new AppointmentSender in the Web.Email.SMTP namespace or VCalendar class in the FileFormats namespace).&lt;/li&gt;
&lt;li&gt;The Bing, Craigslist, Ebay, Hulu, Netflix, OAuth, OpenID, OpenSearch, and Twitter classes have been removed for different reasons (Mostly because I haven&amp;#39;t used them in over a year, they weren&amp;#39;t as great as some of the other libraries out there, and some of the formats have changed &lt;a href="http://cul.codeplex.com/wikipage?title=OAuth&amp;referringTitle=Home"&gt;OAuth&lt;/a&gt; and I haven&amp;#39;t kept up with it).&lt;/li&gt;
&lt;li&gt;Events namespace has been removed and merged into DataTypes (Utilities.DataTypes.EventArgs and Utilities.DataTypes.ExtensionMethods). The Raise functions should now be easier to call as they are simply extension methods now.&lt;/li&gt;
&lt;li&gt;Error namespace has been removed. Items from this namespace were moved to other locations (Web received anything based on HttpContext, Request, etc. Reflection received anything based on Assemblies. Environment received anything based on Processes.)&lt;/li&gt;
&lt;li&gt;CodeGen namespace has been removed. Items from this namespace have been made more generic and added to the DataTypes namespace in various forms (StringTemplate and FormatString extensions).&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;On top of that many extension methods and classes have been modified or combined in some way. The big items are Validation, Serialization, and SQLHelper. That said, there are a number of other changes:
&lt;ul&gt;&lt;li&gt;Switched ThrowIfTrue and ThrowIfFalse to ThrowIf and ThrowIfNot to be in line, from a naming standpoint, with the other extension methods. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Improved VCalendar code to hold more info.&lt;/li&gt;
&lt;li&gt;Switched ORM&amp;#39;s Setup function to actually save the generated classes from the AOP (will change the code a bit more so this can be saved as a DLL).&lt;/li&gt;
&lt;li&gt;Made AOPManager get rid of its handle on the assembly builder once it&amp;#39;s saved (to allow the data to be garbage collected)&lt;/li&gt;
&lt;li&gt;Made EmailSender IDisposable so that the attachments and embedded resources can be disposed of properly.&lt;/li&gt;
&lt;li&gt;Realized that the profiler is a bit too slow at present and working towards speeding it up.&lt;/li&gt;
&lt;li&gt;Trying to speed up SQLHelper a bit more (now faster than BLToolkit, slower than PetaPoco though...)&lt;/li&gt;
&lt;li&gt;Fixed IO extensions that took ~ to identify the app&amp;#39;s location.&lt;/li&gt;
&lt;li&gt;Finished updates to SQLHelper such that batching and MicroORM items are now a part of it.&lt;/li&gt;
&lt;li&gt;Changed DbCommand&amp;#39;s BeginTransaction to actually store the transaction in the command...&lt;/li&gt;
&lt;li&gt;Added ParameterBase class&lt;/li&gt;
&lt;li&gt;Created StringParameter and Parameter classes.&lt;/li&gt;
&lt;li&gt;Switched DbDataReader extensions to IDataReader.&lt;/li&gt;
&lt;li&gt;Modified Database code. It now holds a bit more info and can pull connection string info from the config file.&lt;/li&gt;
&lt;li&gt;Updated Database class to hold more information (DbType and Profile) and changed it to be a bit more thread safe (mappings has been changed to ConcurrentDictionary).&lt;/li&gt;
&lt;li&gt;Updated SQLHelper a bit more. It now stores database information so connection strings only need to be entered once, Profile info has been moved to the Database object, moved the database type info to the Database object, etc.&lt;/li&gt;
&lt;li&gt;Modified AddParameter extension method for DbCommand so that it no longer requires a length (it now uses the length of the value passed in for input parameters and nvarchar(max) for output parameters).&lt;/li&gt;
&lt;li&gt;Made DbCommandExtensions a bit more fluent in nature.&lt;/li&gt;
&lt;li&gt;Added a check to DirectoryInfo.SetAttributes for a null directory.&lt;/li&gt;
&lt;li&gt;Save extension method now takes a FileMode enum to specify how to handle creating/opening the file. (Utilities.IO.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;All serialization functions have been condensed down to 4 functions (Serialize,Deserialize,SerializeBinary,DeserializeBinary). These functions now allow you to specify the serializer to use on the fly (so if you want to user JSON.Net, etc., you just need to create the serializer object and feed it into the function). I&amp;#39;m not 100% happy with this and may change in the future. (Utilities.IO.ExtensionMethods)
&lt;ul&gt;&lt;li&gt;To go with this, serializers were created for binary, JSON, SOAP, and XML (more will be created as I go along and I plan to create a library to add external DLLs/libraries also).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Fixed Median extension in Utilities.Math.ExtensionMethods&lt;/li&gt;
&lt;li&gt;Modified IObject in the ORM so that it started using new validation namespace.&lt;/li&gt;
&lt;li&gt;Modified ObjectBaseClass in the ORM so that it uses the new validation extension methods.&lt;/li&gt;
&lt;li&gt;Started updating validation section to use DataAnnotations.&lt;/li&gt;
&lt;li&gt;Moved a couple extension methods (Clamp, Min, and Max) from Math to DataTypes. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Switched Median to IEnumerable from List (Utilities.Math.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Moved ASCIIArt, BumpMap, MotionDetection, NormalMap, and OilPainting to extension methods. (Utilities.Media.Image.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Modified cache to use ConcurrentDictionary (should be faster).&lt;/li&gt;
&lt;li&gt;Modified Profiler class a bit so that it can track where the item was called from (Class/Method)&lt;/li&gt;
&lt;li&gt;Added a profiling option to MicroORM and SQLHelper (off by default)&lt;/li&gt;
&lt;li&gt;Simplified profiler a bit. It no longer uses ProfilerManager and is instead all in Profiler class.&lt;/li&gt;
&lt;li&gt;Profiler now allows sub items for timing purposes.&lt;/li&gt;
&lt;li&gt;Due to people actually asking to help or make changes, I&amp;#39;ve switched to xUnit.Net for unit testing to make things easier (still getting odd file issues at the moment) and I&amp;#39;ve switched to using Mighty Moose/AutoTest.Net to help speed up the testing (usually takes 3 minutes each time I run all the tests).&lt;/li&gt;
&lt;li&gt;Modified Array extension Combine to allow multiple arrays to specified.&lt;/li&gt;
&lt;li&gt;Chain, Do, and Return were all very similar. As such they were combined. Chain is temporarily the function name. It now has a default return value (which is returned if the object or the function are null or the returned value from the function is null) and default object value (which replaces the object prior to running the function if the object is null).&lt;/li&gt;
&lt;li&gt;If and NotIf extension was incorrectly returning the default value if the object was null. It now automatically returns null if the predicate is null.&lt;/li&gt;
&lt;li&gt;AddRange has been renamed Add and an Extension for Add that takes any number of items as params was added (parameters were reordered for this purpose).&lt;/li&gt;
&lt;li&gt;AddIf and AddIfUnique was modified to take any number of items as params (parameters were reordered for this purpose).&lt;/li&gt;
&lt;li&gt;RemoveRange was renamed to Remove.&lt;/li&gt;
&lt;li&gt;IDictionary&amp;#39;s Sort extension has been added that now has the ability to specify how to sort (the default Sort is still available).&lt;/li&gt;
&lt;li&gt;A number of IEnumerable extensions were simplified.&lt;/li&gt;
&lt;li&gt;Modified FormatString extension. You can now specify a string formatter to be used.&lt;/li&gt;
&lt;li&gt;IsNullOrDBNull has been merged into IsNull (IsNull now checks for DBNull).&lt;/li&gt;
&lt;li&gt;NullCheck now uses IsNull (and thus will check for null or DBNull).&lt;/li&gt;
&lt;li&gt;ThrowIfNullOrDBNull has been removed (use ThrowIfNull instead).&lt;/li&gt;
&lt;li&gt;Fixed issue with ManyToOne mappings in the ORM if they are of the same type. Before it was saving to the join table multiple entries for each item without having a decisive parent/child relationship.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;So if you&amp;#39;re upgrading a project, it may take some time. However if you are starting a new project, the changes should make things a lot easier going forward. There have also been a large number of additions:
&lt;ul&gt;&lt;li&gt;Added IsAnagram extension method. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Exp, Log, and Log10 extension methods. (Utilities.Math.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added a number of predicate extension methods that treat them as sets (AddToSet, CartesianProduct, Difference, Intersect, RelativeComplement, RemoveFromSet, and Union). (Utilities.Math.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added a couple geometry classes (Circle, Rectangle, and Point).&lt;/li&gt;
&lt;li&gt;Added version of NullCheck that takes a Func instead of the object (for instances where it may take a while to create the object and/or it may be less likely that the object is null). (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added some ThrowIfNot* type extension methods. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Created a basic SQLCommand class for building SQL commands on the fly (will expand on this in the future).&lt;/li&gt;
&lt;li&gt;Added AppointmentSender class to Utilities.Web.SMTP that contains a VCalendar object and can send it using SMTP appropriately.&lt;/li&gt;
&lt;li&gt;Added per query caching to SQLHelper&lt;/li&gt;
&lt;li&gt;Added PositionOf extension for IEnumerable (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Enums to ToDbType extension (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added GetOrCreateParameter to DbCommand (Utilities.SQL.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added SetValue to IDictionary extensions.&lt;/li&gt;
&lt;li&gt;Added extension methods that will take a string as the file location and will save/read the corresponding file (instead of using FileInfo). This function also takes into account &amp;#39;~&amp;#39; and maps that to the path for the application/website. So you can do &amp;quot;~/Data/File.txt&amp;quot;.Save(&amp;quot;Content&amp;quot;); now. (Utilities.IO.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added GetValue function for IDictionary types. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added the ability to recursively find all group members in LDAP code and added FindGroup code (based off of cn field).&lt;/li&gt;
&lt;li&gt;Finished adding profiling to ORM and simplified creation a bit (will be going further with this to make things as simple as possible).&lt;/li&gt;
&lt;li&gt;Finished IsCreditCard extension method for strings (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Modified/Added new validation attributes: Cascade, Contains, DoesNotContain, Empty, MaxLength, MinLength, NotEmpty, NotInRange, Compare (which takes the place of Equal, GreaterThan, etc), CompareTo, Is (which is similar to DataType, but can check for valid decimals, integers, credit cards, and domains), and Between.&lt;/li&gt;
&lt;li&gt;Finished adding comments to code.&lt;/li&gt;
&lt;li&gt;Added ToExpando (converts an object to an ExpandoObject) and version of TryTo that works with ExpandoObjects. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added extension methods for caching data (allows for caching to multiple ASP.Net locations as well as the cache internal to CUL. Useful if your code may be run from a web app or windows app.) (Utilities.Caching.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added methods for StackTrace and StackFrame for getting method information a bit easier. (Utilities.Environment.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Fraction class to Utilities.Math namespace.&lt;/li&gt;
&lt;li&gt;Added Salt extension that can be used to salt a string/byte array. (Utilities.Encryption.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Timing related extensions (allows easy timing of Funcs/Actions) (Utilities.Profiler.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added AppendLineFormat extension for StringBuilder (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added 2 FormatString extensions that can be used to treat a string as a template (one uses an object and replaces the name of the property in the string with the value of the property. The other takes a series of key/value pairs and replaces the values in the string accordingly) (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added IsNotNullOrEmpty extension. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added various static char predicates, such as IsWhiteSpace (char.IsWhiteSpace) (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added ToString extension for Exceptions. It exports exception text, type, data, stack trace, source, target site, and any/all inner exceptions. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added StringTemplate class that treats a string as a template (think mail merges, etc) and allows the addition/removal/changing of data between uses. (Utilities.DataTypes)&lt;/li&gt;
&lt;li&gt;Added TagDictionary class. This class acts as a dictionary but associates multiple keys with a single object (Think blog post as the object and cloud tags as the key) (Utilities.DataTypes)&lt;/li&gt;
&lt;li&gt;Added TaskQueue class. This class is designed to help in producer/consumer situations where actions need to be done in parallel but will arrive in sporadic intervals. (Utilities.DataTypes.Threading)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;That concludes the changes in this release. Going forward I will be looking towards MVC specific code, speed increases to existing code, etc.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Wed, 30 Jan 2013 20:21:41 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130130082141P</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=29</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 4.0 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com"&gt;http://www.gutgames.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;See Into The Future And Let Your Voice Be Heard&lt;/b&gt;&lt;br /&gt;For the next version of CUL, I&amp;#39;m working towards a portable library version of as much code that I can pull over as I can. On top of that, I want you to be able to see what I&amp;#39;m working on and be able to give feedback. In order to help with this, I&amp;#39;ve set up a board on Trello that will allow you to see the items that I&amp;#39;m currently working on, what&amp;#39;s done, and what is still in the planning stages. It should be public and you should have the ability to comment on every card and vote for items (more popular an item is, the more likely I am to push it forward faster). The board itself can be found here: &lt;a href="https://trello.com/b/P80lDDnb"&gt;https://trello.com/b/P80lDDnb&lt;/a&gt;. I&amp;#39;m starting with the Lite version but if this works out, I will expand this board to be both Lite and Full versions.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download&lt;/b&gt;&lt;br /&gt;The easiest way to get CUL is to simply use NuGet:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=cul&amp;amp;DownloadId=479480" /&gt;&lt;br /&gt;&lt;br /&gt;There are also individual DLLs for each namespace available through NuGet. Whenever a new update is added to the library, a nightly build uploads a new version to NuGet. As such you&amp;#39;re getting the latest version as soon as possible (or just download version 3.3.0002 [issue with auto numbering adds the 0002 even though it&amp;#39;s actually straight 3.3]). Or if you can&amp;#39;t use NuGet or simply aren&amp;#39;t a fan, you can still download it here.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository here is Mercurial. Also note that there are repository mirrors available on Bitbucket and Github: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src"&gt;Bitbucket&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library"&gt;GitHub&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Version 3.3&lt;/b&gt;&lt;br /&gt;Version 3.3 contains a number of changes. In fact if you pull it into an existing project, you may be wondering where everything went. For instance:
&lt;ul&gt;&lt;li&gt;The Exchange code has been removed (If you&amp;#39;re using the Appointment class, you should use the new AppointmentSender in the Web.Email.SMTP namespace or VCalendar class in the FileFormats namespace).&lt;/li&gt;
&lt;li&gt;The Bing, Craigslist, Ebay, Hulu, Netflix, OAuth, OpenID, OpenSearch, and Twitter classes have been removed for different reasons (Mostly because I haven&amp;#39;t used them in over a year, they weren&amp;#39;t as great as some of the other libraries out there, and some of the formats have changed &lt;a href="http://cul.codeplex.com/wikipage?title=OAuth&amp;referringTitle=Home"&gt;OAuth&lt;/a&gt; and I haven&amp;#39;t kept up with it).&lt;/li&gt;
&lt;li&gt;Events namespace has been removed and merged into DataTypes (Utilities.DataTypes.EventArgs and Utilities.DataTypes.ExtensionMethods). The Raise functions should now be easier to call as they are simply extension methods now.&lt;/li&gt;
&lt;li&gt;Error namespace has been removed. Items from this namespace were moved to other locations (Web received anything based on HttpContext, Request, etc. Reflection received anything based on Assemblies. Environment received anything based on Processes.)&lt;/li&gt;
&lt;li&gt;CodeGen namespace has been removed. Items from this namespace have been made more generic and added to the DataTypes namespace in various forms (StringTemplate and FormatString extensions).&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;On top of that many extension methods and classes have been modified or combined in some way. The big items are Validation, Serialization, and SQLHelper. That said, there are a number of other changes:
&lt;ul&gt;&lt;li&gt;Switched ThrowIfTrue and ThrowIfFalse to ThrowIf and ThrowIfNot to be in line, from a naming standpoint, with the other extension methods. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Improved VCalendar code to hold more info.&lt;/li&gt;
&lt;li&gt;Switched ORM&amp;#39;s Setup function to actually save the generated classes from the AOP (will change the code a bit more so this can be saved as a DLL).&lt;/li&gt;
&lt;li&gt;Made AOPManager get rid of its handle on the assembly builder once it&amp;#39;s saved (to allow the data to be garbage collected)&lt;/li&gt;
&lt;li&gt;Made EmailSender IDisposable so that the attachments and embedded resources can be disposed of properly.&lt;/li&gt;
&lt;li&gt;Realized that the profiler is a bit too slow at present and working towards speeding it up.&lt;/li&gt;
&lt;li&gt;Trying to speed up SQLHelper a bit more (now faster than BLToolkit, slower than PetaPoco though...)&lt;/li&gt;
&lt;li&gt;Fixed IO extensions that took ~ to identify the app&amp;#39;s location.&lt;/li&gt;
&lt;li&gt;Finished updates to SQLHelper such that batching and MicroORM items are now a part of it.&lt;/li&gt;
&lt;li&gt;Changed DbCommand&amp;#39;s BeginTransaction to actually store the transaction in the command...&lt;/li&gt;
&lt;li&gt;Added ParameterBase class&lt;/li&gt;
&lt;li&gt;Created StringParameter and Parameter classes.&lt;/li&gt;
&lt;li&gt;Switched DbDataReader extensions to IDataReader.&lt;/li&gt;
&lt;li&gt;Modified Database code. It now holds a bit more info and can pull connection string info from the config file.&lt;/li&gt;
&lt;li&gt;Updated Database class to hold more information (DbType and Profile) and changed it to be a bit more thread safe (mappings has been changed to ConcurrentDictionary).&lt;/li&gt;
&lt;li&gt;Updated SQLHelper a bit more. It now stores database information so connection strings only need to be entered once, Profile info has been moved to the Database object, moved the database type info to the Database object, etc.&lt;/li&gt;
&lt;li&gt;Modified AddParameter extension method for DbCommand so that it no longer requires a length (it now uses the length of the value passed in for input parameters and nvarchar(max) for output parameters).&lt;/li&gt;
&lt;li&gt;Made DbCommandExtensions a bit more fluent in nature.&lt;/li&gt;
&lt;li&gt;Added a check to DirectoryInfo.SetAttributes for a null directory.&lt;/li&gt;
&lt;li&gt;Save extension method now takes a FileMode enum to specify how to handle creating/opening the file. (Utilities.IO.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;All serialization functions have been condensed down to 4 functions (Serialize,Deserialize,SerializeBinary,DeserializeBinary). These functions now allow you to specify the serializer to use on the fly (so if you want to user JSON.Net, etc., you just need to create the serializer object and feed it into the function). I&amp;#39;m not 100% happy with this and may change in the future. (Utilities.IO.ExtensionMethods)
&lt;ul&gt;&lt;li&gt;To go with this, serializers were created for binary, JSON, SOAP, and XML (more will be created as I go along and I plan to create a library to add external DLLs/libraries also).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Fixed Median extension in Utilities.Math.ExtensionMethods&lt;/li&gt;
&lt;li&gt;Modified IObject in the ORM so that it started using new validation namespace.&lt;/li&gt;
&lt;li&gt;Modified ObjectBaseClass in the ORM so that it uses the new validation extension methods.&lt;/li&gt;
&lt;li&gt;Started updating validation section to use DataAnnotations.&lt;/li&gt;
&lt;li&gt;Moved a couple extension methods (Clamp, Min, and Max) from Math to DataTypes. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Switched Median to IEnumerable from List (Utilities.Math.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Moved ASCIIArt, BumpMap, MotionDetection, NormalMap, and OilPainting to extension methods. (Utilities.Media.Image.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Modified cache to use ConcurrentDictionary (should be faster).&lt;/li&gt;
&lt;li&gt;Modified Profiler class a bit so that it can track where the item was called from (Class/Method)&lt;/li&gt;
&lt;li&gt;Added a profiling option to MicroORM and SQLHelper (off by default)&lt;/li&gt;
&lt;li&gt;Simplified profiler a bit. It no longer uses ProfilerManager and is instead all in Profiler class.&lt;/li&gt;
&lt;li&gt;Profiler now allows sub items for timing purposes.&lt;/li&gt;
&lt;li&gt;Due to people actually asking to help or make changes, I&amp;#39;ve switched to xUnit.Net for unit testing to make things easier (still getting odd file issues at the moment) and I&amp;#39;ve switched to using Mighty Moose/AutoTest.Net to help speed up the testing (usually takes 3 minutes each time I run all the tests).&lt;/li&gt;
&lt;li&gt;Modified Array extension Combine to allow multiple arrays to specified.&lt;/li&gt;
&lt;li&gt;Chain, Do, and Return were all very similar. As such they were combined. Chain is temporarily the function name. It now has a default return value (which is returned if the object or the function are null or the returned value from the function is null) and default object value (which replaces the object prior to running the function if the object is null).&lt;/li&gt;
&lt;li&gt;If and NotIf extension was incorrectly returning the default value if the object was null. It now automatically returns null if the predicate is null.&lt;/li&gt;
&lt;li&gt;AddRange has been renamed Add and an Extension for Add that takes any number of items as params was added (parameters were reordered for this purpose).&lt;/li&gt;
&lt;li&gt;AddIf and AddIfUnique was modified to take any number of items as params (parameters were reordered for this purpose).&lt;/li&gt;
&lt;li&gt;RemoveRange was renamed to Remove.&lt;/li&gt;
&lt;li&gt;IDictionary&amp;#39;s Sort extension has been added that now has the ability to specify how to sort (the default Sort is still available).&lt;/li&gt;
&lt;li&gt;A number of IEnumerable extensions were simplified.&lt;/li&gt;
&lt;li&gt;Modified FormatString extension. You can now specify a string formatter to be used.&lt;/li&gt;
&lt;li&gt;IsNullOrDBNull has been merged into IsNull (IsNull now checks for DBNull).&lt;/li&gt;
&lt;li&gt;NullCheck now uses IsNull (and thus will check for null or DBNull).&lt;/li&gt;
&lt;li&gt;ThrowIfNullOrDBNull has been removed (use ThrowIfNull instead).&lt;/li&gt;
&lt;li&gt;Fixed issue with ManyToOne mappings in the ORM if they are of the same type. Before it was saving to the join table multiple entries for each item without having a decisive parent/child relationship.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;So if you&amp;#39;re upgrading a project, it may take some time. However if you are starting a new project, the changes should make things a lot easier going forward. There have also been a large number of additions:
&lt;ul&gt;&lt;li&gt;Added IsAnagram extension method. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Exp, Log, and Log10 extension methods. (Utilities.Math.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added a number of predicate extension methods that treat them as sets (AddToSet, CartesianProduct, Difference, Intersect, RelativeComplement, RemoveFromSet, and Union). (Utilities.Math.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added a couple geometry classes (Circle, Rectangle, and Point).&lt;/li&gt;
&lt;li&gt;Added version of NullCheck that takes a Func instead of the object (for instances where it may take a while to create the object and/or it may be less likely that the object is null). (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added some ThrowIfNot* type extension methods. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Created a basic SQLCommand class for building SQL commands on the fly (will expand on this in the future).&lt;/li&gt;
&lt;li&gt;Added AppointmentSender class to Utilities.Web.SMTP that contains a VCalendar object and can send it using SMTP appropriately.&lt;/li&gt;
&lt;li&gt;Added per query caching to SQLHelper&lt;/li&gt;
&lt;li&gt;Added PositionOf extension for IEnumerable (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Enums to ToDbType extension (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added GetOrCreateParameter to DbCommand (Utilities.SQL.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added SetValue to IDictionary extensions.&lt;/li&gt;
&lt;li&gt;Added extension methods that will take a string as the file location and will save/read the corresponding file (instead of using FileInfo). This function also takes into account &amp;#39;~&amp;#39; and maps that to the path for the application/website. So you can do &amp;quot;~/Data/File.txt&amp;quot;.Save(&amp;quot;Content&amp;quot;); now. (Utilities.IO.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added GetValue function for IDictionary types. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added the ability to recursively find all group members in LDAP code and added FindGroup code (based off of cn field).&lt;/li&gt;
&lt;li&gt;Finished adding profiling to ORM and simplified creation a bit (will be going further with this to make things as simple as possible).&lt;/li&gt;
&lt;li&gt;Finished IsCreditCard extension method for strings (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Modified/Added new validation attributes: Cascade, Contains, DoesNotContain, Empty, MaxLength, MinLength, NotEmpty, NotInRange, Compare (which takes the place of Equal, GreaterThan, etc), CompareTo, Is (which is similar to DataType, but can check for valid decimals, integers, credit cards, and domains), and Between.&lt;/li&gt;
&lt;li&gt;Finished adding comments to code.&lt;/li&gt;
&lt;li&gt;Added ToExpando (converts an object to an ExpandoObject) and version of TryTo that works with ExpandoObjects. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added extension methods for caching data (allows for caching to multiple ASP.Net locations as well as the cache internal to CUL. Useful if your code may be run from a web app or windows app.) (Utilities.Caching.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added methods for StackTrace and StackFrame for getting method information a bit easier. (Utilities.Environment.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Fraction class to Utilities.Math namespace.&lt;/li&gt;
&lt;li&gt;Added Salt extension that can be used to salt a string/byte array. (Utilities.Encryption.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Timing related extensions (allows easy timing of Funcs/Actions) (Utilities.Profiler.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added AppendLineFormat extension for StringBuilder (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added 2 FormatString extensions that can be used to treat a string as a template (one uses an object and replaces the name of the property in the string with the value of the property. The other takes a series of key/value pairs and replaces the values in the string accordingly) (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added IsNotNullOrEmpty extension. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added various static char predicates, such as IsWhiteSpace (char.IsWhiteSpace) (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added ToString extension for Exceptions. It exports exception text, type, data, stack trace, source, target site, and any/all inner exceptions. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added StringTemplate class that treats a string as a template (think mail merges, etc) and allows the addition/removal/changing of data between uses. (Utilities.DataTypes)&lt;/li&gt;
&lt;li&gt;Added TagDictionary class. This class acts as a dictionary but associates multiple keys with a single object (Think blog post as the object and cloud tags as the key) (Utilities.DataTypes)&lt;/li&gt;
&lt;li&gt;Added TaskQueue class. This class is designed to help in producer/consumer situations where actions need to be done in parallel but will arrive in sporadic intervals. (Utilities.DataTypes.Threading)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;That concludes the changes in this release. Going forward I will be looking towards MVC specific code, speed increases to existing code, etc.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Fri, 18 Jan 2013 19:58:00 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130118075800P</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=28</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 4.0 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com"&gt;http://www.gutgames.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a list of features, take a look at the &lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; page. For version 3.0 on up, I&amp;#39;ve been bored and started looking at Ruby and Python for ideas (I&amp;#39;ve used Python for scripting in the past and Ruby in a couple of just hacked together fun projects). Basically I took a bunch of their built in functions and classes and built a number of C# equivalents. I plan on doing this with other languages in the future, so if you have any suggestions of languages or standard libraries to look at, let me know.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download&lt;/b&gt;&lt;br /&gt;The easiest way to get CUL is to simply use NuGet:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=cul&amp;amp;DownloadId=479480" /&gt;&lt;br /&gt;&lt;br /&gt;There are also individual DLLs for each namespace available through NuGet. Whenever a new update is added to the library, a nightly build uploads a new version to NuGet. As such you&amp;#39;re getting the latest version as soon as possible (or just download version 3.3.0002 [issue with auto numbering adds the 0002 even though it&amp;#39;s actually straight 3.3]). Or if you can&amp;#39;t use NuGet or simply aren&amp;#39;t a fan, you can still download it here.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository here is Mercurial. Also note that there are repository mirrors available on Bitbucket and Github: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src"&gt;Bitbucket&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library"&gt;GitHub&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Version 3.3&lt;/b&gt;&lt;br /&gt;Version 3.3 contains a number of changes. In fact if you pull it into an existing project, you may be wondering where everything went. For instance:
&lt;ul&gt;&lt;li&gt;The Exchange code has been removed (If you&amp;#39;re using the Appointment class, you should use the new AppointmentSender in the Web.Email.SMTP namespace or VCalendar class in the FileFormats namespace).&lt;/li&gt;
&lt;li&gt;The Bing, Craigslist, Ebay, Hulu, Netflix, OAuth, OpenID, OpenSearch, and Twitter classes have been removed for different reasons (Mostly because I haven&amp;#39;t used them in over a year, they weren&amp;#39;t as great as some of the other libraries out there, and some of the formats have changed &lt;a href="http://cul.codeplex.com/wikipage?title=OAuth&amp;referringTitle=Home"&gt;OAuth&lt;/a&gt; and I haven&amp;#39;t kept up with it).&lt;/li&gt;
&lt;li&gt;Events namespace has been removed and merged into DataTypes (Utilities.DataTypes.EventArgs and Utilities.DataTypes.ExtensionMethods). The Raise functions should now be easier to call as they are simply extension methods now.&lt;/li&gt;
&lt;li&gt;Error namespace has been removed. Items from this namespace were moved to other locations (Web received anything based on HttpContext, Request, etc. Reflection received anything based on Assemblies. Environment received anything based on Processes.)&lt;/li&gt;
&lt;li&gt;CodeGen namespace has been removed. Items from this namespace have been made more generic and added to the DataTypes namespace in various forms (StringTemplate and FormatString extensions).&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;On top of that many extension methods and classes have been modified or combined in some way. The big items are Validation, Serialization, and SQLHelper. That said, there are a number of other changes:
&lt;ul&gt;&lt;li&gt;Switched ThrowIfTrue and ThrowIfFalse to ThrowIf and ThrowIfNot to be in line, from a naming standpoint, with the other extension methods. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Improved VCalendar code to hold more info.&lt;/li&gt;
&lt;li&gt;Switched ORM&amp;#39;s Setup function to actually save the generated classes from the AOP (will change the code a bit more so this can be saved as a DLL).&lt;/li&gt;
&lt;li&gt;Made AOPManager get rid of its handle on the assembly builder once it&amp;#39;s saved (to allow the data to be garbage collected)&lt;/li&gt;
&lt;li&gt;Made EmailSender IDisposable so that the attachments and embedded resources can be disposed of properly.&lt;/li&gt;
&lt;li&gt;Realized that the profiler is a bit too slow at present and working towards speeding it up.&lt;/li&gt;
&lt;li&gt;Trying to speed up SQLHelper a bit more (now faster than BLToolkit, slower than PetaPoco though...)&lt;/li&gt;
&lt;li&gt;Fixed IO extensions that took ~ to identify the app&amp;#39;s location.&lt;/li&gt;
&lt;li&gt;Finished updates to SQLHelper such that batching and MicroORM items are now a part of it.&lt;/li&gt;
&lt;li&gt;Changed DbCommand&amp;#39;s BeginTransaction to actually store the transaction in the command...&lt;/li&gt;
&lt;li&gt;Added ParameterBase class&lt;/li&gt;
&lt;li&gt;Created StringParameter and Parameter classes.&lt;/li&gt;
&lt;li&gt;Switched DbDataReader extensions to IDataReader.&lt;/li&gt;
&lt;li&gt;Modified Database code. It now holds a bit more info and can pull connection string info from the config file.&lt;/li&gt;
&lt;li&gt;Updated Database class to hold more information (DbType and Profile) and changed it to be a bit more thread safe (mappings has been changed to ConcurrentDictionary).&lt;/li&gt;
&lt;li&gt;Updated SQLHelper a bit more. It now stores database information so connection strings only need to be entered once, Profile info has been moved to the Database object, moved the database type info to the Database object, etc.&lt;/li&gt;
&lt;li&gt;Modified AddParameter extension method for DbCommand so that it no longer requires a length (it now uses the length of the value passed in for input parameters and nvarchar(max) for output parameters).&lt;/li&gt;
&lt;li&gt;Made DbCommandExtensions a bit more fluent in nature.&lt;/li&gt;
&lt;li&gt;Added a check to DirectoryInfo.SetAttributes for a null directory.&lt;/li&gt;
&lt;li&gt;Save extension method now takes a FileMode enum to specify how to handle creating/opening the file. (Utilities.IO.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;All serialization functions have been condensed down to 4 functions (Serialize,Deserialize,SerializeBinary,DeserializeBinary). These functions now allow you to specify the serializer to use on the fly (so if you want to user JSON.Net, etc., you just need to create the serializer object and feed it into the function). I&amp;#39;m not 100% happy with this and may change in the future. (Utilities.IO.ExtensionMethods)
&lt;ul&gt;&lt;li&gt;To go with this, serializers were created for binary, JSON, SOAP, and XML (more will be created as I go along and I plan to create a library to add external DLLs/libraries also).&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Fixed Median extension in Utilities.Math.ExtensionMethods&lt;/li&gt;
&lt;li&gt;Modified IObject in the ORM so that it started using new validation namespace.&lt;/li&gt;
&lt;li&gt;Modified ObjectBaseClass in the ORM so that it uses the new validation extension methods.&lt;/li&gt;
&lt;li&gt;Started updating validation section to use DataAnnotations.&lt;/li&gt;
&lt;li&gt;Moved a couple extension methods (Clamp, Min, and Max) from Math to DataTypes. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Switched Median to IEnumerable from List (Utilities.Math.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Moved ASCIIArt, BumpMap, MotionDetection, NormalMap, and OilPainting to extension methods. (Utilities.Media.Image.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Modified cache to use ConcurrentDictionary (should be faster).&lt;/li&gt;
&lt;li&gt;Modified Profiler class a bit so that it can track where the item was called from (Class/Method)&lt;/li&gt;
&lt;li&gt;Added a profiling option to MicroORM and SQLHelper (off by default)&lt;/li&gt;
&lt;li&gt;Simplified profiler a bit. It no longer uses ProfilerManager and is instead all in Profiler class.&lt;/li&gt;
&lt;li&gt;Profiler now allows sub items for timing purposes.&lt;/li&gt;
&lt;li&gt;Due to people actually asking to help or make changes, I&amp;#39;ve switched to xUnit.Net for unit testing to make things easier (still getting odd file issues at the moment) and I&amp;#39;ve switched to using Mighty Moose/AutoTest.Net to help speed up the testing (usually takes 3 minutes each time I run all the tests).&lt;/li&gt;
&lt;li&gt;Modified Array extension Combine to allow multiple arrays to specified.&lt;/li&gt;
&lt;li&gt;Chain, Do, and Return were all very similar. As such they were combined. Chain is temporarily the function name. It now has a default return value (which is returned if the object or the function are null or the returned value from the function is null) and default object value (which replaces the object prior to running the function if the object is null).&lt;/li&gt;
&lt;li&gt;If and NotIf extension was incorrectly returning the default value if the object was null. It now automatically returns null if the predicate is null.&lt;/li&gt;
&lt;li&gt;AddRange has been renamed Add and an Extension for Add that takes any number of items as params was added (parameters were reordered for this purpose).&lt;/li&gt;
&lt;li&gt;AddIf and AddIfUnique was modified to take any number of items as params (parameters were reordered for this purpose).&lt;/li&gt;
&lt;li&gt;RemoveRange was renamed to Remove.&lt;/li&gt;
&lt;li&gt;IDictionary&amp;#39;s Sort extension has been added that now has the ability to specify how to sort (the default Sort is still available).&lt;/li&gt;
&lt;li&gt;A number of IEnumerable extensions were simplified.&lt;/li&gt;
&lt;li&gt;Modified FormatString extension. You can now specify a string formatter to be used.&lt;/li&gt;
&lt;li&gt;IsNullOrDBNull has been merged into IsNull (IsNull now checks for DBNull).&lt;/li&gt;
&lt;li&gt;NullCheck now uses IsNull (and thus will check for null or DBNull).&lt;/li&gt;
&lt;li&gt;ThrowIfNullOrDBNull has been removed (use ThrowIfNull instead).&lt;/li&gt;
&lt;li&gt;Fixed issue with ManyToOne mappings in the ORM if they are of the same type. Before it was saving to the join table multiple entries for each item without having a decisive parent/child relationship.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;So if you&amp;#39;re upgrading a project, it may take some time. However if you are starting a new project, the changes should make things a lot easier going forward. There have also been a large number of additions:
&lt;ul&gt;&lt;li&gt;Added IsAnagram extension method. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Exp, Log, and Log10 extension methods. (Utilities.Math.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added a number of predicate extension methods that treat them as sets (AddToSet, CartesianProduct, Difference, Intersect, RelativeComplement, RemoveFromSet, and Union). (Utilities.Math.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added a couple geometry classes (Circle, Rectangle, and Point).&lt;/li&gt;
&lt;li&gt;Added version of NullCheck that takes a Func instead of the object (for instances where it may take a while to create the object and/or it may be less likely that the object is null). (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added some ThrowIfNot* type extension methods. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Created a basic SQLCommand class for building SQL commands on the fly (will expand on this in the future).&lt;/li&gt;
&lt;li&gt;Added AppointmentSender class to Utilities.Web.SMTP that contains a VCalendar object and can send it using SMTP appropriately.&lt;/li&gt;
&lt;li&gt;Added per query caching to SQLHelper&lt;/li&gt;
&lt;li&gt;Added PositionOf extension for IEnumerable (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Enums to ToDbType extension (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added GetOrCreateParameter to DbCommand (Utilities.SQL.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added SetValue to IDictionary extensions.&lt;/li&gt;
&lt;li&gt;Added extension methods that will take a string as the file location and will save/read the corresponding file (instead of using FileInfo). This function also takes into account &amp;#39;~&amp;#39; and maps that to the path for the application/website. So you can do &amp;quot;~/Data/File.txt&amp;quot;.Save(&amp;quot;Content&amp;quot;); now. (Utilities.IO.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added GetValue function for IDictionary types. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added the ability to recursively find all group members in LDAP code and added FindGroup code (based off of cn field).&lt;/li&gt;
&lt;li&gt;Finished adding profiling to ORM and simplified creation a bit (will be going further with this to make things as simple as possible).&lt;/li&gt;
&lt;li&gt;Finished IsCreditCard extension method for strings (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Modified/Added new validation attributes: Cascade, Contains, DoesNotContain, Empty, MaxLength, MinLength, NotEmpty, NotInRange, Compare (which takes the place of Equal, GreaterThan, etc), CompareTo, Is (which is similar to DataType, but can check for valid decimals, integers, credit cards, and domains), and Between.&lt;/li&gt;
&lt;li&gt;Finished adding comments to code.&lt;/li&gt;
&lt;li&gt;Added ToExpando (converts an object to an ExpandoObject) and version of TryTo that works with ExpandoObjects. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added extension methods for caching data (allows for caching to multiple ASP.Net locations as well as the cache internal to CUL. Useful if your code may be run from a web app or windows app.) (Utilities.Caching.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added methods for StackTrace and StackFrame for getting method information a bit easier. (Utilities.Environment.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Fraction class to Utilities.Math namespace.&lt;/li&gt;
&lt;li&gt;Added Salt extension that can be used to salt a string/byte array. (Utilities.Encryption.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added Timing related extensions (allows easy timing of Funcs/Actions) (Utilities.Profiler.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added AppendLineFormat extension for StringBuilder (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added 2 FormatString extensions that can be used to treat a string as a template (one uses an object and replaces the name of the property in the string with the value of the property. The other takes a series of key/value pairs and replaces the values in the string accordingly) (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added IsNotNullOrEmpty extension. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added various static char predicates, such as IsWhiteSpace (char.IsWhiteSpace) (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added ToString extension for Exceptions. It exports exception text, type, data, stack trace, source, target site, and any/all inner exceptions. (Utilities.DataTypes.ExtensionMethods)&lt;/li&gt;
&lt;li&gt;Added StringTemplate class that treats a string as a template (think mail merges, etc) and allows the addition/removal/changing of data between uses. (Utilities.DataTypes)&lt;/li&gt;
&lt;li&gt;Added TagDictionary class. This class acts as a dictionary but associates multiple keys with a single object (Think blog post as the object and cloud tags as the key) (Utilities.DataTypes)&lt;/li&gt;
&lt;li&gt;Added TaskQueue class. This class is designed to help in producer/consumer situations where actions need to be done in parallel but will arrive in sporadic intervals. (Utilities.DataTypes.Threading)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;That concludes the changes in this release. Going forward I will be looking towards MVC specific code, speed increases to existing code, etc.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Version 3.2 Additions&lt;/b&gt;&lt;br /&gt;The largest addition this release is a much more robust randomization set of classes and extension methods. It adds the ability to randomly generate company names, male/female names, cities, states, zip codes, phone numbers, even entire data classes by simply calling either the Next&amp;lt;T&amp;gt;(...) or NextClass&amp;lt;T&amp;gt;(...) extension methods that were added. In fact the Next generic extension method has built in generators for bool, decimal, double, float, byte, char, int, long, sbyte, short, uint, ulong, ushort, DateTime, TimeSpan, Color, and string (with a ton of other string generators). In fact with the new classes and extension methods you can do something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
    public class RandomTestClass
    {
        [IntGenerator]
        public int A { get; set; }

        [LoremIpsumGenerator]
        public string B { get; set; }

        [FloatGenerator]
        public float C { get; set; }

        [IntGenerator(1, 100)]
        public int D { get; set; }
    }
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And call NextClass and have a newly generated RandomTestClass object given to you.&lt;br /&gt;&lt;br /&gt;Past the new randomization classes/extension methods, a number of updates, speed increases, and fixes  were implemented on the SQLHelper, MicroORM, and ORM classes. For example, you can now add parameters in batch to the SQLHelper class by simply calling the AddParameter function. (For example if you have &amp;quot;SELECT * FROM Table WHERE ID=@0 and Value=@1&amp;quot; and you used AddParameter(10, &amp;quot;This is a string&amp;quot;) then it would put the value 10 in for @0 and &amp;quot;This is a string&amp;quot; for @1 (note that it would do that as a parameter, it doesn&amp;#39;t do string concat).&lt;br /&gt;&lt;br /&gt;On top of that a number of extensions to make life easier were added, such as Times which will run a function/action the specified number of times, so 100.Times(x=&amp;gt;x) creates a list of integers going from 1 to 100. A RingBuffer class has been added, a Google API class for pulling static maps, added a LevenshteinDistance extension for strings, extension method to convert Dictionary and NameValueCollections classes to query strings, UserIPAddress and IfModifiedSince extension methods for HttpRequest, RelativeTime extension which expresses the difference between a DateTime and some Epoch as a string, updated the BlogML code to allow exporting, added ReadAll and ReadAllBinary extensions for Stream objects, and a number of other items.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Wed, 02 Jan 2013 00:45:38 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20130102124538A</guid></item><item><title>New Comment on "Documentation"</title><link>http://cul.codeplex.com/documentation?&amp;ANCHOR#C25149</link><description>Actually I&amp;#39;m slowly going through and beefing up&amp;#47;modifying the code&amp;#47;documentation for this next version. However, what do you mean by background articles&amp;#63; Examples&amp;#63;</description><author>JaCraig</author><pubDate>Tue, 02 Oct 2012 14:07:33 GMT</pubDate><guid isPermaLink="false">New Comment on "Documentation" 20121002020733P</guid></item><item><title>New Comment on "Documentation"</title><link>http://cul.codeplex.com/documentation?&amp;ANCHOR#C25146</link><description>First of all I think it is a great library with a lot of use in the field. However in some cases I miss some background information. E.g the encryption extension. I see the properties which I can change, however it would be nice to have some background information. Would it be possible to reference some background articles&amp;#63;</description><author>remkovanbrakel</author><pubDate>Tue, 02 Oct 2012 09:54:17 GMT</pubDate><guid isPermaLink="false">New Comment on "Documentation" 20121002095417A</guid></item><item><title>Updated Wiki: List of Features</title><link>http://cul.codeplex.com/wikipage?title=List of Features&amp;version=5</link><description>&lt;div class="wikidoc"&gt;Craig&amp;#39;s Utility Library is one of the largest collections of extension methods and various helper classes out there. It has gotten to the point where if you can think it, it&amp;#39;s probably already in there (and if not, put a message on the Issue Tracker and I&amp;#39;ll add it when I get bored, which is often). So how much is in there, well let&amp;#39;s start with the extension methods:&lt;br /&gt;&lt;u&gt;Utilities.DataTypes.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Array extensions
&lt;ul&gt;&lt;li&gt;Clear&lt;/li&gt;
&lt;li&gt;Combine&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;DateTime extensions
&lt;ul&gt;&lt;li&gt;DaysInMonth&lt;/li&gt;
&lt;li&gt;DaysLeftInMonth&lt;/li&gt;
&lt;li&gt;DaysLeftInYear&lt;/li&gt;
&lt;li&gt;FirstDayOfMonth&lt;/li&gt;
&lt;li&gt;FirstDayOfWeek&lt;/li&gt;
&lt;li&gt;FromUnixTime (actually extension for int and long values)&lt;/li&gt;
&lt;li&gt;IsInFuture&lt;/li&gt;
&lt;li&gt;IsInPast&lt;/li&gt;
&lt;li&gt;IsWeekDay&lt;/li&gt;
&lt;li&gt;IsWeekEnd&lt;/li&gt;
&lt;li&gt;LastDayOfMonth&lt;/li&gt;
&lt;li&gt;LastDayOfWeek&lt;/li&gt;
&lt;li&gt;ToUnix&lt;/li&gt;
&lt;li&gt;FirstDayOfQuarter&lt;/li&gt;
&lt;li&gt;FirstDayOfYear&lt;/li&gt;
&lt;li&gt;LastDayOfQuarter&lt;/li&gt;
&lt;li&gt;LastDayOfYear&lt;/li&gt;
&lt;li&gt;ConvertToTimeZone (assumes that times are in UTC time)&lt;/li&gt;
&lt;li&gt;LocalTimeZone&lt;/li&gt;
&lt;li&gt;AddWeeks&lt;/li&gt;
&lt;li&gt;Age&lt;/li&gt;
&lt;li&gt;BeginningOfDay&lt;/li&gt;
&lt;li&gt;EndOfDay&lt;/li&gt;
&lt;li&gt;IsToday&lt;/li&gt;
&lt;li&gt;SetTime&lt;/li&gt;
&lt;li&gt;UTCOffset&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Generic object extensions
&lt;ul&gt;&lt;li&gt;If&lt;/li&gt;
&lt;li&gt;NotIf&lt;/li&gt;
&lt;li&gt;Return&lt;/li&gt;
&lt;li&gt;Chain&lt;/li&gt;
&lt;li&gt;Do&lt;/li&gt;
&lt;li&gt;Execute&lt;/li&gt;
&lt;li&gt;ThrowIfTrue&lt;/li&gt;
&lt;li&gt;ThrowIfFalse&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;ICollection extensions
&lt;ul&gt;&lt;li&gt;AddAndReturn&lt;/li&gt;
&lt;li&gt;AddRange&lt;/li&gt;
&lt;li&gt;AddIf&lt;/li&gt;
&lt;li&gt;AddIfUnique&lt;/li&gt;
&lt;li&gt;Remove&lt;/li&gt;
&lt;li&gt;RemoveRange&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IComparable extensions
&lt;ul&gt;&lt;li&gt;Between&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IDictionary extensions
&lt;ul&gt;&lt;li&gt;Sort&lt;/li&gt;
&lt;li&gt;SortByValue&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IEnumerable extensions
&lt;ul&gt;&lt;li&gt;Exists&lt;/li&gt;
&lt;li&gt;For&lt;/li&gt;
&lt;li&gt;ForEach&lt;/li&gt;
&lt;li&gt;ForParallel&lt;/li&gt;
&lt;li&gt;ForEachParallel&lt;/li&gt;
&lt;li&gt;IsNullOrEmpty&lt;/li&gt;
&lt;li&gt;RemoveDefaults&lt;/li&gt;
&lt;li&gt;ToArray&lt;/li&gt;
&lt;li&gt;ToString&lt;/li&gt;
&lt;li&gt;TrueForAll&lt;/li&gt;
&lt;li&gt;TryAll&lt;/li&gt;
&lt;li&gt;TryAllParallel&lt;/li&gt;
&lt;li&gt;FalseForAll&lt;/li&gt;
&lt;li&gt;FalseForAny&lt;/li&gt;
&lt;li&gt;TrueForAll&lt;/li&gt;
&lt;li&gt;TrueForAny&lt;/li&gt;
&lt;li&gt;ThrowIfFalseForAll&lt;/li&gt;
&lt;li&gt;ThrowIfFalseForAny&lt;/li&gt;
&lt;li&gt;ThrowIfTrueForAll&lt;/li&gt;
&lt;li&gt;ThrowIfTrueForAny&lt;/li&gt;
&lt;li&gt;ElementsBetween&lt;/li&gt;
&lt;li&gt;First&lt;/li&gt;
&lt;li&gt;Last&lt;/li&gt;
&lt;li&gt;ToDataTable&lt;/li&gt;
&lt;li&gt;ToCSV&lt;/li&gt;
&lt;li&gt;ToDelimitedFile&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;MatchCollection extensions
&lt;ul&gt;&lt;li&gt;Where&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;string extensions
&lt;ul&gt;&lt;li&gt;Encode&lt;/li&gt;
&lt;li&gt;FromBase64&lt;/li&gt;
&lt;li&gt;Left&lt;/li&gt;
&lt;li&gt;Right&lt;/li&gt;
&lt;li&gt;ToBase64&lt;/li&gt;
&lt;li&gt;ToByteArray&lt;/li&gt;
&lt;li&gt;ToFirstCharacterUpperCase&lt;/li&gt;
&lt;li&gt;ToSentenceCapitalize&lt;/li&gt;
&lt;li&gt;ToTitleCase&lt;/li&gt;
&lt;li&gt;NumberTimesOccurs&lt;/li&gt;
&lt;li&gt;Reverse&lt;/li&gt;
&lt;li&gt;FilterOutText&lt;/li&gt;
&lt;li&gt;KeepFilterText&lt;/li&gt;
&lt;li&gt;AlphaNumericOnly&lt;/li&gt;
&lt;li&gt;AlphaCharactersOnly&lt;/li&gt;
&lt;li&gt;NumericOnly&lt;/li&gt;
&lt;li&gt;IsUnicode&lt;/li&gt;
&lt;li&gt;FormatString&lt;/li&gt;
&lt;li&gt;RegexFormat&lt;/li&gt;
&lt;li&gt;ExpandTabs&lt;/li&gt;
&lt;li&gt;StripLeft&lt;/li&gt;
&lt;li&gt;StripRight&lt;/li&gt;
&lt;li&gt;Pluralize&lt;/li&gt;
&lt;li&gt;Singularize&lt;/li&gt;
&lt;li&gt;Center&lt;/li&gt;
&lt;li&gt;MaskLeft&lt;/li&gt;
&lt;li&gt;MaskRight&lt;/li&gt;
&lt;li&gt;UrlDecode&lt;/li&gt;
&lt;li&gt;UrlEncode&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Various type conversion/type checking extensions
&lt;ul&gt;&lt;li&gt;FormatToString&lt;/li&gt;
&lt;li&gt;IsNotDefault&lt;/li&gt;
&lt;li&gt;IsDefault&lt;/li&gt;
&lt;li&gt;IsNotNull&lt;/li&gt;
&lt;li&gt;IsNull&lt;/li&gt;
&lt;li&gt;IsNotNullOrDBNull&lt;/li&gt;
&lt;li&gt;IsNullOrDBNull&lt;/li&gt;
&lt;li&gt;NullCheck&lt;/li&gt;
&lt;li&gt;ThrowIfDefault&lt;/li&gt;
&lt;li&gt;ThrowIfNullOrEmpty&lt;/li&gt;
&lt;li&gt;ThrowIfNullOrDBNull&lt;/li&gt;
&lt;li&gt;ToSQLDbType&lt;/li&gt;
&lt;li&gt;ToDbType&lt;/li&gt;
&lt;li&gt;ToType&lt;/li&gt;
&lt;li&gt;TryTo&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Various value type extensions
&lt;ul&gt;&lt;li&gt;ToBool (int)&lt;/li&gt;
&lt;li&gt;ToInt (bool)&lt;/li&gt;
&lt;li&gt;ToBase64String (byte array)&lt;/li&gt;
&lt;li&gt;ToEncodedString (byte array)&lt;/li&gt;
&lt;li&gt;IsUnicode (byte array)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;TimeSpan Extensions
&lt;ul&gt;&lt;li&gt;Years&lt;/li&gt;
&lt;li&gt;Months&lt;/li&gt;
&lt;li&gt;DaysRemainder&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;DataTable Extensions
&lt;ul&gt;&lt;li&gt;ToList&lt;/li&gt;
&lt;li&gt;ToCSV&lt;/li&gt;
&lt;li&gt;ToDelimitedFile&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Math.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Math extensions
&lt;ul&gt;&lt;li&gt;Between&lt;/li&gt;
&lt;li&gt;Clamp&lt;/li&gt;
&lt;li&gt;Factorial&lt;/li&gt;
&lt;li&gt;Max&lt;/li&gt;
&lt;li&gt;Median&lt;/li&gt;
&lt;li&gt;Min&lt;/li&gt;
&lt;li&gt;Mode&lt;/li&gt;
&lt;li&gt;Pow&lt;/li&gt;
&lt;li&gt;Round&lt;/li&gt;
&lt;li&gt;StandardDeviation&lt;/li&gt;
&lt;li&gt;Sqrt&lt;/li&gt;
&lt;li&gt;Variance&lt;/li&gt;
&lt;li&gt;Permute&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.SQL.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;DbCommand extensions
&lt;ul&gt;&lt;li&gt;AddParameter&lt;/li&gt;
&lt;li&gt;BeginTransaction&lt;/li&gt;
&lt;li&gt;ClearParameters&lt;/li&gt;
&lt;li&gt;Close&lt;/li&gt;
&lt;li&gt;Commit&lt;/li&gt;
&lt;li&gt;ExecuteDataSet&lt;/li&gt;
&lt;li&gt;ExecuteScalar&lt;/li&gt;
&lt;li&gt;GetOutputParameter&lt;/li&gt;
&lt;li&gt;Open&lt;/li&gt;
&lt;li&gt;Rollback&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;DbDataReader extensions
&lt;ul&gt;&lt;li&gt;GetParameter&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Compression.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Compress (both byte arrays and strings)&lt;/li&gt;
&lt;li&gt;Decompress (both byte arrays and strings)&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Encryption.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Hash (Now handles all hash algorithms in one function for both byte arrays and strings)&lt;/li&gt;
&lt;li&gt;Encrypt (Handles any symmetric encryption algorithm inside .Net)&lt;/li&gt;
&lt;li&gt;Decrypt (Handles any symmetric encryption algorithm inside .Net)&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.IO.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;DirectoryInfo extensions
&lt;ul&gt;&lt;li&gt;CopyTo&lt;/li&gt;
&lt;li&gt;DeleteAll&lt;/li&gt;
&lt;li&gt;DeleteFiles&lt;/li&gt;
&lt;li&gt;DeleteFilesNewerThan&lt;/li&gt;
&lt;li&gt;DeleteFilesOlderThan&lt;/li&gt;
&lt;li&gt;Size&lt;/li&gt;
&lt;li&gt;SetAttribute&lt;/li&gt;
&lt;li&gt;DriveInfo&lt;/li&gt;
&lt;li&gt;DeleteDirectoriesNewerThan&lt;/li&gt;
&lt;li&gt;DeleteDirectoriesOlderThan&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;FileInfo extensions
&lt;ul&gt;&lt;li&gt;Append&lt;/li&gt;
&lt;li&gt;CompareTo&lt;/li&gt;
&lt;li&gt;Read&lt;/li&gt;
&lt;li&gt;ReadBinary&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;SaveAsync&lt;/li&gt;
&lt;li&gt;SetAttributes&lt;/li&gt;
&lt;li&gt;DriveInfo&lt;/li&gt;
&lt;li&gt;Execute&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;String extensions
&lt;ul&gt;&lt;li&gt;RemoveIllegalDirectoryNameCharacters&lt;/li&gt;
&lt;li&gt;RemoveIllegalFileNameCharacters&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Serialization extensions
&lt;ul&gt;&lt;li&gt;ToBinary&lt;/li&gt;
&lt;li&gt;ToJSON&lt;/li&gt;
&lt;li&gt;ToSOAP&lt;/li&gt;
&lt;li&gt;ToXML&lt;/li&gt;
&lt;li&gt;ToObject&lt;/li&gt;
&lt;li&gt;JSONToObject&lt;/li&gt;
&lt;li&gt;SOAPToObject&lt;/li&gt;
&lt;li&gt;XMLToObject&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Uri extensions
&lt;ul&gt;&lt;li&gt;Read&lt;/li&gt;
&lt;li&gt;ReadBinary&lt;/li&gt;
&lt;li&gt;Execute&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Web.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Web related extensions
&lt;ul&gt;&lt;li&gt;AbsoluteRoot&lt;/li&gt;
&lt;li&gt;AddScriptFile&lt;/li&gt;
&lt;li&gt;ContainsHTML&lt;/li&gt;
&lt;li&gt;HTTPCompress&lt;/li&gt;
&lt;li&gt;IsEncodingAccepted&lt;/li&gt;
&lt;li&gt;RelativeRoot&lt;/li&gt;
&lt;li&gt;RemoveURLIllegalCharacters&lt;/li&gt;
&lt;li&gt;SetEncoding&lt;/li&gt;
&lt;li&gt;StripHTML&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IPAddress extensions
&lt;ul&gt;&lt;li&gt;GetHostName&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Minification
&lt;ul&gt;&lt;li&gt;Combine (can be used for HTML,JavaScript, or CSS)&lt;/li&gt;
&lt;li&gt;Minify (can be used for HTML, JavaScript, or CSS)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;HttpRequest extensions
&lt;ul&gt;&lt;li&gt;IsMobile&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Image.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;All Bitmap functions were moved
&lt;ul&gt;&lt;li&gt;Added ToBase64 extension method&lt;/li&gt;
&lt;li&gt; Added DrawRoundedRectangle extension&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Screen extensions
&lt;ul&gt;&lt;li&gt;TakeScreenShot&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Error.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Various error related extensions
&lt;ul&gt;&lt;li&gt;DumpApplicationState&lt;/li&gt;
&lt;li&gt;DumpCache&lt;/li&gt;
&lt;li&gt;DumpCookies&lt;/li&gt;
&lt;li&gt;DumpRequestVariable&lt;/li&gt;
&lt;li&gt;DumpResponseVariable&lt;/li&gt;
&lt;li&gt;DumpServerVars&lt;/li&gt;
&lt;li&gt;DumpSession&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Reflection.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Various reflection related extensions
&lt;ul&gt;&lt;li&gt;CallMethod&lt;/li&gt;
&lt;li&gt;CreateInstance&lt;/li&gt;
&lt;li&gt;DumpProperties&lt;/li&gt;
&lt;li&gt;GetAttribute&lt;/li&gt;
&lt;li&gt;GetAttributes&lt;/li&gt;
&lt;li&gt;GetName&lt;/li&gt;
&lt;li&gt;GetObjects&lt;/li&gt;
&lt;li&gt;GetProperty&lt;/li&gt;
&lt;li&gt;GetPropertyGetter&lt;/li&gt;
&lt;li&gt;GetPropertyName&lt;/li&gt;
&lt;li&gt;GetPropertyType&lt;/li&gt;
&lt;li&gt;GetPropertySetter&lt;/li&gt;
&lt;li&gt;GetTypes&lt;/li&gt;
&lt;li&gt;IsIEnumerable&lt;/li&gt;
&lt;li&gt;IsOfType&lt;/li&gt;
&lt;li&gt;Load&lt;/li&gt;
&lt;li&gt;LoadAssemblies&lt;/li&gt;
&lt;li&gt;MarkedWith&lt;/li&gt;
&lt;li&gt;MakeShallowCopy&lt;/li&gt;
&lt;li&gt;SetProperty&lt;/li&gt;
&lt;li&gt;ToLongVersionString&lt;/li&gt;
&lt;li&gt;ToShortVersionString&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Environment.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Process related extensions
&lt;ul&gt;&lt;li&gt;KillProcessAsync&lt;/li&gt;
&lt;li&gt;GetInformation&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;On top of that there are a number of helper classes for a number of various tasks including (note that there are actually more, this is what I can remember off the top of my head):
&lt;ul&gt;&lt;li&gt;Email
&lt;ul&gt;&lt;li&gt;Pop3 client (SSL capable)&lt;/li&gt;
&lt;li&gt;MIME parser&lt;/li&gt;
&lt;li&gt;SMTP email sending (SSL capable)&lt;/li&gt;
&lt;li&gt;Exchange inbox email retrieval&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Image manipulation (one of the larger collections of functions dealing in image manipulation out there)
&lt;ul&gt;&lt;li&gt;Most image functions are multithreaded and thus act extremely quickly.&lt;/li&gt;
&lt;li&gt;Cropping, resizing, rotating, flipping&lt;/li&gt;
&lt;li&gt;To black and white or sepia tone&lt;/li&gt;
&lt;li&gt;Threshold and edge detection (including Sobel and Laplace)&lt;/li&gt;
&lt;li&gt;Text drawing, watermarks, object drawing helpers&lt;/li&gt;
&lt;li&gt;Taking a screenshot which spans monitors&lt;/li&gt;
&lt;li&gt;RGB Histograms&lt;/li&gt;
&lt;li&gt;Various convolution filters such as sharpen, sobel emboss, etc. along with the ability to create your own easily.&lt;/li&gt;
&lt;li&gt;Various other filters such as &amp;quot;jitter&amp;quot;, pixelate, sin wave, median filter, and dilation, red/green/blue filters,&lt;/li&gt;
&lt;li&gt;Multiple blurring techniques including box blur, Gaussian blur, Kuwahara, and Symmetric Nearest Neighbor blur&lt;/li&gt;
&lt;li&gt;Bump map and Normal map helpers&lt;/li&gt;
&lt;li&gt;ASCII art generator&lt;/li&gt;
&lt;li&gt;Adjust brightness, gamma, and contrast&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Active Directory querying
&lt;ul&gt;&lt;li&gt;Includes functions for active users, all users, all groups, active members in groups, etc.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Exchange querying
&lt;ul&gt;&lt;li&gt;Free/Busy data&lt;/li&gt;
&lt;li&gt;Get next/previous available time for appointments&lt;/li&gt;
&lt;li&gt;Get contacts&lt;/li&gt;
&lt;li&gt;Get appointments/events&lt;/li&gt;
&lt;li&gt;Get emails&lt;/li&gt;
&lt;li&gt;Get the GAL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;SQL query helper (which includes bulk copying functionality)&lt;/li&gt;
&lt;li&gt;MicroORM&lt;/li&gt;
&lt;li&gt;ORM (which includes lazy loading, etc.)&lt;/li&gt;
&lt;li&gt;SQL Server structural analysis helpers&lt;/li&gt;
&lt;li&gt;File formats/Microformats
&lt;ul&gt;&lt;li&gt;XMDP&lt;/li&gt;
&lt;li&gt;RSS (with iTunes/Zune information embedded for podcasts)&lt;/li&gt;
&lt;li&gt;vCard/hCard&lt;/li&gt;
&lt;li&gt;vCalendar/hCalendar&lt;/li&gt;
&lt;li&gt;iCalendar (with email sending capabilities, cancellation, and automatically putting it in Exchange)&lt;/li&gt;
&lt;li&gt;APML&lt;/li&gt;
&lt;li&gt;OPML&lt;/li&gt;
&lt;li&gt;XFN&lt;/li&gt;
&lt;li&gt;CSV (really any delimited file) with functions to convert it to a list of objects or a DataTable&lt;/li&gt;
&lt;li&gt;RSD&lt;/li&gt;
&lt;li&gt;BlogML&lt;/li&gt;
&lt;li&gt;INI&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Cisco phone app helpers&lt;/li&gt;
&lt;li&gt;WMI query helpers&lt;/li&gt;
&lt;li&gt;Code to render a web page to BMP file&lt;/li&gt;
&lt;li&gt;Icon extraction from a file&lt;/li&gt;
&lt;li&gt;WebBrowser control cache clearing class&lt;/li&gt;
&lt;li&gt;Helper classes for simplifying System.Reflection.Emit namespace&lt;/li&gt;
&lt;li&gt;Randomization
&lt;ul&gt;&lt;li&gt;Completely generic, using Next&amp;lt;T&amp;gt;() and NextClass&amp;lt;T&amp;gt;() extensions.&lt;/li&gt;
&lt;li&gt;Has generators for all basic .Net data types (int, long, float, double, DateTime, TimeSpan, Color, etc.)&lt;/li&gt;
&lt;li&gt;Multiple string generators (Ipsum Lorem, company name, male/female names, patterns, phone numbers, zip codes, city names, etc).&lt;/li&gt;
&lt;li&gt;Includes thread safe randomization function.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Environment information&lt;/li&gt;
&lt;li&gt;Process management&lt;/li&gt;
&lt;li&gt;Error/Information gathering&lt;/li&gt;
&lt;li&gt;Math related classes
&lt;ul&gt;&lt;li&gt;Matrix&lt;/li&gt;
&lt;li&gt;Vector3&lt;/li&gt;
&lt;li&gt;Set&lt;/li&gt;
&lt;li&gt;Factorial&lt;/li&gt;
&lt;li&gt;Permutation&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Data types
&lt;ul&gt;&lt;li&gt;Vector&lt;/li&gt;
&lt;li&gt;Bag&lt;/li&gt;
&lt;li&gt;List&lt;/li&gt;
&lt;li&gt;ListMapping&lt;/li&gt;
&lt;li&gt;Priority Queue&lt;/li&gt;
&lt;li&gt;BTree&lt;/li&gt;
&lt;li&gt;DateSpan&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Base classes for various patterns including
&lt;ul&gt;&lt;li&gt;Singleton&lt;/li&gt;
&lt;li&gt;Factory&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;OAuth helper class&lt;/li&gt;
&lt;li&gt;Code for setting up an OpenID relay&lt;/li&gt;
&lt;li&gt;REST helper class&lt;/li&gt;
&lt;li&gt;Classes to help with various media services/websites including
&lt;ul&gt;&lt;li&gt;Twitter&lt;/li&gt;
&lt;li&gt;Hulu&lt;/li&gt;
&lt;li&gt;Netflix&lt;/li&gt;
&lt;li&gt;Craigslist&lt;/li&gt;
&lt;li&gt;eBay&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Naive Bayes classifier&lt;/li&gt;
&lt;li&gt;Validation classes&lt;/li&gt;
&lt;li&gt;Caching helper classes&lt;/li&gt;
&lt;li&gt;Logging helper classes&lt;/li&gt;
&lt;li&gt;Configuration helper classes&lt;/li&gt;
&lt;li&gt;AOP helper classes&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;On top of that I add new code, bug fixes, etc. quite frequently through the code repository.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Sat, 01 Sep 2012 02:32:20 GMT</pubDate><guid isPermaLink="false">Updated Wiki: List of Features 20120901023220A</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=27</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 4.0 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com"&gt;http://www.gutgames.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a list of features, take a look at the &lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; page. For version 3.0 on up, I&amp;#39;ve been bored and started looking at Ruby and Python for ideas (I&amp;#39;ve used Python for scripting in the past and Ruby in a couple of just hacked together fun projects). Basically I took a bunch of their built in functions and classes and built a number of C# equivalents. I plan on doing this with other languages in the future, so if you have any suggestions of languages or standard libraries to look at, let me know.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download&lt;/b&gt;&lt;br /&gt;The easiest way to get CUL is to simply use NuGet:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=cul&amp;amp;DownloadId=479480" /&gt;&lt;br /&gt;&lt;br /&gt;There are also individual DLLs for each namespace available through NuGet. Whenever a new update is added to the library, a nightly build uploads a new version to NuGet. As such you&amp;#39;re getting the latest version as soon as possible (or just download version 3.2.0002 [issue with auto numbering adds the 0002 even though it&amp;#39;s actually straight 3.2]). Or if you can&amp;#39;t use NuGet or simply aren&amp;#39;t a fan, you can still download it here.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository here is Mercurial. Also note that there are repository mirrors available on Bitbucket and Github: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src"&gt;Bitbucket&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library"&gt;GitHub&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Version 3.2 Additions&lt;/b&gt;&lt;br /&gt;The largest addition this release is a much more robust randomization set of classes and extension methods. It adds the ability to randomly generate company names, male/female names, cities, states, zip codes, phone numbers, even entire data classes by simply calling either the Next&amp;lt;T&amp;gt;(...) or NextClass&amp;lt;T&amp;gt;(...) extension methods that were added. In fact the Next generic extension method has built in generators for bool, decimal, double, float, byte, char, int, long, sbyte, short, uint, ulong, ushort, DateTime, TimeSpan, Color, and string (with a ton of other string generators). In fact with the new classes and extension methods you can do something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;
    public class RandomTestClass
    {
        [IntGenerator]
        public int A { get; set; }

        [LoremIpsumGenerator]
        public string B { get; set; }

        [FloatGenerator]
        public float C { get; set; }

        [IntGenerator(1, 100)]
        public int D { get; set; }
    }
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;And call NextClass and have a newly generated RandomTestClass object given to you.&lt;br /&gt;&lt;br /&gt;Past the new randomization classes/extension methods, a number of updates, speed increases, and fixes  were implemented on the SQLHelper, MicroORM, and ORM classes. For example, you can now add parameters in batch to the SQLHelper class by simply calling the AddParameter function. (For example if you have &amp;quot;SELECT * FROM Table WHERE ID=@0 and Value=@1&amp;quot; and you used AddParameter(10, &amp;quot;This is a string&amp;quot;) then it would put the value 10 in for @0 and &amp;quot;This is a string&amp;quot; for @1 (note that it would do that as a parameter, it doesn&amp;#39;t do string concat).&lt;br /&gt;&lt;br /&gt;On top of that a number of extensions to make life easier were added, such as Times which will run a function/action the specified number of times, so 100.Times(x=&amp;gt;x) creates a list of integers going from 1 to 100. A RingBuffer class has been added, a Google API class for pulling static maps, added a LevenshteinDistance extension for strings, extension method to convert Dictionary and NameValueCollections classes to query strings, UserIPAddress and IfModifiedSince extension methods for HttpRequest, RelativeTime extension which expresses the difference between a DateTime and some Epoch as a string, updated the BlogML code to allow exporting, added ReadAll and ReadAllBinary extensions for Stream objects, and a number of other items.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Sat, 01 Sep 2012 02:25:43 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120901022543A</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=26</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 4.0 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com"&gt;http://www.gutgames.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a list of features, take a look at the &lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; page. For version 3.0 on up, I&amp;#39;ve been bored and started looking at Ruby and Python for ideas (I&amp;#39;ve used Python for scripting in the past and Ruby in a couple of just hacked together fun projects). Basically I took a bunch of their built in functions and classes and built a number of C# equivalents. I plan on doing this with other languages in the future, so if you have any suggestions of languages or standard libraries to look at, let me know.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download&lt;/b&gt;&lt;br /&gt;The easiest way to get CUL is to simply use NuGet:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=cul&amp;amp;DownloadId=479480" /&gt;&lt;br /&gt;&lt;br /&gt;There are also individual DLLs for each namespace available through NuGet. Whenever a new update is added to the library, a nightly build uploads a new version to NuGet. As such you&amp;#39;re getting the latest version as soon as possible (or just download version 3.2.0002 [issue with auto numbering adds the 0002 even though it&amp;#39;s actually straight 3.2]). Or if you can&amp;#39;t use NuGet or simply aren&amp;#39;t a fan, you can still download it here.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository here is Mercurial. Also note that there are repository mirrors available on Bitbucket and Github: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src"&gt;Bitbucket&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library"&gt;GitHub&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Sat, 01 Sep 2012 01:57:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120901015701A</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=25</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 4.0 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com"&gt;http://www.gutgames.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a list of features, take a look at the &lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; page. For version 3.0 on up, I&amp;#39;ve been bored and started looking at Ruby and Python for ideas (I&amp;#39;ve used Python for scripting in the past and Ruby in a couple of just hacked together fun projects). Basically I took a bunch of their built in functions and classes and built a number of C# equivalents. I plan on doing this with other languages in the future, so if you have any suggestions of languages or standard libraries to look at, let me know.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download&lt;/b&gt;&lt;br /&gt;The easiest way to get CUL is to simply use NuGet:&lt;br /&gt;&lt;img src="http://download-codeplex.sec.s-msft.com/Download?ProjectName=cul&amp;amp;DownloadId=479480" /&gt;&lt;br /&gt;&lt;br /&gt;There are also individual DLLs for each namespace available through NuGet. Whenever a new update is added to the library, a nightly build uploads a new version to NuGet. As such you&amp;#39;re getting the latest version as soon as possible (or just download version 3.2.0002 &lt;a href="http://cul.codeplex.com/wikipage?title=issue%20with%20auto%20numbering%20adds%20the%200002%20even%20though%20it%27s%20actually%20straight%203.2&amp;referringTitle=Home"&gt;issue with auto numbering adds the 0002 even though it&amp;#39;s actually straight 3.2&lt;/a&gt;). Or if you can&amp;#39;t use NuGet or simply aren&amp;#39;t a fan, you can still download it here.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository here is Mercurial. Also note that there are repository mirrors available on Bitbucket and Github: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src"&gt;Bitbucket&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library"&gt;GitHub&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Sat, 01 Sep 2012 01:56:27 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120901015627A</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=24</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 4.0 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com"&gt;http://www.gutgames.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a list of features, take a look at the &lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; page. For version 3.0 on up, I&amp;#39;ve been bored and started looking at Ruby and Python for ideas (I&amp;#39;ve used Python for scripting in the past and Ruby in a couple of just hacked together fun projects). Basically I took a bunch of their built in functions and classes and built a number of C# equivalents. I plan on doing this with other languages in the future, so if you have any suggestions of languages or standard libraries to look at, let me know.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository here is Mercurial. Also note that there are repository mirrors available on Bitbucket and Github: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src"&gt;Bitbucket&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library"&gt;GitHub&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Sat, 01 Sep 2012 01:47:16 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120901014716A</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=23</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 4.0 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com"&gt;http://www.gutgames.com&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a list of features, take a look at the &lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; page. In this latest update, I got bored and started looking at Ruby and Python for ideas (I&amp;#39;ve used Python for scripting in the past and Ruby in a couple of just hacked together fun projects). Basically I took a bunch of their built in functions and classes and built a number of C# equivalents. I plan on doing this with other languages in the future, so if you have any suggestions of languages or standard libraries to look at, let me know.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository here is Mercurial. Also note that there are repository mirrors available on Bitbucket and Github: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src"&gt;Bitbucket&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library"&gt;GitHub&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Fri, 23 Mar 2012 17:35:36 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120323053536P</guid></item><item><title>Updated Wiki: List of Features</title><link>http://cul.codeplex.com/wikipage?title=List of Features&amp;version=4</link><description>&lt;div class="wikidoc"&gt;Craig&amp;#39;s Utility Library is one of the largest collections of extension methods and various helper classes out there. It has gotten to the point where if you can think it, it&amp;#39;s probably already in there (and if not, put a message on the Issue Tracker and I&amp;#39;ll add it when I get bored, which is often). So how much is in there, well let&amp;#39;s start with the extension methods:&lt;br /&gt;&lt;u&gt;Utilities.DataTypes.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Array extensions
&lt;ul&gt;&lt;li&gt;Clear&lt;/li&gt;
&lt;li&gt;Combine&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;DateTime extensions
&lt;ul&gt;&lt;li&gt;DaysInMonth&lt;/li&gt;
&lt;li&gt;DaysLeftInMonth&lt;/li&gt;
&lt;li&gt;DaysLeftInYear&lt;/li&gt;
&lt;li&gt;FirstDayOfMonth&lt;/li&gt;
&lt;li&gt;FirstDayOfWeek&lt;/li&gt;
&lt;li&gt;FromUnixTime (actually extension for int and long values)&lt;/li&gt;
&lt;li&gt;IsInFuture&lt;/li&gt;
&lt;li&gt;IsInPast&lt;/li&gt;
&lt;li&gt;IsWeekDay&lt;/li&gt;
&lt;li&gt;IsWeekEnd&lt;/li&gt;
&lt;li&gt;LastDayOfMonth&lt;/li&gt;
&lt;li&gt;LastDayOfWeek&lt;/li&gt;
&lt;li&gt;ToUnix&lt;/li&gt;
&lt;li&gt;FirstDayOfQuarter&lt;/li&gt;
&lt;li&gt;FirstDayOfYear&lt;/li&gt;
&lt;li&gt;LastDayOfQuarter&lt;/li&gt;
&lt;li&gt;LastDayOfYear&lt;/li&gt;
&lt;li&gt;ConvertToTimeZone (assumes that times are in UTC time)&lt;/li&gt;
&lt;li&gt;LocalTimeZone&lt;/li&gt;
&lt;li&gt;AddWeeks&lt;/li&gt;
&lt;li&gt;Age&lt;/li&gt;
&lt;li&gt;BeginningOfDay&lt;/li&gt;
&lt;li&gt;EndOfDay&lt;/li&gt;
&lt;li&gt;IsToday&lt;/li&gt;
&lt;li&gt;SetTime&lt;/li&gt;
&lt;li&gt;UTCOffset&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Generic object extensions
&lt;ul&gt;&lt;li&gt;If&lt;/li&gt;
&lt;li&gt;NotIf&lt;/li&gt;
&lt;li&gt;Return&lt;/li&gt;
&lt;li&gt;Chain&lt;/li&gt;
&lt;li&gt;Do&lt;/li&gt;
&lt;li&gt;Execute&lt;/li&gt;
&lt;li&gt;ThrowIfTrue&lt;/li&gt;
&lt;li&gt;ThrowIfFalse&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;ICollection extensions
&lt;ul&gt;&lt;li&gt;AddAndReturn&lt;/li&gt;
&lt;li&gt;AddRange&lt;/li&gt;
&lt;li&gt;AddIf&lt;/li&gt;
&lt;li&gt;AddIfUnique&lt;/li&gt;
&lt;li&gt;Remove&lt;/li&gt;
&lt;li&gt;RemoveRange&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IComparable extensions
&lt;ul&gt;&lt;li&gt;Between&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IDictionary extensions
&lt;ul&gt;&lt;li&gt;Sort&lt;/li&gt;
&lt;li&gt;SortByValue&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IEnumerable extensions
&lt;ul&gt;&lt;li&gt;Exists&lt;/li&gt;
&lt;li&gt;For&lt;/li&gt;
&lt;li&gt;ForEach&lt;/li&gt;
&lt;li&gt;ForParallel&lt;/li&gt;
&lt;li&gt;ForEachParallel&lt;/li&gt;
&lt;li&gt;IsNullOrEmpty&lt;/li&gt;
&lt;li&gt;RemoveDefaults&lt;/li&gt;
&lt;li&gt;ToArray&lt;/li&gt;
&lt;li&gt;ToString&lt;/li&gt;
&lt;li&gt;TrueForAll&lt;/li&gt;
&lt;li&gt;TryAll&lt;/li&gt;
&lt;li&gt;TryAllParallel&lt;/li&gt;
&lt;li&gt;FalseForAll&lt;/li&gt;
&lt;li&gt;FalseForAny&lt;/li&gt;
&lt;li&gt;TrueForAll&lt;/li&gt;
&lt;li&gt;TrueForAny&lt;/li&gt;
&lt;li&gt;ThrowIfFalseForAll&lt;/li&gt;
&lt;li&gt;ThrowIfFalseForAny&lt;/li&gt;
&lt;li&gt;ThrowIfTrueForAll&lt;/li&gt;
&lt;li&gt;ThrowIfTrueForAny&lt;/li&gt;
&lt;li&gt;ElementsBetween&lt;/li&gt;
&lt;li&gt;First&lt;/li&gt;
&lt;li&gt;Last&lt;/li&gt;
&lt;li&gt;ToDataTable&lt;/li&gt;
&lt;li&gt;ToCSV&lt;/li&gt;
&lt;li&gt;ToDelimitedFile&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;MatchCollection extensions
&lt;ul&gt;&lt;li&gt;Where&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;string extensions
&lt;ul&gt;&lt;li&gt;Encode&lt;/li&gt;
&lt;li&gt;FromBase64&lt;/li&gt;
&lt;li&gt;Left&lt;/li&gt;
&lt;li&gt;Right&lt;/li&gt;
&lt;li&gt;ToBase64&lt;/li&gt;
&lt;li&gt;ToByteArray&lt;/li&gt;
&lt;li&gt;ToFirstCharacterUpperCase&lt;/li&gt;
&lt;li&gt;ToSentenceCapitalize&lt;/li&gt;
&lt;li&gt;ToTitleCase&lt;/li&gt;
&lt;li&gt;NumberTimesOccurs&lt;/li&gt;
&lt;li&gt;Reverse&lt;/li&gt;
&lt;li&gt;FilterOutText&lt;/li&gt;
&lt;li&gt;KeepFilterText&lt;/li&gt;
&lt;li&gt;AlphaNumericOnly&lt;/li&gt;
&lt;li&gt;AlphaCharactersOnly&lt;/li&gt;
&lt;li&gt;NumericOnly&lt;/li&gt;
&lt;li&gt;IsUnicode&lt;/li&gt;
&lt;li&gt;FormatString&lt;/li&gt;
&lt;li&gt;RegexFormat&lt;/li&gt;
&lt;li&gt;ExpandTabs&lt;/li&gt;
&lt;li&gt;StripLeft&lt;/li&gt;
&lt;li&gt;StripRight&lt;/li&gt;
&lt;li&gt;Pluralize&lt;/li&gt;
&lt;li&gt;Singularize&lt;/li&gt;
&lt;li&gt;Center&lt;/li&gt;
&lt;li&gt;MaskLeft&lt;/li&gt;
&lt;li&gt;MaskRight&lt;/li&gt;
&lt;li&gt;UrlDecode&lt;/li&gt;
&lt;li&gt;UrlEncode&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Various type conversion/type checking extensions
&lt;ul&gt;&lt;li&gt;FormatToString&lt;/li&gt;
&lt;li&gt;IsNotDefault&lt;/li&gt;
&lt;li&gt;IsDefault&lt;/li&gt;
&lt;li&gt;IsNotNull&lt;/li&gt;
&lt;li&gt;IsNull&lt;/li&gt;
&lt;li&gt;IsNotNullOrDBNull&lt;/li&gt;
&lt;li&gt;IsNullOrDBNull&lt;/li&gt;
&lt;li&gt;NullCheck&lt;/li&gt;
&lt;li&gt;ThrowIfDefault&lt;/li&gt;
&lt;li&gt;ThrowIfNullOrEmpty&lt;/li&gt;
&lt;li&gt;ThrowIfNullOrDBNull&lt;/li&gt;
&lt;li&gt;ToSQLDbType&lt;/li&gt;
&lt;li&gt;ToDbType&lt;/li&gt;
&lt;li&gt;ToType&lt;/li&gt;
&lt;li&gt;TryTo&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Various value type extensions
&lt;ul&gt;&lt;li&gt;ToBool (int)&lt;/li&gt;
&lt;li&gt;ToInt (bool)&lt;/li&gt;
&lt;li&gt;ToBase64String (byte array)&lt;/li&gt;
&lt;li&gt;ToEncodedString (byte array)&lt;/li&gt;
&lt;li&gt;IsUnicode (byte array)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;TimeSpan Extensions
&lt;ul&gt;&lt;li&gt;Years&lt;/li&gt;
&lt;li&gt;Months&lt;/li&gt;
&lt;li&gt;DaysRemainder&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;DataTable Extensions
&lt;ul&gt;&lt;li&gt;ToList&lt;/li&gt;
&lt;li&gt;ToCSV&lt;/li&gt;
&lt;li&gt;ToDelimitedFile&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Math.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Math extensions
&lt;ul&gt;&lt;li&gt;Between&lt;/li&gt;
&lt;li&gt;Clamp&lt;/li&gt;
&lt;li&gt;Factorial&lt;/li&gt;
&lt;li&gt;Max&lt;/li&gt;
&lt;li&gt;Median&lt;/li&gt;
&lt;li&gt;Min&lt;/li&gt;
&lt;li&gt;Mode&lt;/li&gt;
&lt;li&gt;Pow&lt;/li&gt;
&lt;li&gt;Round&lt;/li&gt;
&lt;li&gt;StandardDeviation&lt;/li&gt;
&lt;li&gt;Sqrt&lt;/li&gt;
&lt;li&gt;Variance&lt;/li&gt;
&lt;li&gt;Permute&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.SQL.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;DbCommand extensions
&lt;ul&gt;&lt;li&gt;AddParameter&lt;/li&gt;
&lt;li&gt;BeginTransaction&lt;/li&gt;
&lt;li&gt;ClearParameters&lt;/li&gt;
&lt;li&gt;Close&lt;/li&gt;
&lt;li&gt;Commit&lt;/li&gt;
&lt;li&gt;ExecuteDataSet&lt;/li&gt;
&lt;li&gt;ExecuteScalar&lt;/li&gt;
&lt;li&gt;GetOutputParameter&lt;/li&gt;
&lt;li&gt;Open&lt;/li&gt;
&lt;li&gt;Rollback&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;DbDataReader extensions
&lt;ul&gt;&lt;li&gt;GetParameter&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Compression.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Compress (both byte arrays and strings)&lt;/li&gt;
&lt;li&gt;Decompress (both byte arrays and strings)&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Encryption.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Hash (Now handles all hash algorithms in one function for both byte arrays and strings)&lt;/li&gt;
&lt;li&gt;Encrypt (Handles any symmetric encryption algorithm inside .Net)&lt;/li&gt;
&lt;li&gt;Decrypt (Handles any symmetric encryption algorithm inside .Net)&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.IO.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;DirectoryInfo extensions
&lt;ul&gt;&lt;li&gt;CopyTo&lt;/li&gt;
&lt;li&gt;DeleteAll&lt;/li&gt;
&lt;li&gt;DeleteFiles&lt;/li&gt;
&lt;li&gt;DeleteFilesNewerThan&lt;/li&gt;
&lt;li&gt;DeleteFilesOlderThan&lt;/li&gt;
&lt;li&gt;Size&lt;/li&gt;
&lt;li&gt;SetAttribute&lt;/li&gt;
&lt;li&gt;DriveInfo&lt;/li&gt;
&lt;li&gt;DeleteDirectoriesNewerThan&lt;/li&gt;
&lt;li&gt;DeleteDirectoriesOlderThan&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;FileInfo extensions
&lt;ul&gt;&lt;li&gt;Append&lt;/li&gt;
&lt;li&gt;CompareTo&lt;/li&gt;
&lt;li&gt;Read&lt;/li&gt;
&lt;li&gt;ReadBinary&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;SaveAsync&lt;/li&gt;
&lt;li&gt;SetAttributes&lt;/li&gt;
&lt;li&gt;DriveInfo&lt;/li&gt;
&lt;li&gt;Execute&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;String extensions
&lt;ul&gt;&lt;li&gt;RemoveIllegalDirectoryNameCharacters&lt;/li&gt;
&lt;li&gt;RemoveIllegalFileNameCharacters&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Serialization extensions
&lt;ul&gt;&lt;li&gt;ToBinary&lt;/li&gt;
&lt;li&gt;ToJSON&lt;/li&gt;
&lt;li&gt;ToSOAP&lt;/li&gt;
&lt;li&gt;ToXML&lt;/li&gt;
&lt;li&gt;ToObject&lt;/li&gt;
&lt;li&gt;JSONToObject&lt;/li&gt;
&lt;li&gt;SOAPToObject&lt;/li&gt;
&lt;li&gt;XMLToObject&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Uri extensions
&lt;ul&gt;&lt;li&gt;Read&lt;/li&gt;
&lt;li&gt;ReadBinary&lt;/li&gt;
&lt;li&gt;Execute&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Web.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Web related extensions
&lt;ul&gt;&lt;li&gt;AbsoluteRoot&lt;/li&gt;
&lt;li&gt;AddScriptFile&lt;/li&gt;
&lt;li&gt;ContainsHTML&lt;/li&gt;
&lt;li&gt;HTTPCompress&lt;/li&gt;
&lt;li&gt;IsEncodingAccepted&lt;/li&gt;
&lt;li&gt;RelativeRoot&lt;/li&gt;
&lt;li&gt;RemoveURLIllegalCharacters&lt;/li&gt;
&lt;li&gt;SetEncoding&lt;/li&gt;
&lt;li&gt;StripHTML&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IPAddress extensions
&lt;ul&gt;&lt;li&gt;GetHostName&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Minification
&lt;ul&gt;&lt;li&gt;Combine (can be used for HTML,JavaScript, or CSS)&lt;/li&gt;
&lt;li&gt;Minify (can be used for HTML, JavaScript, or CSS)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;HttpRequest extensions
&lt;ul&gt;&lt;li&gt;IsMobile&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Image.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;All Bitmap functions were moved
&lt;ul&gt;&lt;li&gt;Added ToBase64 extension method&lt;/li&gt;
&lt;li&gt; Added DrawRoundedRectangle extension&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Screen extensions
&lt;ul&gt;&lt;li&gt;TakeScreenShot&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Error.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Various error related extensions
&lt;ul&gt;&lt;li&gt;DumpApplicationState&lt;/li&gt;
&lt;li&gt;DumpCache&lt;/li&gt;
&lt;li&gt;DumpCookies&lt;/li&gt;
&lt;li&gt;DumpRequestVariable&lt;/li&gt;
&lt;li&gt;DumpResponseVariable&lt;/li&gt;
&lt;li&gt;DumpServerVars&lt;/li&gt;
&lt;li&gt;DumpSession&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Reflection.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Various reflection related extensions
&lt;ul&gt;&lt;li&gt;CallMethod&lt;/li&gt;
&lt;li&gt;CreateInstance&lt;/li&gt;
&lt;li&gt;DumpProperties&lt;/li&gt;
&lt;li&gt;GetAttribute&lt;/li&gt;
&lt;li&gt;GetAttributes&lt;/li&gt;
&lt;li&gt;GetName&lt;/li&gt;
&lt;li&gt;GetObjects&lt;/li&gt;
&lt;li&gt;GetProperty&lt;/li&gt;
&lt;li&gt;GetPropertyGetter&lt;/li&gt;
&lt;li&gt;GetPropertyName&lt;/li&gt;
&lt;li&gt;GetPropertyType&lt;/li&gt;
&lt;li&gt;GetPropertySetter&lt;/li&gt;
&lt;li&gt;GetTypes&lt;/li&gt;
&lt;li&gt;IsIEnumerable&lt;/li&gt;
&lt;li&gt;IsOfType&lt;/li&gt;
&lt;li&gt;Load&lt;/li&gt;
&lt;li&gt;LoadAssemblies&lt;/li&gt;
&lt;li&gt;MarkedWith&lt;/li&gt;
&lt;li&gt;MakeShallowCopy&lt;/li&gt;
&lt;li&gt;SetProperty&lt;/li&gt;
&lt;li&gt;ToLongVersionString&lt;/li&gt;
&lt;li&gt;ToShortVersionString&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Environment.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Process related extensions
&lt;ul&gt;&lt;li&gt;KillProcessAsync&lt;/li&gt;
&lt;li&gt;GetInformation&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;On top of that there are a number of helper classes for a number of various tasks including (note that there are actually more, this is what I can remember off the top of my head):
&lt;ul&gt;&lt;li&gt;Email
&lt;ul&gt;&lt;li&gt;Pop3 client (SSL capable)&lt;/li&gt;
&lt;li&gt;MIME parser&lt;/li&gt;
&lt;li&gt;SMTP email sending (SSL capable)&lt;/li&gt;
&lt;li&gt;Exchange inbox email retrieval&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Image manipulation (one of the larger collections of functions dealing in image manipulation out there)
&lt;ul&gt;&lt;li&gt;Most image functions are multithreaded and thus act extremely quickly.&lt;/li&gt;
&lt;li&gt;Cropping, resizing, rotating, flipping&lt;/li&gt;
&lt;li&gt;To black and white or sepia tone&lt;/li&gt;
&lt;li&gt;Threshold and edge detection (including Sobel and Laplace)&lt;/li&gt;
&lt;li&gt;Text drawing, watermarks, object drawing helpers&lt;/li&gt;
&lt;li&gt;Taking a screenshot which spans monitors&lt;/li&gt;
&lt;li&gt;RGB Histograms&lt;/li&gt;
&lt;li&gt;Various convolution filters such as sharpen, sobel emboss, etc. along with the ability to create your own easily.&lt;/li&gt;
&lt;li&gt;Various other filters such as &amp;quot;jitter&amp;quot;, pixelate, sin wave, median filter, and dilation, red/green/blue filters,&lt;/li&gt;
&lt;li&gt;Multiple blurring techniques including box blur, Gaussian blur, Kuwahara, and Symmetric Nearest Neighbor blur&lt;/li&gt;
&lt;li&gt;Bump map and Normal map helpers&lt;/li&gt;
&lt;li&gt;ASCII art generator&lt;/li&gt;
&lt;li&gt;Adjust brightness, gamma, and contrast&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Active Directory querying
&lt;ul&gt;&lt;li&gt;Includes functions for active users, all users, all groups, active members in groups, etc.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Exchange querying
&lt;ul&gt;&lt;li&gt;Free/Busy data&lt;/li&gt;
&lt;li&gt;Get next/previous available time for appointments&lt;/li&gt;
&lt;li&gt;Get contacts&lt;/li&gt;
&lt;li&gt;Get appointments/events&lt;/li&gt;
&lt;li&gt;Get emails&lt;/li&gt;
&lt;li&gt;Get the GAL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;SQL query helper (which includes bulk copying functionality)&lt;/li&gt;
&lt;li&gt;MicroORM&lt;/li&gt;
&lt;li&gt;ORM (which includes lazy loading, etc.)&lt;/li&gt;
&lt;li&gt;SQL Server structural analysis helpers&lt;/li&gt;
&lt;li&gt;File formats/Microformats
&lt;ul&gt;&lt;li&gt;XMDP&lt;/li&gt;
&lt;li&gt;RSS (with iTunes/Zune information embedded for podcasts)&lt;/li&gt;
&lt;li&gt;vCard/hCard&lt;/li&gt;
&lt;li&gt;vCalendar/hCalendar&lt;/li&gt;
&lt;li&gt;iCalendar (with email sending capabilities, cancellation, and automatically putting it in Exchange)&lt;/li&gt;
&lt;li&gt;APML&lt;/li&gt;
&lt;li&gt;OPML&lt;/li&gt;
&lt;li&gt;XFN&lt;/li&gt;
&lt;li&gt;CSV (really any delimited file) with functions to convert it to a list of objects or a DataTable&lt;/li&gt;
&lt;li&gt;RSD&lt;/li&gt;
&lt;li&gt;BlogML&lt;/li&gt;
&lt;li&gt;INI&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Cisco phone app helpers&lt;/li&gt;
&lt;li&gt;WMI query helpers&lt;/li&gt;
&lt;li&gt;Code to render a web page to BMP file&lt;/li&gt;
&lt;li&gt;Icon extraction from a file&lt;/li&gt;
&lt;li&gt;WebBrowser control cache clearing class&lt;/li&gt;
&lt;li&gt;Helper classes for simplifying System.Reflection.Emit namespace&lt;/li&gt;
&lt;li&gt;Randomization
&lt;ul&gt;&lt;li&gt;Including string randomization based on allowable characters, date randomization, Color, Enum, TimeSpan, and Lorem Ipsum generation.&lt;/li&gt;
&lt;li&gt;Includes thread safe randomization function.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Environment information&lt;/li&gt;
&lt;li&gt;Process management&lt;/li&gt;
&lt;li&gt;Error/Information gathering&lt;/li&gt;
&lt;li&gt;Math related classes
&lt;ul&gt;&lt;li&gt;Matrix&lt;/li&gt;
&lt;li&gt;Vector3&lt;/li&gt;
&lt;li&gt;Set&lt;/li&gt;
&lt;li&gt;Factorial&lt;/li&gt;
&lt;li&gt;Permutation&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Data types
&lt;ul&gt;&lt;li&gt;Vector&lt;/li&gt;
&lt;li&gt;Bag&lt;/li&gt;
&lt;li&gt;List&lt;/li&gt;
&lt;li&gt;ListMapping&lt;/li&gt;
&lt;li&gt;Priority Queue&lt;/li&gt;
&lt;li&gt;BTree&lt;/li&gt;
&lt;li&gt;DateSpan&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Base classes for various patterns including
&lt;ul&gt;&lt;li&gt;Singleton&lt;/li&gt;
&lt;li&gt;Factory&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;OAuth helper class&lt;/li&gt;
&lt;li&gt;Code for setting up an OpenID relay&lt;/li&gt;
&lt;li&gt;REST helper class&lt;/li&gt;
&lt;li&gt;Classes to help with various media services/websites including
&lt;ul&gt;&lt;li&gt;Twitter&lt;/li&gt;
&lt;li&gt;Hulu&lt;/li&gt;
&lt;li&gt;Netflix&lt;/li&gt;
&lt;li&gt;Craigslist&lt;/li&gt;
&lt;li&gt;eBay&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Naive Bayes classifier&lt;/li&gt;
&lt;li&gt;Validation classes&lt;/li&gt;
&lt;li&gt;Caching helper classes&lt;/li&gt;
&lt;li&gt;Logging helper classes&lt;/li&gt;
&lt;li&gt;Configuration helper classes&lt;/li&gt;
&lt;li&gt;AOP helper classes&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;On top of that I add new code, bug fixes, etc. quite frequently through the code repository.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Fri, 23 Mar 2012 17:23:50 GMT</pubDate><guid isPermaLink="false">Updated Wiki: List of Features 20120323052350P</guid></item><item><title>New Comment on "List of Features"</title><link>http://cul.codeplex.com/wikipage?title=List of Features&amp;ANCHOR#C22154</link><description>Awesome list of features. Love the &amp;#34;off the top of my head&amp;#34; remark &amp;#59;&amp;#41; I&amp;#39;ll be sure to have a look whenever I need to code in .Net again...</description><author>reiniero</author><pubDate>Sun, 08 Jan 2012 08:20:33 GMT</pubDate><guid isPermaLink="false">New Comment on "List of Features" 20120108082033A</guid></item><item><title>Updated Wiki: List of Features</title><link>http://cul.codeplex.com/wikipage?title=List of Features&amp;version=3</link><description>&lt;div class="wikidoc"&gt;Craig&amp;#39;s Utility Library is one of the largest collections of extension methods and various helper classes out there. It has gotten to the point where if you can think it, it&amp;#39;s probably already in there (and if not, put a message on the Issue Tracker and I&amp;#39;ll add it when I get bored, which is often). So how much is in there, well let&amp;#39;s start with the extension methods:&lt;br /&gt;&lt;u&gt;Utilities.DataTypes.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Array extensions
&lt;ul&gt;&lt;li&gt;Clear&lt;/li&gt;
&lt;li&gt;Combine&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;DateTime extensions
&lt;ul&gt;&lt;li&gt;DaysInMonth&lt;/li&gt;
&lt;li&gt;DaysLeftInMonth&lt;/li&gt;
&lt;li&gt;DaysLeftInYear&lt;/li&gt;
&lt;li&gt;FirstDayOfMonth&lt;/li&gt;
&lt;li&gt;FirstDayOfWeek&lt;/li&gt;
&lt;li&gt;FromUnixTime (actually extension for int and long values)&lt;/li&gt;
&lt;li&gt;IsInFuture&lt;/li&gt;
&lt;li&gt;IsInPast&lt;/li&gt;
&lt;li&gt;IsWeekDay&lt;/li&gt;
&lt;li&gt;IsWeekEnd&lt;/li&gt;
&lt;li&gt;LastDayOfMonth&lt;/li&gt;
&lt;li&gt;LastDayOfWeek&lt;/li&gt;
&lt;li&gt;ToUnix&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Generic object extensions
&lt;ul&gt;&lt;li&gt;If&lt;/li&gt;
&lt;li&gt;NotIf&lt;/li&gt;
&lt;li&gt;Return&lt;/li&gt;
&lt;li&gt;Chain&lt;/li&gt;
&lt;li&gt;Do&lt;/li&gt;
&lt;li&gt;Execute&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;ICollection extensions
&lt;ul&gt;&lt;li&gt;AddAndReturn&lt;/li&gt;
&lt;li&gt;AddRange&lt;/li&gt;
&lt;li&gt;AddIf&lt;/li&gt;
&lt;li&gt;AddIfUnique&lt;/li&gt;
&lt;li&gt;Remove&lt;/li&gt;
&lt;li&gt;RemoveRange&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IComparable extensions
&lt;ul&gt;&lt;li&gt;Between&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IDictionary extensions
&lt;ul&gt;&lt;li&gt;Sort&lt;/li&gt;
&lt;li&gt;SortByValue&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IEnumerable extensions
&lt;ul&gt;&lt;li&gt;Exists&lt;/li&gt;
&lt;li&gt;For&lt;/li&gt;
&lt;li&gt;ForEach&lt;/li&gt;
&lt;li&gt;ForParallel&lt;/li&gt;
&lt;li&gt;ForEachParallel&lt;/li&gt;
&lt;li&gt;IsNullOrEmpty&lt;/li&gt;
&lt;li&gt;RemoveDefaults&lt;/li&gt;
&lt;li&gt;ToArray&lt;/li&gt;
&lt;li&gt;ToString&lt;/li&gt;
&lt;li&gt;TrueForAll&lt;/li&gt;
&lt;li&gt;TryAll&lt;/li&gt;
&lt;li&gt;TryAllParallel&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;MatchCollection extensions
&lt;ul&gt;&lt;li&gt;Where&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;string extensions
&lt;ul&gt;&lt;li&gt;Encode&lt;/li&gt;
&lt;li&gt;FromBase64&lt;/li&gt;
&lt;li&gt;Left&lt;/li&gt;
&lt;li&gt;Right&lt;/li&gt;
&lt;li&gt;ToBase64&lt;/li&gt;
&lt;li&gt;ToByteArray&lt;/li&gt;
&lt;li&gt;ToFirstCharacterUpperCase&lt;/li&gt;
&lt;li&gt;ToSentenceCapitalize&lt;/li&gt;
&lt;li&gt;ToTitleCase&lt;/li&gt;
&lt;li&gt;NumberTimesOccurs&lt;/li&gt;
&lt;li&gt;Reverse&lt;/li&gt;
&lt;li&gt;FilterOutText&lt;/li&gt;
&lt;li&gt;KeepFilterText&lt;/li&gt;
&lt;li&gt;AlphaNumericOnly&lt;/li&gt;
&lt;li&gt;AlphaCharactersOnly&lt;/li&gt;
&lt;li&gt;NumericOnly&lt;/li&gt;
&lt;li&gt;IsUnicode&lt;/li&gt;
&lt;li&gt;FormatString&lt;/li&gt;
&lt;li&gt;RegexFormat&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Various type conversion/type checking extensions
&lt;ul&gt;&lt;li&gt;FormatToString&lt;/li&gt;
&lt;li&gt;IsNotDefault&lt;/li&gt;
&lt;li&gt;IsDefault&lt;/li&gt;
&lt;li&gt;IsNotNull&lt;/li&gt;
&lt;li&gt;IsNull&lt;/li&gt;
&lt;li&gt;IsNotNullOrDBNull&lt;/li&gt;
&lt;li&gt;IsNullOrDBNull&lt;/li&gt;
&lt;li&gt;NullCheck&lt;/li&gt;
&lt;li&gt;ThrowIfDefault&lt;/li&gt;
&lt;li&gt;ThrowIfNullOrEmpty&lt;/li&gt;
&lt;li&gt;ThrowIfNullOrDBNull&lt;/li&gt;
&lt;li&gt;ToSQLDbType&lt;/li&gt;
&lt;li&gt;ToDbType&lt;/li&gt;
&lt;li&gt;ToType&lt;/li&gt;
&lt;li&gt;TryTo&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Various value type extensions
&lt;ul&gt;&lt;li&gt;ToBool (int)&lt;/li&gt;
&lt;li&gt;ToInt (bool)&lt;/li&gt;
&lt;li&gt;ToBase64String (byte array)&lt;/li&gt;
&lt;li&gt;ToEncodedString (byte array)&lt;/li&gt;
&lt;li&gt;IsUnicode (byte array)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.IO.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Serialization extensions
&lt;ul&gt;&lt;li&gt;ToBinary&lt;/li&gt;
&lt;li&gt;ToJSON&lt;/li&gt;
&lt;li&gt;ToSOAP&lt;/li&gt;
&lt;li&gt;ToXML&lt;/li&gt;
&lt;li&gt;ToObject&lt;/li&gt;
&lt;li&gt;JSONToObject&lt;/li&gt;
&lt;li&gt;SOAPToObject&lt;/li&gt;
&lt;li&gt;XMLToObject&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Uri extensions
&lt;ul&gt;&lt;li&gt;Read&lt;/li&gt;
&lt;li&gt;ReadBinary&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Math extensions
&lt;ul&gt;&lt;li&gt;Betweek&lt;/li&gt;
&lt;li&gt;Clamp&lt;/li&gt;
&lt;li&gt;Factorial&lt;/li&gt;
&lt;li&gt;Max&lt;/li&gt;
&lt;li&gt;Median&lt;/li&gt;
&lt;li&gt;Min&lt;/li&gt;
&lt;li&gt;Mode&lt;/li&gt;
&lt;li&gt;Pow&lt;/li&gt;
&lt;li&gt;Round&lt;/li&gt;
&lt;li&gt;StandardDeviation&lt;/li&gt;
&lt;li&gt;Sqrt&lt;/li&gt;
&lt;li&gt;Variance&lt;/li&gt;
&lt;li&gt;Permute&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.SQL.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;DbCommand extensions
&lt;ul&gt;&lt;li&gt;AddParameter&lt;/li&gt;
&lt;li&gt;BeginTransaction&lt;/li&gt;
&lt;li&gt;ClearParameters&lt;/li&gt;
&lt;li&gt;Close&lt;/li&gt;
&lt;li&gt;Commit&lt;/li&gt;
&lt;li&gt;ExecuteDataSet&lt;/li&gt;
&lt;li&gt;ExecuteScalar&lt;/li&gt;
&lt;li&gt;GetOutputParameter&lt;/li&gt;
&lt;li&gt;Open&lt;/li&gt;
&lt;li&gt;Rollback&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;DbDataReader extensions
&lt;ul&gt;&lt;li&gt;GetParameter&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Compression.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Compress (both byte arrays and strings)&lt;/li&gt;
&lt;li&gt;Decompress (both byte arrays and strings)&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Encryption.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Hash (Now handles all hash algorithms in one function for both byte arrays and strings)&lt;/li&gt;
&lt;li&gt;Encrypt (Handles any symmetric encryption algorithm inside .Net)&lt;/li&gt;
&lt;li&gt;Decrypt (Handles any symmetric encryption algorithm inside .Net)&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.IO.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;DirectoryInfo extensions
&lt;ul&gt;&lt;li&gt;CopyTo&lt;/li&gt;
&lt;li&gt;DeleteAll&lt;/li&gt;
&lt;li&gt;DeleteFiles&lt;/li&gt;
&lt;li&gt;DeleteFilesNewerThan&lt;/li&gt;
&lt;li&gt;DeleteFilesOlderThan&lt;/li&gt;
&lt;li&gt;Size&lt;/li&gt;
&lt;li&gt;SetAttribute&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;FileInfo extensions
&lt;ul&gt;&lt;li&gt;Append&lt;/li&gt;
&lt;li&gt;CompareTo&lt;/li&gt;
&lt;li&gt;Read&lt;/li&gt;
&lt;li&gt;ReadBinary&lt;/li&gt;
&lt;li&gt;Save&lt;/li&gt;
&lt;li&gt;SaveAsync&lt;/li&gt;
&lt;li&gt;SetAttributes&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;String extensions
&lt;ul&gt;&lt;li&gt;RemoveIllegalDirectoryNameCharacters&lt;/li&gt;
&lt;li&gt;RemoveIllegalFileNameCharacters&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Web.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Web related extensions
&lt;ul&gt;&lt;li&gt;AbsoluteRoot&lt;/li&gt;
&lt;li&gt;AddScriptFile&lt;/li&gt;
&lt;li&gt;ContainsHTML&lt;/li&gt;
&lt;li&gt;HTTPCompress&lt;/li&gt;
&lt;li&gt;IsEncodingAccepted&lt;/li&gt;
&lt;li&gt;RelativeRoot&lt;/li&gt;
&lt;li&gt;RemoveURLIllegalCharacters&lt;/li&gt;
&lt;li&gt;SetEncoding&lt;/li&gt;
&lt;li&gt;StripHTML&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;IPAddress extensions
&lt;ul&gt;&lt;li&gt;GetHostName&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Minification
&lt;ul&gt;&lt;li&gt;Combine (can be used for HTML,JavaScript, or CSS)&lt;/li&gt;
&lt;li&gt;Minify (can be used for HTML, JavaScript, or CSS)&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;HttpRequest extensions
&lt;ul&gt;&lt;li&gt;IsMobile&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Image.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;All Bitmap functions were moved
&lt;ul&gt;&lt;li&gt;Added ToBase64 extension method&lt;/li&gt;
&lt;li&gt; Added DrawRoundedRectangle extension&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Screen extensions
&lt;ul&gt;&lt;li&gt;TakeScreenShot&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Error.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Various error related extensions
&lt;ul&gt;&lt;li&gt;DumpApplicationState&lt;/li&gt;
&lt;li&gt;DumpCache&lt;/li&gt;
&lt;li&gt;DumpCookies&lt;/li&gt;
&lt;li&gt;DumpRequestVariable&lt;/li&gt;
&lt;li&gt;DumpResponseVariable&lt;/li&gt;
&lt;li&gt;DumpServerVars&lt;/li&gt;
&lt;li&gt;DumpSession&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Reflection.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Various reflection related extensions
&lt;ul&gt;&lt;li&gt;CallMethod&lt;/li&gt;
&lt;li&gt;CreateInstance&lt;/li&gt;
&lt;li&gt;DumpProperties&lt;/li&gt;
&lt;li&gt;GetAttribute&lt;/li&gt;
&lt;li&gt;GetAttributes&lt;/li&gt;
&lt;li&gt;GetName&lt;/li&gt;
&lt;li&gt;GetObjects&lt;/li&gt;
&lt;li&gt;GetProperty&lt;/li&gt;
&lt;li&gt;GetPropertyGetter&lt;/li&gt;
&lt;li&gt;GetPropertyName&lt;/li&gt;
&lt;li&gt;GetPropertyType&lt;/li&gt;
&lt;li&gt;GetPropertySetter&lt;/li&gt;
&lt;li&gt;GetTypes&lt;/li&gt;
&lt;li&gt;IsIEnumerable&lt;/li&gt;
&lt;li&gt;IsOfType&lt;/li&gt;
&lt;li&gt;Load&lt;/li&gt;
&lt;li&gt;LoadAssemblies&lt;/li&gt;
&lt;li&gt;MarkedWith&lt;/li&gt;
&lt;li&gt;MakeShallowCopy&lt;/li&gt;
&lt;li&gt;SetProperty&lt;/li&gt;
&lt;li&gt;ToLongVersionString&lt;/li&gt;
&lt;li&gt;ToShortVersionString&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;u&gt;Utilities.Environment.ExtensionMethods&lt;/u&gt;
&lt;ul&gt;&lt;li&gt;Process related extensions
&lt;ul&gt;&lt;li&gt;KillProcessAsync&lt;/li&gt;
&lt;li&gt;GetInformation&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;On top of that there are a number of helper classes for a number of various tasks including (note that there are actually more, this is what I can remember off the top of my head):
&lt;ul&gt;&lt;li&gt;Email
&lt;ul&gt;&lt;li&gt;Pop3 client (SSL capable)&lt;/li&gt;
&lt;li&gt;MIME parser&lt;/li&gt;
&lt;li&gt;SMTP email sending (SSL capable)&lt;/li&gt;
&lt;li&gt;Exchange inbox email retrieval&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Image manipulation (one of the larger collections of functions dealing in image manipulation out there)
&lt;ul&gt;&lt;li&gt;Cropping, resizing, rotating, flipping&lt;/li&gt;
&lt;li&gt;To black and white or sepia tone&lt;/li&gt;
&lt;li&gt;Threshold and edge detection (including Sobel and Laplace)&lt;/li&gt;
&lt;li&gt;Text drawing, watermarks, object drawing helpers&lt;/li&gt;
&lt;li&gt;Taking a screenshot which spans monitors&lt;/li&gt;
&lt;li&gt;RGB Histograms&lt;/li&gt;
&lt;li&gt;Various convolution filters such as sharpen, sobel emboss, etc. along with the ability to create your own easily.&lt;/li&gt;
&lt;li&gt;Various other filters such as &amp;quot;jitter&amp;quot;, pixelate, sin wave, median filter, and dilation, red/green/blue filters,&lt;/li&gt;
&lt;li&gt;Multiple blurring techniques including box blur, Gaussian blur, Kuwahara, and Symmetric Nearest Neighbor blur&lt;/li&gt;
&lt;li&gt;Bump map and Normal map helpers&lt;/li&gt;
&lt;li&gt;ASCII art generator&lt;/li&gt;
&lt;li&gt;Adjust brightness, gamma, and contrast&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Active Directory querying
&lt;ul&gt;&lt;li&gt;Includes functions for active users, all users, all groups, active members in groups, etc.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Exchange querying
&lt;ul&gt;&lt;li&gt;Free/Busy data&lt;/li&gt;
&lt;li&gt;Get next/previous available time for appointments&lt;/li&gt;
&lt;li&gt;Get contacts&lt;/li&gt;
&lt;li&gt;Get appointments/events&lt;/li&gt;
&lt;li&gt;Get emails&lt;/li&gt;
&lt;li&gt;Get the GAL&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;SQL query helper&lt;/li&gt;
&lt;li&gt;MicroORM&lt;/li&gt;
&lt;li&gt;ORM (which includes lazy loading, etc.)&lt;/li&gt;
&lt;li&gt;SQL Server structural analysis helpers&lt;/li&gt;
&lt;li&gt;File formats/Microformats
&lt;ul&gt;&lt;li&gt;XMDP&lt;/li&gt;
&lt;li&gt;RSS (with iTunes/Zune information embedded for podcasts)&lt;/li&gt;
&lt;li&gt;vCard/hCard&lt;/li&gt;
&lt;li&gt;vCalendar/hCalendar&lt;/li&gt;
&lt;li&gt;iCalendar (with email sending capabilities, cancellation, and automatically putting it in Exchange)&lt;/li&gt;
&lt;li&gt;APML&lt;/li&gt;
&lt;li&gt;OPML&lt;/li&gt;
&lt;li&gt;XFN&lt;/li&gt;
&lt;li&gt;CSV&lt;/li&gt;
&lt;li&gt;RSD&lt;/li&gt;
&lt;li&gt;BlogML&lt;/li&gt;
&lt;li&gt;INI&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Cisco phone app helpers&lt;/li&gt;
&lt;li&gt;WMI query helpers&lt;/li&gt;
&lt;li&gt;Code to render a web page to BMP file&lt;/li&gt;
&lt;li&gt;Icon extraction from a file&lt;/li&gt;
&lt;li&gt;WebBrowser control cache clearing class&lt;/li&gt;
&lt;li&gt;Helper classes for simplifying System.Reflection.Emit namespace&lt;/li&gt;
&lt;li&gt;Randomization
&lt;ul&gt;&lt;li&gt;Including string randomization based on allowable characters, date randomization, Color, Enum, TimeSpan, and Lorem Ipsum generation.&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Environment information&lt;/li&gt;
&lt;li&gt;Process management&lt;/li&gt;
&lt;li&gt;Error/Information gathering&lt;/li&gt;
&lt;li&gt;Math related classes
&lt;ul&gt;&lt;li&gt;Matrix&lt;/li&gt;
&lt;li&gt;Vector3&lt;/li&gt;
&lt;li&gt;Set&lt;/li&gt;
&lt;li&gt;Factorial&lt;/li&gt;
&lt;li&gt;Permutation&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Data types
&lt;ul&gt;&lt;li&gt;Vector&lt;/li&gt;
&lt;li&gt;Bag&lt;/li&gt;
&lt;li&gt;List&lt;/li&gt;
&lt;li&gt;ListMapping&lt;/li&gt;
&lt;li&gt;Priority Queue&lt;/li&gt;
&lt;li&gt;BTree&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Base classes for various patterns including
&lt;ul&gt;&lt;li&gt;Singleton&lt;/li&gt;
&lt;li&gt;Factory&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;OAuth helper class&lt;/li&gt;
&lt;li&gt;Code for setting up an OpenID relay&lt;/li&gt;
&lt;li&gt;REST helper class&lt;/li&gt;
&lt;li&gt;Classes to help with various media services/websites including
&lt;ul&gt;&lt;li&gt;Twitter&lt;/li&gt;
&lt;li&gt;Hulu&lt;/li&gt;
&lt;li&gt;Netflix&lt;/li&gt;
&lt;li&gt;Craigslist&lt;/li&gt;
&lt;li&gt;eBay&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;
&lt;li&gt;Naive Bayes classifier&lt;/li&gt;
&lt;li&gt;Validation classes&lt;/li&gt;
&lt;li&gt;Caching helper classes&lt;/li&gt;
&lt;li&gt;Logging helper classes&lt;/li&gt;
&lt;li&gt;Configuration helper classes&lt;/li&gt;
&lt;li&gt;AOP helper classes&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;On top of that I add new code, bug fixes, etc. quite frequently through the code repository.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Thu, 15 Dec 2011 19:03:06 GMT</pubDate><guid isPermaLink="false">Updated Wiki: List of Features 20111215070306P</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=22</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 4.0 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com" class="externalLink"&gt;http://www.gutgames.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a list of features, take a look at the &lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; page. Note that if you&amp;#39;re updating from previous versions, this is a &lt;b&gt;HUGE&lt;/b&gt; update and will break existing code. However the break was needed to push the code to a more manageable state.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository has been updated now to Mercurial. Also note that there are repository mirrors available on Bitbucket and Github: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src" class="externalLink"&gt;Bitbucket&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library" class="externalLink"&gt;GitHub&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Thu, 15 Dec 2011 18:46:25 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111215064625P</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=21</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; | &lt;a href="http://cul.codeplex.com/wikipage?title=Road%20to%203.0&amp;referringTitle=Home"&gt;Road to 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 3.5 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com" class="externalLink"&gt;http://www.gutgames.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a list of features, take a look at the &lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; page. Also if you are interested in the future of this project, please look at the &lt;a href="http://cul.codeplex.com/wikipage?title=Road%20to%203.0&amp;referringTitle=Home"&gt;Road to 3.0&lt;/a&gt; page.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;The repository has been updated now to Mercurial. Once again thank you Wade/guy whom I can&amp;#39;t remember the name of and I deleted the email so I can&amp;#39;t look it up again... Especially you, guy who I can&amp;#39;t remember, you rock most of all (in all seriousness, I can&amp;#39;t remember your name but thank you). Anyway, to everyone else, feel free to start downloading the changes that have been made since the request went in as I&amp;#39;ve merged (as best as I can) the changes from the bitbucket/github repositories. Either that or simply use the other repositories if you&amp;#39;re already using them: &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src" class="externalLink"&gt;Bitbucket&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; and &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library" class="externalLink"&gt;GitHub&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; repositories. I&amp;#39;ll be updating all three with changes as I make them.&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Wed, 17 Aug 2011 15:18:22 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110817031822P</guid></item><item><title>Updated Wiki: Home</title><link>http://cul.codeplex.com/wikipage?version=20</link><description>&lt;div class="wikidoc"&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; | &lt;a href="http://cul.codeplex.com/wikipage?title=Road%20to%203.0&amp;referringTitle=Home"&gt;Road to 3.0&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project Description&lt;/b&gt;&lt;br /&gt;Craig&amp;#39;s Utility Library (or CUL, as in cull because I&amp;#39;m not that creative), was initially designed through a number of projects that I&amp;#39;ve worked on. Over time I assembled a number of classes to handle various tasks and continue to add a number of items in my spare time. The library is written in C# and uses .Net 3.5 but many of the classes are usable in lower versions. More code can be found on my website: &lt;a href="http://www.gutgames.com" class="externalLink"&gt;http://www.gutgames.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;For a list of features, take a look at the &lt;a href="http://cul.codeplex.com/wikipage?title=List%20of%20Features&amp;referringTitle=Home"&gt;List of Features&lt;/a&gt; page. Also if you are interested in the future of this project, please look at the &lt;a href="http://cul.codeplex.com/wikipage?title=Road%20to%203.0&amp;referringTitle=Home"&gt;Road to 3.0&lt;/a&gt; page.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Source Code Repository&lt;/b&gt;&lt;br /&gt;I&amp;#39;ve put in a couple requests to the people at Codeplex to switch this over to using Mercurial (it&amp;#39;s been a little over a month now since the first request). In the mean time, if you want to get the latest updates, please use either the &lt;a href="https://bitbucket.org/JaCraig/craigs-utility-library/src" class="externalLink"&gt;Bitbucket&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; or &lt;a href="https://github.com/JaCraig/Craig-s-Utility-Library" class="externalLink"&gt;GitHub&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; repositories. Until the switch is made, I will not be uploading new code in the repository here (However I will still do new releases here as well as NuGet, but hopefully the switch will happen before then).&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Wed, 10 Aug 2011 14:23:32 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110810022332P</guid></item><item><title>Updated Wiki: MicroORM Example</title><link>http://cul.codeplex.com/wikipage?title=MicroORM Example&amp;version=2</link><description>&lt;div class="wikidoc"&gt;Below is a short example of using the MicroORM code:&lt;br /&gt;&lt;pre&gt;
            Utilities.SQL.MicroORM.MicroORM.Database(&amp;quot;YourConnectionString&amp;quot;);                       //Sets the default connection string
            Utilities.SQL.MicroORM.MicroORM.Database(&amp;quot;YourConnectionString&amp;quot;,&amp;quot;Database2&amp;quot;);           //Sets the connection string. Saving it to Database2.
            Utilities.SQL.MicroORM.MicroORM.Map&amp;lt;MyClass&amp;gt;(&amp;quot;Table to map to&amp;quot;, &amp;quot;ID&amp;quot;)                   //Sets the table name, and tells the mapping that the ID field is the primary key
                .Map(x =&amp;gt; x.ID)                                                                     //Maps the ID field
                .Map(x =&amp;gt; x.Name, Length: 100)                                                      //Maps the name field, telling the mapping it uses a length of 100
                .Map(x =&amp;gt; x.Something, DatabasePropertyName: &amp;quot;someThing&amp;quot;, DefaultValue: 10.0f);     //Maps the something field, sets the field name in the database and
                                                                                                    //sets the default value that is returned if the database returns DBNull.
            using (Utilities.SQL.MicroORM.MicroORM ORM = new Utilities.SQL.MicroORM.MicroORM())
            {
                //Loads All
                IEnumerable&amp;lt;MyClass&amp;gt; AllItems = ORM.Map&amp;lt;MyClass&amp;gt;().All();
                
                //Loads All using constraints (Only loads first 10 items [only loading the IDs], sorted by the Name in ascending order, using the ObjectCreator Func to create each item)
                AllItems = ORM.Map&amp;lt;MyClass&amp;gt;().All(Columns: &amp;quot;ID&amp;quot;, Limit: 10, OrderBy: &amp;quot;Name ASC&amp;quot;, ObjectCreator: () =&amp;gt; new MyClass(DateTime.Now));

                //Inserts an item and populates the ID field with the newly created ID (since our primary key is autoincrement)
                foreach (MyClass Item in AllItems)
                    ORM.Map&amp;lt;MyClass&amp;gt;().Insert&amp;lt;int&amp;gt;(Item, new Parameter&amp;lt;string&amp;gt;(&amp;quot;Value to send to the database&amp;quot;, &amp;quot;NameOfDatabaseField&amp;quot;));

                //Updates an item in the database
                foreach (MyClass Item in AllItems)
                    ORM.Map&amp;lt;MyClass&amp;gt;().Update(Item);

                //Inserts or Updates an item based on a number of criteria (see code comments to see the logic it uses)
                ORM.Map&amp;lt;MyClass&amp;gt;().Save&amp;lt;int&amp;gt;(AllItems);

                //Deletes a list of items from the database
                ORM.Map&amp;lt;MyClass&amp;gt;().Delete(AllItems);
            }

            //Uses the connection string saved at Database2
            using (Utilities.SQL.MicroORM.MicroORM ORM = new Utilities.SQL.MicroORM.MicroORM(&amp;quot;Database2&amp;quot;))
            {
                //Can also drop down to straight SQL queries that return datasets, etc.

                //Sets the command
                ORM.Command = &amp;quot;CommandToRun&amp;quot;;
                //Sets the command type
                ORM.CommandType = CommandType.StoredProcedure;
                //Adds the parameter to send to the database
                ORM.AddParameter(&amp;quot;ParameterName&amp;quot;, 2);
                //Executes a read based query
                ORM.ExecuteReader();
                //Goes to the next record
                while (ORM.Read())
                {
                    //Gets the SomeReturnedValue that was returned.
                    string SomeReturnedValue = ORM.GetParameter(&amp;quot;SomeReturnedValue&amp;quot;, &amp;quot;This is the default value if the database returns DBNull&amp;quot;);
                }
            }
&lt;/pre&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Sat, 23 Jul 2011 16:11:30 GMT</pubDate><guid isPermaLink="false">Updated Wiki: MicroORM Example 20110723041130P</guid></item><item><title>Updated Wiki: Documentation</title><link>http://cul.codeplex.com/documentation?version=2</link><description>&lt;div class="wikidoc"&gt;Documentation is included in the main download or can be generated using DOxygen or other documentation generator.&lt;br /&gt;&lt;br /&gt;Examples:&lt;br /&gt;&lt;a href="http://cul.codeplex.com/wikipage?title=MicroORM%20Example&amp;referringTitle=Documentation"&gt;MicroORM Example&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Sat, 23 Jul 2011 16:03:00 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Documentation 20110723040300P</guid></item><item><title>Updated Wiki: MicroORM Example</title><link>http://cul.codeplex.com/wikipage?title=MicroORM Example&amp;version=1</link><description>&lt;div class="wikidoc"&gt;Below is a short example of using the MicroORM code:&lt;br /&gt;&lt;pre&gt;
            Utilities.SQL.MicroORM.MicroORM.Database(&amp;quot;YourConnectionString&amp;quot;);                       //Sets the default connection string
            Utilities.SQL.MicroORM.MicroORM.Database(&amp;quot;YourConnectionString&amp;quot;,&amp;quot;Database2&amp;quot;);           //Sets the connection string. Saving it to Database2.
            Utilities.SQL.MicroORM.MicroORM.Map&amp;lt;MyClass&amp;gt;(&amp;quot;Table to map to&amp;quot;, &amp;quot;ID&amp;quot;)                   //Sets the table name, and tells the mapping that the ID field is the primary key
                .Map(x =&amp;gt; x.ID)                                                                     //Maps the ID field
                .Map(x =&amp;gt; x.Name, Length: 100)                                                      //Maps the name field, telling the mapping it uses a length of 100
                .Map(x =&amp;gt; x.Something, DatabasePropertyName: &amp;quot;someThing&amp;quot;, DefaultValue: 10.0f);     //Maps the something field, sets the field name in the database and
                                                                                                    //sets the default value that is returned if the database returns DBNull.
            using (Utilities.SQL.MicroORM.MicroORM ORM = new Utilities.SQL.MicroORM.MicroORM())
            {
                //Loads All
                IEnumerable&amp;lt;MyClass&amp;gt; AllItems = ORM.Map&amp;lt;MyClass&amp;gt;().All();
                
                //Loads All using constraints (Only loads first 10 items [only loading the IDs], sorted by the Name in ascending order, using the ObjectCreator Func to create each item)
                AllItems = ORM.Map&amp;lt;MyClass&amp;gt;().All(Columns: &amp;quot;ID&amp;quot;, Limit: 10, OrderBy: &amp;quot;Name ASC&amp;quot;, ObjectCreator: () =&amp;gt; new MyClass(DateTime.Now));

                //Inserts an item and populates the ID field with the newly created ID (since our primary key is autoincrement)
                foreach (MyClass Item in AllItems)
                    ORM.Map&amp;lt;MyClass&amp;gt;().Insert&amp;lt;int&amp;gt;(Item, new Parameter&amp;lt;string&amp;gt;(&amp;quot;Value to send to the database&amp;quot;, &amp;quot;NameOfDatabaseField&amp;quot;));

                //Updates an item in the database
                foreach (MyClass Item in AllItems)
                    ORM.Map&amp;lt;MyClass&amp;gt;().Update(Item);

                //Inserts or Updates an item based on a number of criteria (see code comments to see the logic it uses)
                ORM.Map&amp;lt;MyClass&amp;gt;().Save&amp;lt;int&amp;gt;(AllItems);

                //Deletes a list of items from the database
                ORM.Map&amp;lt;MyClass&amp;gt;().Delete(AllItems);
            }

            //Uses the connection string saved at Database2
            using (Utilities.SQL.MicroORM.MicroORM ORM = new Utilities.SQL.MicroORM.MicroORM(&amp;quot;Database2&amp;quot;))
            {
                //Sets the command
                ORM.Command = &amp;quot;CommandToRun&amp;quot;;
                //Sets the command type
                ORM.CommandType = CommandType.StoredProcedure;
                //Adds the parameter to send to the database
                ORM.AddParameter(&amp;quot;ParameterName&amp;quot;, 2);
                //Executes a read based query
                ORM.ExecuteReader();
                //Goes to the next record
                while (ORM.Read())
                {
                    //Gets the SomeReturnedValue that was returned.
                    string SomeReturnedValue = ORM.GetParameter(&amp;quot;SomeReturnedValue&amp;quot;, &amp;quot;This is the default value if the database returns DBNull&amp;quot;);
                }
            }
&lt;/pre&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>JaCraig</author><pubDate>Sat, 23 Jul 2011 16:02:29 GMT</pubDate><guid isPermaLink="false">Updated Wiki: MicroORM Example 20110723040229P</guid></item></channel></rss>