<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Bora's Place</title>
	
	<link>http://bora.bilg.in</link>
	<description>The way I see it.</description>
	<lastBuildDate>Mon, 05 Dec 2011 04:12:39 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<creativeCommons:license>http://creativecommons.org/licenses/by-nc-sa/3.0/</creativeCommons:license>		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/BorasPlace" /><feedburner:info uri="borasplace" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Making Non Strong Named DLL’s COM visible with a wrapper</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/mTSH6yuw0uA/making-non-strong-named-dlls-com-visible-with-a-wrapper</link>
		<comments>http://bora.bilg.in/blog/11/making-non-strong-named-dlls-com-visible-with-a-wrapper#comments</comments>
		<pubDate>Fri, 12 Nov 2010 03:14:41 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[Operating Systems and Software]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[.net]]></category>
		<category><![CDATA[com]]></category>
		<category><![CDATA[headache]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=327</guid>
		<description><![CDATA[Today I dealt with a really weird problem that totally burnt me. I had a few non COM visible .NET DLL&#8217;s (all of them are signed but not strong named) and I needed to write a wrapper to make them COM visible. Easy, eh? Yeah, keep reading. Step 1. Tried putting the DLL&#8217;s to GAC [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/05/hello-world-with-smart-client-software-factory' rel='bookmark' title='Permanent Link: Hello World with Smart Client Software Factory'>Hello World with Smart Client Software Factory</a> <small> To define Smart Client Software Factory, we need to...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/06/sql-quickies-login-failed-for-user-error-in-sql-server' rel='bookmark' title='Permanent Link: [SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server'>[SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server</a> <small>Here&#8217;s a quick tip on solving this problem on MS...</small></li><li><a href='http://bora.bilg.in/blog/12/datagrid-in-a-combobox-c' rel='bookmark' title='Permanent Link: DataGrid in a ComboBox, C#'>DataGrid in a ComboBox, C#</a> <small> Ever thought of putting different controls in a combo...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Today I dealt with a really weird problem that totally burnt me. I had a few non COM visible .NET DLL&#8217;s (all of them are signed but not strong named) and I needed to write a wrapper to make them COM visible. Easy, eh? Yeah, keep reading.</p>
<p><span id="more-327"></span><strong>Step 1.</strong> Tried putting the DLL&#8217;s to GAC (Global Assembly Cache) . Error received: <span style="font-family: Arial;"><span style="font-size: small;"><strong>Failure adding Assembly to cache. Attempt to install an assembly without a strong name.</strong> </span></span><span style="font-family: Arial;"><span style="font-size: small;">Wait, what?</span></span></p>
<p><strong>Step 2.</strong> Wrote a .NET wrapper which references the DLL&#8217;s and made the wrapper DLL COM Visible. Error Received: <strong>Referenced assembly [ASMNAME] does not have a strong name.</strong> What do I care? Well, can&#8217;t add non strong named DLL&#8217;s to any project which is COM visible. They ALL have to be strong named. Damn.</p>
<p><strong>Step 3.</strong> Signed my wrapper with my own SNK (strong named key file) file. Use the &#8220;sn&#8221; utility included in Visual Studio or go to Project properties-&gt;Signing section-&gt;Check &#8220;Sign the assembly&#8221; checkbox and select New from the dropdown. Remember this has to be a SNK file (PFX files will give an error in the next step)</p>
<p><strong>Step 4.</strong> I then disassembled the problem DLL&#8217;s with ildasm and reassembled them with my project&#8217;s keyfile as follows (Search for ildasm and ilasm in Visual Studio Tools\bin folder):</p>
<pre class="brush: bash">
ildasm /all /out=YOUR_DLL_NAME_HERE.il YOUR_DLL_NAME_HERE.dll
ilasm /dll /Quiet /key=Path\To\Your\Keyfile.snk YOUR_DLL_NAME_HERE.il
</pre>
<p>Believe it or not, you&#8217;ve now inherited the DLL&#8217;s now. <strong>But beware!</strong> This might violate the EULA of the DLL&#8217;s that you are using, since you are re-assembling them with your own strong name file.</p>
<p><strong>Step 5.</strong> Add new DLL&#8217;s to your wrapper project. Compile your wrapper. Error received: The DLL&#8217;s are referencing the non strong named version of the DLL&#8217;s (In my case I had more than 1 DLL, if you only have 1 DLL, you are good, jump to step 8.) The DLL&#8217;s referenced each other and the references were made for the non strong named ones (the ones that had no Public Key or Hash values, but rat step 4 we added these values manually by signing the DLL&#8217;s). So since DLL&#8217;s had a public key token, they were treated as different assemblies (naturally) and thus the references needed to be modified.</p>
<p><strong>Step 6.</strong> We need to modify the references in the DLL&#8217;s. Download <a title="Reflector" href="http://www.red-gate.com/products/reflector/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.red-gate.com');" target="_blank">Reflector from Red Gate</a>. Also download <a title="Reflexil" href="http://sourceforge.net/projects/reflexil/files/" onclick="javascript:pageTracker._trackPageview('/outbound/article/sourceforge.net');" target="_blank">Reflexil </a>addon. Install Reflector and then Reflexil. Reflexil will allow us to modify the references of the DLL&#8217;s.</p>
<p><strong>Step 7. </strong>Load your signed DLL&#8217;s in Reflexil. Go to References section. Click on each reference that is causing a problem. Enter your own project&#8217;s Public Key, Public Key Token and check HasPublicKeyValue checkbox. Select the Algorithm as well (SHA1). Save the modified DLL files. Now you have signed DLL&#8217;s which are referencing each other.</p>
<p><strong>Step 8.</strong> Add the DLL&#8217;s to your wrapper project again and recompile. Everything should be working now.</p>
<p><strong>Step 9.</strong> Make your wrapper COM visible and also set ClassType property to AutoDual (You can also set it to None and create an explicit interface as well &#8211; up to you)</p>
<pre class="brush: c#">

[ComVisible(true)]

[ClassInterface(ClassInterfaceType.AutoDual)]

public class MyWrapper
</pre>
<p><strong>Step 10.</strong> Voila, you can now use your non COM visible managed DLL&#8217;s in your applications through your wrapper with COM.</p>
<p>Piece of cake, right?</p>
<p>Stay away from COM,</p>
<p>Bora Bilgin</p>


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/05/hello-world-with-smart-client-software-factory' rel='bookmark' title='Permanent Link: Hello World with Smart Client Software Factory'>Hello World with Smart Client Software Factory</a> <small> To define Smart Client Software Factory, we need to...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/06/sql-quickies-login-failed-for-user-error-in-sql-server' rel='bookmark' title='Permanent Link: [SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server'>[SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server</a> <small>Here&#8217;s a quick tip on solving this problem on MS...</small></li><li><a href='http://bora.bilg.in/blog/12/datagrid-in-a-combobox-c' rel='bookmark' title='Permanent Link: DataGrid in a ComboBox, C#'>DataGrid in a ComboBox, C#</a> <small> Ever thought of putting different controls in a combo...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/xK8kagDEbOQDRd1NwapRwzLP1lg/0/da"><img src="http://feedads.g.doubleclick.net/~a/xK8kagDEbOQDRd1NwapRwzLP1lg/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/xK8kagDEbOQDRd1NwapRwzLP1lg/1/da"><img src="http://feedads.g.doubleclick.net/~a/xK8kagDEbOQDRd1NwapRwzLP1lg/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/mTSH6yuw0uA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/11/making-non-strong-named-dlls-com-visible-with-a-wrapper/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/11/making-non-strong-named-dlls-com-visible-with-a-wrapper</feedburner:origLink></item>
		<item>
		<title>Preparing a custom image of Windows 7</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/Tn8gFkZwU1k/preparing-a-custom-image-of-windows-7</link>
		<comments>http://bora.bilg.in/blog/os_and_software/12/preparing-a-custom-image-of-windows-7#comments</comments>
		<pubDate>Fri, 25 Dec 2009 23:54:31 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[Operating Systems and Software]]></category>
		<category><![CDATA[custom image]]></category>
		<category><![CDATA[sysprep]]></category>
		<category><![CDATA[waik]]></category>
		<category><![CDATA[windows 7]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=320</guid>
		<description><![CDATA[I have written a detailed guide about preparing custom images for Windows XP before, and this time I am writing about preparing custom images of Windows 7 with the same technique. The basic tool we use is the same &#8211; Sysprep. However, it is much easier in Windows 7 to create a custom image. I [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/06/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi' rel='bookmark' title='Permanent Link: Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)'>Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)</a> <small>How much time does it take to install Windows XP?...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/06/sql-quickies-login-failed-for-user-error-in-sql-server' rel='bookmark' title='Permanent Link: [SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server'>[SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server</a> <small>Here&#8217;s a quick tip on solving this problem on MS...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/06/linux-on-usb-stick-under-windows-with-colinux' rel='bookmark' title='Permanent Link: Linux on USB Stick, Under Windows, with CoLinux!'>Linux on USB Stick, Under Windows, with CoLinux!</a> <small>Ok, I admit that the title is a little bit...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I have written a detailed guide about preparing custom images for Windows XP before, and this time I am writing about preparing custom images of Windows 7 with the same technique.</p>
<p>The basic tool we use is the same &#8211; Sysprep. However, it is much easier in Windows 7 to create a custom image. I have ran across some weird problems, and I am including those details and solutions as well in this article.</p>
<p><span id="more-320"></span><strong>How to Create a Custom Windows 7 Image?</strong></p>
<p>To create a custom Windows 7 image, you will need 2 partitions (or 2 separate computers) and a Windows 7 CD/DVD as well as a USB disk to store the image. First partition (or computer) will be the technician machine, we will create some tools for imaging from this machine. The other partition (or machine) will be the system that will be imaged (reference computer).</p>
<p><strong>Technician Machine (Or Partition)</strong></p>
<ol>
<li>Install Windows 7 on technician machine.</li>
<li>Download and install WAIK for Windows 7 (Windows Automated Installation Kit)</li>
<li>You will need to create a bootable media (cd/usb) with ImageX to capture the image. Open WAIK Deployment Command Line (from Program File -&gt; Windows Automated Installation Kit) as administrator. Create the ISO with the following commands: (Your folders may differ but the filenames should be the same)
<pre class="brush: php">copype.cmd x86 c:\winpe_x86
copy c:\winpe_x86\winpe.wim c:\winpe_x86\ISO\sources\boot.wim
copy &quot;C:\program files\Windows AIK\imagex.exe&quot; C:\winpe_x86\iso\
oscdimg -n -bC:\winpe_x86\etfsboot.com C:\winpe_x86\ISO\ C:\winpe_x86\winpe_x86.iso
</pre>
</li>
<li>Burn this ISO to a CD / DVD or a USB drive. You will use this later to capture the image.</li>
</ol>
<p><strong>Reference Machine (Or Partition)</strong></p>
<ol>
<li>Install Windows 7 on the reference machine.</li>
<li>Create a temporary use (let&#8217;s name it TEMPUSER)</li>
<li>Install any applications you want to include in the image.</li>
<li>Install any updates, and configure Windows as you like.</li>
<li>After you install and configure everything, we will wrap up the system. But before that, we need to delete the temporary user profile that we created. Run Windows\System32\Sysprep\Sysprep.exe as administrator and select &#8220;Enter System Audit Mode&#8221; from the dropdown list. Also check &#8220;Generalize&#8221; option, and select &#8220;Reboot&#8221; as the shutdown option. This is your last chance to install any programs or do any configurations.</li>
<li>When you close Sysprep, the system will restart automatically.</li>
<li>After the system restarts, you log on automatically as Administrator. You can delete the TEMPUSER account from Control Panel -&gt; User Accounts.</li>
<li>Run Windows\System32\Sysprep\Sysprep.exe as administrator and select &#8220;Enter Out Of Box Experience (OOBE)&#8221; from the dropdown list. Also check &#8220;Generalize&#8221; option, and select &#8220;Shutdown&#8221; as the shutdown option. The system will shutdown after you close Sysprep</li>
</ol>
<p>Now, boot the reference computer with the CD created by WAIK iso on technician machine. A command line will appear. Enter the following command to take the image</p>
<pre class="brush: php">

imagex /compress fast /check /scroll /capture C: D:\install.wim &quot; Windows Professional&quot; &quot;Windows 7&quot;
</pre>
<p>Make sure you get the correct paths. C: is the partition we want to take image of. D: is the USB drive which the image will be copied to.</p>
<p>After this step, you will have an image of the reference computer. Copy this to a network path or another partition as we will format the USB drive.</p>
<p>Now, boot to technician machine. Run WAIK Deployment Command Line as administrator. Enter the following command (taken from Microsoft Technet)</p>
<ul>
<li>Launch the DiskPart utility by typing <strong>diskpart</strong> at the Start Menu.</li>
<li>Then run the <strong>list disk</strong> command to check the status of your drive.</li>
<li>Now run <strong>select disk 1</strong> where the &#8220;1&#8243; is actually the corresponding number of your USB drive.</li>
<li>Run <strong>clean</strong>.</li>
<li>Once the thumb drive is clean, you can run <strong>create partition primary</strong>.</li>
<li>Now make the partition active by entering <strong>active</strong></li>
<li>Then you need to set up the file system as Fat32 by running <strong>format fs=fat32 quick</strong> (quick, of course, specifies that you want to perform a quick format to speed up the process).</li>
</ul>
<p>After this step, copy everything from your original Windows 7 CD/DVD to the USB drive that you just formatted. Then, replace Sources\install.wim in the USB drive with the &#8220;install.wim&#8221; image file that you created from the reference computer (remember you saved it somewhere <img src='http://bora.bilg.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p>Congratulations, you have successfully created a Windows 7 image. You can now boot any computer from your USB drive and install your custom image.</p>
<p><strong>Troubleshooting</strong></p>
<ul>
<li>After Sysprep reboots (or after installation of the image), Windows gives this error : &#8220;<em>Windows could not finish configuring the system. To attempt to resume</em> configuration, restart the computer. &#8220;</li>
</ul>
<p>Your image may contain a rootkit or a similar program that causes this error. In my experience, these things helped overcoming this error:</p>
<ul>
<li>Make sure you don&#8217;t have Daemon Tools or Alcohol %120 like applications. These applications install a driver called SPTD which causes this error. You can remove SPTD by downloading and installing the installer from <a href="http://www.duplexsecure.com/download/SPTDinst-v162-x86.exe" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.duplexsecure.com');" target="_blank">here</a>.</li>
<li>Make sure you configure settings of your anti-virus product. I have seen that Kaspersky or ALG or Avira can cause these issues. Simply deactivate e the Self-Defense and Proactive Defense (or similar defense mechanisms) options and try again.</li>
<li>If still can&#8217;t fix it, make sure you format the reference partition with Windows 7 (and it&#8217;s totally formatted and clean, i.e no other files exist before installation) I&#8217;ve seen that formatting via other tools (i.e Windows 2000 disc) may cause this error.</li>
</ul>
<p>Enjoy Imaging,</p>
<p>Bora Bilgin</p>


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/06/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi' rel='bookmark' title='Permanent Link: Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)'>Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)</a> <small>How much time does it take to install Windows XP?...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/06/sql-quickies-login-failed-for-user-error-in-sql-server' rel='bookmark' title='Permanent Link: [SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server'>[SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server</a> <small>Here&#8217;s a quick tip on solving this problem on MS...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/06/linux-on-usb-stick-under-windows-with-colinux' rel='bookmark' title='Permanent Link: Linux on USB Stick, Under Windows, with CoLinux!'>Linux on USB Stick, Under Windows, with CoLinux!</a> <small>Ok, I admit that the title is a little bit...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/DQs1ToyR42jJ-PEX2RDhoGMocgI/0/da"><img src="http://feedads.g.doubleclick.net/~a/DQs1ToyR42jJ-PEX2RDhoGMocgI/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/DQs1ToyR42jJ-PEX2RDhoGMocgI/1/da"><img src="http://feedads.g.doubleclick.net/~a/DQs1ToyR42jJ-PEX2RDhoGMocgI/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/Tn8gFkZwU1k" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/os_and_software/12/preparing-a-custom-image-of-windows-7/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/os_and_software/12/preparing-a-custom-image-of-windows-7</feedburner:origLink></item>
		<item>
		<title>Updating a control in ASP.NET using ASPxGridView after a postback</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/9Rn7Vlw1Gc8/updating-a-control-in-aspnet-using-aspxgridview-after-a-postback</link>
		<comments>http://bora.bilg.in/blog/os_and_software/10/updating-a-control-in-aspnet-using-aspxgridview-after-a-postback#comments</comments>
		<pubDate>Tue, 27 Oct 2009 01:39:31 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[General Stuff]]></category>
		<category><![CDATA[Operating Systems and Software]]></category>
		<category><![CDATA[asp.net]]></category>
		<category><![CDATA[aspxgridview]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[postback]]></category>
		<category><![CDATA[update control on postback]]></category>
		<category><![CDATA[updatepanel]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=313</guid>
		<description><![CDATA[I&#8217;ve recently ran into a strange problem in ASP.NET. Being a desktop developer, I like to put interactions in my applications. What I wanted to do was very simple: After a grid postback (grid operation like update or create/delete), I wanted to show a status message to the user. This can be done easily with [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/12/better-event-handling-in-javascript' rel='bookmark' title='Permanent Link: Better event handling in JavaScript'>Better event handling in JavaScript</a> <small> Recently I ran into Aaron Moore&#8217;s addEvent method through...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve recently ran into a strange problem in ASP.NET. Being a desktop developer, I like to put interactions in my applications. What I wanted to do was very simple: After a grid postback (grid operation like update or create/delete), I wanted to show a status message to the user. This can be done easily with a button click event but since I was using DevExpress ASPxGridView, I couldn&#8217;t bind the UpdatePanel events to it&#8217;s postback event (I did but it didn&#8217;t work). I tried ways to force partial render but none gave the result I wanted. Here, I&#8217;m giving the solution I came up with:</p>
<p>It uses an UpdatePanel and Javascript.<br />
The Javascript part:</p>
<pre class="brush: js">
&lt;script type=&quot;text/javascript&quot;&gt;
function updateStatusText() {
__doPostBack(&quot;&lt; %= UpdatePanel.ClientID%&gt;&quot;, &#039;&#039;);
}
&lt;/script&gt;
</pre>
<p>What we do here is simple, we add a Javascript function which forces a postback of the desired control (UpdatePanel in our case)</p>
<p><span id="more-313"></span></p>
<p>Here&#8217;s the UpdatePanel control:</p>
<pre class="brush: xml">
&lt;asp :ScriptManager ID=&quot;ScriptManager&quot; runat=&quot;server&quot;&gt;&lt;/asp&gt;
&lt;asp :UpdatePanel ID=&quot;UpdatePanel&quot; runat=&quot;server&quot; UpdateMode=&quot;Conditional&quot;&gt;
&lt;contenttemplate&gt;
&lt; %=StatusMessage%&gt;
&lt;/contenttemplate&gt;
&lt;/asp&gt;
</pre>
<p>It uses a variable as content template.<br />
The variable:</p>
<pre class="brush: c#">
public string StatusMessage
{
get
{
return (Session[&quot;statusMessage&quot;] == null) ? string.Empty : Session[&quot;statusMessage&quot;].ToString();
}
set
{
Session[&quot;statusMessage&quot;] = value;
}
}
</pre>
<p>Finally, add this to your ASPxGridView properties:</p>
<pre class="brush: xml">
&lt;clientsideevents EndCallback=&quot;function(s, e) { updateStatusText(); }&quot; /&gt;
</pre>
<p>What we did: We told ASPxGridView to call updateStatusText() Javascript method after it&#8217;s callback is finished. And we forced a postback targeting the desired control (UpdatePanel) to update it&#8217;s properties. Since we use an UpdatePanel, you will see a partial page render (not whole page reloading) which is bound to our Session variable, set to show the status text available. I played with extra control postbacks but UpdatePanel is the best choice if you want to see AJAX in action.</p>
<p>Enjoy,<br />
Bora Bilgin</p>


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/12/better-event-handling-in-javascript' rel='bookmark' title='Permanent Link: Better event handling in JavaScript'>Better event handling in JavaScript</a> <small> Recently I ran into Aaron Moore&#8217;s addEvent method through...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/I3VWJP8Wge70Y4fDmaroyRJkd-s/0/da"><img src="http://feedads.g.doubleclick.net/~a/I3VWJP8Wge70Y4fDmaroyRJkd-s/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/I3VWJP8Wge70Y4fDmaroyRJkd-s/1/da"><img src="http://feedads.g.doubleclick.net/~a/I3VWJP8Wge70Y4fDmaroyRJkd-s/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/9Rn7Vlw1Gc8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/os_and_software/10/updating-a-control-in-aspnet-using-aspxgridview-after-a-postback/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/os_and_software/10/updating-a-control-in-aspnet-using-aspxgridview-after-a-postback</feedburner:origLink></item>
		<item>
		<title>Psychology of Programming: Programmer’s Flow</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/NbYw5vVeOF4/psychology-of-programming-programmers-flow</link>
		<comments>http://bora.bilg.in/blog/programming/08/psychology-of-programming-programmers-flow#comments</comments>
		<pubDate>Wed, 12 Aug 2009 16:02:19 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[General Stuff]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[efficient programming]]></category>
		<category><![CDATA[programmers flow]]></category>
		<category><![CDATA[psychology]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=311</guid>
		<description><![CDATA[The nature and psychology of &#8220;things&#8221; have always attracted me. Aside programming, I like to learn &#8220;how&#8221; and &#8220;why&#8221; parts of phenomenons. Lately, I have been working on how to get more efficient and do more tasks in less time, especially in programming. Of course planning is the most important part of this goal, but, [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/03/my-top-7-symbian-applications' rel='bookmark' title='Permanent Link: My Top 7 Symbian Applications'>My Top 7 Symbian Applications</a> <small> I am thrilled about the improvements on mobile technologies,...</small></li><li><a href='http://bora.bilg.in/blog/11/making-non-strong-named-dlls-com-visible-with-a-wrapper' rel='bookmark' title='Permanent Link: Making Non Strong Named DLL&#8217;s COM visible with a wrapper'>Making Non Strong Named DLL&#8217;s COM visible with a wrapper</a> <small>Today I dealt with a really weird problem that totally...</small></li><li><a href='http://bora.bilg.in/about' rel='bookmark' title='Permanent Link: About'>About</a> <small>I am the guy that runs into the weirdest programming...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>The nature and psychology of &#8220;things&#8221; have always attracted me. Aside programming, I like to learn &#8220;how&#8221; and &#8220;why&#8221; parts of phenomenons. Lately, I have been working on how to get more efficient and do more tasks in less time, especially in programming. Of course planning is the most important part of this goal, but, how do we implement our planning? Today&#8217;s most programming strategies involve breaking tasks into smaller ones and get feedback on the project along the way. This is one of the crucial steps of programming, but there is one more step: implementing these tasks <em>efficiently</em>.</p>
<p>Efficiency in programming can not be achieved with the strategies from other fields. Think about these: When you need efficiency in a restaurant, you may hire more waiters and cooks. When you need efficiency in your finance department, you can hire large groups of accountants, plan the work, split and get everything done. In any field, you can throw more &#8220;players&#8221; or &#8220;units&#8221; to achieve speed. (Warning: I&#8217;m not saying quality, I&#8217;m saying speed and/or efficiency). But, if you look at programming teams, they are usually small. Why can&#8217;t we throw more programmers and get everything done? There are some companies out there who tried this methodology and failed miserably. While looking for reasons of this problem, I came across this phenomenon: Programmer&#8217;s Flow (or Conscious Programming)</p>
<p><span id="more-311"></span><strong>What is Programmer&#8217;s Flow?</strong></p>
<p>Programmer&#8217;s Flow is a state of mind which some programmers have naturally. This is a higher and stronger level of attention. This is holding too much information and thinking constantly. If you are a programmer, or if you know a programmer, you might notice these &#8220;symptoms&#8221; <img src='http://bora.bilg.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li>Not talking too much or not socializing(introverted). This is the first step as anything outside can break this flow. So the programmer stops thinking or dealing with other things outside (But this is not a continuous state like asocial people, this is not &#8220;mildly autism&#8221; either. Those are blindfoldedly sticked labels)</li>
<li>High level of creativity</li>
<li>High level of attention towards the project or tasks</li>
<li>High level of productivity, thus providing efficiency</li>
<li>Motivation to finish more tasks without stopping</li>
</ul>
<p>In my opinion, this state of mind can be acquired by practice, and when used consciously, it can make life much easier. But, in some extreme conditions, this may lead to anxiety and nervousness. I once read somewhere that a programmer in Microsoft locked himself in his room until he finished the project (I believe it was an older version of Office, I can&#8217;t find the link to the article). This is a clear example of losing control, but of course most programmers do not get to that stage.</p>
<p><strong>How can Programmer&#8217;s Flow be achieved?</strong></p>
<p>There are some crucial steps to achieve this mental state. What I know for sure is, you require:</p>
<ul>
<li>Worry-free lifestyle (If you have worries outside your job, you might lose your ability to focus as you unconsciously think about your problems)</li>
<li>Insulation: If your phone rings every ten minutes, or if you are called into a meeting when you are programming, you will obviously not get into this state as you will lose your ability to focus.</li>
<li>Environmental needs: Working in a small cubicle under flickering white fluorescent light may not help you at all. You will need spacious rooms or cubicles, comfortable chairs, keyboards and tables. Wearing comfortable clothes and shoes will help as well.</li>
<li>Physical needs: Getting enough rest and nutrition is also very important.</li>
</ul>
<p>Once you have these requirements, you may turn your close your messengers/pagers and start working on your tasks. Once it gets dark and you still don&#8217;t want to leave the office and you still think about your accomplished tasks or next tasks, you will know that you entered that state (and it feels good <img src='http://bora.bilg.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  )</p>
<p><strong>Problems in today&#8217;s programming styles</strong></p>
<p>Today, most developers are treated as monkeys. You may receive a 300 page of design on your desk and be asked to implement those in short time. Or, your boss may often call your tasks &#8220;easy and simple&#8221; and ask you why the project have bugs or breaks down. The problem is, with the latest developments in technologies, it became &#8220;easier&#8221; to implement the tasks. For example; most tools are automated and have &#8220;wizards&#8221; to &#8220;generate&#8221; code for you. If you can write programs without these tools, it won&#8217;t hurt to use these tools to gain speed. But, the problem happens here: New programmers are not used to writing code without these tools. They are trained with these tools, they know where to click on the GUI to create an object, but they can&#8217;t do the same task with pen on paper. In my opinion, a rapid application developer is not a real programmer, s/he may only be the &#8220;user&#8221; of that tool s/he is using, unless s/he can accomplish a similar task on different environments with different languages or tools. This automation is clearly giving speed and efficiency to development teams, but also taking away creativeness from the new programmers. This creativeness leads to interest and attention, and it leads to programmer&#8217;s flow, that&#8217;s why most programmers can&#8217;t achieve this state.</p>
<p><strong>Links</strong></p>
<p>If you are interested in this subject, you may find the following links interesting as well:</p>
<p><a href="http://www.devx.com/DevX/Article/11659" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.devx.com');" target="_blank">An article on DevX</a></p>
<p><a href="http://www.codinghorror.com/blog/archives/000666.html" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.codinghorror.com');" target="_blank">An article on CodingHorror</a></p>
<p><a href="http://en.wikipedia.org/wiki/Flow_(psychology)" onclick="javascript:pageTracker._trackPageview('/outbound/article/en.wikipedia.org');" target="_blank">An article on Wikipedia</a></p>
<p>With love and code <img src='http://bora.bilg.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Bora Bilgin</p>


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/03/my-top-7-symbian-applications' rel='bookmark' title='Permanent Link: My Top 7 Symbian Applications'>My Top 7 Symbian Applications</a> <small> I am thrilled about the improvements on mobile technologies,...</small></li><li><a href='http://bora.bilg.in/blog/11/making-non-strong-named-dlls-com-visible-with-a-wrapper' rel='bookmark' title='Permanent Link: Making Non Strong Named DLL&#8217;s COM visible with a wrapper'>Making Non Strong Named DLL&#8217;s COM visible with a wrapper</a> <small>Today I dealt with a really weird problem that totally...</small></li><li><a href='http://bora.bilg.in/about' rel='bookmark' title='Permanent Link: About'>About</a> <small>I am the guy that runs into the weirdest programming...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/jQHMCk6Ppc-0osFKOGLzUUYQIRE/0/da"><img src="http://feedads.g.doubleclick.net/~a/jQHMCk6Ppc-0osFKOGLzUUYQIRE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/jQHMCk6Ppc-0osFKOGLzUUYQIRE/1/da"><img src="http://feedads.g.doubleclick.net/~a/jQHMCk6Ppc-0osFKOGLzUUYQIRE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/NbYw5vVeOF4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/programming/08/psychology-of-programming-programmers-flow/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/programming/08/psychology-of-programming-programmers-flow</feedburner:origLink></item>
		<item>
		<title>[SQL Quickies] “Login Failed for user” error in SQL Server</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/jCBVps-1eb0/sql-quickies-login-failed-for-user-error-in-sql-server</link>
		<comments>http://bora.bilg.in/blog/os_and_software/06/sql-quickies-login-failed-for-user-error-in-sql-server#comments</comments>
		<pubDate>Mon, 29 Jun 2009 16:05:42 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[Operating Systems and Software]]></category>
		<category><![CDATA[errors]]></category>
		<category><![CDATA[login failed]]></category>
		<category><![CDATA[sql server]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=306</guid>
		<description><![CDATA[Here&#8217;s a quick tip on solving this problem on MS SQL Servers: First of all, find why the problem exists: Right click &#8220;My Computer&#8221; and click Manager Expand Event Viewer Click on &#8220;Application&#8221; Look for &#8220;Failure Audit&#8221; in the logs. Your error might be different than mine, if it&#8217;s the same, keep reading. If it [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/os_and_software/06/linux-on-usb-stick-under-windows-with-colinux' rel='bookmark' title='Permanent Link: Linux on USB Stick, Under Windows, with CoLinux!'>Linux on USB Stick, Under Windows, with CoLinux!</a> <small>Ok, I admit that the title is a little bit...</small></li><li><a href='http://bora.bilg.in/blog/11/making-non-strong-named-dlls-com-visible-with-a-wrapper' rel='bookmark' title='Permanent Link: Making Non Strong Named DLL&#8217;s COM visible with a wrapper'>Making Non Strong Named DLL&#8217;s COM visible with a wrapper</a> <small>Today I dealt with a really weird problem that totally...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/12/preparing-a-custom-image-of-windows-7' rel='bookmark' title='Permanent Link: Preparing a custom image of Windows 7'>Preparing a custom image of Windows 7</a> <small>I have written a detailed guide about preparing custom images...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Here&#8217;s a quick tip on solving this problem on MS SQL Servers:</p>
<p>First of all, find why the problem exists:</p>
<ul>
<li>Right click &#8220;My Computer&#8221; and click Manager</li>
<li>Expand Event Viewer</li>
<li>Click on &#8220;Application&#8221;</li>
<li>Look for &#8220;Failure Audit&#8221; in the logs. Your error might be different than mine, if it&#8217;s the same, keep reading.</li>
</ul>
<p><span id="more-306"></span></p>
<div id="attachment_307" class="wp-caption alignleft" style="width: 809px"><img class="size-full wp-image-307" title="sqllogin-3" src="http://bora.bilg.in/wp-content/uploads/2009/06/sqllogin-3.jpg" alt="SQL Server Error in Event Viewer" width="799" height="566" /><p class="wp-caption-text">SQL Server Error in Event Viewer</p></div>
<ul>
<li>If it looks the same, open your SQL Server Management Studio and login with your Windows authentication. Right click on the server name and click Properties</li>
</ul>
<div id="attachment_308" class="wp-caption aligncenter" style="width: 364px"><img class="size-full wp-image-308" title="sqllogin-1" src="http://bora.bilg.in/wp-content/uploads/2009/06/sqllogin-1.jpg" alt="Sql Server Properties" width="354" height="455" /><p class="wp-caption-text">Sql Server Properties</p></div>
<ul>
<li>Go to Security tab and select SQL Server and Windows Authentication. Click Ok.</li>
</ul>
<div id="attachment_309" class="wp-caption aligncenter" style="width: 1030px"><img class="size-full wp-image-309" title="sqllogin-2" src="http://bora.bilg.in/wp-content/uploads/2009/06/sqllogin-2.jpg" alt="Sql Server Properties for Login Security" width="1020" height="629" /><p class="wp-caption-text">Sql Server Properties for Login Security</p></div>
<ul>
<li>Go to Start-&gt;Run. Enter services.msc and hit enter. Restart MS Sql Server Service from the list (Right click -&gt; Stop -&gt; Wait -&gt; Start)</li>
<li>Login with your desired user, your problem has been solved!</li>
</ul>
<p>Enjoy,</p>
<p>Bora Bilgin</p>


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/os_and_software/06/linux-on-usb-stick-under-windows-with-colinux' rel='bookmark' title='Permanent Link: Linux on USB Stick, Under Windows, with CoLinux!'>Linux on USB Stick, Under Windows, with CoLinux!</a> <small>Ok, I admit that the title is a little bit...</small></li><li><a href='http://bora.bilg.in/blog/11/making-non-strong-named-dlls-com-visible-with-a-wrapper' rel='bookmark' title='Permanent Link: Making Non Strong Named DLL&#8217;s COM visible with a wrapper'>Making Non Strong Named DLL&#8217;s COM visible with a wrapper</a> <small>Today I dealt with a really weird problem that totally...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/12/preparing-a-custom-image-of-windows-7' rel='bookmark' title='Permanent Link: Preparing a custom image of Windows 7'>Preparing a custom image of Windows 7</a> <small>I have written a detailed guide about preparing custom images...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/V-BxYGN-WsshP1rKIHibudGjCnU/0/da"><img src="http://feedads.g.doubleclick.net/~a/V-BxYGN-WsshP1rKIHibudGjCnU/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/V-BxYGN-WsshP1rKIHibudGjCnU/1/da"><img src="http://feedads.g.doubleclick.net/~a/V-BxYGN-WsshP1rKIHibudGjCnU/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/jCBVps-1eb0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/os_and_software/06/sql-quickies-login-failed-for-user-error-in-sql-server/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/os_and_software/06/sql-quickies-login-failed-for-user-error-in-sql-server</feedburner:origLink></item>
		<item>
		<title>Linux on USB Stick, Under Windows, with CoLinux!</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/--6C0Y93Nfo/linux-on-usb-stick-under-windows-with-colinux</link>
		<comments>http://bora.bilg.in/blog/os_and_software/06/linux-on-usb-stick-under-windows-with-colinux#comments</comments>
		<pubDate>Sat, 20 Jun 2009 03:03:15 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[Operating Systems and Software]]></category>
		<category><![CDATA[Other Projects]]></category>
		<category><![CDATA[colinux]]></category>
		<category><![CDATA[kbasket]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[operating systems]]></category>
		<category><![CDATA[software]]></category>
		<category><![CDATA[virtualization]]></category>
		<category><![CDATA[windows]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=300</guid>
		<description><![CDATA[Ok, I admit that the title is a little bit tricky. You want to use Linux, especially a linux application, under Windows, without installing any virtualization software (Vmware, VirtualBox etc.) And you need to do it fast, i.e with a double-click only. You can use CoLinux, &#8220;the first working free and open source method for [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/12/bda-on-windows-server-2008-for-tv-tuner-cards' rel='bookmark' title='Permanent Link: BDA on Windows Server 2008 for TV Tuner Cards'>BDA on Windows Server 2008 for TV Tuner Cards</a> <small> There are a lot of reasons not to use...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/12/preparing-a-custom-image-of-windows-7' rel='bookmark' title='Permanent Link: Preparing a custom image of Windows 7'>Preparing a custom image of Windows 7</a> <small>I have written a detailed guide about preparing custom images...</small></li><li><a href='http://bora.bilg.in/blog/06/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi' rel='bookmark' title='Permanent Link: Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)'>Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)</a> <small>How much time does it take to install Windows XP?...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>Ok, I admit that the title is a little bit tricky. You want to use Linux, especially a linux application, under Windows, without installing any virtualization software (Vmware, VirtualBox etc.) And you need to do it fast, i.e with a double-click only. You can use CoLinux, &#8220;the first working free and open source method for optimally running Linux on Microsoft Windows<br />
natively. Cooperative Linux (short-named coLinux) is a port of the Linux kernel that allows it to run cooperatively alongside another operating system on a single machine&#8221;. You can hook up with XMing Portable (X Server for Windows) and start using your Linux applications on Windows and carry it to anywhere on your USB stick. Normally you have to install your distribution on CoLinux, but I&#8217;ll provide a faster way (use a pre-configured Arch Linux on CoLinux)<br />
<span id="more-300"></span><br />
1-)Download the file initial coLinux <a href="http://web.twpda.com/co.7z" onclick="javascript:pageTracker._trackPageview('/outbound/article/web.twpda.com');" target="_blank">files</a>.  Extract it to CoLinux folder under your USB Stick<br />
2-)If you want to use Arch Linux, open command prompt, go to CoLinux folder (the one you extracted co.7z to) and type &#8220;co arch 1&#8243;. It&#8217;ll install Arch base. If you want to use Debian Linux, enter &#8220;co deb 1&#8243;<br />
3-)Don&#8217;t run anything yet. If you want to install Xorg and KDE/GNOME or other large sized applications, you&#8217;ll need to expand the fs file. Normally it&#8217;s 256 MB. But you can extend the size of it however you want. You&#8217;ll need <a href="http://csemler.com/toporesize-0.7.1.zip" onclick="javascript:pageTracker._trackPageview('/outbound/article/csemler.com');" target="_blank">TopoResize</a>. Download it, unpack it, run the batch &#8220;toporesize.bat&#8221;, click &#8220;find file&#8221;, select your image file (&#8220;arch.fs&#8221; or &#8220;deb.fs&#8221;), select your size on the slide and click &#8220;Resize file&#8221;. Voila, your image file is now resized.<br />
4-)Download <a href="http://www.straightrunning.com/candidate/Xming-7-5-0-5-setup.exe" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.straightrunning.com');" target="_blank">XMing</a>. Install it under CoLinuxXMing under your USB Stick.<br />
5-)Go to CoLinuxXMing folder. Open X0.hosts file, and add &#8220;*&#8221; (without quotes) to the first line of the file. We add a star, so XMing allows connections from your CoLinux installation.<br />
6-)Create a text file under your CoLinux folder in your USB Stick, and rename it to &#8220;RunCoLinux.bat&#8221;. Add these lines</p>
<pre class="brush: bash">
@start XmingXming.exe :0 -clipboard -multiwindow -ac
co.cmd arch
taskkill /IM Xming.exe
</pre>
<p>Now, the first line starts XMing. Make sure you are pointing to the right directory. In this example, I used X:CoLinuxXMing (where X is your USB Stick) and I put the RunCoLinux.bat under X:CoLinux</p>
<p>7-)Double click &#8220;RunCoLinux.bat&#8221;. It should boot your CoLinux. Normally, it uses SLIRP to connect to your network, so you can connect to Internet from your CoLinux installation.</p>
<p>8-)When booted, login with root. You can change your password with &#8220;passwd&#8221;, and start installing applications, use &#8220;pacman -Sy xorg&#8221; to install xorg. You can install KDE / GNOME / XFCE, whatever you want to use.</p>
<p>9-)To run X applications, you need to set the DISPLAY in your CoLinux. While root, enter these commands:</p>
<pre class="brush: bash">

dhcpcd eth0
export DISPLAY=192.168.0.2:0.0 # Replace 192.168.0.2 with your Windows Local IP
</pre>
<p>Now, test your XMing connection. Enter</p>
<pre class="brush: bash">
xclock
</pre>
<p>If you see a clock on your Windows desktop, XMing is working. You can start using your favourite X applications under Windows, without any hassle. My favourite application is KBasket, and I use it everywhere I go.</p>
<div id="attachment_299" class="wp-caption alignnone" style="width: 1034px"><img class="size-large wp-image-299" title="colinux" src="http://bora.bilg.in/wp-content/uploads/2009/06/colinux-1024x640.jpg" alt="coLinux under Windows" width="1024" height="640" /><p class="wp-caption-text">coLinux under Windows</p></div>


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/12/bda-on-windows-server-2008-for-tv-tuner-cards' rel='bookmark' title='Permanent Link: BDA on Windows Server 2008 for TV Tuner Cards'>BDA on Windows Server 2008 for TV Tuner Cards</a> <small> There are a lot of reasons not to use...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/12/preparing-a-custom-image-of-windows-7' rel='bookmark' title='Permanent Link: Preparing a custom image of Windows 7'>Preparing a custom image of Windows 7</a> <small>I have written a detailed guide about preparing custom images...</small></li><li><a href='http://bora.bilg.in/blog/06/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi' rel='bookmark' title='Permanent Link: Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)'>Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)</a> <small>How much time does it take to install Windows XP?...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/863L4LqaGtoSXI59NSWtPTEj5aE/0/da"><img src="http://feedads.g.doubleclick.net/~a/863L4LqaGtoSXI59NSWtPTEj5aE/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/863L4LqaGtoSXI59NSWtPTEj5aE/1/da"><img src="http://feedads.g.doubleclick.net/~a/863L4LqaGtoSXI59NSWtPTEj5aE/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/--6C0Y93Nfo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/os_and_software/06/linux-on-usb-stick-under-windows-with-colinux/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/os_and_software/06/linux-on-usb-stick-under-windows-with-colinux</feedburner:origLink></item>
		<item>
		<title>Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/PuWe4pNY5XE/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi</link>
		<comments>http://bora.bilg.in/blog/06/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi#comments</comments>
		<pubDate>Mon, 15 Jun 2009 01:48:38 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[Operating Systems and Software]]></category>
		<category><![CDATA[Own Projects]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[deploy image]]></category>
		<category><![CDATA[hal]]></category>
		<category><![CDATA[imaging]]></category>
		<category><![CDATA[sata]]></category>
		<category><![CDATA[sysprep]]></category>
		<category><![CDATA[universal image]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows xp]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=279</guid>
		<description><![CDATA[How much time does it take to install Windows XP? And the service pack? And the programs, plus settings, and other things? 3-4 hours? And considering the problems like spyware, malicious software problems, or the &#8220;natural&#8221; problems of Windows like getting slow after 1-2 months, crashing for no reason; how many times do you have [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/os_and_software/12/preparing-a-custom-image-of-windows-7' rel='bookmark' title='Permanent Link: Preparing a custom image of Windows 7'>Preparing a custom image of Windows 7</a> <small>I have written a detailed guide about preparing custom images...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/06/linux-on-usb-stick-under-windows-with-colinux' rel='bookmark' title='Permanent Link: Linux on USB Stick, Under Windows, with CoLinux!'>Linux on USB Stick, Under Windows, with CoLinux!</a> <small>Ok, I admit that the title is a little bit...</small></li><li><a href='http://bora.bilg.in/blog/04/multi-wan-load-balancing-under-windows-with-pfsense' rel='bookmark' title='Permanent Link: Multi WAN Load Balancing under Windows with PfSense'>Multi WAN Load Balancing under Windows with PfSense</a> <small> I recently built a home server machine for multimedia...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p>How much time does it take to install Windows XP? And the service pack? And the programs, plus settings, and other things? 3-4 hours? And considering the problems like spyware, malicious software problems, or the &#8220;natural&#8221; problems of Windows like getting slow after 1-2 months, crashing for no reason; how many times do you have to go through this installation procedure in a year? Well, multiply this with the number of computers you own. Lots of time gone for configuring.. Well, there is a very easy way of creating a universal image of Windows Xp with all the programs and configurations you want, and it can be deployed in just minutes!</p>
<p>What you will need to create a universal Windows XP image:</p>
<p>1-) Windows XP Cd<br />
2-) Optional: Service Packs or any programs you want to install<br />
3-) An imaging software (like Acronis TrueImage or Norton Ghost)<br />
4-) Optional: Preferably a Virtual Machine. I do my imaging in Virtual Machine, but you can use your own computer to get the image. I use Sun VirtualBox</p>
<p>Steps to take to create your XP image:</p>
<p><span id="more-279"></span></p>
<p>Preliminary Step: If you are using a virtual machine, make sure you select the correct Disk Controller. If you want to use your image on SATA drives, select SATA driver in the settings, or else select IDE.</p>
<p>0-) Install Windows XP to your computer or virtual computer.<br />
1-) Install your drivers. If you want, you can download <a href="http://www.driverpacks.net" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.driverpacks.net');">driver packs</a> to support other hardware. Here&#8217;s how to integrate driverpacks into your XP image:<br />
a-)Download DriverPacks BASE (and other driver packs you want) from driverpacks.net<br />
b-)Unzip the driver packs to C:D folder. Each driver pack will contain a single inf file in the 7z file, extract those inf files to C:<br />
c-)Extract the driver packs base to somewhere in C:<br />
d-)Open &#8220;bin&#8221; folder in the driverpack base folder. Copy DPsFnshr.ini and extract DPsFnshr.7Z to C:<br />
e-)Inside the driverpack base folder, open wnt5_x86-32 folder. Copy ROE.exe to C:\sysprep and extract DevPath.exe from M2.7z to C:<br />
d-)Run command prompt (write cmd to Run in Start menu) Enter C:\DevPath.exe C:D<br />
e-)Then execute this command: C:\makePNF.exe C:\D (this will take a while since it&#8217;ll integrate all the drivers into your Windows installation)</p>
<p>f-)Open C:\DPsFnshr.ini in notepad and find this line:</p>
<pre class="brush: bash">
KTD = &quot;false&quot;
</pre>
<p>Make sure it&#8217;s set to false.<br />
2-) Install your programs, service packs, do your configuration.<br />
3-) Download Sysprep from <a href="http://www.microsoft.com/downloads/details.aspx?familyid=673A1019-8E3E-4BE0-AC31-70DD21B5AFA7&amp;displaylang=en" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microsoft.com');" target="_blank">Microsoft for XP SP3</a><br />
4-) Extract it to C:sysprep<br />
5-) Run setupmgr.exe from sysprep directory.<br />
6-) Select Create new, then Sysprep Setup then choose Windows Xp, then choose &#8220;Yes, fully automate the installation&#8221;<br />
7-) Enter your choices in the next windows, i.e product key, network settings, locale settings etc.<br />
 <img src='http://bora.bilg.in/wp-includes/images/smilies/icon_cool.gif' alt='8-)' class='wp-smiley' /> Click Finish and it&#8217;ll save the inf, then click Cancel.<br />
10-) Open sysprep.inf that was generated by the setup. It should be in c:\sysprep\sysprep.inf<br />
11-) Add these two lines in the [unattended] section</p>
<pre class="brush: bash">

UpdateInstalledDrivers=Yes
DriverSigningPolicy=Ignore </pre>
<p>12-) Add this line at the end of the sysprep.inf (Make sure no spaces exist between braces)</p>
<pre class="brush: bash">[SysprepMassStorage]</pre>
<p>13-) Go to Start-&gt;Run. Enter &#8220;c:\sysprep\sysprep.exe -bmsd&#8221; and hit Enter. It&#8217;ll take some time to create the mass storage drivers section</p>
<p>14-) If you don&#8217;t want to integrate DriverPacks MassStorage pack, go to step 17.</p>
<p>15-) Save this script as HWIDS.cmd under C:<br />
</p>
<pre class="brush: bash">
rem %1 is path to MassDriverPacks Folder
IF &quot;%1&quot;==&quot;&quot; GOTO EOF
IF NOT EXIST %1 GOTO EOF

SETLOCAL ENABLEDELAYEDEXPANSION
SET STDOUT=%cd%HWIDS.TXT
TYPE&gt;%STDOUT% 2&gt;NUL

::traverse drivers path
CALL :TRAVERSAL %1

GOTO EOF

:TRAVERSAL
PUSHD %1
for /f %%f in (&#039;Dir /b *.inf&#039;) do (
for /f &quot;eol=- tokens=2 delims=,&quot; %%i in (&#039;find /i &quot;pciven&quot; %%f&#039;) do (
for /f &quot;tokens=*&quot; %%j in (&quot;%%i&quot;) do (
for /f &quot;tokens=1* delims=_&quot; %%k in (&quot;%%j&quot;) do (
if /i &quot;%%k&quot; EQU &quot;PCIVEN&quot; (
for /f &quot;usebackq tokens=1* delims=; &quot; %%a in (&#039;%%j&#039;) do (
echo %%a=%cd%%%f&gt;&gt;%STDOUT%
)
)
)
)
)
)

FOR /F %%I IN (&#039;DIR /AD /OGN /B&#039;) DO (
CALL :TRAVERSAL %CD%%%I
)
POPD
GOTO EOF

:EOF
</pre>
<p>16-) Run this script as: &#8220;C:\HWIDS.cmd D\M&#8221; It&#8217;ll generate HWIDS.txt. Copy everything in that file to c:\sysprep\sysprep.inf, at the end of [SysprepMassStorage] section. Make sure there are no extra spaces between items; i.e PCI_VEN&amp;blabla    =   C:\D\Mblabla.inf &lt;&#8211;Delete the extra spaces if any.<br />
17-) Go to Start-Run. Enter &#8220;C:\sysprep\ROE.exe 937&#8243; After this step, you should NOT reboot your computer!<br />
18-) Download <a href="http://rapidshare.com/files/244640379/HALu.zip" onclick="javascript:pageTracker._trackPageview('/outbound/article/rapidshare.com');">Hal Updater</a><br />
19-) Extract it to C:\HalUpdater and run HalU.exe. Choose &#8220;Standard PC&#8221; and update your HAL , but DONT reboot your computer.<br />
20-) Go to Start-Run. Enter regedit. Go to HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx and open the key 937. Add a string value, enter 2 for the name, and C:\HALu\HALu.exe for the value. We add this key so that in the next reboot, the user can choose his corresponding HAL (Dual core computers should choose ACPI Multiprocessor), but we choose Standard PC for now to be able to install our image on other PC&#8217;s too. So if you are certain that you won&#8217;t install your image on old PC&#8217;s, you can skip this step and keep your HAL as is. But your image wont work on other type of CPU&#8217;s.<br />
21-) Final step. Go to Start-Run. Enter &#8220;C:\sysprep\sysprep.exe&#8221; Click Reseal. This will take some time, maybe some hours. After this step, your computer will shut down. Don&#8217;t reboot your computer.<br />
22-) Download Acronis True Image or Norton Ghost. Create a Bootable Rescue Media ISO, attach it to your virtual machine (or write it to a CD and boot with it). Get a back up image of your drive.<br />
23-) Add that image to your bootable rescue media ISO file. Write it to a CD/DVD.<br />
24-) Boot any computer you want with that CD and restore your image. Boom! You have your image deployed in minutes!</p>
<p>Enjoy the automation,<br />
Bora Bilgin</p>


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/os_and_software/12/preparing-a-custom-image-of-windows-7' rel='bookmark' title='Permanent Link: Preparing a custom image of Windows 7'>Preparing a custom image of Windows 7</a> <small>I have written a detailed guide about preparing custom images...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/06/linux-on-usb-stick-under-windows-with-colinux' rel='bookmark' title='Permanent Link: Linux on USB Stick, Under Windows, with CoLinux!'>Linux on USB Stick, Under Windows, with CoLinux!</a> <small>Ok, I admit that the title is a little bit...</small></li><li><a href='http://bora.bilg.in/blog/04/multi-wan-load-balancing-under-windows-with-pfsense' rel='bookmark' title='Permanent Link: Multi WAN Load Balancing under Windows with PfSense'>Multi WAN Load Balancing under Windows with PfSense</a> <small> I recently built a home server machine for multimedia...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/90TlP3kIPEfFw4hBBXWUGPbEkE8/0/da"><img src="http://feedads.g.doubleclick.net/~a/90TlP3kIPEfFw4hBBXWUGPbEkE8/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/90TlP3kIPEfFw4hBBXWUGPbEkE8/1/da"><img src="http://feedads.g.doubleclick.net/~a/90TlP3kIPEfFw4hBBXWUGPbEkE8/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/PuWe4pNY5XE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/06/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi/feed</wfw:commentRss>
		<slash:comments>9</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/06/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi</feedburner:origLink></item>
		<item>
		<title>Hello World with Smart Client Software Factory</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/-lvV-fAsqQg/hello-world-with-smart-client-software-factory</link>
		<comments>http://bora.bilg.in/blog/05/hello-world-with-smart-client-software-factory#comments</comments>
		<pubDate>Mon, 04 May 2009 04:07:13 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[Other Projects]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[c#]]></category>
		<category><![CDATA[cab]]></category>
		<category><![CDATA[composite application block]]></category>
		<category><![CDATA[smart client]]></category>
		<category><![CDATA[smart client software factory]]></category>
		<category><![CDATA[visual studio]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=114</guid>
		<description><![CDATA[To define Smart Client Software Factory, we need to understand the Composite Smart Client Application. This describes a smart client that combines several loosely coupled modules in one shell. They for instance share a menu, status bar and several services, but remain independent besides those. A smart client is the name that is used, mainly [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/os_and_software/06/sql-quickies-login-failed-for-user-error-in-sql-server' rel='bookmark' title='Permanent Link: [SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server'>[SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server</a> <small>Here&#8217;s a quick tip on solving this problem on MS...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/10/updating-a-control-in-aspnet-using-aspxgridview-after-a-postback' rel='bookmark' title='Permanent Link: Updating a control in ASP.NET using ASPxGridView after a postback'>Updating a control in ASP.NET using ASPxGridView after a postback</a> <small>I&#8217;ve recently ran into a strange problem in ASP.NET. Being...</small></li><li><a href='http://bora.bilg.in/blog/11/making-non-strong-named-dlls-com-visible-with-a-wrapper' rel='bookmark' title='Permanent Link: Making Non Strong Named DLL&#8217;s COM visible with a wrapper'>Making Non Strong Named DLL&#8217;s COM visible with a wrapper</a> <small>Today I dealt with a really weird problem that totally...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p><code></code> To define Smart Client Software Factory, we need to understand the Composite Smart Client Application. This describes a smart client that combines several loosely coupled modules in one shell. They for instance share a menu, status bar and several services, but remain independent besides those. A smart client is the name that is used, mainly by Microsoft , for a client application that combines the rich GUI of the well-known windows applications like Word and Excel (the fat client) with the connectedness of a browser application (thin client).  <span id="more-114"></span> The Smart Client Software Factory, that has such a smart client as an end result, consists of:  1) A number of libraries that give you the possibility to make a smart client with a composite GUI. These libraries also contain solutions for recurring problems in logging, caching, etc.  2) The possibility to combine these standard elements in a configurable and pre-determined manner to form an application. This is done through the use of wizards in Visual Studio.  The SCSF makes use of the Composite UI Application Block (CAB). This application block is meant to support the development of a smart client with a GUI that contains dynamically loaded modules that are loosely coupled between each other and to the GUI. This loose coupling is realised by events with a (string based) URL, standard command objects that can be dynamically loaded and services that are declares as interfaces. The coupling is performed by the CAB when a module is loaded. This architecture is built with a regularly changing mix of modules in mind.  <strong>Understanding Composite UI Application Block</strong> The Composite UI Application Block is a framework based on .NET 2.0, developed the patterns &amp; practices team to assist anyone building complex UIs using Winforms.  The key design pattern: composability, allows more complex UIs to be assembled from simpler &#8220;parts&#8221; (<em>SmartParts</em> as called in CAB architecture, &#8220;WinParts&#8221; in other architectures).  The key point is that if we want our components to be released independently then <strong>they can&#8217;t have direct references to each other (Loosely coupling)</strong>. In short we want &#8216;applications&#8217; or components that appear in the same user interface (same window) with common menus and some ability to talk to each other, but don&#8217;t directly reference each other.  To create a Smart Client Project, you&#8217;ll need:</p>
<ul class="unIndentedList">
<li> <strong>Supported Operating Systems: </strong>Windows Server 2003; Windows Vista; Windows XP</li>
<li> <a href="http://www.microsoft.com/downloads/details.aspx?familyid=3BE112CC-B2C1-4215-9330-9C8CF9BCC6FA&amp;displaylang=en" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microsoft.com');">Smart Client Software Factory &#8211; April 2008</a></li>
<li> <a href="http://msdn2.microsoft.com/en-us/vstudio/default.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/msdn2.microsoft.com');" target="_blank">Microsoft Visual Studio 2008</a></li>
<li> <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&amp;DisplayLang=en" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microsoft.com');" target="_blank">Microsoft .NET Framework 3.5</a></li>
<li> <a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=df79c099-4753-4a59-91e3-5020d9714e4e&amp;DisplayLang=en" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microsoft.com');" target="_blank">Guidance Automation Extensions</a> (February 2008 or later)</li>
<li> <a href="http://www.microsoft.com/downloads/info.aspx?na=47&amp;p=4&amp;SrcDisplayLang=en&amp;SrcCategoryId=&amp;SrcFamilyId=df79c099-4753-4a59-91e3-5020d9714e4e&amp;u=details.aspx%3ffamilyid%3d1643758B-2986-47F7-B529-3E41584B6CE5%26displaylang%3den" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microsoft.com');">Enterprise Library 4.1-October 2008</a></li>
<li> <a href="http://www.microsoft.com/downloads/details.aspx?&amp;FamilyID=7849b34f-67ab-481f-a5a5-4990597b0297&amp;DisplayLang=en" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.microsoft.com');" target="_blank">SQL Server 2005 Compact Edition</a></li>
</ul>
<p><strong>Create Your Hello World Application </strong> This section describes how to create and display a view using the software factory. To create your first Hello World application, perform the procedures in this section.</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td><strong>Note:</strong> The following procedures require the guidance   package to be installed.</td>
</tr>
</tbody>
</table>
<p><strong>To create a new smart client application project </strong></p>
<ol type="1">
<li>In      Visual Studio 2008, point to <strong>New</strong> on the <strong>File</strong> menu, and then      click <strong>Project</strong>.</li>
<li>In      the <strong>New Project</strong> dialog box, expand <strong>Guidance Packages Project</strong>,      and then select <strong>Smart Client Development &#8211; April 2008</strong>.</li>
<li>Select      the Smart Client Application (C#) Visual Studio template.</li>
<li>In      the <strong>Name</strong> box, type <strong>HelloWorldApplication</strong>, and then click <strong>OK</strong>.</li>
<li>In      the wizard, accept the default settings, select the <strong>Show documentation      after recipe completes</strong> check box, and then click <strong>Finish</strong>.</li>
</ol>
<p align="center"><img title="clip_image002" src="http://bora.bilg.in/wp-content/uploads/2009/05/clip_image002.jpg" alt="clip_image002" width="434" height="468" /></p>
<p align="center"><em>Figure 1: Solution Structure</em></p>
<p>The smart client solution unfolded by the Smart Client Application template is composed of the following projects:</p>
<ul type="disc">
<li><strong>Infrastructure.Layout</strong> (only if you      selected the option to create a separate module to define the layout for      the Shell)</li>
<li><strong>Infrastructure.Interface</strong>. This project contains the      event topic names, UI extension site names, command names, and workspace      names that are the public interface to the Infrastructure.Module module.</li>
<li><strong>Infrastructure.Library</strong>. This project contains      common components used by a set of smart client applications. For example,      it includes the service to retrieve the profile catalog from a Web      service.</li>
<li><strong>Infrastructure.Module</strong>. This project contains      elements that are shared across projects in your smart client solution.</li>
<li><strong>Shell</strong>. This project is the basis      of a typical Composite UI Application Block application. It contains the      startup form and the root <strong>WorkItem</strong>.</li>
</ul>
<h3>Infrastructure.Interface</h3>
<p>This project is the interface for infrastructure modules and contains only the elements that have to be exposed to other modules of the application.  It is composed of service interfaces, constant definitions, business entities (only those that are passed between modules), and other shared elements, such as general purpose base classes.</p>
<h3>Constant Definitions</h3>
<p>Commands, event topics, UI extension sites, and workspaces are identified by unique strings. These unique strings are defined as constants for each of these element types, grouped in different classes located in the Constants folder.</p>
<h3>CommandNames Class</h3>
<p>The Composite UI Application Block uses commands to easily assign the same executable code to multiple user interface elements. For example, you can have a toolbar button and menu item execute the same code. You do this by executing the same command for both the toolbar button and menu item. Each command has a unique string identifier. The <strong>CommandNames</strong> class contains definitions for the command identifiers that are global to the application.</p>
<h4>EventTopicNames class</h4>
<p>The Composite UI Application Block includes an event broker system that enables you to publish events that allow communication between components in <strong>WorkItems</strong>. The event name is a string that identifies the event. The <strong>EventTopicNames</strong> class contains definitions for the event topic identifiers that are global to the application.</p>
<h4>UIExtensionSiteNames Class</h4>
<p>A Composite UI Application Block <strong>UIExtensionSite</strong> is a named user interface element that can support child elements. Each <strong>UIExtensionSite</strong> is identified by a unique string value. This string is used to identify elements when interacting with and adding child elements to that site, such as when adding a menu item to a menu bar. The <strong>UIExtensionSiteNames</strong> class contains definitions for the <strong>UIExtensionSite</strong> identifiers that are global to the application.</p>
<h4>WorkspaceNames Class</h4>
<p>Workspaces are components that encapsulate a particular visual way of displaying controls and SmartParts. Each <strong>Workspace</strong> is identified by a unique string value. The <strong>WorkspaceNames</strong> class contains definitions for the <strong>Workspace</strong> identifiers that are global to the application.</p>
<h3>Business Entities</h3>
<p>The BusinessEntities folder contains business entity classes. These are class definitions for business object instances that are shared by different modules in the smart client application.  For example business entities, see the BusinessEntities folder of the <strong>Infrastructure.Interface</strong> project in the Bank Branch Client reference implementation.</p>
<h3>Service Interfaces</h3>
<p>The Services folder contains interfaces for public services (services that <strong>WorkItems</strong> in other projects can consume).  For an example of this, see the Services folder of the Infrastructure.Interface project of the Bank Branch Client reference implementation.</p>
<h3>EventArgs Class</h3>
<p>Different event handlers can expect different argument types. The <strong>EventArgs</strong> class is a generic class that allows you to specify a type-safe argument for use in event publishing and subscription.</p>
<h3>Classes to Partition Business Logic and WorkItem Code</h3>
<p>The <strong>WorkItemController</strong> is an abstract base class that contains a <strong>WorkItem</strong>. This class contains logic that would otherwise exist in the <strong>WorkItem</strong>. You can use this class to partition your code between a class that derives from <strong>WorkItemController</strong> and a <strong>WorkItem</strong>.  When you create a new Composite UI Application Block module using the Add Business Module template, a <strong>ModuleController</strong> class is automatically added to control the <strong>WorkItem</strong> of the module. This class is a specialization of the <strong>WorkItemController</strong> class.  For an example of a <strong>ModuleController</strong> class, see the Composite UI Application Block module in the Bank Branch Client reference implementation.  The <strong>ControlledWorkItem</strong> represents a <strong>WorkItem</strong> that is managed by another class. The other class is the controller and contains the business logic (the <strong>WorkItem</strong> provides the container).</p>
<h3>Presenter Base Class</h3>
<p>This class contains code that would otherwise be repeated in every presenter when using the Model-View-Presenter (MVP) pattern. It includes a reference to a generic view and a reference to the <strong>WorkItem</strong> it belongs to. It also provides virtual methods to work with the controlled view.  To see examples of classes that derive from the <strong>Presenter</strong> class, see the presenters in the Views folder of the <strong>BranchSystems.Module</strong> project in the Bank Branch Client reference implementation.</p>
<h3>ActionAttribute</h3>
<p>This attribute is used to specify that a segment of code is a business action. Whenever you create an object with <strong>ObjectBuilder</strong>, a strategy will register each method decorated with this attribute as a business action in the action catalog. For more information, see <a href="http://msdn.microsoft.com/en-us/library/cc558866.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/msdn.microsoft.com');">How to: Use the Action Catalog</a>.</p>
<h3>Infrastructure.Module</h3>
<p>This project is a Composite UI Application Block module that acts as a container for the implementation of elements that are shared across projects in your smart client application.  When the CreateSolution recipe is executed, this module is added to the profile catalog. This means that Composite UI Application Block loads the <strong>Infrastructure.Module</strong> module when the application starts.  When created, this module is empty. You modify it to include the implementation of elements that different modules of your application will use, such as services. For example, the <strong>Infrastructure.Module</strong> in the Bank Branch Client reference implementation module adds the impersonation service to the root <strong>WorkItem</strong></p>
<p>.</p>
<h3>Infrastructure.Library</h3>
<p>This project contains the implementation of elements that are common to a set of smart client applications.</p>
<h3>SmartClientApplication Base Class</h3>
<p>This class extends <strong>FormShellApplication</strong>, which performs all the initial tasks that are required to start the application, including creating the default root <strong>WorkItem</strong>, adding the standard set of services, and loading any services and modules that are defined in the profile or configuration of the application.  The <strong>SmartClientApplication</strong> class adds additional services to the root <strong>WorkItem</strong> that will be consumed from different projects of your smart client application.  For instance, it adds the action catalog service (<strong>IActionCatalogService</strong>) and the entity translator service (<strong>IEntityTranslatorService</strong>).</p>
<h3>Builder Strategies</h3>
<p>The <strong>Infrastructure.Library</strong> project contains an <strong>ObjectBuilder</strong> strategy named <strong>ActionStrategy</strong>. This strategy is used to reflect on methods of objects that have the <strong>Action</strong> attribute to register them with the action catalog. For more information, see <a href="http://msdn.microsoft.com/en-us/library/cc558866.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/msdn.microsoft.com');">How to: Use the Action Catalog</a></p>
<p>.</p>
<h3>Services and User Interface Elements</h3>
<p>Services and UI folders contain implementation of services and user interface elements common to a set of smart client applications. It includes the following elements:</p>
<ul type="disc">
<li><strong>Action      catalog service</strong>. You can use the action catalog to control whether a      business action is executed. For more information, see <a href="http://msdn.microsoft.com/en-us/library/cc558866.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/msdn.microsoft.com');">How to: Use      the Action Catalog</a>.</li>
<li><strong>Module      loading and enumeration services</strong>. These services extend Composite UI      Application Block built-in services to provide extra features, such as      loading modules depending on user roles and retrieving the profile catalog      from a Web service.</li>
<li><strong>Entity      translator service</strong>. This service allows you to translate entities from      one type to another, and vice versa. For more information, see <a href="http://msdn.microsoft.com/en-us/library/cc558861.aspx" onclick="javascript:pageTracker._trackPageview('/outbound/article/msdn.microsoft.com');">How to:      Translate Between Business Entities and Service Entities</a>.</li>
<li><strong>Workspace      locator service</strong>. This service searches for SmartParts in a particular <strong>WorkItem</strong> and returns a reference to the workspace it belongs to.</li>
<li><strong>WindowsWorkspace</strong>.      This is a wrapper for the Composite UI Application Block built-in <strong>WindowsWorkspace</strong>.      It allows you set property values for controls of the modal window.</li>
</ul>
<h3>Shell</h3>
<p>This project is the shell for the application. It provides the overall user interface structure and contains the root <strong>WorkItem</strong>.  The basis of the smart client application is the <strong>ShellApplication</strong> class, which contains the program entry code to load and run the application. This class extends <strong>SmartClientApplication</strong> class, which makes it easier to start building an application that will have a startup form.</p>
<h3>Startup Form</h3>
<p>The ShellForm is the startup form of the application. It contains two workspaces, the LeftWorkspace and the RightWorkspace, as shown in Figure 4. If you define the layout for the shell in a separate module, the ShellForm contains only a DeckWorkspace. Figure 5 illustrates the ShellForm when a solution contains a separate module that defines the layout.</p>
<p style="text-align: center;"><img class="aligncenter" title="clip_image004" src="http://bora.bilg.in/wp-content/uploads/2009/05/clip_image004.jpg" alt="clip_image004" width="620" height="357" /></p>
<p style="text-align: center;"><em>Figure 2:<strong> </strong></em><em>ShellForm for an application without a separate module that defines the layout</em></p>
<h3>Module Catalog File</h3>
<p>The Shell also contains the module catalog file, named ProfileCatalog.xml. The Composite UI Application Block provides a service to load modules when the application starts. By default, it uses the XML catalog file to determine the modules to load.</p>
<table border="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td><strong>Note:</strong></td>
</tr>
<tr>
<td>You can modify your smart client solution to retrieve the   catalog from other data sources. For example, the Bank Branch Client   reference implementation retrieves the module catalog from a Web service.</td>
</tr>
</tbody>
</table>
<h3>Infrastructure.Layout</h3>
<p>The Infrastructure.Layout project is a module that provides a view that defines the layout of the shell. This project is only created for foundational modules with the option to create a separate module for layout selected.  <strong>To create a Hello World module </strong></p>
<ol type="1">
<li>In      Solution Explorer, right-click the solution, point to <strong>Smart Client      Software Factory</strong>, and then click <strong>Add Business Module (C#)</strong>.</li>
<li>In      the <strong>Add New Project</strong> dialog box, type <strong>HelloWorldModule</strong> in the      <strong>Name</strong> box.</li>
<li>Click      <strong>OK</strong>.</li>
<li>In      the wizard, accept the default settings, select the <strong>Show documentation      after recipe completes</strong> check box, and then click <strong>Finish</strong>.</li>
</ol>
<p><strong>To add a Hello World view </strong></p>
<ol type="1">
<li>In      Solution Explorer, right-click <strong>HelloWorldModule</strong>, point to <strong>Smart      Client Software Factory</strong>, and then click <strong>Add View (with presenter)</strong>.</li>
<li>In      the <strong>Add New View (with presenter)</strong> dialog box, type <strong>HelloWorldView</strong> in the <strong>View</strong> box, select the <strong>Show documentation after recipe      completes</strong> check box, and then click <strong>Finish</strong>.</li>
<li>In      Solution Explorer, double-click the file <strong>HelloWorldView.cs</strong> to view      it in the Designer.* <strong>Drag a</strong> *text box onto the view, and set the      text to <strong>Hello World</strong>.</li>
</ol>
<h4>To configure HelloWorldView to display on the shell&#8217;s right workspace</h4>
<p>1. In Solution Explorer, open ModuleController.cs in the HelloWorldModule project. 2. Add the following code.
<pre class="brush: c#"> using HelloWorldApplication.Infrastructure.Interface.Constants; </pre>
<p> 3. In the <strong>AddViews</strong> method, add the following code.
<pre class="brush: c#">  // Add the HelloWorld view (smart part) to the WorkItem and show  // the view through the RightWorkspace on the shell.  HelloWorldView hwview = ShowViewInWorkspace&lt; HelloWorldView &gt;(WorkspaceNames.RightWorkspace);  </pre>
<p> 4. Press F5 to build and run your Hello World application. 5. On the <strong>File</strong> menu, click <strong>Exit</strong>.  <strong>Communicating Between Views</strong> <strong>To prepare a solution for this topic</strong></p>
<ol type="1">
<li>Install the Smart Client      Development Package. For information about how to install this guidance      package, see Guidance Automation.</li>
<li>Use the Visual Studio      template Smart Client Application to create the initial smart client      solution. For information about how to create a solution with this      template, see How to: Create Smart Client Solutions.</li>
<li>Use the Add View (with      presenter) recipe to create a view in the Shell project. Enter <strong>LeftView</strong> for the name of the view.</li>
<li>Use the Add View (with      presenter) recipe to create a view in the Shell project. Enter <strong>RightView</strong> for the name of the view.</li>
</ol>
<p><strong>Steps</strong> To implement the communication between views, add the code that performs the following:</p>
<ol type="1">
<li>Define the event topic.</li>
<li>Publish the event from the      presenter for the LeftView view.</li>
<li>Capture a button click in      the view LeftView.</li>
<li>Refresh the view RightView.</li>
<li>Subscribe to the event in      the presenter for the RightView view.</li>
</ol>
<p><strong>To define an event topic </strong></p>
<ol type="1">
<li>Open the file      EventTopicNames.cs that is located in the Constants folder of the Infrastructure.Interface      project.</li>
<li>Add the constant definition,      as shown in the following code.</li>
</ol>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td>public const string ChangeColor =   &#8220;ChangeColor&#8221;;</td>
</tr>
<tr>
<td><strong> </strong> <strong>Note: </strong></td>
</tr>
<tr>
<td>The following procedure uses   &#8220;rootnamespace&#8221; to refer to the root namespace that you used when   you created your smart client solution. Replace &#8220;rootnamespace&#8221;   with your application&#8217;s root namespace.</td>
</tr>
</tbody>
</table>
<p><strong> </strong> <strong>To create the code to publish the event </strong></p>
<ol type="1">
<li>Open the file      LeftViewPresenter.cs.</li>
<li>Add the following using      statements.</li>
</ol>
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tbody>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td colspan="2">
<pre class="brush: c#">  using rootnamespace.Infrastructure.Interface.Constants;  using   Microsoft.Practices.CompositeUI.EventBroker;  </pre>
</td>
</tr>
</tbody>
</table>
<ol type="1">
<li>Add the code to declare the      event handler, as shown in the following code.</li>
</ol>
<table style="height: 72px;" border="0" cellspacing="0" cellpadding="0" width="888">
<tbody>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td colspan="2">
<pre class="brush: c#">  [EventPublication(EventTopicNames.ChangeColor, PublicationScope.Global)]  public event EventHandler&lt;eventargs&gt;   ChangeColor;  </pre>
<p></eventargs></td>
</tr>
</tbody>
</table>
<ol type="1">
<li>Add the code to publish the      event, as shown in the following code.</li>
</ol>
<pre class="brush: c#">  public void ChangeViewColor()  {  Random   random = new Random();  int r =   random.Next(256);  int g =   random.Next(256);  int b =   random.Next(256);  System.Drawing.Color color = System.Drawing.Color.FromArgb(r,g,b);  if   (ChangeColor != null)  {  ChangeColor(this, new EventArgs&lt;system .Drawing.Color&gt;(color));  }  }  </pre>
<p>  <strong>To capture the button click and call the presenter</strong></p>
<ol type="1">
<li>In Solution Explorer,      right-click <strong>LeftView.cs</strong>, and then click <strong>View Designer</strong>.</li>
<li>Drag a button from the      Visual Studio Toolbox onto the LeftView view. Change the name of the      button to <strong>changeColorButton</strong>.</li>
<li>Double-click the <strong>changeColorButton</strong> button. Visual Studio creates the method <strong>changeColorButton_Click</strong>.</li>
<li>Implement the <strong>changeColorButton_Click</strong> method, as shown in the following code.</li>
</ol>
<pre class="brush: c#"> private void changeColorButton_Click(object   sender, System.EventArgs e) { _presenter.ChangeViewColor(); }  </pre>
<p> <strong>To create the code to update the right view</strong></p>
<ol type="1">
<li>In Solution Explorer,      right-click <strong>IRightView.cs</strong>, and then click <strong>View Code</strong>.</li>
<li>Add the method, as shown in      the following code.</li>
</ol>
<pre class="brush: c#">  void ChangeColor(System.Drawing.Color color);  </pre>
<ol type="1">
<li>In Solution Explorer,      right-click <strong>RightView.cs</strong>, and then click <strong>View Code</strong>.</li>
<li>Add a method that changes      the background color of the view, as shown in the following code.</li>
</ol>
<pre class="brush: c#"> public void ChangeColor(System.Drawing.Color   color)  {  this.BackColor = color;  }  </pre>
<p>  <strong>To create the code to subscribe to the event </strong></p>
<ol type="1">
<li>Open the file      RightViewPresenter.cs.</li>
<li>Add the following using      statements.</li>
</ol>
<pre class="brush: c#">  using   rootnamespace.Infrastructure.Interface.Constants;  using   Microsoft.Practices.CompositeUI.EventBroker;  </pre>
<ol type="1">
<li>Add the code to subscribe to      the event and notify the view, as shown in the following code.</li>
</ol>
<pre class="brush: c#"> [EventSubscription(EventTopicNames.ChangeColor,   Thread = ThreadOption.UserInterface)]  public void ChangeColorHandler(object sender,   EventArgs&lt;/system&gt;&lt;system .Drawing.Color&gt; e)  { View.ChangeColor(e.Data); }  </pre>
<p>  Enjoy Smart Client,  Bora Bilgin  Note: Most parts of this article are compiled from original Smart Client Software Factory from Microsoft, and <a href="http://richnewman.wordpress.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/richnewman.wordpress.com');" target="_blank">Rich Newman</a>&#8216;s blog.  Note 2: I think that Rich Newman&#8217;s notes on SCSF/CAB are far more better than the original documentation <img src='http://bora.bilg.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </system></p>


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/os_and_software/06/sql-quickies-login-failed-for-user-error-in-sql-server' rel='bookmark' title='Permanent Link: [SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server'>[SQL Quickies] &#8220;Login Failed for user&#8221; error in SQL Server</a> <small>Here&#8217;s a quick tip on solving this problem on MS...</small></li><li><a href='http://bora.bilg.in/blog/os_and_software/10/updating-a-control-in-aspnet-using-aspxgridview-after-a-postback' rel='bookmark' title='Permanent Link: Updating a control in ASP.NET using ASPxGridView after a postback'>Updating a control in ASP.NET using ASPxGridView after a postback</a> <small>I&#8217;ve recently ran into a strange problem in ASP.NET. Being...</small></li><li><a href='http://bora.bilg.in/blog/11/making-non-strong-named-dlls-com-visible-with-a-wrapper' rel='bookmark' title='Permanent Link: Making Non Strong Named DLL&#8217;s COM visible with a wrapper'>Making Non Strong Named DLL&#8217;s COM visible with a wrapper</a> <small>Today I dealt with a really weird problem that totally...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/L8yniq152uOgp31BMBR-YS-73ws/0/da"><img src="http://feedads.g.doubleclick.net/~a/L8yniq152uOgp31BMBR-YS-73ws/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/L8yniq152uOgp31BMBR-YS-73ws/1/da"><img src="http://feedads.g.doubleclick.net/~a/L8yniq152uOgp31BMBR-YS-73ws/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/-lvV-fAsqQg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/05/hello-world-with-smart-client-software-factory/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/05/hello-world-with-smart-client-software-factory</feedburner:origLink></item>
		<item>
		<title>Multi WAN Load Balancing under Windows with PfSense</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/Y7-X2J2QwHU/multi-wan-load-balancing-under-windows-with-pfsense</link>
		<comments>http://bora.bilg.in/blog/04/multi-wan-load-balancing-under-windows-with-pfsense#comments</comments>
		<pubDate>Mon, 20 Apr 2009 22:28:31 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[Operating Systems and Software]]></category>
		<category><![CDATA[Own Projects]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Projects]]></category>
		<category><![CDATA[bandwidth]]></category>
		<category><![CDATA[freebsd]]></category>
		<category><![CDATA[load balancing]]></category>
		<category><![CDATA[multi wan]]></category>
		<category><![CDATA[multi wan load balancing]]></category>
		<category><![CDATA[networking]]></category>
		<category><![CDATA[pfsense]]></category>
		<category><![CDATA[round robin]]></category>
		<category><![CDATA[routing]]></category>
		<category><![CDATA[vmware]]></category>
		<category><![CDATA[weighted round robin]]></category>
		<category><![CDATA[windows]]></category>
		<category><![CDATA[windows vista]]></category>
		<category><![CDATA[Wireless]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=93</guid>
		<description><![CDATA[I recently built a home server machine for multimedia (movies, gaming, and picture storage) and networking purposes. The multimedia part is quite simple, you can hook up the server to your TV and watch movies or play games, and use the server as a centralized storage for file archiving. This can mostly be done under [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/12/bda-on-windows-server-2008-for-tv-tuner-cards' rel='bookmark' title='Permanent Link: BDA on Windows Server 2008 for TV Tuner Cards'>BDA on Windows Server 2008 for TV Tuner Cards</a> <small> There are a lot of reasons not to use...</small></li><li><a href='http://bora.bilg.in/blog/02/postgresql-database-server-farm-installation-and-configuration-with-pgcluster-on-freebsd' rel='bookmark' title='Permanent Link: PostgreSQL Database Server Farm Installation and Configuration with PgCluster on FreeBSD'>PostgreSQL Database Server Farm Installation and Configuration with PgCluster on FreeBSD</a> <small> I recently installed a PostgreSQL Database Server Farm on...</small></li><li><a href='http://bora.bilg.in/blog/06/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi' rel='bookmark' title='Permanent Link: Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)'>Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)</a> <small>How much time does it take to install Windows XP?...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p></p>
<p style="text-align: left;">I recently built a home server machine for multimedia (movies, gaming, and picture storage) and networking purposes. The multimedia part is quite simple, you can hook up the server to your TV and watch movies or play games, and use the server as a centralized storage for file archiving. This can mostly be done under *NIX systems, but when it comes to HD movie playing and gaming, WINE may not run everything smoothly and you may not get the same results with full HD (1080p) under Linux. So, I decided to use Windows Vista as my host operating system in this server configuration.</p>
<p style="text-align: left;">The second purpose of the server is networking. I wanted to combine several DSL and Cable Net connections into one network and use the bandwidth pool (Quick example: Think that you have 3 DSL lines, each with 6 Mbit bandwidth pools. If you combine these 3 lines and apply load balancing with a round robin algorithm, you&#8217;ll get 18 Mbit bandwidth pool. So if you use segmented downloading software like Internet Download Manager, you should get around 1.6 mb/s download rate. ) The goal here is, very basically, I want to combine my internet connections to get faster speed.</p>
<p style="text-align: left;">This is called Multi WAN Load Balancing (will be called &#8220;load balancing&#8221; from now on).  Load balancing can be done very easily with a script under BSD and Linux systems. (Doing it under BSD is easier than Linux by the way). But, my server will be on Windows Vista, and as you can guess, it is nearly impossible to this under a Windows desktop operating system. By the way Windows Server 2008 and 2003 has NLB (Network Load Balancing), which is NOT we are doing in this article. These two concepts are different. Also, forget about Internet Connection Sharing under Windows, it is different from our goal here.</p>
<p style="text-align: left;">So, back to our problem; we want to do load balancing with round robin algorithm under Windows Vista, and there is no software doing it. The easiest way of doing this is using a BSD system, but we&#8217;re under Windows. At this point, a friend of mine, who is a network systems admin (<a title="Alper YALCINER" href="http://alper.web.tr" onclick="javascript:pageTracker._trackPageview('/outbound/article/alper.web.tr');" target="_blank">Alper YALCINER</a>) gave me the idea of using PfSense, an open source customized distribution of FreeBSD tailored for use as a firewall and router, with a live CD. My buddy told me that all I had to do was running <a title="PfSense" href="http://www.pfsense.org" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.pfsense.org');" target="_blank">PfSense</a> under Windows via <a title="Vmware" href="http://www.vmware.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.vmware.com');" target="_blank">Vmware</a> or VirtualPC and redirecting all outgoing traffic to the local connection that PfSense uses. I chose to use Vmware since VirtualPC does not offer as much as its competitors.</p>
<p><span id="more-93"></span></p>
<p style="text-align: left;">At this point, what you need is; a Windows system, more than one WAN (Internet) connections, and a local area connection. In my configuration, I am connecting to this server from a home wireless network, I have 3 WAN connections, and one virtual connection between PfSense and Windows, created by Vmware Network Editor.</p>
<p style="text-align: left;">To make life easier, here is an illustration of what we will be doing:</p>
<p style="text-align: center;"><img src="http://bora.bilg.in/files/loadbalancer_fig1.JPG" alt="LoadBalancer Overview" width="494" height="608" /></p>
<p style="text-align: left;">Step by step overall process:</p>
<p><br />
1. Connect to WAN&#8217;s from Windows Vista</p>
<p>2. Boot up pfSense with Vmware</p>
<p>3. Clear Windows Vista&#8217;s routing table and add pfSense LAN IP as default gateway</p>
<p>4. Configure pfSense</p>
<p>5. Do a &#8220;software routing&#8221; on home wireless connection and pfSense LAN so that clients can access Internet</p>
<p>6. Connect to Windows Vista from client computers via wireless network</p>
<p style="text-align: left;">
<p style="text-align: left;">
<p><strong>1. Connect to WAN&#8217;s from Windows Vista</strong></p>
<p style="margin-left: 0.25in; text-align: left;">This part is pretty simple. Connect to your WAN&#8217;s under Windows Vista and make sure EACH one of them has a different gateway. (i.e in my case, the first one is 192.168.0.1, second one is 192.168.1.1, and third one is 192.168.2.1)</p>
<p><strong>2. Boot up pfSense with Vmware</strong></p>
<p style="margin-left: 0.25in; text-align: left;">Vmware needs to be configured so that it gets the correct interfaces. Here&#8217;s my connection view:</p>
<p style="margin-left: 0.25in; text-align: left;">
<p style="text-align: center;"><!--[if gte vml 1]> < ![endif]--><img src="http://bora.bilg.in/files/loadbalancer_fig2.JPG" alt="Virtual Machine Settings" width="571" height="439" /></p>
<p style="text-align: center;"><em>Figure 1: Virtual Machine Settings under Vmware</em></p>
<p style="text-align: left;"><em> </em></p>
<p style="margin-left: 0in; text-align: left;">Here, set the CD/DVD to your pfSense ISO image. If you want, you can install pfSense instead of using it on live CD, which might be better as it&#8217;ll automatically save your configuration each time you reboot pfSense. It is very straight forward and I am skipping installing pfSense under Vmware (you can find more information on <a href="http://www.pfsense.org/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.pfsense.org');">www.pfsense.org</a>)</p>
<p style="margin-left: 0in; text-align: left;">The important part is; networking adapter settings. Set the &#8220;Network Adapter&#8221; to &#8220;Custom, VMnet1&#8243;, set the &#8220;Network Adapter 2&#8243; to &#8220;Custom, VMnet2&#8243;, set the &#8220;Network Adapter 3&#8243; to &#8220;Custom, VMnet3&#8243;, and set the &#8220;Network Adapter 4&#8243; to &#8220;Custom, VMnet4&#8243;. You can add more network adapters by clicking &#8220;Add&#8221; button. Note that Network Adapter 3 is missing in my configuration, don&#8217;t let the numbers confuse you.</p>
<p style="margin-left: 0in; text-align: left;">Run the Virtual Network Editor as Administrator (right click -&gt; Run as Administrator). Mine looks like this:</p>
<p style="text-align: center;"><!--[if gte vml 1]> < ![endif]--><img style="border: 0pt none;" src="http://bora.bilg.in/files/loadbalancer_fig3.JPG" alt="Virtual Network Editor Window" width="506" height="404" /></p>
<p style="text-align: center;"><em>Figure 2: Virtual Network Editor window</em></p>
<p style="text-align: left;">
<p style="margin-left: 0in; text-align: left;">The interfaces that I use in my configuration are:</p>
<p style="margin-left: 0in; text-align: left;">VMNet1 -&gt; pfSense LAN Interface, 192.168.163.0</p>
<p style="margin-left: 0in; text-align: left;">VMNet2 -&gt; WAN1, 192.168.0.0</p>
<p style="margin-left: 0in; text-align: left;">VMNet4-&gt; WAN2, 192.168.1.0</p>
<p style="margin-left: 0in; text-align: left;">VMNET5-&gt; WAN3, 192.168.3.0</p>
<p style="margin-left: 0in; text-align: left;">Note that &#8220;Local Area Connection 2&#8243; which is bridged to VMNet1 is automatically created by Vmware as a host only private network.</p>
<p style="margin-left: 0in; text-align: left;">Now, you can boot pfSense.</p>
<p style="text-align: left;">The menu will come up. First, select &#8220;Assign Interfaces&#8221; option. Enter your interfaces, the interfaces are in the same order as Virtual Network Editor, so if you followed my configuration, your VMNet1 will be em0 (or another prefix) and your em3 will be VMNet5. Then, select &#8220;Set LAN IP Address&#8221; and assign a manual address to VMNet1. I gave 192.168.163.2 to LAN IP under pfSense, and enter 24 for the block number. After these two steps, restart pfSense and your configuration should look like this:</p>
<p style="text-align: center;"><img style="border: 0pt none;" src="http://bora.bilg.in/files/loadbalancer_fig4.JPG" alt="pfSense under VMware" width="627" height="501" /></p>
<p style="text-align: center;"><em>Figure 3: PfSense after initial configuration</em></p>
<p style="text-align: left;">Note my IP addresses in the above picture. Of course yours will probably be different.</p>
<p style="text-align: left;">NOTE: If you don&#8217;t see any IP addresses on OPT1 or OPT2 interfaces, set your LAN IP Address, go to webConfigurator (type pfSense LAN IP address on Windows Vista), login with &#8220;admin&#8221; as username and &#8220;pfsense&#8221; as password, go to Interfaces-&gt;OPT1, check &#8220;Enable OPT1&#8243; and select DHCP in the configuration menu and click Save. Do this for OPT2 and restart pfSense by selecting &#8220;Shell&#8221; in the console and typing &#8220;reboot&#8221;. You should now see IP addresses for OPT1 and OPT2 interfaces. You can also do this for WAN if you can&#8217;t get an IP from DHCP at boot up.</p>
<p style="text-align: left;">
<p style="margin-left: 0.25in; text-indent: -0.25in; text-align: left;"><strong>3. </strong><strong>Clear Windows Vista&#8217;s routing table and add pfSense LAN IP as default gateway </strong></p>
<p style="margin-left: 0.25in; text-align: left;">Now that we have pfSense configured, we should configure Windows Vista&#8217;s routing table so that it redirects all the output traffic to pfSense LAN IP. Go to Start-&gt;All Programs-&gt;Accessories and right click Command Prompt and select &#8220;Run as Administrator&#8221;. Now type &#8220;route delete 0.0.0.0&#8243; This will delete all the default gateways. Now, type &#8220;route add 0.0.0.0 mask 0.0.0.0 192.168.163.2&#8243; to command prompt; where &#8220;192.168.163.2&#8243; is the IP of the pfSense LAN interface. Here, we tell Windows to redirect all outgoing traffic to pfSense so that it does load balancing.</p>
<p style="margin-left: 0.25in; text-align: left;">
<p style="margin-left: 0.25in; text-indent: -0.25in; text-align: left;"><strong>4. </strong><strong>Configure pfSense</strong></p>
<p style="margin-left: 0.25in; text-align: left;">Now that we setup the routing table, we should tell pfSense to do load balancing.</p>
<p>a. Type pfSense Lan IP in Internet Explorer or Firefox under Windows Vista and login with admin:pfsense</p>
<p>b. Go to Services-&gt;Load Balancer</p>
<p>c. Go to &#8220;Pools&#8221; tab, and click on the &#8220;+&#8221; symbol to add a new pool</p>
<p>d. Give a name and description. Mine is &#8220;loadbalancer&#8221;</p>
<p>e. Select type: &#8220;gateway&#8221;</p>
<p>f. Select behavior: &#8220;Load Balancing&#8221;</p>
<p>g. For each WAN interface, select it&#8217;s gateway as Monitor IP, select the interface from &#8220;Interface Name&#8221; list and click &#8220;Add to Pool&#8221;. At the end it should look like this:</p>
<p style="margin-left: 1in; text-align: center;"><img style="border: 0pt none;" src="http://bora.bilg.in/files/loadbalancer_fig5.JPG" alt="Load balancer setup" width="530" height="389" /></p>
<p style="margin-left: 1in; text-align: center;"><em>Figure 4: Load Balancer setup under pfSense</em></p>
<p style="text-align: left;">Click Save.</p>
<p style="text-align: left;">Now, we need to add some rules to pfSense firewall.</p>
<p>a. Go to Firewall-&gt;Aliases</p>
<p>b. For each WAN, add a new alias by clicking &#8220;+&#8221; button</p>
<p>c. Select Type: Host(s)</p>
<p>d. Enter the gateway IP of the WAN, and add a description. Click Save</p>
<p style="text-align: left;">Now, we need to add one more alias that incluses ALL gateway IP&#8217;s/</p>
<p>a. Add a new alias by clicking &#8220;+&#8221; button</p>
<p>b. Add name: &#8220;RouterIPs&#8221;, and description: &#8220;All router IPs&#8221;</p>
<p>c. Select Type:Host(s)</p>
<p>d. Enter the gateway IP of each WAN by clicking &#8220;+&#8221;</p>
<p>e. Click Save.</p>
<p style="text-align: left;">It should look like this (I had to black out some parts as I used MAC addresses):</p>
<p style="margin-left: -49.5pt; text-align: left;"><img style="border: 0pt none;" src="http://bora.bilg.in/files/loadbalancer_fig6.JPG" alt="Firewall Aliases" width="747" height="398" /></p>
<p style="margin-left: -49.5pt; text-align: center;"><em>Figure 5: Firewall Aliases under pfSense</em></p>
<p style="text-align: left;">I also added HTTPS ports as you can&#8217;t load balance on HTTPS (You have to go through one WAN or it won&#8217;t work). You can also do the same.</p>
<p style="text-align: left;">Now, we are in the final step. Go to Firewall &#8211; Rules</p>
<p>a. Click on &#8220;LAN&#8221; tab</p>
<p>b. Click &#8220;+&#8221; to add a new rule</p>
<p>c. Rule Details:</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Action: Pass</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Disabled: Unchecked</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Interface: LAN</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Protocol: any</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Source: &#8220;not&#8221; unchecked</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Source Type: LAN Subnet</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Destination: &#8220;not&#8221; checked</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Destination Type: &#8220;Single host or alias&#8221;</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Destination Address: &#8220;RouterIPs&#8221; (write down the alias name that includes ALL WAN gateways)</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Log: unchedked</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Gateway: &#8220;loadbalancer&#8221; (Name of the load balancer pool configuration)</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">Description: &#8220;Load balancer without failover&#8221;</p>
<p style="margin: 0in 0in 0.0001pt 0.5in; line-height: normal; text-align: left;">
<p>d. Hit Save. You&#8217;re done!</p>
<p style="margin-left: 0.25in; text-align: left;">Some notes: You should add more rules to reach separate gateways (i.e. you can&#8217;t ping a separate gateway because the traffic will go through the load balancer which chooses a random gateway by weighted round robin algorithm) Please take a look at <a href="http://doc.pfsense.org/index.php/MultiWanVersion1.2#Basic_Firewall_Rules" onclick="javascript:pageTracker._trackPageview('/outbound/article/doc.pfsense.org');" target="_blank">http://doc.pfsense.org/index.php/MultiWanVersion1.2#Basic_Firewall_Rules</a> to see the basic rules remaining. This website also explains how to setup BitTorrent clients, so make sure you read the firewall rules part of that document.</p>
<p>Now, if you go to <a href="http://www.whatismyip.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.whatismyip.com');" target="_blank">www.whatismyip.com</a>, you should see a different IP address each time you refresh your web browser. This means that load balancer is working!</p>
<p><strong>5. Do a &#8220;software routing&#8221; on home wireless connection and pfSense LAN so that clients can access Internet</strong></p>
<p style="margin-left: 0in; text-align: left;">Now that we have load balancer working, we need to setup a wireless connection for client computers in our home/office environment. Go to &#8220;Network and Sharing Center&#8221;, click on &#8220;Set up a connection or network&#8221;, select &#8220;Set up a wireless ad hoc network&#8221;, select your home wireless connection interface, and give a name and password. Configure your wireless interface under Windows Vista accordingly: give an IP address (i.e. 192.168.26.2), enter 255.255.255.255 for the subnet mask, and don&#8217;t enter a gateway.</p>
<p style="margin-left: 0in; text-align: left;">The &#8220;Local Area Network 2&#8243; connection, which is what I use for pfSense LAN, is set to 192.168.163.1, 255.255.255.0 subnet mask and 192.168.163.2 as gateway IP. You can use 4.2.2.1 and 4.2.2.2 as your DNS. Now, we need to bridge these two connections so the users coming from wireless should have access to pfSense LAN subnet. I couldn&#8217;t use Internet Connection Sharing under Windows Vista as it wants to use 192.168.0.1 and Vmware virtual adapter cannot work under ICS. So I downloaded NAT32 (<a href="http://www.nat32.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.nat32.com');" target="_blank">www.nat32.com</a>) and ran it. Here are the details for NAT32:</p>
<p style="margin-left: 0in; text-align: left;">
<p>a. A configuration wizard should come up. Select pfSense LAN Interface (Local Area Connection 2 in my example) as Internet and your wireless interface as Private</p>
<p style="text-indent: -0.25in; text-align: left;">
<p style="text-indent: -0.25in; text-align: center;"><img src="http://bora.bilg.in/files/loadbalancer_fig7.JPG" alt="NAT32 Screen" width="549" height="360" /></p>
<p style="text-indent: -0.25in; text-align: left;">
<p style="text-align: center;" align="center"><em>Figure 6: NAT32 Screen</em></p>
<p style="text-align: center;" align="center"><img src="http://bora.bilg.in/files/loadbalancer_fig8.JPG" alt="NAT32 Settings" width="548" height="356" /></p>
<p style="text-indent: -0.25in; text-align: left;">
<p style="text-align: center;" align="center"><em>Figure 7: NAT32 Interface Selection</em></p>
<p style="text-indent: -0.25in; text-align: left;">
<p style="text-indent: -0.25in; text-align: left;">
<p>b. It should share the IP of LAN interface in the next step. No changes needed for LAN interface</p>
<p style="text-indent: -0.25in; text-align: center;"><img src="http://bora.bilg.in/files/loadbalancer_fig9.JPG" alt="Interface Configuration" width="585" height="365" /></p>
<p style="text-indent: -0.25in; text-align: left;">
<p style="text-align: center;" align="center"><em>Figure 8: NAT32 Interface 1 Configuration</em></p>
<p>c. The next window sets up the wireless interface. In my example, it uses 192.168.26.100 for NAT32 and 192.168.26.2 for Windows. Note the IP that it uses for NAT32, and click &#8220;Apply&#8221;. It should start software routing now.</p>
<p style="text-indent: -0.25in; text-align: left;">
<p style="text-indent: -0.25in; text-align: center;"><img src="http://bora.bilg.in/files/loadbalancer_fig10.JPG" alt="Interface Configuration" /></p>
<p style="text-indent: -0.25in; text-align: left;">
<p style="text-align: center;" align="center"><em>Figure 9: NAT32 Interface 2 Configuration</em></p>
<p style="text-align: center;" align="center"><code></p>
<p></code><br />
<br />
<strong>6. Connect to your wireless network from client computers</strong></p>
<p>Make sure you configure the IP addresses correctly. Add NAT32 IP as gateway (192.168.26.100), give an unused IP like 192.168.26.50 and type 255.255.255.255 as subnet. You can enter 4.2.2.2 and 4.2.2.1 for DNS. If everything works, you should be able to go to <a href="http://www.whatismyip.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.whatismyip.com');" target="_blank">www.whatismyip.com</a> from a client computer and see a different WAN IP each time you refresh your browser.
</p>
<p style="text-align: left;">
<p style="text-align: left;">Voila, you now have a load balancer server with a huge bandwidth pool. If you download a file via segmented download software (Internet Download Manager for example), you should get full bandwidth. Enjoy the internet!</p>
<p style="text-align: left;">Thanks to <a title="Alper YALCINER" href="http://alper.web.tr" onclick="javascript:pageTracker._trackPageview('/outbound/article/alper.web.tr');" target="_blank">Alper YALCINER</a> for his help and patience on the process of configuration <img src='http://bora.bilg.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p style="text-align: left;">Bora Bilgin</p>
<p style="text-align: left;"><strong>UPDATE 1 : </strong>PfSense version 2.0 supports Multi Wan Traffic Shaping (for greater results in downloads, traffic shaping is necessary).</p>
<p style="text-align: left;">
<p style="text-align: left;">


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/12/bda-on-windows-server-2008-for-tv-tuner-cards' rel='bookmark' title='Permanent Link: BDA on Windows Server 2008 for TV Tuner Cards'>BDA on Windows Server 2008 for TV Tuner Cards</a> <small> There are a lot of reasons not to use...</small></li><li><a href='http://bora.bilg.in/blog/02/postgresql-database-server-farm-installation-and-configuration-with-pgcluster-on-freebsd' rel='bookmark' title='Permanent Link: PostgreSQL Database Server Farm Installation and Configuration with PgCluster on FreeBSD'>PostgreSQL Database Server Farm Installation and Configuration with PgCluster on FreeBSD</a> <small> I recently installed a PostgreSQL Database Server Farm on...</small></li><li><a href='http://bora.bilg.in/blog/06/deploying-windows-image-universally-to-different-hardware-different-hal-ide-or-sata-or-scsi' rel='bookmark' title='Permanent Link: Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)'>Deploying Windows Image Universally to Different Hardware (Different HAL, IDE or SATA or SCSI)</a> <small>How much time does it take to install Windows XP?...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/S_DtSuZEmkfLXyoWCgc38jbIp0Q/0/da"><img src="http://feedads.g.doubleclick.net/~a/S_DtSuZEmkfLXyoWCgc38jbIp0Q/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/S_DtSuZEmkfLXyoWCgc38jbIp0Q/1/da"><img src="http://feedads.g.doubleclick.net/~a/S_DtSuZEmkfLXyoWCgc38jbIp0Q/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/Y7-X2J2QwHU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/04/multi-wan-load-balancing-under-windows-with-pfsense/feed</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/04/multi-wan-load-balancing-under-windows-with-pfsense</feedburner:origLink></item>
		<item>
		<title>My Top 7 Symbian Applications</title>
		<link>http://feedproxy.google.com/~r/BorasPlace/~3/aC7Ze3iLDAU/my-top-7-symbian-applications</link>
		<comments>http://bora.bilg.in/blog/03/my-top-7-symbian-applications#comments</comments>
		<pubDate>Mon, 30 Mar 2009 19:55:14 +0000</pubDate>
		<dc:creator>Bora Bilgin</dc:creator>
				<category><![CDATA[Blog Posts]]></category>
		<category><![CDATA[General Stuff]]></category>
		<category><![CDATA[Operating Systems and Software]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[mobile software]]></category>
		<category><![CDATA[n95]]></category>
		<category><![CDATA[symbian]]></category>
		<category><![CDATA[symbian applications]]></category>

		<guid isPermaLink="false">http://bora.bilg.in/?p=80</guid>
		<description><![CDATA[I am thrilled about the improvements on mobile technologies, both on hardware and software levels. I am using Nokia N95-8GB, with all it&#8217;s functionalities and I enjoy it very much. The hardware capabilities are great &#8211; lots of storage, A-GPS, Wifi Connectivity, large screen, dual cameras(3.2 MP and  5 MP) and 3-G and much more. [...]


Related posts:<ol><li><a href='http://bora.bilg.in/blog/12/hacking-your-symbian-s60-v3-phone-to-install-unsigned-applications' rel='bookmark' title='Permanent Link: Hacking your Symbian S60 v3 Phone to Install Unsigned Applications'>Hacking your Symbian S60 v3 Phone to Install Unsigned Applications</a> <small>Note: This article is for educational purposes only. Buy the...</small></li><li><a href='http://bora.bilg.in/blog/12/datagrid-in-a-combobox-c' rel='bookmark' title='Permanent Link: DataGrid in a ComboBox, C#'>DataGrid in a ComboBox, C#</a> <small> Ever thought of putting different controls in a combo...</small></li><li><a href='http://bora.bilg.in/blog/12/bda-on-windows-server-2008-for-tv-tuner-cards' rel='bookmark' title='Permanent Link: BDA on Windows Server 2008 for TV Tuner Cards'>BDA on Windows Server 2008 for TV Tuner Cards</a> <small> There are a lot of reasons not to use...</small></li></ol>]]></description>
			<content:encoded><![CDATA[<p></p>
<p>I am thrilled about the improvements on mobile technologies, both on hardware and software levels. I am using Nokia N95-8GB, with all it&#8217;s functionalities and I enjoy it very much. The hardware capabilities are great &#8211; lots of storage, A-GPS, Wifi Connectivity, large screen, dual cameras(3.2 MP and  5 MP) and 3-G and much more. But, with software, these already-great functions can be taken to a much greater level, with new ideas. So, to help the developers and show everyone what I&#8217;m using, I would like to list my top 7 Symbian applications here:  <span id="more-80"></span></p>
<table border="0">
<tbody>
<tr>
<td>1. <a href="http://www.walkinghotspot.com/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.walkinghotspot.com');" target="_blank">WalkingHotSpot</a> <a href="http://bora.bilg.in/wp-content/uploads/2009/03/walkinghotspot.png" ><img class="alignnone size-medium wp-image-81" style="float:left;" title="walkinghotspot" src="http://bora.bilg.in/wp-content/uploads/2009/03/walkinghotspot-196x300.png" alt="" width="196" height="300" /></a>WalkingHotSpot is a patent pending solution that is affordable, secure and simple to use! It transforms 3G/Wi-Fi™ S60 or Windows Mobile smartphones into hotspots that enable multiple devices (i.e. laptops, MP3 players) to connect to the Internet anywhere there is mobile network coverage.</td>
</tr>
<tr>
<td>2. <a href="http://www.killermobile.com/newsite/mobile-software/s60-applications/total-recall-%11-call-recording-software-for-s60-devices.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.killermobile.com');" target="_blank">Total Recall</a> <a href="http://bora.bilg.in/wp-content/uploads/2009/03/trani.gif" ><img class="alignnone size-medium wp-image-85" style="float:left;" title="trani" src="http://bora.bilg.in/wp-content/uploads/2009/03/trani.gif" alt="" width="176" height="208" /></a>Total Recall is the Market Leading Call Recorder / Mobile Dictaphone for Symbian Series 60 2nd &amp; 3rd Edition Devices. In classic Killer Mobile Software Style, we&#8217;ve created an application that is super easy to use, while retaining all of the features you&#8217;ll ever need. Total Recall allows you to easily record all or just some of your calls. We use super memory light AMR format, so you can literally record thousands of hours of calls on today&#8217;s modern memory cards. And best of all, no pesky beep while recording!</td>
</tr>
<tr>
<td>3. <a href="http://www.levelupsoftware.com/index_files/expensecalendar3rd.htm" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.levelupsoftware.com');" target="_blank">Expense Calendar</a> <a href="http://bora.bilg.in/wp-content/uploads/2009/03/expensecalendar.gif" ><img class="alignnone size-medium wp-image-86" style="float:left;" title="expensecalendar" src="http://bora.bilg.in/wp-content/uploads/2009/03/expensecalendar.gif" alt="" width="192" height="230" /></a> Expense Calendar is a Symbian S60 application designed to organize and keep track of your home, business, personal and other expenses.  Expense Calendar makes the tasks of recording, organizing, and reporting expenses easy and automatic and will help you organize your expenses in the most intuitive way. You can analyze and review your expense report totals directly on your phone and many other useful features.</td>
</tr>
<tr>
<td>4. <a href="http://www.warelex.com/products/webcam/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.warelex.com');" target="_blank">Mobiola WebCamera</a> <a href="http://bora.bilg.in/wp-content/uploads/2009/03/mobiola.jpg" ><img class="alignnone size-medium wp-image-84" style="float:left;" title="mobiola" src="http://bora.bilg.in/wp-content/uploads/2009/03/mobiola-300x233.jpg" alt="" width="300" height="233" /></a>Turn your camera phone into a high quality wireless (WiFi or Bluetooth) or wired (USB) web camera. Mobile phone as webcam with Mobiola® Web Camera 3 Main Functionality  * Transforms your mobile phone into a high-quality PC webcam. * Connects mobile phone to PC using USB, WiFi (select models) and Bluetooth connectivity. * Screen Capture functionality, when device screen can be demonstrated on PC real-time. * NEW!!! Cool video effects. Have fun and impress your friends! * Works with Skype, Yahoo, YouTube, MSN, AOL IM, ICQ and many others as standard USB webcam. * Compatible with Symbian S60 and UIQ, Windows Mobile 5 and 6, Blackberry.</td>
</tr>
<tr>
<td>5. <a href="http://www.tringme.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.tringme.com');" target="_blank">TringMe</a> TringMe is a symbian instant messaging application that enables VOIP features, even voice calling over Google Talk!</td>
</tr>
<tr>
<td>6. <a href="http://sportstracker.nokia.com" onclick="javascript:pageTracker._trackPageview('/outbound/article/sportstracker.nokia.com');" target="_blank">Nokia SportsTracker</a> Nokia Sports Tracker is a GPS-based activity tracker that runs on compatible Nokia mobile devices. Information such as speed, distance, and time are automatically stored in your training diary. On this site you can store and share your workouts and routes.</td>
</tr>
<tr>
<td>7. <a href="http://www.bysamir.fr/" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.bysamir.fr');" target="_blank">rotateMe</a> <a href="http://bora.bilg.in/wp-content/uploads/2009/03/rotate_me.png" ><img class="alignnone size-medium wp-image-83" style="float:left;" title="rotate_me" src="http://bora.bilg.in/wp-content/uploads/2009/03/rotate_me-300x198.png" alt="" width="300" height="198" /></a>rotateMe is a freeware application for symbian OS 3rd edition devices, which allow you to use your phone in landscape mode by using its accelerometer.</td>
</tr>
</tbody>
</table>
<p>I will also be working on Symbian programming(mostly Java) soon -hopefully 2009 Summer <img src='http://bora.bilg.in/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  &#8211;  Bora Bilgin</p>
<p><code></code></p>


<p>Related posts:<ol><li><a href='http://bora.bilg.in/blog/12/hacking-your-symbian-s60-v3-phone-to-install-unsigned-applications' rel='bookmark' title='Permanent Link: Hacking your Symbian S60 v3 Phone to Install Unsigned Applications'>Hacking your Symbian S60 v3 Phone to Install Unsigned Applications</a> <small>Note: This article is for educational purposes only. Buy the...</small></li><li><a href='http://bora.bilg.in/blog/12/datagrid-in-a-combobox-c' rel='bookmark' title='Permanent Link: DataGrid in a ComboBox, C#'>DataGrid in a ComboBox, C#</a> <small> Ever thought of putting different controls in a combo...</small></li><li><a href='http://bora.bilg.in/blog/12/bda-on-windows-server-2008-for-tv-tuner-cards' rel='bookmark' title='Permanent Link: BDA on Windows Server 2008 for TV Tuner Cards'>BDA on Windows Server 2008 for TV Tuner Cards</a> <small> There are a lot of reasons not to use...</small></li></ol></p>
<p><a href="http://feedads.g.doubleclick.net/~a/UO2cSIXBb1PVXUtB85_5KbIKrX4/0/da"><img src="http://feedads.g.doubleclick.net/~a/UO2cSIXBb1PVXUtB85_5KbIKrX4/0/di" border="0" ismap="true"></img></a><br/>
<a href="http://feedads.g.doubleclick.net/~a/UO2cSIXBb1PVXUtB85_5KbIKrX4/1/da"><img src="http://feedads.g.doubleclick.net/~a/UO2cSIXBb1PVXUtB85_5KbIKrX4/1/di" border="0" ismap="true"></img></a></p><img src="http://feeds.feedburner.com/~r/BorasPlace/~4/aC7Ze3iLDAU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://bora.bilg.in/blog/03/my-top-7-symbian-applications/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://bora.bilg.in/blog/03/my-top-7-symbian-applications</feedburner:origLink></item>
	</channel>
</rss>

