﻿<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jason Carr &#187; Visual Studio 2008</title>
	<atom:link href="http://www.jasoncarr.com/category/technology/visual-studio-2008/feed" rel="self" type="application/rss+xml" />
	<link>http://www.jasoncarr.com</link>
	<description></description>
	<lastBuildDate>Mon, 21 May 2012 03:53:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>UpSync Version 0.7 Released</title>
		<link>http://www.jasoncarr.com/software/upsync-version-0-7-released</link>
		<comments>http://www.jasoncarr.com/software/upsync-version-0-7-released#comments</comments>
		<pubDate>Mon, 05 Oct 2009 19:44:20 +0000</pubDate>
		<dc:creator>Jason Carr</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[UpSync]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://jasondavidcarr.com/?p=381</guid>
		<description><![CDATA[The new version is here! As always, it is recommended to upgrade as soon as possible. Here are the major changes: Administrator permissions are no longer required to run the application from the Program Files folder; application settings and logs &#8230; <a href="http://www.jasoncarr.com/software/upsync-version-0-7-released">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>The new version is here!  As always, it is recommended to upgrade as soon as possible.  Here are the major changes:</p>
<ul>
<li>Administrator permissions are no longer required to run the application from the Program Files folder; application settings and logs are now stored in the Windows program data folders.</li>
<li>The application has been tested with and should now work fine with UAC under Windows Vista and Windows 7.</li>
<li>Summary logs have been added to the end of the logging to report count totals for the various operations.</li>
<li>Fixed a bug in the new syncing empty folders functionality that caused a neverending loop when the root of either folder was empty.</li>
<li>Added a &#8220;File Filter&#8221; property to mapped folders to allow the use of wildcards (*.txt) to restrict which files to sync (as requested by Jason Saul).</li>
</ul>
<p>Simply run the setup to upgrade to the latest version.</p>
<p><a href="/software/UpSync-0.7-Setup.zip">Download UpSync 0.7 Setup</a><br />
<a href="/software/UpSync-0.7-Sources.zip">Download UpSync 0.7 Source Code (Visual Studio 2008 required)</a></p>
<p>Remember to share your thoughts and suggestions!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasoncarr.com/software/upsync-version-0-7-released/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>UpSync Version 0.6 Released</title>
		<link>http://www.jasoncarr.com/software/upsync-version-0-6-released</link>
		<comments>http://www.jasoncarr.com/software/upsync-version-0-6-released#comments</comments>
		<pubDate>Tue, 01 Sep 2009 16:54:39 +0000</pubDate>
		<dc:creator>Jason Carr</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[UpSync]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://jasondavidcarr.com/?p=325</guid>
		<description><![CDATA[I have a new version of UpSync to put out today! If you are regularly using the application, it is strongly recommended that you upgrade because the stability of the sync process has been greatly improved. Here&#8217;s a brief list &#8230; <a href="http://www.jasoncarr.com/software/upsync-version-0-6-released">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>I have a new version of UpSync to put out today!  If you are regularly using the application, it is strongly recommended that you upgrade because the stability of the sync process has been greatly improved.  Here&#8217;s a brief list of some of the more interesting changes:</p>
<ul>
<li>Significantly improved error handling</li>
<li>Delete prompts are now all displayed at once (instead of throughout the process)</li>
<li>A new &#8220;stop prompting and do this for x remaining files&#8221; feature has been added</li>
<li>Code is now <a href="http://code.msdn.microsoft.com/sourceanalysis" target="_blank">StyleCop</a>-compliant (as well as code analysis-compliant)</li>
<li>Empty folders are now synced properly based on their creation date</li>
</ul>
<p>You may simply run the new setup and it will automatically upgrade over whatever old version you have installed.</p>
<p><a href="/software/UpSync-0.6-Setup.zip">Download UpSync 0.6 Setup</a><br />
<a href="/software/UpSync-0.6-Sources.zip">Download UpSync 0.6 Source Code (Visual Studio 2008 required)</a></p>
<p>Please remember to comment and share your thoughts on the application! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasoncarr.com/software/upsync-version-0-6-released/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Centering a Message Box on the Active Window in C#</title>
		<link>http://www.jasoncarr.com/technology/centering-a-message-box-on-the-active-window-in-csharp</link>
		<comments>http://www.jasoncarr.com/technology/centering-a-message-box-on-the-active-window-in-csharp#comments</comments>
		<pubDate>Fri, 07 Aug 2009 18:34:48 +0000</pubDate>
		<dc:creator>Jason Carr</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://jasondavidcarr.com/?p=238</guid>
		<description><![CDATA[One of the annoying caveats of using the built in .NET message box is that it provides no functionality to center a message box on the currently active window. Oddly, even when you specify the parent window using the proper &#8230; <a href="http://www.jasoncarr.com/technology/centering-a-message-box-on-the-active-window-in-csharp">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>One of the annoying caveats of using the built in .NET message box is that it provides no functionality to center a message box on the currently active window.  Oddly, even when you specify the parent window using the proper overloaded version of the Show() method, the window still insists on centering itself on the desktop, instead of on the active window.  This is annoying and confusing to the end user because it breaks the ability to set aside particular &#8220;screen real estate&#8221; for an application.  Fortunately, there is a way to fix this, although it does involve the Win32 API.</p>
<p><span id="more-238"></span></p>
<p>To get started, create a class in your project called MessageBoxHelper (or name it whatever you wish).  Replace the code in the file with the following code:</p>
<pre class="brush: csharp; title: ; notranslate">

using System;
using System.Runtime.InteropServices;
using System.Windows.Forms;

internal static class MessageBoxHelper
{
    internal static void PrepToCenterMessageBoxOnForm(Form form)
    {
        MessageBoxCenterHelper helper = new MessageBoxCenterHelper();
        helper.Prep(form);
    }

    private class MessageBoxCenterHelper
    {
        private int messageHook;
        private IntPtr parentFormHandle;

        public void Prep(Form form)
        {
            NativeMethods.CenterMessageCallBackDelegate callBackDelegate = new NativeMethods.CenterMessageCallBackDelegate(CenterMessageCallBack);
            GCHandle.Alloc(callBackDelegate);

            parentFormHandle = form.Handle;
            messageHook = NativeMethods.SetWindowsHookEx(5, callBackDelegate, new IntPtr(NativeMethods.GetWindowLong(parentFormHandle, -6)), NativeMethods.GetCurrentThreadId()).ToInt32();
        }

        private int CenterMessageCallBack(int message, int wParam, int lParam)
        {
            NativeMethods.RECT formRect;
            NativeMethods.RECT messageBoxRect;
            int xPos;
            int yPos;

            if (message == 5)
            {
                NativeMethods.GetWindowRect(parentFormHandle, out formRect);
                NativeMethods.GetWindowRect(new IntPtr(wParam), out messageBoxRect);

                xPos = (int)((formRect.Left + (formRect.Right - formRect.Left) / 2) - ((messageBoxRect.Right - messageBoxRect.Left) / 2));
                yPos = (int)((formRect.Top + (formRect.Bottom - formRect.Top) / 2) - ((messageBoxRect.Bottom - messageBoxRect.Top) / 2));

                NativeMethods.SetWindowPos(wParam, 0, xPos, yPos, 0, 0, 0x1 | 0x4 | 0x10);
                NativeMethods.UnhookWindowsHookEx(messageHook);
            }

            return 0;
        }
    }

    private static class NativeMethods
    {
        internal struct RECT
        {
            public int Left;
            public int Top;
            public int Right;
            public int Bottom;
        }

        internal delegate int CenterMessageCallBackDelegate(int message, int wParam, int lParam);

        [DllImport(&quot;user32.dll&quot;)]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool UnhookWindowsHookEx(int hhk);

        [DllImport(&quot;user32.dll&quot;, SetLastError = true)]
        internal static extern int GetWindowLong(IntPtr hWnd, int nIndex);

        [DllImport(&quot;kernel32.dll&quot;)]
        internal static extern int GetCurrentThreadId();

        [DllImport(&quot;user32.dll&quot;, SetLastError = true)]
        internal static extern IntPtr SetWindowsHookEx(int hook, CenterMessageCallBackDelegate callback, IntPtr hMod, int dwThreadId);

        [DllImport(&quot;user32.dll&quot;)]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool SetWindowPos(int hWnd, int hWndInsertAfter, int X, int Y, int cx, int cy, int uFlags);

        [DllImport(&quot;user32.dll&quot;)]
        [return: MarshalAs(UnmanagedType.Bool)]
        internal static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
    }
}
</pre>
<p>I won&#8217;t go into too much detail describing the above code, because most of it is just Win32 API greek.  The gist of it though is there&#8217;s a parent static class called MessageBoxHelper that contains two subclasses.  The NativeMethods subclass is another static class that simply provides the interfaces into the Win32 API calls.  The MessageBoxCenterHelper subclass is instantiated by the parent class, and performs the actual calls to center the message box.  I&#8217;m not overly familiar with the way callbacks, delegates, and events work when using the Win32 API, so I won&#8217;t attempt to explain the logic behind these methods.</p>
<p><strong>Usage</strong></p>
<p>The above implementation may be fairly involved, but using it is extremely easy.  Simply call the MessageBoxHelper.PrepToCenterMessageBoxOnForm static method before calling your message box:</p>
<pre class="brush: csharp; title: ; notranslate">

using System;
using System.Windows.Forms;

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Click(object sender, EventArgs e)
    {
        MessageBoxHelper.PrepToCenterMessageBoxOnForm(this);
        MessageBox.Show(&quot;Hello!&quot;, &quot;Hello!&quot;, MessageBoxButtons.OK, MessageBoxIcon.None, MessageBoxDefaultButton.Button1, 0);
    }
}
</pre>
<p>It&#8217;s worth noting that this code does pass all Code Analysis rules, so you can be confident you won&#8217;t have to rewrite any of it to make it pass.  I do have one small warning, however; make sure that you <em>always</em> call the PrepToCenterMessageBoxOnForm method <em>immediately</em> before your MessageBox.Show call.  Calls to the PrepToCenterMessageBoxOnForm method that are not met with a MessageBox.Show call can interfere with whatever the next form that pops up happens to be, and can result in odd behavior.  Still, you&#8217;re not likely to want to put the code anywhere else, anyway, and I&#8217;ve used it in many enterprise projects without running into any issues.</p>
<p>Let me know if you appreciate this or have any questions or suggestions in the comments!</p>
<p><strong>Update:</strong> Many thanks to Matt Stan for pointing out in the comments that the class also works well for centering a folder browser dialog window (by simply calling the PrepToCenterMessageBoxOnForm method before calling the ShowDialog method).  It may work for some other dialogs as well, and not just these two.  Apparently, however, it does not work for a file open dialog.  I&#8217;ll be doing a bit of research to see if I can modify the code to support all .NET standard dialogs.  I may or may not be successful.</p>
<p>For now, you can assume that it is safe to use on other dialogs, if it works properly.  It is probably guaranteed beyond a reasonable doubt to work regularly within the same .NET framework version for these other dialogs as well.  Regardless, most likely it will work indefinitely for all future .NET framework versions (unless something is significantly restructured in .NET).  The code simply attempts to get a handle to the upcoming window and center it via an event, so it should work generically for most types of windows, and should be plenty safe.</p>
<p>Thanks, Matt!</p>
<p><strong>Update #2:</strong> I&#8217;ve done some research on the .NET dialogs, relating to the centering mechanism.  As well as message boxes, the ColorDialog, FontDialog, and FolderBrowserDialog dialogs do center properly as well.  However, the OpenFileDialog and the SaveFileDialog dialogs unfortunately do not.  This is because somewhere in the order of events after the new position is given these dialogs automatically center themselves on the screen.  This functionality is somehow different from the other dialogs.  You can observe this happening if you add &#8220;0&#215;40&#8243; (SWP_SHOWWINDOW) to the SetWindowPos method&#8217;s flags.  If you do this, you can see the dialog come up in the correct spot, centered on the form, and then quickly jump to the center of the screen.  Unfortunately, I can&#8217;t seem to get around this.  The only solutions I&#8217;ve seen involve extending the OpenFileDialog and SaveFileDialog controls, which is a completely different direction than this article is taking.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasoncarr.com/technology/centering-a-message-box-on-the-active-window-in-csharp/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>6 Anal-Retentive Ways To Improve Your C# Code</title>
		<link>http://www.jasoncarr.com/technology/6-anal-retentive-ways-to-improve-your-csharp-code</link>
		<comments>http://www.jasoncarr.com/technology/6-anal-retentive-ways-to-improve-your-csharp-code#comments</comments>
		<pubDate>Fri, 17 Jul 2009 21:58:33 +0000</pubDate>
		<dc:creator>Jason Carr</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://jasondavidcarr.com/?p=164</guid>
		<description><![CDATA[Nothing irks me more than to have to dig through garbage code.  Working at a software consulting company, I&#8217;ve seen a whole slew of it.  And I&#8217;ve hurled on my computer monitor enough as a result to give it a &#8230; <a href="http://www.jasoncarr.com/technology/6-anal-retentive-ways-to-improve-your-csharp-code">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>Nothing irks me more than to have to dig through garbage code.  Working at a software consulting company, I&#8217;ve seen a whole slew of it.  And I&#8217;ve hurled on my computer monitor enough as a result to give it a pretty, brownish-green tint.  Bad code destroys hardware.  And souls.</p>
<p>The single biggest clue that a developer either has no idea what they are doing or simply doesn&#8217;t care about their code is <em>inconsistency</em>.  We all have different preferences and coding styles, but when a developer can&#8217;t pick a particular approach to take they come off as incredibly amateur, and for good reason.  Inconsistent code is difficult to read, and is thus difficult to modify in the future.</p>
<p>The majority (or even the entirety) of the list below revolves around writing consistently styled and consistently performing C# code.  Much of this list is admittedly anal retentive, but all of it is guaranteed to improve the quality and readability of your code.<br />
<span id="more-164"></span><br />
<strong>1.  Use the Code Analysis features in Visual Studio.</strong></p>
<p>The Code Analysis features are anal retentive by nature, as you quickly discover when you begin to use them for the first time.  They are, however, worth their weight in gold; they are the most immediately effective way to improve your C# code.</p>
<p>Each time you build your code, Code Analysis will examine it to be sure that a large and growing list of &#8220;best practices&#8221; are met, and will create warnings in your Error List if they are not.  You cannot call your code &#8220;good&#8221; code unless it passes Visual Studio&#8217;s code analysis with flying colors.  There are exceptions to this rule, but they are few and far between.</p>
<p>Enabling Code Analysis in your C# Visual Studio 2005 or 2008 project depends on whether you&#8217;re working with a Windows or Web application.</p>
<p>For a Windows application, go to your Solution Explorer and double-click the project&#8217;s Properties node.  From here, select the Code Analysis tab on the left hand side.  Check the Enable Code Analysis on Build check box, and you&#8217;re on your way.  You&#8217;ll notice that you can enable and disable any of the various checks individually, but I recommend leaving them all checked unless you&#8217;ve found a warning that you&#8217;re sure you can ignore.  As I&#8217;ve stated previously, the Code Analysis is almost <em>always</em> right.</p>
<p>For a Web application, go to your Solution Explorer and select the root node for your website.  Then go up to the Analyze menu and select Code Analysis Configuration.  From here, check the Enable Code Analysis on Build check box and you&#8217;re on your way.</p>
<p><strong>2.  Use regions consistently and effectively.</strong></p>
<p>Nobody likes digging through a huge code file to find a particular method, and C#&#8217;s regions help to solve this problem.  Here is an example:</p>
<pre class="brush: csharp; title: ; notranslate">

#region Private Variables

private int x;
private int y;

#endregion

#region Public Properties

public int X
{
    get
    {
        return x;
    }
}

public int Y
{
    get
    {
        return y;
    }
}

#endregion
</pre>
<p>In Visual Studio, regions can be collapsed or expanded using the +/- buttons to the left of the region names in the code window.  This helps to make it much easier to find a particular method you are looking for.  There are many ways to organize your code with region statements, but I prefer to separate the code by type of construct (variables, constructors, event handlers, methods, properties, etc.) and access modifier (public, internal, protected, or private).</p>
<p><strong>3.  Handle white space consistently.</strong></p>
<p>C# ignores white space, which means you can put extra spaces and lines pretty much wherever you like.  Or, if you&#8217;re insane, you can jam ten-thousand lines of code into a very angry single line of actual text, separated only by semicolons.</p>
<p>Here are a few things to consider, though:</p>
<ul>
<li>Code with more white space is generally much easier to read.  Less condensed code is easier on the eyes and with screen real estate being as ample as it is these days, there&#8217;s little reason to try and jam your code into as few lines as possible.  For the most part, bigger is better.</li>
<li>Even though code blocks, such as if and while statements, do allow you to omit the curly braces, this generally makes your code harder to read.  The general consensus is to <em>always</em> use curly braces even when there is only one line of code you are executing between them.</li>
<li>Consistency, consistency, consistency.  If you put new lines after you close blocks of code, be sure you do it everywhere.  Don&#8217;t &#8220;feel it out.&#8221;  Come up with your own strategy (preferably similar or the same to most other peoples&#8217; strategies) and stick to it.</li>
</ul>
<p><strong>4.  Always specify your access modifiers and choose them carefully.</strong></p>
<p>C# access modifiers are simply the public, internal, protected, and private keywords that you typically place in front of variables, properties, and methods.  Though these are often overlooked, they provide meaning to the functionality behind your code and help to better define the structure of your code through encapsulation.</p>
<p>Here are some grossly oversimplified definitions and uses for the four modifiers.  These definitions are lacking some detail, but should be plenty of information to handle the vast majority of circumstances:</p>
<p><strong>Private</strong> members are only accessible to the class in which they live.  All variables, properties, methods, etc. that do not need to be accessed outside the immediate class should be marked as private.</p>
<p><strong>Protected</strong> members are accessible to the class in which they live, as well as any classes that derive from (extend) the class.  The protected modifier should be used on variables, properties, methods, etc. that may need to be accessed by classes that may derive from (extend) the current class.</p>
<p><strong>Internal </strong>members are accessible everywhere within the current project, but are inaccessible by other projects that might reference the current project.  In other words, using the internal modifier specifies that only classes within the current EXE or DLL file can access the member.  The internal modifier should be used on all variables, properties, methods, etc. that need to be available to other classes within the project, but should not be available outside the project.</p>
<p><strong>Public </strong>members are accessible everywhere, period.  There are no restrictions to their access.  This particular modifier is often overused, as the internal modifier is overlooked.  The public modifier should only be used for members or classes that are or would possibly be needed outside of the current project.</p>
<p>As far as defining classes, typically only internal or public are used, depending on if they need to be accessible outside the project.  This, however, does not account for nested classes, which can have any of the four access modifiers.  Always specify your access modifiers to avoid confusion as to when and where the class or member can be used.</p>
<p><strong>5.  Learn the ways to properly use exceptions and stick to them.</strong></p>
<p>C# exceptions are extremely powerful and convenient, but when used incorrectly, they can both slow your application down and hinder output to the end user.</p>
<p>There are two basic rules of thumb to using exceptions properly:</p>
<ul>
<li>Never catch an exception when you can check for and prevent the error instead.  A typical scenario is trying to open a file that you&#8217;re not entirely sure really exists.  You can wrap the file open code in a try catch, or you can use File.Exists to determine if the file exists before attempting to open it.  Exceptions in C# are expensive, so you only want an exception to be raised if a true error occurs.  If you can predict that it might happen for a particular reason, you should be able to check to make sure that it won&#8217;t happen before proceeding.  This will help to improve performance significantly.</li>
<li>Also, never catch the root Exception class, or any high-level, broad exception.  If you catch an Exception class, and you incorrectly assume that the user didn&#8217;t fill in a particular field as a result, the user will see your incorrect error message and be unable to see the actual error that occurred.  This is unacceptable.  Instead, research the methods you are calling to determine the particular types of exceptions they raise, and catch these specific exceptions.  This way, if something occurs that you didn&#8217;t expect, the end user will see the detailed error message anyway.  The MSDN documentation does a great job of providing you with all of the details you need regarding every exception that is possible for every single method in the .NET framework.</li>
</ul>
<p><strong>6.  ALWAYS use using statements.</strong></p>
<p>In case you&#8217;re not familiar with the syntax of using statements, here is an example:</p>
<pre class="brush: csharp; title: ; notranslate">

using (StreamWriter writer = new StreamWriter(&quot;C:\\file.txt&quot;))
{
    writer.WriteLine(&quot;Hello!&quot;);
}
</pre>
<p>Using statements can be used wherever you&#8217;re instantiating an object that is IDisposable (can be disposed using the Dispose method).  If you don&#8217;t actively dispose objects that support the IDisposable interface, you&#8217;re asking for all sorts of performance and memory leak trouble.  Here are the advantages of using statements over calling the Dispose method directly:</p>
<ul>
<li>Even if an exception is raised within your using statement block, the runtime will <em>still</em> ensure that the object gets properly disposed.  This is automatic with the using statement and is impossible without it.  Before using statements were added in .NET 2.0, you had to attempt to dispose of your objects within a catch block, which was far from error-prone.  Never take this approach.</li>
<li>Using statements help to visually define the scope of a variable that requires disposing.  You can quickly and easily see the start and end of the lifetime of the variable.  Once you are in the habit of consistently using using statements to dispose of objects you will very rarely (if ever) forget to dispose of an object, because of the block nature of the statement.</li>
<li>Using statements even allow you to return from a method within the statement.  The object is still disposed of properly in this situation.  In other words, if you use a using statement, the object is GUARANTEED to be disposed of despite any and all circumstances.  That&#8217;s a pretty big and valuable promise.</li>
</ul>
<p>There is much more to writing good C# code than these 6 rules, but these are the rules that I see consistently broken that are driving me to an early grave.  Let me know in the comments if you think I&#8217;m missing something important or disagree with any of my statements.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasoncarr.com/technology/6-anal-retentive-ways-to-improve-your-csharp-code/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>UpSync Version 0.5 Released</title>
		<link>http://www.jasoncarr.com/software/upsync-version-0-5-released</link>
		<comments>http://www.jasoncarr.com/software/upsync-version-0-5-released#comments</comments>
		<pubDate>Thu, 16 Jul 2009 21:11:38 +0000</pubDate>
		<dc:creator>Jason Carr</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[UpSync]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://jasondavidcarr.com/?p=130</guid>
		<description><![CDATA[Below are the downloads for the setup and the sources for the first official release of UpSync, version 0.5.  As I stated in my previous post, it works properly in Windows XP and Vista, as well as Windows 7.  For &#8230; <a href="http://www.jasoncarr.com/software/upsync-version-0-5-released">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>Below are the downloads for the setup and the sources for the first official release of UpSync, version 0.5.  As I stated in my previous post, it works properly in Windows XP and Vista, as well as Windows 7.  For a description of the application, and some screenshots, see the previous post.</p>
<p>If you use it, let me know!  I&#8217;m interested in any kind of feedback.</p>
<p><a href="/software/UpSync-0.5-Setup.zip">Download UpSync 0.5 Setup</a><br />
<a href="/software/UpSync-0.5-Sources.zip">Download UpSync 0.5 Source Code (Visual Studio 2008 required)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jasoncarr.com/software/upsync-version-0-5-released/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>New Application &#8211; UpSync</title>
		<link>http://www.jasoncarr.com/software/new-application-upsync</link>
		<comments>http://www.jasoncarr.com/software/new-application-upsync#comments</comments>
		<pubDate>Thu, 16 Jul 2009 09:09:38 +0000</pubDate>
		<dc:creator>Jason Carr</dc:creator>
				<category><![CDATA[C#]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[UpSync]]></category>
		<category><![CDATA[Visual Studio 2008]]></category>

		<guid isPermaLink="false">http://jasondavidcarr.com/?p=71</guid>
		<description><![CDATA[I recently started working on a new application called UpSync. From what you can probably already tell from the name, the application is meant to sync files between folders on different machines. It&#8217;s meant to be easy to use but &#8230; <a href="http://www.jasoncarr.com/software/new-application-upsync">Continue reading</a>]]></description>
			<content:encoded><![CDATA[<p>I recently started working on a new application called UpSync.  From what you can probably already tell from the name, the application is meant to sync files between folders on different machines.  It&#8217;s meant to be easy to use but also down and dirty enough to meet a typical system admin&#8217;s needs.</p>
<p>I&#8217;m open sourcing the project, and I&#8217;ll have the setup and the source code for version 0.5 up very shortly.  It works properly on Windows XP, Vista, and even Microsoft&#8217;s new, unreleased Windows 7 (the screenshots are from Windows 7).  It&#8217;s written in C#, my favorite of the .NET languages, using Visual Studio 2008.</p>
<p>Here are some of the key features that have already been implemented:</p>
<ul>
<li>Any number of folders can be synced with separate settings for each folder.</li>
<li>Sync in one direction, the other direction, or both directions with no interaction necessary.</li>
<li>Specific settings for handling deleted files allow for all possible situations.</li>
<li>Syncing engine uses file dates and times to ensure the most recent version of files are replicated.</li>
<li>New files in either folder are automatically handled correctly and copied over to the other folder.</li>
<li>Sync process can be entirely automated or manually run.</li>
<li>Syncing engine logs every operation in complete detail so there is never any confusion as to what files were changed.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.jasoncarr.com/software/new-application-upsync/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

