<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' version='2.0'><channel><atom:id>http://www.blogger.com/feeds/9924016/posts/full</atom:id><lastBuildDate>Wed, 05 Jul 2006 20:47:53 +0000</lastBuildDate><title>You're a good looking blog, what's your owner's name?</title><description></description><link>http://www.richardjonas.com/blog</link><managingEditor>Richard Jonas</managingEditor><generator>Blogger</generator><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>15</openSearch:itemsPerPage><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/116972062289043617</guid><pubDate>Thu, 25 Jan 2007 10:14:00 +0000</pubDate><atom:updated>2007-01-25T10:23:43.214Z</atom:updated><title>Cakes</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://www.redmonk.com/cote/2007/01/23/requirements-gathering-and-cakes/"&gt;Cote&lt;/a&gt; writes about requirements gathering and cakes.&lt;br /&gt;&lt;br /&gt;If your powerful boss asks you for a cake, you can't easily find out the details of what he wants.  You have to find out via secondary sources (e.g. the boss's calendar, asking the baker what sort of cakes the boss has ordered before).  The calendar may not be up to date, and the baker may not remember accurately.&lt;br /&gt;&lt;br /&gt;This takes longer and is more likely to go wrong. If there are more steps than necessary in finding out requirements, the solution is to understand what the difficulty is with asking him directly and work on reducing these difficulties.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2007/01/cakes.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/116965506353585696</guid><pubDate>Wed, 24 Jan 2007 15:44:00 +0000</pubDate><atom:updated>2007-01-24T16:14:35.606Z</atom:updated><title>Personal Search Filter</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;If you want to find out information about something, you will typically enter terms into a search engine.&lt;br /&gt;&lt;br /&gt;The search engine will determine which results are most relevant (by using a complex algorithm based on how important it thinks the pages are). Everybody using this search engine will see the same results. &lt;br /&gt;&lt;br /&gt;The things you want to see might not be the same as the things others want to see. However, you are more likely to want to see things that people "compatible with you" liked. If A likes B and B likes C, and B also likes D, then chances are that A will like D.&lt;br /&gt;&lt;br /&gt;You could filter the results of your search (from the search engine) through a personal search filter.  This would reorder your searches depending on &lt;br /&gt;&lt;br /&gt;1) Things you have liked before&lt;br /&gt;2) Things that people compatible with you have liked before.&lt;br /&gt;&lt;br /&gt;When you visit a web page, you record whether you found it valuable. This updates your personal search filter and how compatible you are with other people. If you liked page A and B didn't like page A, you will not value the opinion that B liked page C. However if B liked A, you would be compatible with B and their opinion would affect your search filter.&lt;br /&gt;&lt;br /&gt;This can be seen below:&lt;br /&gt;&lt;br /&gt;&lt;image src=http://www.richardjonas.com/images/psf.png&gt;&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2007/01/personal-search-filter.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/116860047515316186</guid><pubDate>Fri, 12 Jan 2007 10:21:00 +0000</pubDate><atom:updated>2007-01-12T11:14:35.216Z</atom:updated><title>Anti-tests</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;a href="http://fishbowl.pastiche.org/"&gt;Charles Miller&lt;/a&gt; describes the concept of an "&lt;a href="http://fishbowl.pastiche.org/2007/01/09/revenge_of_the_antitest"&gt;Anti-Test&lt;/a&gt;", which is a test that verifies a bug exists.&lt;br /&gt;&lt;br /&gt;This can be written when the problem is discovered, even if it's not going to be fixed immediately.&lt;br /&gt;&lt;br /&gt;It means that if the problem is inadvertently fixed as a result of something else, we know this has happened, have a look at why this is the case and update our records accordingly.  The test can then be changed to a normal test to make sure it doesn't go wrong again.&lt;br /&gt;&lt;br /&gt;When you're ready to fix an anti-test, you can change it to a normal test - it should now fail (and this change should be easy to make), fix the bug and make sure the test passes.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2007/01/anti-tests.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/116859696891148915</guid><pubDate>Fri, 12 Jan 2007 10:09:00 +0000</pubDate><atom:updated>2007-01-12T10:16:08.926Z</atom:updated><title>NAnt version</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I've been trying to add version numbers to a &lt;a href="http://nant.sourceforge.net/"&gt;NAnt&lt;/a&gt; build script using the &lt;a href="http://nantcontrib.sourceforge.net/release/0.85-rc3/help/tasks/version.html"&gt;&amp;lt;version&amp;gt; task&lt;/a&gt;, and come across a problem with the script in &lt;a href="http://www.amazon.co.uk/Expert-Delivery-Using-Cruisecontrol-Net-Experts/dp/1590594851/sr=8-2/qid=1168596717/ref=sr_1_2/202-5030835-5298214?ie=UTF8&amp;s=books"&gt;Marc Holmes' "Expert .NET delivery" book&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;The &lt;version&gt; task increments a property called "buildnumber.version", not "sys.version". Adding the following line to the script (as described &lt;a href="http://frazzleddad.blogspot.com/2005/07/versioning-using-nant.html"&gt;here&lt;/a&gt;) seems to fix it.&lt;br /&gt;&lt;br /&gt;&amp;lt;property name="sys.version" value="${buildnumber.version}" /&amp;gt;&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2007/01/nant-version.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/116516743331551430</guid><pubDate>Sun, 03 Dec 2006 16:22:00 +0000</pubDate><atom:updated>2006-12-03T17:59:49.823Z</atom:updated><title>Using attributes to specify the contents of a menu</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;p&gt;Most people think it is a good idea to separate business and presentation logic in your application, so you can update one without changing the other. When you create an application with a menu bar, the menu items will often call functions in your business logic, and&amp;nbsp;if you add a new business logic function you will need to add a handler in your presentation layer and the business logic function in your business logic layer.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;This article describes how you can add attributes in your business logic layer and have these dynamically bound to a menu when your application runs. The attributes will look like the following:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;   public class MenuHandler&lt;br /&gt;    {&lt;br /&gt;        [MenuOption ("Menu Option 1")]&lt;br /&gt;        public void MenuHandler(object sender, &lt;br /&gt;EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            //Business Logic&lt;br /&gt;        }&lt;br /&gt;    }&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Creating your Attribute&lt;/b&gt;&lt;br&gt;&lt;br /&gt;&lt;P&gt;The first thing you need to do is to set up your attribute. Create a class derived from System.Attribute as follows.&lt;/P&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;    [AttributeUsage(AttributeTargets.Method)]&lt;br /&gt;    public class MenuOptionAttribute : &lt;br /&gt;System.Attribute&lt;br /&gt;    {&lt;br /&gt;        private string MenuText;&lt;br /&gt;&lt;br /&gt;        public MenuOptionAttribute(String &lt;br /&gt;menutext)&lt;br /&gt;        {&lt;br /&gt;            MenuText = menutext;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        public string GetMenuText&lt;br /&gt;        {&lt;br /&gt;            get&lt;br /&gt;            {&lt;br /&gt;                return MenuText;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;br&gt;The first line of this specifies your attribute can be applied to methods (and not to classes). The constructor takes one argument, which is a string representing the menu text.&lt;br&gt;&lt;br&gt;&lt;br /&gt;&lt;b&gt;Applying your attribute to your business logic&lt;/b&gt;&lt;br&gt;&lt;br /&gt;&lt;P&gt;Next, you write your business logic layer to use the MenuOption attribute. All you need to do is to put this before any functions you want on your menu, with the text to go on your menu:&lt;/P&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;    public class BusinessLogic&lt;br /&gt;    {&lt;br /&gt;        [MenuOption ("Menu Option 1")]&lt;br /&gt;        public void Option1(object sender, &lt;br /&gt;EventArgs e)&lt;br /&gt;        {&lt;br /&gt;            // Option 1 code&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        [MenuOption("Option 2")]&lt;br /&gt;        public void Option2(object sender, &lt;br /&gt;EventArgs e)&lt;br /&gt;        {&lt;br /&gt;             // Option 2 code&lt;br /&gt;        }&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;P&gt;You can add as many of these functions as you like.&lt;/P&gt;&lt;br /&gt;&lt;b&gt;Setting up your menu&lt;/b&gt;&lt;br /&gt;&lt;P&gt;Finally, you need to create your presentation layer. You can drag a MenuStrip to a form and add a title for your drop down menu. If you call the title "Main", when you add the title, it will create a ToolStripMenuItem, called "mainToolStripMenuItem" by default.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;You need to use reflection to iterate over all the methods in the MenuHandler class, and see which of those methods have the MenuOptionAttribute attribute set.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;If it is set, you need to call the GetMenuText() function on the attribute to find out the text to display on the menu bar and add the menu item.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Next, you need to create a delegate to your method.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;Finally, you add the event handler to your newly created menu item. It's easier to understand this if you read the code example.&lt;/P&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;pre&gt;  public partial class Form1 : Form&lt;br /&gt;    {&lt;br /&gt;        public Form1()&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            BusinessLogic bl = new BusinessLogic();&lt;br /&gt;&lt;br /&gt;            mainToolStripMenuItem.DropDownItems.&lt;br /&gt;Clear();&lt;br /&gt;            foreach (MethodInfo method in &lt;br /&gt;(typeof (BusinessLogic)).GetMethods())&lt;br /&gt;            {&lt;br /&gt;                foreach (object attribute in &lt;br /&gt;method.GetCustomAttributes(true))&lt;br /&gt;                {&lt;br /&gt;                    if (attribute is &lt;br /&gt;MenuOptionAttribute)&lt;br /&gt;                    {&lt;br /&gt;                        ToolStripItem newitem = &lt;br /&gt;mainToolStripMenuItem.DropDownItems.Add((&lt;br /&gt;attribute as MenuOptionAttribute).GetMenuText);&lt;br /&gt;                        EventInfo ci = typeof&lt;br /&gt;(ToolStripItem).GetEvent("Click");&lt;br /&gt;                        Type tdelegate = ci.&lt;br /&gt;EventHandlerType;&lt;br /&gt;                        Delegate del = Delegate.&lt;br /&gt;CreateDelegate(tdelegate,bl,method);&lt;br /&gt;                        ci.AddEventHandler(&lt;br /&gt;newitem, del);&lt;br /&gt;                    }&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;br /&gt;You could add some code to your attribute to specify its position, and use this to order your menu items. You might want to specify more than one string, one for the heading and one for the item itself, so you can put menu items in under different headings.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/12/using-attributes-to-specify-contents.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/116143330761762781</guid><pubDate>Sat, 21 Oct 2006 12:10:00 +0000</pubDate><atom:updated>2006-10-21T13:21:48.050+01:00</atom:updated><title>InternalsVisibleToAttribute and Unit Testing</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;When creating unit tests to be run with NUnit, I like to keep my tests in a separate assembly, which is not delivered when my project is deployed.  &lt;br /&gt;&lt;br /&gt;This can make it difficult to create unit tests for classes that should not be visible outside of that assembly. One of my classes uses one of 3 strategy classes that encapsulate a feature of the business logic. I would normally declare these with the intern access modifier, but to test each strategy works I've needed to make them publically available.&lt;br /&gt;&lt;br /&gt;If, however, I add the [assembly: InternalsVisibleTo("UnitTests")] line to my AssemblyInfo.cs file, any objects declared with the intern access modifier can be seen by the UnitTests assembly.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/10/internalsvisibletoattribute-and-unit.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/116051665280473441</guid><pubDate>Tue, 10 Oct 2006 21:33:00 +0000</pubDate><atom:updated>2006-10-10T22:44:12.820+01:00</atom:updated><title>Processes and Practices</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Jared Richardson &lt;a href="http://www.jaredrichardson.net/blog/2006/10/10#simple-process"&gt;describes a process&lt;/a&gt; he wants his team to follow.   Many others have attempted the same and have reached similar conclusions, and I can't disagree with any of Jared's thoughts.  &lt;br /&gt;&lt;br /&gt;However, I think he misses out the most important part of the process which should be to regularly think about your process and what you have done and how you could have done it better. All processes and practices should be adaptable.  Different people have different strengths and new technologies mean we have to develop things in different ways.&lt;br /&gt;&lt;br /&gt;A lot has been written about &lt;a href="http://www.think-box.co.uk/blog/2005/11/repaying-technical-debt.html"&gt;technical debt&lt;/a&gt;, where if not enough time is invested in developing high quality software, it becomes harder to maintain and costs of new developments increase over time. We should also think about process debt, where if not enough time is spent improving and adapting our processes, they become less efficient and costs of new developments also increase.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/10/processes-and-practices.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/116051402912989502</guid><pubDate>Tue, 10 Oct 2006 20:42:00 +0000</pubDate><atom:updated>2006-10-10T22:00:29.200+01:00</atom:updated><title>C# collection classes performance</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I was looking for a table summarizing how different C# generic and non-generic collection classes performed, relative to one another, thought there would be hundreds available, but could not find one.  So here one is for my future reference, and for anyone else who reads this.&lt;br /&gt;&lt;br /&gt;&lt;img src=http://www.richardjonas.com/images/collections.png&gt;&lt;br /&gt;&lt;br /&gt;O(1) = constant time&lt;br /&gt;O(log n) = time proportional to the log of the number of elements in the collection&lt;br /&gt;O(n) = time proportional to the number of elements in the collection&lt;br /&gt;&lt;br /&gt;Some collections are better for smaller collections,  but don't scale to larger ones. The List, LinkedList, SortedList, Queue and Stack classes are better for smaller collections than the Dictionary, Hashtable and SortedDictionary classes.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/10/c-collection-classes-performance.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/115995428831957084</guid><pubDate>Wed, 04 Oct 2006 09:25:00 +0000</pubDate><atom:updated>2006-10-04T10:31:28.330+01:00</atom:updated><title>The type or namespace name 'Properties' could not be found</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I was getting an error message when building my project that said "The type or namespace name 'Properties' could not be found".&lt;br /&gt;&lt;br /&gt;This was because I had changed the default namespace in the properties for my project to make it "project.name" instead of "name".  The class that did not build was already in the namespace "project.name".&lt;br /&gt;&lt;br /&gt;The error message was on a line that said &lt;br /&gt;&lt;br /&gt;"global::name.Properties.Resources...."&lt;br /&gt;&lt;br /&gt;Changing this to&lt;br /&gt;&lt;br /&gt;"global::project.name.Properties.Resources...." &lt;br /&gt;&lt;br /&gt;seemed to fix the problem.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/10/type-or-namespace-name-properties.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/115822661813213693</guid><pubDate>Thu, 14 Sep 2006 09:23:00 +0000</pubDate><atom:updated>2006-09-14T10:36:58.143+01:00</atom:updated><title>Export to excel from SQL Server Express</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;Once upon a time, a big bad grizzly bear wanted to write a program to export a view from an SQL Server Express database (containing the names and addresses of sweet fluffy things he wanted to eat) to an Excel file.  As this was SQL server express, he tried to use DTEXEC and integration services, but growled ferociously when he realised that integration services was not supplied with excel, promising to sharpen his claws and tear apart Bill Gates.  &lt;br /&gt;&lt;br /&gt;However, a passing raccoon came to his rescue, and told him about the following trade secret way to do this (subject to removing the raccoons name and address from his database):&lt;br /&gt;&lt;br /&gt;1) Go to the Surface Area configuration tool, select "Surface Area configuration for features".  Select "Ad Hoc Remote Queries", and turn on "Enable OPENROWSET and OPENDATASOURCE support".&lt;br /&gt;&lt;br /&gt;2) Create a template excel file, with the first row containing the column names in your view.  You can use integration services to export a file to Excel, and then delete the data from it, leaving the first row.&lt;br /&gt;&lt;br /&gt;3) From your program, use the File.Copy command to copy the template file to your destination file.&lt;br /&gt;&lt;br /&gt;4) Run the following SQL query to populate the Excel file&lt;br /&gt;&lt;br /&gt;insert into OPENROWSET('Microsoft.Jet.OLEDB.4.0', 'Excel 8.0;Database=c:\\aaa.xls;', 'SELECT * FROM [Query]') select * from ExportView&lt;br /&gt;&lt;br /&gt;where c:\\aaa.xls is your file name, "Query" is the name of your worksheet and "ExportView" is the name of your table or view you want to export.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/09/export-to-excel-from-sql-server.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/115529988797338498</guid><pubDate>Fri, 11 Aug 2006 11:54:00 +0000</pubDate><atom:updated>2006-08-11T13:38:08.020+01:00</atom:updated><title>Shrinking an SQL Server 2000 Transaction Log</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I have a database in which the transaction log grew to 19GB, taking up the entire disk space on the server it was on, and which could not be shrunk. Most of the things I found on the net didn't shrink this very much. &lt;br /&gt;&lt;br /&gt;However, I found the following script here which worked well, reducing it from 19GB to 52 MB.&lt;br /&gt;&lt;br /&gt;&lt;a href=http://www.thescripts.com/forum/thread79839.html target=_blank&gt;http://www.thescripts.com/forum/thread79839.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;use database_name&lt;br /&gt;go&lt;br /&gt;create table shrinkfile(&lt;br /&gt;col1 int,&lt;br /&gt;col2 char(2048)&lt;br /&gt;)&lt;br /&gt;&lt;br /&gt;dump tran database_name with no_log&lt;br /&gt;dbcc shrinkfile(logical_name_of_log, 50, TRUNCATEONLY)&lt;br /&gt;go&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;set nocount on&lt;br /&gt;declare @i int&lt;br /&gt;declare @limit int&lt;br /&gt;&lt;br /&gt;select @i = 0&lt;br /&gt;select @limit = 10000&lt;br /&gt;&lt;br /&gt;while @i &lt; @limit&lt;br /&gt;begin&lt;br /&gt;insert into shrinkfile values(@i, 'Shrink the log...')&lt;br /&gt;select @i = @i + 1&lt;br /&gt;end&lt;br /&gt;&lt;br /&gt;drop table shrinkfile&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/08/shrinking-sql-server-2000-transaction.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/115519346081474055</guid><pubDate>Thu, 10 Aug 2006 06:57:00 +0000</pubDate><atom:updated>2006-08-10T08:04:20.823+01:00</atom:updated><title>Updating .NET user controls on the screen</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I have some user controls that I need to add a lot of data to. This can be slow as the screen display is updated when each item of data is added.  It also makes the dislpay flicker.&lt;br /&gt;&lt;br /&gt;I couldn't find an equivalent of the BeginUpdate and EndUpdate functions in .NET 2.0, but it is possible to call the Windows API functions as follows.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;private const int WM_SETREDRAW = 11;&lt;br /&gt;&lt;br /&gt;[System.Runtime.InteropServices.&lt;br /&gt;DllImport("user32.dll")]&lt;br /&gt;static extern bool SendMessage(IntPtr &lt;br /&gt;hWnd, Int32 msd, Int32 wParam, Int32 &lt;br /&gt;lParam);&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Stop updates while we are &lt;br /&gt;/// filling a control with data&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;protected void BeginUpdate()&lt;br /&gt;{&lt;br /&gt;  SendMessage(this.Handle, WM_SETREDRAW, 0, 0);&lt;br /&gt;  Cursor.Current = Cursors.WaitCursor;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/// &lt;summary&gt;&lt;br /&gt;/// Restart updates&lt;br /&gt;/// &lt;/summary&gt;&lt;br /&gt;protected void EndUpdate()&lt;br /&gt;{&lt;br /&gt;  SendMessage(this.Handle, WM_SETREDRAW, 1, 0);&lt;br /&gt;  if (Parent != null)&lt;br /&gt;  {&lt;br /&gt;    Parent.Invalidate(true);&lt;br /&gt;  }&lt;br /&gt;  Cursor.Current = Cursors.Default;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;I included these in a base class used by all my user controls, and added code to change the cursor to a wait cursor whilst the control was updating.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/08/updating-net-user-controls-on-screen.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/115512455337342988</guid><pubDate>Wed, 09 Aug 2006 11:53:00 +0000</pubDate><atom:updated>2006-08-09T12:55:53.393+01:00</atom:updated><title>Image List Control</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;I've had a problem with putting images on a tab control.  They appeared fine in the designer, but did not appear when the application was run.  &lt;br /&gt;&lt;br /&gt;I fixed this by re-ordering the generated InitializeComponent function, and put the code for the ImageList before the code for the tab control.&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/08/image-list-control.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/115374874126747101</guid><pubDate>Mon, 24 Jul 2006 13:42:00 +0000</pubDate><atom:updated>2006-07-24T14:46:27.116+01:00</atom:updated><title>When developers at the seaside get too competitive, projects suffer from pier pressure.</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;At a recent &lt;a href="http://www.dnug.org.uk" target=_blank&gt;London .NET users group&lt;/a&gt; meeting, &lt;a href="http://www.roodyn.com"  target=_blank&gt;Dr Neil Roodyn&lt;/a&gt; spoke about Extreme Programming.  He mentioned the core values for this now include "Respect", and the people involved in a project should be considered before the methodology or technology.&lt;br&gt;&lt;br&gt;I take the term "Respect" to mean that we should all work to ensure that every person or organisation involved with a project perceives they benefit from the project, and not selfishly to gain at the expense of others.&lt;br&gt;&lt;br&gt;It is easy to assume that people are “like us” and want the same things.  However, this is not the case and we should understand what everyone's individual motivations are.  I think motivations can be divided into three areas, quality of life in the workplace, qualify of life outside the workplace and prospects for the future, and there are several things you need to understand in each of these areas.&lt;br&gt;&lt;br&gt;&lt;b&gt;Quality of life in the workplace&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Is the stakeholder working with people they like? (which may be different from people you like).&lt;/li&gt;&lt;li&gt;Is the stakeholder using technologies and methodologies they enjoy using? (which may be different from technologies and methodologies you enjoy using).&lt;/li&gt;&lt;li&gt;Does the stakeholder perceive the working environment to be pleasant to them? (we place different values of things like fast computers, comfortable chairs etc).&lt;/lI&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;Quality of life outside the workplace&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Does the stakeholder have time for a high quality life outside the workplace (are working hours reasonable, do they need to spend a long time travelling, and do they have to work away from home?)&lt;/li&gt;&lt;li&gt;Does the stakeholder have money for a high quality life outside the workplace&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;b&gt;How will these change in future?&lt;/b&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Does the stakeholder have the opportunity to learn skills to develop their career in the way they want to (in some cases this will be to move into senior management, in others to learn technologies, but this is different in individual cases)?&lt;/li&gt;&lt;li&gt;Does the stakeholder perceive their situation to be secure (the answer to this question may be different for someone with family commitments who cannot easily move to another area)?&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/07/when-developers-at-seaside-get-too.html</link><author>Richard Jonas</author></item><item><guid isPermaLink='false'>http://www.blogger.com/feeds/9924016/posts/full/115271057016805688</guid><pubDate>Wed, 12 Jul 2006 13:10:00 +0000</pubDate><atom:updated>2006-07-12T14:22:50.340+01:00</atom:updated><title>Sorting a Data-Bound ComboBox</title><description>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;&lt;img src=http://www.richardjonas.com/images/icon1.gif&gt;I have set up a view with an order by clause and bound it to a ComboBox using ADO.NET 2.0.  The combo box did not take any notice of the order by clause, and seemed to display items in the order they appeared in the database tables that made up the view.&lt;br /&gt;&lt;br /&gt;To fix this, I had to manually set the Sort property of the column I wanted the combo box to be ordered by on the BindingSource used by the control as follows before calling the Fill method on the table adapter :-&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;myViewBindingSource.Sort = "ID";&lt;br /&gt;myViewTableAdapter.Fill(myDataSet.myView);&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Why can't it pick up the order by clause in my view automatically?&lt;/div&gt;</description><link>http://www.richardjonas.com/blog/2006/07/sorting-data-bound-combobox.html</link><author>Richard Jonas</author></item></channel></rss>