<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	
	<channel>
		<title>Dev Thoughts</title>
		<link>http://www.bdcsoftware.com/blog/blog.php</link>
		<description></description>
		<language>en</language>
		<managingEditor>raf@bdcsoftware.com</managingEditor>
                <copyright>Copyright 2006</copyright>
		<generator>Pivot Pivot - 1.30 RC2: 'Rippersnapper'</generator>
		<pubDate>Wed, 02 Aug 2006 17:12:58 -0400</pubDate>
		<ttl>60</ttl>
		
		
		
		
		<item>
			<title>XML/SWF Charts in Ruby on Rails</title>
			<link>http://www.bdcsoftware.com/blog/entry/9/XMLSWF_Charts_in_Ruby_on_Rails</link>
			<comments>http://www.bdcsoftware.com/blog/entry/9/XMLSWF_Charts_in_Ruby_on_Rails#comm</comments>
                        <description><![CDATA[ Since RMagick seems to be broken on Win32 when using with Ruby 1.8.4 and Gruff is using RMagick to draw its pretty graphs, I had to go out and find an alternative chart library for use with Rails.<p><br /><strong>XML/SWF Charts</strong><br />Fortunately I have run into this chart library a while back when doing php evelopment. It&#39;s not really a php driven because the data input andconfiguration is in form of a XML file. To make it work with rails, all Ihad to do is translate the php function that generates the XML file to Ruby.<br /><br />Well, after a few hours of playing around and experimenting with differentapproaches to the issue I think I have come up with a fairly easy way to get he charts working with rails.<br /><br /><img src="http://www.bdcsoftware.com/blog/images/chart_sample.gif" style="float:right;margin-left:10px;margin-bottom:5px;border:0px solid" title="Chart Sample" alt="Chart Sample" class="pivot-image" /></p><p>The sample on the right displays a sample of a working graph. After a few failed / ugly attempts, I settled for a class/controller hybrid that hopefully is easy to use. So with out further rambling, here is a step by step guide to get it to work:<br /><br />1.Download the <a href="http://www.maani.us/xml_charts/" title="SWF Chart library">SWF Chart library</a> and place it in the /public directory</p><p>2.Download the <a href="http://www.bdcsoftware.com/blog/images/swfchart.rb.rb" title="swfchart.rb" class="download">swfchart.rb</a> class and place in the /lib directory</p><p>3.Download <a href="http://www.bdcsoftware.com/blog/images/chart_controller.rb.rb" title="chart_controller.rb" class="download">chart_controller.rb</a> and place it in the /controllers directory</p><p>With all the pieces in place, the last two components will be tied to your application directly. The data and options for the chart have to be set in a controller. For instance something like this should work:</p><p><span style="background-color: #99ccff">@swf = SWFChart.new</span></p><p><span style="background-color: #99ccff">session[:swfchart] = @swf</span><br /><span style="background-color: #99ccff">#set data headings</span><br /><span style="background-color: #99ccff">@swf.data_array = Array.new</span><br /><span style="background-color: #99ccff">@swf.data_array[0] = [nil]</span><br /><span style="background-color: #99ccff">@swf.data_array[1] = [&#39;&#39;]</span><br /><br /><span style="background-color: #99ccff">#get space count per category</span><br /><span style="background-color: #99ccff">for c in @current_show.ShowCategories</span><br /><span style="background-color: #99ccff">    @swf.data_array[0] &lt;&lt; c.name</span><br /><span style="background-color: #99ccff">    @swf.data_array[1] &lt;&lt; c.BaseSpaces.count</span><br /><span style="background-color: #99ccff">end</span><br /><span style="background-color: #99ccff">@swf.chart_type = &quot;3d pie&quot;</span><br /><span style="background-color: #99ccff">@swf.chart_rect = {:x =&gt; &#39;150&#39;,:width =&gt; &#39;200&#39;,:height =&gt; &#39;125&#39;}</span><br /><span style="background-color: #99ccff">@swf.legend_rect = {:x =&gt; 10, :y =&gt; 10, :width =&gt; 50, :height =&gt; 200}</span><br /><br />And finally, the chart will be displayed from the view with code like this:</p><p style="background-color: #99ccff">&lt;%= @swf.insert_chart(:data_source =&gt; url_for(:controller =&gt; &quot;/chart&quot;), :width =&gt; &quot;400&quot;, :height =&gt; &quot;300&quot;) %&gt;</p><p>Observant readers will have noticed that the whole chart data-setting and generation is encapsulated in the swfchart.rb class from the /lib directory. Unfortunately I don&rsquo;t have much time to encapsulate this as a plugin, but perhaps somebody could take what I have and run with it&hellip;</p><p>06.12.06 - Edit<br />There have been a few issues reported by a few users while trying to get this up and running. In order to solve some of the more common mistakes, I have decided to create a sample project. Just download <a href="http://www.bdcsoftware.com/blog/images/testapp.zip" title="" class="download">testapp.zip</a>, unzip, run webrick and browse to <a href="http://localhost:3000/sample" title="http://localhost:3000/sample">http://localhost:3000/sample</a></p><p>08.02.06 - Edit<br />Version 0.1.14 of the SWFChart wrapper is done. Changes include a &quot;plugin&quot; like structure (still have to solve copying of the charts to the public directory before it becomes a true plugin) and minor bugfixes to xml generator method. </p><p>Installation:<br />Just download the <a href="http://www.bdcsoftware.com/blog/images/swfchart.0.1.14.zip" title="" class="download">swfchart.0.1.14.zip</a> and unzip it to the root of your rails application. If you have a previous version installed, remove swfchart.rb from the lib directory and any require statements from your controllers.</p> ]]></description>
			<guid isPermaLink="false">9@http://www.bdcsoftware.com/blog/pivot/</guid>
			<category>RubyOnRails</category>
			<pubDate>Thu, 08 Jun 2006 00:19:00 -0400</pubDate>
		</item>
		
		
		
		<item>
			<title>Dreamweaver 8 and Ruby on Rails CodeHints</title>
			<link>http://www.bdcsoftware.com/blog/entry/8/Dreamweaver_8_and_Ruby_on_Rail</link>
			<comments>http://www.bdcsoftware.com/blog/entry/8/Dreamweaver_8_and_Ruby_on_Rail#comm</comments>
                        <description><![CDATA[ Guide for setting up CodeHints for Ruby on Rails framework.<p>I am so used to coding help (intellisense) from Visual Studio, that not having an IDE with this type of functionality is a major inconvenience when working with the Ruby on Rails framework. There are editors that offer syntax highlighting and project management options, but all of them lack the intellisense (aka. code completion or coding hints) functionality.</p>   <p>The closest editor is jEdit. It offers code hints for the current class and has ruby RDOC add-in. However, I have not found a way to add the ROR API to it. So it&rsquo;s a shame&hellip;</p>   <p><a href="http://www.bdcsoftware.com/development/rubyonrails/jedit.gif"><img src="http://www.bdcsoftware.com/development/rubyonrails/jedit_tn.gif" border="0" alt="Jedit and ROR" width="450" height="310" /></a><br /> 	jEdit and Ruby on Rails  </p>   <h3>Welcome Dreamweaver 8</h3>   <p> If you have worked with DW before, you will know that it offers syntax highlighting for many languages. It also has something similar to intellisense built-in for PHP and ASP. It will not complete your custom attributes or methods, but it can list the most used API calls (for instance Session&hellip; or Request&hellip; in ASP). Too bad they don&rsquo;t offer Ruby or ROR codehints&hellip;</p><p>Well, with a little bit of hacking, you can actually get  syntax highlighting and codhints working in DW 8.</p>   <p>First, follow <a href="http://rubygarden.org/ruby/ruby?action=browse&amp;diff=1&amp;id=DreamweaverMX">these instructions</a> to get syntax highlighting. For DW 8, I had to add the rules to the file in my profile directory and not in the global file in Program Files dir. </p>   <h3>CodeHints</h3>   <p>The toughest part of getting Ruby on Rails codehints into DW 8 was actually to get them out of the RDOC Html format. Last thing I wanted to manually copy and paste hundreds of lines J. Unfortunately, either I don&rsquo;t understand how to use RDOC correctly or this thing is completely broken. RDOC output to HTML work fine, but the output can&rsquo;t be easily used to get a list of all the APIs. The XML output could be used, but&hellip;it will NOT list the actual methods and parameters. Anyhow here is, after a few hours of trying to get the HTML template to behave the way I want it to, <a href="http://www.bdcsoftware.com/development/rubyonrails/rubyonrails_api_for_dreamweaver.txt">a file with some of  the most used APIs</a> in DW format ready to be added to &ldquo;C:\Program  Files\Macromedia\Dreamweaver 8\Configuration\CodeHints\CodeHints.xml&rdquo;</p>   <h3>End Result </h3>   <p><img src="http://www.bdcsoftware.com/development/rubyonrails/dw_codehint1.gif" border="0" alt="Ruby on Rails in DreamWeaver" width="494" height="306" /><br />   Dreamweaver CodeHints</p>   <p><img src="http://www.bdcsoftware.com/development/rubyonrails/dw_codehint2.gif" border="0" alt="Alternative Code completion" width="412" height="82" /></p> ]]></description>
			<guid isPermaLink="false">8@http://www.bdcsoftware.com/blog/pivot/</guid>
			<category>RubyOnRails</category>
			<pubDate>Wed, 07 Jun 2006 17:52:00 -0400</pubDate>
		</item>
		
		
		
		<item>
			<title>Five Years with Firebird</title>
			<link>http://www.bdcsoftware.com/blog/entry/6/Five_Years_with_Firebird</link>
			<comments>http://www.bdcsoftware.com/blog/entry/6/Five_Years_with_Firebird#comm</comments>
                        <description><![CDATA[ <div align="left">It&rsquo;s unbelievable, but the Interbase with VB article has been written over five years ago. Over the years the article has received hundreds of thousands of hits and I hope we have left a mark with the developer community. This little write-up is intended as a follow-up or more like a status update on our experience with Interbase/Firebird.</div><div align="left"> </div><div align="left"> </div><p>Even though the original article is fairly old by internet/development standards, most of the facts still stand. However, life never stands still, especially not for small agile software companies. By the end of 2001, Borland has seized any future development on the open-sourced version of Interbase. Fortunately a group of amazing developers has picked up the slack and forked the code base and in winter 2002 we have switched to Firebird 1.0 the &ldquo;true&rdquo; open source Interbase and the following year to Firebird 1.5.With close to 1000 deployments on various desktop and server configurations and thousands of gigabytes of data spread across all the databases, I think we can consider ourselves as seasoned Firebird users/developers. <br /><br />But, as with any technology, we had our share of challenge and success stories. Following are a few items what to look for and what to look out for. Let&rsquo;s start with the issues as these are most of the time the determining factor when it comes to adoption of new technology:<br /><br /></p><h3><span style="font-weight: bold">The Issues</span></h3>Firebird is not very forgiving when it comes to sloppy SQL syntax. Things that you can get away with in SQL Server, will kill the db performance in Firebird. For instance: <br /><br /><span style="font-style: italic; color: #9999cc">Select * from SomeTable where id in (Select some_id from SomeOtherTable)</span><br /><br />If  the subselect should return a lot of records, the performance will be abysmal. Fortunately if you think outside of the box, there is always a workaround. In this case we could use a selectable stored proc to do an inner join on like this:<br /><br /><span style="font-style: italic; color: #9999cc">Select * from SomeTable inner join SelectableStoredProcedure(Params) on (someid = stored_proc_param)</span><br /><br />Another issue that we have run into a few times is the high bandwidth requirement when transferring large blob datasets over the Ethernet. Essentially, when performing a query that returns a lot of data (lets say 100 MB) to the client, Firebird will max out the Ethernet bandwidth on a 100 Mbps switch very quickly without even making the hard drives work. SQL Server performs much better in this instance.<br /><br />One feature that we sorely miss is the cross database joins that are easily done in SQL server. There are workarounds in Firebird (like defining an external table) but it&rsquo;s not the same. Hopefully, this feature will be added to FB 2.0.<br /><br /><h3><span style="font-weight: bold">The Awesome</span></h3>Enough of the issues, lets cover the exciting items, things that have made our lives easy:<br /><br />The deployment as part of a custom setup is a breeze. With all our deployments  we have had only 3 problem installations. One was caused by a faulty Ethernet card and the other two on Windows ME. I think this metric speaks for itself. In contrast, we are supporting an outside company with MSDE deployments. The failure rate is an astonishing 25% for MSDE deployments in uncontrolled environments. Most of the time these are issues that can be resolved, but the costs of support are very high.<br /><br />Mentioned before, selectable stored procedures. The power of this feature becomes evident when you can do an inner or outer join between a table and a stored procedure. In addition, stored procedures work &ldquo;internally&rdquo; similar to cursors (there is a loop inside the stored proc) where additional programming logic can be embedded.<br /><br />Firebird also works well in many environments. Currently we have a .NET project with Firebird deployment on Win2K3, VB6 projects and even Firebird running with Ruby on Rails on a Linux host. <br /><br />Hopefully this little status update will be useful to somebody. What&rsquo;s important that after five years, we are still sticking with Firebird and there is no change in sight&hellip; ]]></description>
			<guid isPermaLink="false">6@http://www.bdcsoftware.com/blog/pivot/</guid>
			<category>Database</category>
			<pubDate>Wed, 07 Jun 2006 17:30:00 -0400</pubDate>
		</item>
		
		
		
		<item>
			<title>Interbase and ADO tutorial</title>
			<link>http://www.bdcsoftware.com/blog/entry/4/Interbase_and_ADO_tutorial</link>
			<comments>http://www.bdcsoftware.com/blog/entry/4/Interbase_and_ADO_tutorial#comm</comments>
                        <description><![CDATA[ Has anybody ever wondered if there is an Open Source alternative to SQL Server or Access databases? Well, I have, and I found Interbase. Interbase is a Client/Server database from Borland. It is Open Source. It runs on Windows, Linux and bunch of other *nix platforms. It has a very small memory footprint and it is relatively fast.It will also support large database files (larger then 2 gig. I know a guy that has a 300 Gig database up and running)    <p>Anyhow, in this article I will describe the issues and the necessary tools to get you up and running with Interbase. </p>   <p>First let me tell you about the benefits of Interbase: <br />   1. Open Source <br />   2. Fast <br />   3. Small size <br />   4. Very easy distribution (scripts for Wise or InstallShield are available) <br />   5. Works ADO <br />   6. Works with ODBC <br />   7. Awesome transaction management (readers never block writers and vice versa) <br />   8. Multiple platform support (Linux/Unix) <br />   9. Superb support for BLOB fields (Images and memo fields) <br />   10. Support for Arrays (you can store Arrays in individual fields)</p><p>For starters you need to get the server and client software. You can get the original Open Source version (Source and Binaries) from Borland at: </p>   <p><a href="http://www.borland.com/devsupport/interbase/opensource/">http://www.borland.com/devsupport/interbase/opensource/ <br />     </a>or get it a modified version (Firebird) from: <br />     <a href="http://www.ibphoenix.com/ibp_download.html">http://www.ibphoenix.com/ibp_download.html </a></p>   <p>Download and install the server and client binaries. The Interbase server ships with a ODBC driver, but I hate ODBC and use ADO/OleDB on a day to day basis. So I had to find an OleDB driver for Interbase. Luckily there are numerous available. You can find a links to download sites on this site: </p>   <p><a href="http://www.interbase2000.org/tools_conn.htm%20">http://www.interbase2000.org/tools_conn.htm </a></p>   <p>I opted for the IBProvider from <a href="http://www.lcpi.lipetsk.ru/prog/eng/index.html">http://www.lcpi.lipetsk.ru/prog/eng/index.html </a> because they had some VB samples of how to use the provider with ADO. The version that you can download is an Evaluation for 30 days. If you want a completely free OleDB provider then use: <a href="http://www.oledb.net/?Page=FAQ">Http://www.oledb.net/?Page=FAQ </a>. However, all my sample code is tested with IBProvider only. </p>   <p>Once you have downloaded and installed all the files, you are ready for development. IB (Interbase) ships with a sample database called employee.gdb. We will use this database as an example. (You can find it in &#39;C:Program FilesBorlandInterBaseexamplesDatabase&#39; , provided you installed the server in the default location). Anyhow, lets start with the basics: </p>   <p><strong>Connecting to Interbase </strong><br />   Lets establish a connection to the database. A sample connection: </p>   <p><em>Dim adoConn As New ADODB.Connection </em></p>   <p><em> adoConn.ConnectionString = &quot;provider=LCPI.IBProvider;data source=localhost:C:Interbase DBsEmployee.gdb;ctype=win1251;user id=SYSDBA;password=masterkey&quot; </em></p>   <p><em> adoConn.Open </em></p>   <p><br />   Ok, here are a few things to consider: <br /> Default user name and password (like SA in SQLServer) are SYSDBA and masterkey (case sensitive). The &#39;data source&#39; parameter has a following syntax: IP Address:file location on the remote system . If you installed the server on your development machine then use localhost or your IP. If you installed it on a remote machine then use the IP Address of the machine. The file location is a bit weird. It is local to the server and you can&#39;t use UNC paths. </p>   <p>Once the connection is open, we can start working with the database. </p>   <p><strong>Working with an Interbase database </strong><br /> For the most part, working with Interbase is as easy as working with SQL Server or Access. However there are a few things to consider: </p>   <p>For one, Interbase uses dialects, basically it&#39;s the SQL syntax that you issue your commands to the database. IB 6.0 can use Dialect 1 (legacy) and Dialect 3. The sample databases are in written in Dialect 1. If you decide to use Dialect 3 (as I have), you will notice some weird behavior. If your database has lower case table and field names, you will have to surround them with double quotes. For instance: Select &quot;CompanyName&quot;, &quot;Address&quot; from &quot;tblCustomers&quot;. Needless to say this will create havoc with VB programmers J. One workaround is to use caps for table and field names. (Btw, don&#39;t ask me why this is the way it is.) For Instance: SELECT COMPAN_YNAME, ADDRESS FROM TBLCUSTOMERS. </p>   <p>The other issue that I have found is: you cannot use adCmdStoredProc as your command type. Workaround for this: use adCmdText. But more to this later. </p>   <p>Ok, so how would we get some data in and out of our database? Well, you can use your normal recordset object to execute a SQL statement or you can use stored procedures. </p>   <p>Here is a sample of a simple select statement: </p>   <p><em>Dim rst As New Recordset <br />         <br />   rst.Source = &quot;SELECT CUSTOMER.CONTACT_FIRST, &quot; &amp; _ <br /> &quot;CUSTOMER.CONTACT_LAST, CUSTOMER.COUNTRY &quot; &amp; _ <br /> &quot;FROM CUSTOMER&quot; <br />   <br />   rst.ActiveConnection = adoConn <br />   adoConn.BeginTrans <br />   rst.Open <br />   adoConn.CommitTrans </em></p>   <p>And here is a simple stored procedure execution: </p>   <p><em>Dim rst As New Recordset <br />   Dim cmd As New ADODB.Command </em></p>   <p><em> adoConn.Open <br />         <br />   With cmd <br />   .ActiveConnection = adoConn <br />   .CommandText = &quot;Select * FROM DEPT_BUDGET (100)&quot; <br />   End With </em></p>   <p><em> adoConn.BeginTrans <br />   Set rst = cmd.Execute <br />   adoConn.CommitTrans </em></p>   <p><br /> Notice that if your stored procedure returns any rows, you have to use the &#39;SELECT * FROM stored procedure name&#39; syntax. If your procedure does not return any records, you can use &#39;EXECUTE stored procedure name&#39;. </p>   <p>Also, the way you pass parameters in and out of the procedure is a bit peculiar. Lets say you have an insert stored procedure that will accept 3 parameters. To pass those parameters you can use inline syntax: For instance, &#39;execute procedure PROC_INSERT_TBLCUSTOMERS (comma delimited parameter values)&#39; or you can use this syntax: </p>   <p><em>With cmd <br />   .ActiveConnection = adoConn <br />   .CommandText = &quot; execute procedure PROC_INSERT_TBLCUSTOMERS (?,?,?)&quot; <br />   End With </em></p>   <p><em>adoConn.BeginTrans <br />   cmd(0) = parameter value <br />   cmd(1) = parameter value <br />   cmd(2) = parameter value <br />   cmd.Execute <br />   adoConn.CommitTrans </em></p>   <p><br /> Anyhow, these are the basics. If you guys are interested in Interbase, I will write a 2nd part of the tutorial that will cover some advanced features like working with Images, Arrays, UDF functions and tools for Interbase. For now take a look at the sample code for this tutorial, and take a look at the sample databases that are provided by Borland.</p> ]]></description>
			<guid isPermaLink="false">4@http://www.bdcsoftware.com/blog/pivot/</guid>
			<category>Database</category>
			<pubDate>Wed, 10 May 2006 17:35:00 -0400</pubDate>
		</item>
		
		
		
		<item>
			<title>VB AddErrorHandler</title>
			<link>http://www.bdcsoftware.com/blog/entry/3/VB_AddErrorHandler</link>
			<comments>http://www.bdcsoftware.com/blog/entry/3/VB_AddErrorHandler#comm</comments>
                        <description><![CDATA[ FREE Visual Basic 6 add-in, that will speed up adding error handling code to procedures and functions. It has built in CallStack and is fully customizable.<p>Best of all, it will add runtime CallStack capabilities to your applications. From now on, if an error occurs at runtime, you won&#39;t have to guess what happened :-) </p>     <p><a href="http://www.bdcsoftware.com/development/AddErrorHandler/AddErrorHandler.EXE">Download it here </a></p>     <p><strong>Short Description: </strong></p>     <p>After installation, the add-in will load on startup of Visual Basic. A new toolbar <img src="http://www.bdcsoftware.com/development/AddErrorHandler/new_toolbar.gif" border="0" alt="Application error thumbnail" width="82" height="26" /> will be available. Button functions starting from the left:Add error handling code to the current procedure, add error handling code to the current module, plug-in options. </p>     <p>Depending on the option settings, the plug-in might add multiple files to your project. The source code to those files is in SRC directory of the plug-in. Feel free to customize it at will. </p>     <p><strong>Screenshots: </strong></p>     <p><a href="http://www.bdcsoftware.com/development/AddErrorHandler/app_error_short.gif"><img src="http://www.bdcsoftware.com/development/AddErrorHandler/app_error_short_tn.gif" border="0" alt="AddErrorHandler logo" width="200" height="46" /></a><br />         <em>Standard error message </em></p>     <p><a href="http://www.bdcsoftware.com/development/AddErrorHandler/app_error_detailed.gif"><img src="http://www.bdcsoftware.com/development/AddErrorHandler/app_error_detailed_tn.gif" border="0" alt="Toolbar image" width="200" height="145" /></a><br />         <em>Detailed error message, <br />   includes the callstack </em></p>     <p><a href="http://www.bdcsoftware.com/development/AddErrorHandler/options.gif"><img src="http://www.bdcsoftware.com/development/AddErrorHandler/options_tn.gif" border="0" alt="Program Options" width="200" height="151" /></a><br />         <em>Plug-in options </em></p> ]]></description>
			<guid isPermaLink="false">3@http://www.bdcsoftware.com/blog/pivot/</guid>
			<category>Miscellaneous</category>
			<pubDate>Wed, 10 May 2006 17:26:00 -0400</pubDate>
		</item>
		
		
		
		<item>
			<title>Exposing Activex objects in VB6</title>
			<link>http://www.bdcsoftware.com/blog/entry/7/Exposing_Activex_objects_in_VB</link>
			<comments>http://www.bdcsoftware.com/blog/entry/7/Exposing_Activex_objects_in_VB#comm</comments>
                        <description><![CDATA[ An example on how to use GetObject on custom made ActiveX EXE. (And Microsoft said that it cannot be done :-))<p>This sample will teach you how to expose classes from an ActiveX EXE to other Applications. I felt that a Main App / Plugin relationship (like in Photoshop) will be best suited to showcase this cool solution. </p>     <p><strong>This is how it works:</strong> <br /> When an object gets created based on a class from an ActiveX Exe it gets created in its own memory area (Multiple objects based on the same class cannot share their data). In C++ that object registers itself with the ROT (Running Object Table) so that anybody who needs to, can access that instance of the object. For instance Excel. When Excel is running you can refer to the running instance from VBA/VB, and access any data that&#39;s present in the spread sheet. However VB based objects lack that functionality. Activex EXE created in VB will NOT get registered in the ROT! (That&#39;s why you can&#39;t use GetObject on VB made ActiveX&#39;s ;-) ) </p>     <p>Anyhow, here is a solution that will register your ActiveX EXE in the ROT, and you will be able to reference the running instance of your object from any other application. </p>     <p>Please use this <a href="http://www.bdcsoftware.com/development/activex_1/project.zip">sample </a> as follows: </p>     <ol><li>Extract Files from Zip (use folder names checked) </li><li>run MainApp.EXE (ActiveX EXE) </li><li>click on the OPEN icon </li><li>load the supplied BMP </li><li>wait for a few sec....(sorry the image handling is awfully slow, I didn&#39;t wanted to deal with DIB&#39;s for simplicity reasons) </li><li>plugin Button should be enabled by now (this calls a ShellExecute and runs a regular EXE (our plugin) </li><li>In the plugin click on GetData (this will transfer the image from the main app) </li><li>click on modify image </li><li>click on Close Plugin &amp; Transfer data (this will transfer the modified image back to the main app) </li><li>Voila </li></ol>     <p align="left">The benefits: If you expose your app&#39;s objects up front, you can later on create any plugins/addons you want without modifying the original app. </p> 	     <a href="http://www.bdcsoftware.com/development/activex_1/PIC20001027313123362.jpg"><img src="http://www.bdcsoftware.com/development/activex_1/PIC20001027313123362_tn.jpg" border="0" alt="Plugin Model screenshot" width="300" height="232" /></a> ]]></description>
			<guid isPermaLink="false">7@http://www.bdcsoftware.com/blog/pivot/</guid>
			<category>Miscellaneous</category>
			<pubDate>Sun, 07 May 2006 17:50:00 -0400</pubDate>
		</item>
		
		
		
		<item>
			<title>Welcome to the new blog</title>
			<link>http://www.bdcsoftware.com/blog/entry/5/Welcome_to_the_new_blog</link>
			<comments>http://www.bdcsoftware.com/blog/entry/5/Welcome_to_the_new_blog#comm</comments>
                        <description><![CDATA[ <p>The old developers sections has been retired and replaced by this new and shiny blog. All the articles from the previous section will be transferred shortly.</p> ]]></description>
			<guid isPermaLink="false">5@http://www.bdcsoftware.com/blog/pivot/</guid>
			<category>Miscellaneous</category>
			<pubDate>Sun, 07 May 2006 17:23:00 -0400</pubDate>
		</item>
		
		
		
	</channel>
</rss>
