<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-12760115</id><updated>2011-04-22T00:26:33.189Z</updated><title type='text'>Phil Wright : Component Factory</title><subtitle type='html'>Join me as I take a journey from concept to real world business. Is it possible to create a viable microISV on a shoe string budget and working only in your spare time? Let's try...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>36</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-12760115.post-112725219930418694</id><published>2005-09-20T21:34:00.000Z</published><updated>2005-10-26T08:13:05.923Z</updated><title type='text'>microISV, New blogging location...</title><content type='html'>I have now managed to get the blogging portion of the website up and running. So from now on all posts will be added to the web site and not here via blogger. if you have book marked the blogger site then please update your bookmark to...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.componentfactory.com/blog.php"&gt;http://www.componentfactory.com/blog.php&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you are using the feedburner rss feed then you do not have to do anything as I have updated the feedburner setting to point at the new rss feed on the website. Alternatively you can always subscribe directly using...&lt;br /&gt;&lt;br /&gt;&lt;a href="&lt;br /&gt;http://www.componentfactory.com/blog/rss.php?number=30"&gt;&lt;br /&gt;http://www.componentfactory.com/blog/rss.php?number=30&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Many thanks!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112725219930418694?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com/blog.php' title='microISV, New blogging location...'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112725219930418694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112725219930418694' title='23 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112725219930418694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112725219930418694'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/09/microisv-new-blogging-location.html' title='microISV, New blogging location...'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>23</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112653921198924416</id><published>2005-09-12T15:22:00.000Z</published><updated>2005-09-12T16:03:38.096Z</updated><title type='text'>microISV, Rent a coder</title><content type='html'>&lt;strong&gt;Product Logos&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As outlined previously, the &lt;em&gt;Krypton Toolkit&lt;/em&gt; and &lt;em&gt;Krypton Navigator&lt;/em&gt; product logos are a bit mediocre. We obviously want to ensure that all the visuals used on the website and in the products are excellent and not just mediocre.&lt;br /&gt;&lt;br /&gt;So as usual, we are going to pay a designer to come up with something much better. In the past we have used &lt;a href="http://www.guru.com"&gt;Guru.com&lt;/a&gt; for the main company logo and &lt;a href="http://www.designoutpost.com"&gt;DesignOutpost.com&lt;/a&gt; for the website template.&lt;br /&gt;&lt;br /&gt;Both of these websites have produced some great results although you have to be willing to push the designers quite hard in the right direction.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Rent-A-Coder&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This time we are going to try another side called &lt;a href="http://www.rentacoder.com"&gt;RentACoder.com&lt;/a&gt;. Despite the name they have plenty of designers that are happy to work on logos.&lt;br /&gt;&lt;br /&gt;I have started a project on the site and asked for bidders to come forward to take part in the project. The ceiling price I have established is just $150, which is pretty skinny for creating a couple of professional logos. Still, if you live in the middle of Tibet and want this as extra income outside the main day job then maybe that is quite tempting.&lt;br /&gt;&lt;br /&gt;After a couple of days I have had over 30 bidders come forward, bidding anything from $30 up to $100 for doing the project. Many of these are obviously automated answers because the replies have not taken into account the project requirements that I requested. Never mind, that leaves plenty of others to choose from.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112653921198924416?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Rent a coder'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112653921198924416/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112653921198924416' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112653921198924416'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112653921198924416'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/09/microisv-rent-coder.html' title='microISV, Rent a coder'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112653781375078198</id><published>2005-09-12T14:50:00.000Z</published><updated>2005-09-12T15:10:13.873Z</updated><title type='text'>microISV, Touchdown</title><content type='html'>&lt;strong&gt;The Eagle Has Landed&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;My new Dell machine has arrived at last. After spending half the weekend getting everything installed I am now ready to rock and roll. If you have ever thought about getting a two screen system then I certainly recommend it. And not just because it makes your study look like the Star Trek Enterprise!&lt;br /&gt;&lt;br /&gt;Your productibity will improve more from buying the extra screen than it will from spending the same amount on the extra .4Ghz processor speed. Just as useful is a RAID-0 config for your drives. This baby just flys!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Doing The Splits&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;With the release of &lt;em&gt;VS.NET 2005&lt;/em&gt; just around the corner I need to get on with actually producing the free &lt;em&gt;Krypton Toolkit&lt;/em&gt; for release at around the same time. Currently I am working on the split container control that has the same functionality as the &lt;em&gt;Windows.Forms&lt;/em&gt; version but with our own rendering framework.&lt;br /&gt;&lt;br /&gt;So...back to the grind stone.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112653781375078198?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Touchdown'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112653781375078198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112653781375078198' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112653781375078198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112653781375078198'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/09/microisv-touchdown.html' title='microISV, Touchdown'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112560411978390774</id><published>2005-09-01T19:38:00.000Z</published><updated>2005-09-01T20:10:05.976Z</updated><title type='text'>microISV, Good Bad @ Ugly</title><content type='html'>&lt;strong&gt;The Good...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Some good news at last. The web hosting has been transferred over much faster than I expected and now I have a &lt;em&gt;Linux &lt;/em&gt;machine hosting my web space space. The domain names are correctly pointing to it and email is still working just fine. It was a painful process with several calls to &lt;em&gt;Network Solutions&lt;/em&gt;, but we got their in the end.&lt;br /&gt;&lt;br /&gt;In fact you can visit the site right now and see the newly designed website up and running. Well, actually there is only a single page with example non-sense content but it gives the look and feel.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.componentfactory.com"&gt;www.componentfactory.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;The observant among you will have noticed that one of the navigation buttons is called &lt;em&gt;Blog&lt;/em&gt;. I am getting the web designer to setup a blog system that works within the website so there is no need to have it externally hosted as with &lt;em&gt;Blogger&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;Once that is working I will copy across all existing posts from here and let you know the appropriate new feed. But I expect this to take a little while yet.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;...the Bad...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It seems that my order for a new PC with &lt;em&gt;Dell&lt;/em&gt; is going to take another two weeks. When I placed the order the delivery time estimated seemed a reasonable 10 days. But once they have received payment it suddenly jumps by another 14 days. Not that I am cynical of course...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;...and the Ugly...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As part of the website design I need a couple of small logos that are used to represent the two products. Have a look and see what you think.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/btnKryptonToolkit.gif" border="0"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/btnKryptonNavigator.gif" border="0"/&gt;&lt;br /&gt;&lt;br /&gt;The &lt;em&gt;Toolkit&lt;/em&gt; will be the free set of components that will help market the company name and drive interest in the other products. &lt;em&gt;Navigator&lt;/em&gt; will be the first actual paid for product.&lt;br /&gt;&lt;br /&gt;As the products created will be related to each other it makes sense to have a name for the range they all belong to. Obviously you have now worked out that I have decided on the name &lt;em&gt;Krypton&lt;/em&gt;. Hence the green colouring and not the blue you might expect for it to match the website.&lt;br /&gt;&lt;br /&gt;What do you think of the name? Do you think the above logos are good enough?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112560411978390774?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Good Bad @ Ugly'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112560411978390774/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112560411978390774' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112560411978390774'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112560411978390774'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/09/microisv-good-bad-ugly.html' title='microISV, Good Bad @ Ugly'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112543699951270047</id><published>2005-08-30T20:59:00.000Z</published><updated>2005-08-30T21:23:19.543Z</updated><title type='text'>microISV, Slow Slow ...</title><content type='html'>&lt;strong&gt;Slow Slow, Quick Quick Slow&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Things have been moving very slowing recently.&lt;br /&gt;&lt;br /&gt;At the moment I am still in the middle of transferring my hosting package from a &lt;em&gt;Windows&lt;/em&gt; machine to a &lt;em&gt;Unix&lt;/em&gt; machine. As a result my domain names are not working and so the images on the blog are still not showing. The images are in a directory on the server and referenced from the blog. Fortunately my email is not effected.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Website Design Progress&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I have an initial cut of the website design. It looks great and once the hosting is sorted out I will put it online so you can see how it looks. Might be a few days before that is possible.&lt;br /&gt;&lt;br /&gt;This might sound odd but sometimes it is really hard to pay people. The designer that came up with the design has done a good job. So on receiving the design I immediately requested how to pay him in order to reward his hard work. Three days later and another email and still no response. Sometimes it is hard to give money away!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Visual Studio Problems&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Another problem I am having is with my development machine. Because it has &lt;em&gt;XP Home Edition&lt;/em&gt; installed it means I cannot install the latest CTP builds of &lt;em&gt;Visual Studio .NET 2005&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;This is a pain as it means I am developing against a version that might have since changed. I don't expect many changes to have occurred but I would feel more comfortable making sure I am not writing code now that will definitely have to be replaced.&lt;br /&gt;&lt;br /&gt;Another issue is the inability to see my controls at design time. No matter how I try to install &lt;em&gt;Visual Studio .NET 2005&lt;/em&gt; it seems to be screwed up, and refuses to work at design time. So I can only work on the features I can use at run time.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;14 Days and counting&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Luckily the end of all my problems is in sight. Two weeks from now I expect to have my new PC with &lt;em&gt;XP Professional&lt;/em&gt; installed. I will also be able to use &lt;em&gt;Virtual PC&lt;/em&gt; in order to install and develop against each new &lt;em&gt;Visual Studio .NET 2005&lt;/em&gt; release in an isolated way. With the domain hosting sorted out by then I will be back on the development fast track.&lt;br /&gt;&lt;br /&gt;Still, in the meantime I am beavering away as best I can on the basics of the &lt;em&gt;Navigator&lt;/em&gt; control and also a &lt;em&gt;SplitContainer&lt;/em&gt; for the free &lt;em&gt;Toolkit&lt;/em&gt; package. &lt;br /&gt;&lt;br /&gt;Please bear with me as I get these issues sorted out and back to full coding and blogging speed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112543699951270047?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Slow Slow ...'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112543699951270047/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112543699951270047' title='14 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112543699951270047'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112543699951270047'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/08/microisv-slow-slow.html' title='microISV, Slow Slow ...'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>14</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112478268143872145</id><published>2005-08-23T07:27:00.000Z</published><updated>2005-08-23T07:38:01.443Z</updated><title type='text'>microISV, Turbo Charged Coder</title><content type='html'>&lt;strong&gt;Go faster strips&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I've decided that my 3.5year old PC no long cuts it when it comes to professional software development. It's like trying to use a mule when you need a thorough breed race horse. So I've ordered a new machine that will in itself motivate me for weeks to come. Two 19' flat panel screens, a 512MB graphics card (so I will be Vista ready and a couple of large RAID 0 hard drives. Nice!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Webhosting Disruption&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As part of the plan for the website I have decided to switch from a Windows hosted site to a Unix box. It might sound like treachery when I am Windows developer but to be honest, it just makes sense. &lt;br /&gt;&lt;br /&gt;The designer I am now working with on the site wants to use PHP scripts and a MySQL backend in order to have the blog integrated into the website. On Unix this is a doddle. Trying to do this on a Windows machine is a major headache. No, I believe in using the best tool for the job and in this case it is quicker and therefore cheaper to use Unix. Plus I can easily pick up knowledge of PHP in order to modify and maintain the site myself in the future.&lt;br /&gt;&lt;br /&gt;As part of the this process of changing over hosting packages the people at Network Solutions screwed things up. So it will be a few days or even a week before my domain names are working again. So images on this blog will be unavailable for a while.&lt;br /&gt;&lt;br /&gt;Oh well, back to the 1.5GHz AMD processor for a few more days...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112478268143872145?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Turbo Charged Coder'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112478268143872145/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112478268143872145' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112478268143872145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112478268143872145'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/08/microisv-turbo-charged-coder.html' title='microISV, Turbo Charged Coder'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112448445975159905</id><published>2005-08-19T20:40:00.000Z</published><updated>2005-08-19T20:47:39.756Z</updated><title type='text'>microISV, They think its all over...</title><content type='html'>&lt;strong&gt;Another Contender Enters the Ring&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Just when I thought the concept work for the website was done and dusted another contender throws their hat in the ring. Normally I would not want the extra distraction in looking at another design but as the initial concept looks so good I have to follow it through.&lt;br /&gt;&lt;br /&gt;Have a look for yourself by using this link...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.componentfactory.com/images/WebSite_3a.gif"&gt;Another Concept&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It needs a little work but has real potential. I will keep you posted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112448445975159905?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, They think its all over...'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112448445975159905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112448445975159905' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112448445975159905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112448445975159905'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/08/microisv-they-think-its-all-over.html' title='microISV, They think its all over...'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112422478088439055</id><published>2005-08-16T20:36:00.000Z</published><updated>2005-08-16T20:39:40.890Z</updated><title type='text'>microISV, Web site live!</title><content type='html'>&lt;strong&gt;The Eagle has landed!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I've taken the template as provided by the winning web design and used it to generate the five main pages of the website. These have been uploaded to the server so now I actually have a website. Try it out...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.componentfactory.com"&gt;Live Website!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Half an Eagle has landed&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Actually you will have quickly noticed there is no content on the site. But Rome was not built in a day and my website certainly will not be either. The next step over the coming week or so is to actually fill in some of the pages with details.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112422478088439055?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Web site live!'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112422478088439055/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112422478088439055' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112422478088439055'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112422478088439055'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/08/microisv-web-site-live.html' title='microISV, Web site live!'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112405302813062401</id><published>2005-08-14T20:53:00.000Z</published><updated>2005-08-14T20:57:08.143Z</updated><title type='text'>microISV, Web Design #3</title><content type='html'>&lt;strong&gt;Another Contender&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Just when I thought I was only going to get a single designer submit an idea another has entered the contest with a design. This is quite different but also a good effort and certainly worth considering with some changes.&lt;br /&gt;&lt;br /&gt;You can see the design using this list.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.componentfactory.com/images/Website_4.gif"&gt;Second Contender&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I instructed the designer to remove the extra design elements like the stop button on the top of the page. It does look a little like a WinAmp design at the moment but by removing those it does have potential.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112405302813062401?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Web Design #3'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112405302813062401/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112405302813062401' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112405302813062401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112405302813062401'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/08/microisv-web-design-3.html' title='microISV, Web Design #3'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112396216818085283</id><published>2005-08-13T19:27:00.000Z</published><updated>2005-08-13T19:42:48.190Z</updated><title type='text'>microISV, Web Design #2</title><content type='html'>&lt;strong&gt;Removing the arty bits&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Feedback from readers indicating that the first design had a couple of arty farty style elements that could be removed to improve the look. I requested this from the designer along with a need to improve the header area. Here are the two designs that resulted.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.componentfactory.com/images/Website_21.jpg"&gt;Variation 1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.componentfactory.com/images/Website_22.jpg"&gt;Variation 2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Although an improvement I think both designs are not quite right and so I asked for the header to be worked on again in order to make the logo feel more integrated with the header area.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Finale&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The end result of the cycle is the following final design that I want to run with.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.componentfactory.com/images/Website_3.jpg"&gt;Variation 2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I think this creates a professional feel with a little design flair mixed in. Remember that our controls are going to be at the premium end of the market and so a good professional site is essential. But not just a standard plain site because the components biggest selling point is how great they make your applications look. So we need to show some flair and creativity in the website itself.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Next Step&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;At this point the design is just a high resolution picture. The next step is to turn the picture into an actual HTML template that can be used to generate pages as needed. &lt;br /&gt;&lt;br /&gt;If you're a web programmer and feel up to the task then let me know, I am willing to pay a sensible amount for a professional to do that work.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112396216818085283?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Web Design #2'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112396216818085283/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112396216818085283' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112396216818085283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112396216818085283'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/08/microisv-web-design-2.html' title='microISV, Web Design #2'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112327768112251122</id><published>2005-08-05T21:28:00.000Z</published><updated>2005-08-05T21:34:41.130Z</updated><title type='text'>microISV, Web Design #1</title><content type='html'>&lt;strong&gt;First Up&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;After almost a week we only have one design concept submitted so far on the Design Outpost website. But I did have a few others say they were interested in putting together an idea so I hope there will be others to look at soon.&lt;br /&gt;&lt;br /&gt;Here is a reduced size version of the design...&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/WebSite_0_Mini.jpg"/&gt;&lt;br /&gt;&lt;br /&gt;Ok, so you cannot see much from there. Use the following link to see the full sized image.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.componentfactory.com/images/WebSite_0.jpg"&gt;Click Here!&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Feedback&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Personally I really like the design and with a couple of tweaks think it would be perfectly fine as the actual site template. But do you have other ideas? Does it look too arty and not commercial enough?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112327768112251122?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Web Design #1'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112327768112251122/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112327768112251122' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112327768112251122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112327768112251122'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/08/microisv-web-design-1.html' title='microISV, Web Design #1'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112298448816526565</id><published>2005-08-02T11:54:00.000Z</published><updated>2005-08-02T12:08:08.170Z</updated><title type='text'>microISV, Let the contest begin</title><content type='html'>&lt;strong&gt;Time for a Website&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I think the time is right to get an initial website up and working. Although I do not have anything in the way of interesting content as yet, once I have a beta version of the free controls ready then I need the website ready to go.&lt;br /&gt;&lt;br /&gt;Initially I can place a few screenshots of the work in progress and provide subscription to a notification email list. I intend to give away the basic toolkit of controls for free and so the email list can be used to notify people each time a new release is available.&lt;br /&gt;&lt;br /&gt;At the moment I am only building the free controls so all the stuff you are seeing get created will be available for free at some point in the future. Once it reaches a point where there is enough to make a small library, I will package it up and add some documentation.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Design Outpost&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;When I had the company logo created I used the &lt;a href="http://www.guru.com"&gt;Guru.com&lt;/a&gt; website. This worked out well and I had some feedback from readers that another good design site is &lt;a href="http://www.designoutpost.com"&gt;Design Outpost&lt;/a&gt;. So this time around I will give them a chance and see how it works out.&lt;br /&gt;&lt;br /&gt;I posted the project on the templates forum last night so you can see and follow the design contest directly if you like. Alternatively you can wait and read the results on this blog as events transpire.&lt;br /&gt;&lt;br /&gt;Looking at the design process on the site it does seem quite a slow process so it might be a week before we have any initial designs to start evaluating. Another potential weakness of the site is that you might only get a single designer offer an initial sketch. Really I would prefer to have a handful of different ideas and then I can pull the best bits from them all in order to create something appropriate.&lt;br /&gt;&lt;br /&gt;Only time will tell.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112298448816526565?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Let the contest begin'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112298448816526565/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112298448816526565' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112298448816526565'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112298448816526565'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/08/microisv-let-contest-begin.html' title='microISV, Let the contest begin'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112292695965393608</id><published>2005-08-01T19:45:00.000Z</published><updated>2005-08-03T20:48:02.896Z</updated><title type='text'>microISV, Header Group</title><content type='html'>&lt;strong&gt;Delayed&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I have been a bit delayed in my development efforts over the last week. Last week was very busy in the day job and so by the time I got home I was too tired out to get much done. Luckily I managed to pull myself together at the weekend and spent most of Sunday getting back into the flow of things.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;HeaderGroup Control&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;At the end of my last coding update I mentioned the next chunk of work was creating a &lt;em&gt;HeaderGroup&lt;/em&gt; control. This is a combination of the existing &lt;em&gt;Group&lt;/em&gt; and &lt;em&gt;Header&lt;/em&gt; controls that having already been bagged.&lt;br /&gt;&lt;br /&gt;I managed to get this 90% complete and so here is a look at the control with the usual &lt;em&gt;Office Professional&lt;/em&gt; appearance.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/HG_0.gif"/&gt;&lt;br /&gt;&lt;br /&gt;As you can see the control consists of two &lt;em&gt;Header&lt;/em&gt; instances that default to showing at the top and bottom of the control. You can of course alter the position of these headers to be on the left or right or even have both on the same edge if required.&lt;br /&gt;&lt;br /&gt;If you imagine placing your own content in the center then you can quickly make use of this to organize the sections of your application. You might place a tree control or list box inside to achieve a similar arrangement to that of &lt;em&gt;Microsoft Office&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Overlay&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In order to make the control more flexible in the different appearances that can be achieved, I have added the ability to specify if the headers appear under or over the border area. &lt;br /&gt;&lt;br /&gt;The controls below have been setup in exactly the same way except the left control has the &lt;em&gt;Overlay&lt;/em&gt; property set at &lt;em&gt;false&lt;/em&gt; and the right control set to &lt;em&gt;true&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/HG_1.gif"/&gt;&lt;br /&gt;&lt;br /&gt;Personally I prefer the one of the left but you can imagine making use of both options to achieve nice looking group setups.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Padding&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Another useful capability is being able to alter the padding space around each of the header instances. Instead of having the headers always flush against the edges of the control area you can indent them.&lt;br /&gt;&lt;br /&gt;Here is an example I quickly created by using gradient color effects combined with pushing the headers inside a little. This creates a little whitespace between the header and the main control border. Altering the font as well gives quite a different feel to the examples above but all achieved by changing just a few simple properties.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/HG_2.gif"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Next Step&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The only work left to do on this control is correctly providing the rectangle of the client area in the middle of the control. This is needed so that when the user drops a child control onto the group it will position itself neatly in the appropriate location.&lt;br /&gt;&lt;br /&gt;Fingers crossed I will find a little more time in the evenings to get this sorted out soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112292695965393608?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Header Group'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112292695965393608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112292695965393608' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112292695965393608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112292695965393608'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/08/microisv-header-group.html' title='microISV, Header Group'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112197890054373500</id><published>2005-07-21T19:55:00.000Z</published><updated>2005-07-21T20:49:54.676Z</updated><title type='text'>microISV, Coding Evolution</title><content type='html'>&lt;strong&gt;Nothing duplicated&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I am a strong believer in reusing code and thereby minimizing the amount of code I need to write. Every time I write some new functionality I double check to make sure I have not already done something very similar already. There are two very good reasons for this.&lt;br /&gt;&lt;br /&gt;First of all I want to get maximum benefit from each hour spent in front of the compiler. Working on this project only in my spare time means I don't have the luxury of doing anything not crucial.&lt;br /&gt;&lt;br /&gt;Second, and even more important, is the principle of object orientated programming. If I'm writing code that is the same, or very similar, to something elsewhere in the project then something has gone wrong. It's a clear indication that something is going amiss with my design. &lt;br /&gt;&lt;br /&gt;That being the case I need to investigate the problem and fix the architecture. The fix should negate the need for the duplicated code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;From small steps...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;A result of this approach is that a new project should feel like evolution on a small scale. You start off by writing the simple elements of the project. As you then build upwards you create more complex structures that reuse many of the existing components. You're constantly moving up the evolutionary ladder.&lt;br /&gt;&lt;br /&gt;Each step upwards only involves adding a small and reasonable set of features and feels quite manageable in itself. But after a few weeks have passed you look back and notice that all the small steps have evolved your design into an elegant and sophisticated structure. Well, that's the hope anyway!&lt;br /&gt;&lt;br /&gt;If you've been following my coding updates then you should have been able to see this taking place. Let's quickly follow how the project has evolved so far. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;In the beginning...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The first control created was about as simple and boring as can be imagined. We created a simple &lt;em&gt;Panel&lt;/em&gt; component that is mostly going to be used to fill the client area of a window and give it the appropriate appearance.&lt;br /&gt;&lt;br /&gt;Below you can see the control in use and it has the &lt;em&gt;Microsoft Office 2003&lt;/em&gt; look and feel. This is the only rendering class I have coded at the moment and so all the example pictures have this look and feel.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Round_0.gif"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Let there be light...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Actually a more appropriate phrase would be &lt;em&gt;Let there be a border...&lt;/em&gt; because out second control is the &lt;em&gt;Group&lt;/em&gt; component. This consists of adding a border drawing ability with the existing background capability.&lt;br /&gt;&lt;br /&gt;This was quick and easy to create because all of the infrastructure from the existing &lt;em&gt;Panel&lt;/em&gt; was reused and extended. Although not obvious from this picture the components are much more flexible than they appear. You can use alpha blending, rounded corners, tiled images and so forth.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Round_1.gif"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Holy Trinity&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Component number three took a little longer to construct because it involves drawing and positioning text. This is the &lt;em&gt;Header&lt;/em&gt; control and it reuses the background and border functionality from the previous controls and then extends it.&lt;br /&gt;&lt;br /&gt;This is an important landmark because the &lt;em&gt;Header&lt;/em&gt; represents completion of the holy trinity of rendering. Almost all controls use a combination of background, border and content for display. If this sounds hard to believe then check out the next section which shows a good example of this in practice.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Round_2.gif"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Add another dimension&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;What is the difference between a &lt;em&gt;Button&lt;/em&gt; control and our previously completed &lt;em&gt;Header&lt;/em&gt; component? Not a lot. In fact the only difference is that a &lt;em&gt;Header&lt;/em&gt; has only a single palette and a &lt;em&gt;Button&lt;/em&gt; has several.&lt;br /&gt;&lt;br /&gt;Let's define what I mean by a palette. A palette is the triple combination of background, border and content settings. And by settings I mean the colors, font and other drawing styles you can specify. &lt;br /&gt;&lt;br /&gt;So when the button is drawn normally we use one palette. When the user moves the mouse over the button area we switch to drawing with a different palette. On pressing the mouse down on the button we use yet another palette.&lt;br /&gt;&lt;br /&gt;So the button really is the same as the header but instead of having one palette we have several, one for each of the states it can be in. Now you can see how we are reusing the existing infrastructure to get maximum benefit for adding a minimum of new code.&lt;br /&gt;&lt;br /&gt;Our final picture below has two button instances, the left in the hovering over state and the right in the normal state.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Round_3.gif"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;To Infinity and beyond...&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So what is our next step up the evolutionary ladder? The next control is going to be called the &lt;em&gt;HeaderGroup&lt;/em&gt; and, as the name implies, it will combine the &lt;em&gt;Group&lt;/em&gt; and &lt;em&gt;Header&lt;/em&gt; capabilities into a useful little control. This might not sound like much of an advance, but trust me, it will turn out to be quite a handy little control.&lt;br /&gt;&lt;br /&gt;So the next time you're coding...just think how much you owe to Darwin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112197890054373500?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Coding Evolution'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112197890054373500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112197890054373500' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112197890054373500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112197890054373500'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/07/microisv-coding-evolution.html' title='microISV, Coding Evolution'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112178893156726043</id><published>2005-07-19T15:53:00.000Z</published><updated>2005-07-19T16:43:54.300Z</updated><title type='text'>.NET2, ColorMatrix Reloaded</title><content type='html'>&lt;strong&gt;The Matrix Connection&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Despite the headline this blog entry has absolutely nothing to do with the &lt;em&gt;Matrix&lt;/em&gt; set of films. In fact it is about using the &lt;em&gt;ColorMatrix&lt;/em&gt; capability of the &lt;em&gt;ImageAttributes&lt;/em&gt; class for drawing images.&lt;br /&gt;&lt;br /&gt;Not only does that description not fit into the title but there is no chance you would have read the entry without the &lt;em&gt;Reloaded&lt;/em&gt; part of the name. A marketing guy would call this technique a &lt;em&gt;Teaser&lt;/em&gt;. The rest of us call this very sneaky. &lt;br /&gt;&lt;br /&gt;If I was selling fish fingers, or any other food, then this would be called a breach of the trade descriptions act and the local council would be onto me. In fact they would already have closed me down. Luckily no one cares about accurate descriptions in the software industry and so we will continue without fear.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Drawing a Disabled Image&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I am in the closing stages of writing a &lt;em&gt;Button&lt;/em&gt; control and want to make it look good when it was disabled. There are two ways to handle this issue. The easiest solution for me is to get the developer to provide two images, one for when the control is disabled and another for when it is enabled.&lt;br /&gt;&lt;br /&gt;Not only is this lazy but it demands extra work from the developer to use my control. The whole point of our library is to make the developers application look good with a minimum of effort from the developer himself. So the alternative solution, and the one I am taking, is to take the enabled image and then draw it in a disabled appearance.&lt;br /&gt;&lt;br /&gt;In the past I have used the &lt;em&gt;ControlPaint.DrawImageDisabled&lt;/em&gt; method provided by the framework but I am no longer happy with that solution. I want to provide more flexibility in the appearance and so let the developer choose a variety of different ways the image could be manipulated.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Enter The ColorMatrix&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is where the &lt;em&gt;ColorMatrix&lt;/em&gt; comes into play because it can be used to modify the colors of the image when it is being drawn. So now my button control allows the developer to specify an enumeration of different &lt;em&gt;ColorMatrix&lt;/em&gt; settings to be applied.&lt;br /&gt;&lt;br /&gt;Here is a picture with three buttons. The name of the enumeration value is used as the button text and the image is drawn in the named style.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Color_2.gif"/&gt;&lt;br /&gt;&lt;br /&gt;The first is called normal and has no color modification applied. In the second the matrix is used to convert from color to a black and white scale. Last of all the disabled appearance is achieved by using a gray scale but also making the colors 10% brighter than normal. This gives a more subtle look and feel.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;GrayScale Matrix Code&lt;/strong&gt;&lt;br /&gt;&lt;code&gt;&lt;br /&gt;new ColorMatrix(new float[][]{&lt;br /&gt;&lt;br /&gt;new float[]{0.3f,0.3f,0.3f,0,0},&lt;br /&gt;new float[]{0.59f,0.59f,0.59f,0,0},&lt;br /&gt;new float[]{0.11f,0.11f,0.11f,0,0},&lt;br /&gt;new float[]{0,0,0,1,0},&lt;br /&gt;new float[]{0,0,0,0,1}&lt;br /&gt;&lt;br /&gt;});&lt;br /&gt;&lt;/code&gt;&lt;br /&gt;The first three lines of the matrix are used to convert the Red, Green and Blue colors of the pixel in that order. The fourth line is used to convert the alpha channel and the fifth line for adding/subtracting values.&lt;br /&gt;&lt;br /&gt;So in this example the fourth and fifth lines use a value of 1 to show they are leaving the alpha channel alone and not applying any addition/subtraction.&lt;br /&gt;&lt;br /&gt;The values in column 0, 1 and 2 of the first three lines are the same because in order to convert to a grayscale we need to ensure that the RGB values are the same for the R, G and B. Notice that the 0.3, 0.59 and 0.11 values add up to exactly 1.&lt;br /&gt;&lt;br /&gt;These three relative factors are used because the eye has better acuity in the green range than in the red and the red is better than the blue. Hence we want to take more account of the green (0.59) than the red (0.3) than the blue (0.11).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Color Intensity&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;There is no limit to the color manipulation you can achieve and so I also added some extra enumeration values for making the image lighter or darker in appearance. These might prove useful in many different situations. Here they are in operation.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Color_0.gif"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Breaking Point&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As an experiment I tried converting just two of the colors to grayscale and leaving the third alone. In the example below you can see &lt;em&gt;GrayScale R&lt;/em&gt; where the blue and green have been gray scaled but the red left alone. Below that are the other two versions for blue and green variations.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Color_1.gif"/&gt;&lt;br /&gt;&lt;br /&gt;The reason they are not coming out perfectly is that the three circles are not filled with pure red, pure green and pure blue. Hence the conversion is not achieving the exact effect I was intending. I have decided to leave these enumeration options in the code although they will not be used very often.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pain Points&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;By providing these different effects out of the box the developer has more options in presenting the button image. They might decide to have the button appear gray scaled normally but become full color when the mouse tracks over it. Alternatively they might want to use a darker version of the image normally and only use the normal image on hot tracking. &lt;br /&gt;&lt;br /&gt;The important point is the developer provides just a single image and can then apply different effects without needing to create them using a separate package, such as Paint Shop Pro. To use a really stupid management style phrase, we are removing a &lt;em&gt;Pain Point&lt;/em&gt; for the developer.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112178893156726043?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='.NET2, ColorMatrix Reloaded'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112178893156726043/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112178893156726043' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112178893156726043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112178893156726043'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/07/net2-colormatrix-reloaded.html' title='.NET2, ColorMatrix Reloaded'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112143882552855753</id><published>2005-07-15T13:56:00.000Z</published><updated>2005-07-15T14:47:05.566Z</updated><title type='text'>microISV, Text For Australians</title><content type='html'>&lt;strong&gt;Header Control Revisited&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;At last the simple heading control is finished. No doubt changes will need to be made in the future to mirror alterations in the overall architecture but the basic implementation is there and working. The last feature I added, and quite a useful one, is the &lt;em&gt;Orientation&lt;/em&gt; property.&lt;br /&gt;&lt;br /&gt;As you can see in the picture below, you can define the orientation so that text is drawn in one of four positions. The &lt;em&gt;Top&lt;/em&gt;, &lt;em&gt;Left&lt;/em&gt; and &lt;em&gt;Right&lt;/em&gt; positions are easy to imagine being of use in various ways. But the &lt;em&gt;Bottom&lt;/em&gt; orientation is a little harder to justify.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Update_0.gif"/&gt;&lt;br /&gt;&lt;br /&gt;My first excuse for adding upside down text is a feeling of completeness. If you add the other three positions it just does not feel right to miss out the fourth one. The second, and more flimsy excuse, is that my wife is from Oz and so she needs that format to use my library.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(No doubt you will haved spotted the flaw in my argument; the chances of a programmers wife writing any code must be pretty slim. Although one of her Australian relations is bound to find this blog and send me an abusive email)&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;You probably didn't notice on first inspection but the heading control is actually showing multi-line text. This could be really useful in many applications and when you combine this capability with the &lt;em&gt;Orientation&lt;/em&gt; and &lt;em&gt;AutoSize&lt;/em&gt; properties it turns into a handy little control. &lt;br /&gt;&lt;br /&gt;Think of it as a traditional &lt;em&gt;Label&lt;/em&gt; control on steroids.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Creating a Button&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;After creating three simple controls (&lt;em&gt;Panel&lt;/em&gt;, &lt;em&gt;Group&lt;/em&gt; and &lt;em&gt;Heading&lt;/em&gt;) we need to move onto something a little more difficult and certainly more interesting. The one control that everyone loves to create for themselves, the &lt;em&gt;Button&lt;/em&gt;.&lt;br /&gt;&lt;br /&gt;Browse any programmers code site such as &lt;a href="http://www.codeproject.com"&gt;Code Project&lt;/a&gt; or &lt;a href="http://www.codeguru.com"&gt;Code Guru&lt;/a&gt; and you will find a zillion different button implementations. I guess this is the starting place for any new user interface programmer in the same way your first console application is the canonical &lt;em&gt;Hello World!.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;One of great advantages of thinking about the design before coding is that I can reuse almost everything written so far. The separation of &lt;em&gt;Palette&lt;/em&gt;, &lt;em&gt;Renderer&lt;/em&gt;, &lt;em&gt;View&lt;/em&gt;, &lt;em&gt;Control&lt;/em&gt; and &lt;em&gt;Controller&lt;/em&gt; into separate abstractions makes for great reuse possibilities.&lt;br /&gt;&lt;br /&gt;So my &lt;em&gt;Button&lt;/em&gt; control will use exactly the same specification for content as the &lt;em&gt;Heading&lt;/em&gt; control, i.e. an image and two text strings. So creating the basic control outline was quick and easy.&lt;br /&gt;&lt;br /&gt;It was also the first time we needed to add a &lt;em&gt;Controller&lt;/em&gt; to the framework code as this is the first active control that needs to respond to mouse or keyboard input. The &lt;em&gt;ButtonController&lt;/em&gt; implementation just takes the mouse input and decides which palette entries should be used for drawing.&lt;br /&gt;&lt;br /&gt;Here you can see the button in three states.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Update_1.gif"/&gt;&lt;br /&gt;&lt;br /&gt;The left image is the normal button state, the second image the mouse over and finally the far right image is where the mouse is pressing down the button. You cannot see the actual mouse pointer because I used a naff screen capture utility that does not capture it, but you get the idea.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Hidden Depths&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You might think that the control was pretty much down by the look of it. Sadly that is not the case. Although a &lt;em&gt;Button&lt;/em&gt; control sounds very simple it actually has a fair amount of functionality that needs adding that most people don't event think about.&lt;br /&gt;&lt;br /&gt;So now I have to flesh it out by correct handling keyboard support for mnemonics. Provide correct feedback for when it has the focus or when it is the default button on a &lt;em&gt;Form&lt;/em&gt;. Plus it has to implement the standard &lt;em&gt;IButtonControl&lt;/em&gt; interface so it interacts correctly with the rest of the Windows.Forms implementation. And of course it needs to automatically update the &lt;em&gt;DialogResult&lt;/em&gt; of the parent &lt;em&gt;Form&lt;/em&gt; when the user clicks the button.&lt;br /&gt;&lt;br /&gt;Luckily none of these is hard to implement but it does take a little time to knock out the code and test it works as anticipated in the common usage scenarios. &lt;br /&gt;&lt;br /&gt;Well, that is my next few days taken care of.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112143882552855753?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Text For Australians'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112143882552855753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112143882552855753' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112143882552855753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112143882552855753'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/07/microisv-text-for-australians.html' title='microISV, Text For Australians'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112120666951178096</id><published>2005-07-12T22:00:00.000Z</published><updated>2005-07-12T22:17:49.520Z</updated><title type='text'>.NET2, AutoSize</title><content type='html'>&lt;strong&gt;.NET Framework 2&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Version 2 of the .NET Framework is a great improvement for &lt;em&gt;Windows.Forms&lt;/em&gt; developers. Each time I investigate a new area I find some cool new feature that makes life so much easier than before. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Control.DisplayRect&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;My previous technical entry has already mentioned use of the &lt;em&gt;DisplayRect&lt;/em&gt; property as a way of controlling the child space available for positioning children. This is a great feature and without this it would be a real pain to achieve the same effect.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Control.AutoSize&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Now I have noticed another great addition that will save developers time. There is a new &lt;em&gt;Control&lt;/em&gt; property called &lt;em&gt;AutoSize&lt;/em&gt; that does exactly what it says. When defined it will automatically resize the control appropriately.&lt;br /&gt;&lt;br /&gt;For instance, if you create a &lt;em&gt;Button&lt;/em&gt; control instance then the control will size itself to fit the &lt;em&gt;Text&lt;/em&gt; content. Now this might not sound very exciting, but in the past you had a real pain getting a control such as a &lt;em&gt;Button&lt;/em&gt; to size properly.&lt;br /&gt;&lt;br /&gt;For a start you would have to get the &lt;em&gt;Font&lt;/em&gt; used by the &lt;em&gt;Control&lt;/em&gt; and then measure the size of the &lt;em&gt;Text&lt;/em&gt; for that &lt;em&gt;Font&lt;/em&gt;. Then you need to add on a sensible spacing gap around the text and finally add the border allocation. Not rocket science but still a pain to have to write the code.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Header and Button&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Knowing this great new property is available means I want my own controls to provide the same functionality. If a user can take advantage of &lt;em&gt;AutoSize&lt;/em&gt; on a standard windows &lt;em&gt;Button&lt;/em&gt; then they will, quite reasonably, expect my own controls to provide the same functionality.&lt;br /&gt;&lt;br /&gt;As the image from a previous post show, I have completed the simple &lt;em&gt;Header&lt;/em&gt; control for the library. I am now into the process of creating a &lt;em&gt;Button&lt;/em&gt; control that reuses the same rendering process.&lt;br /&gt;&lt;br /&gt;After a little investigation I worked out how to hook into the auto sizing process. It turns out to be really easy and I recommend that anyone else writing a custom control also adds the capability.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;GetPreferredSize&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;All you need to do is override the virtual method called &lt;em&gt;GetPreferredSize&lt;/em&gt; and return from it a &lt;em&gt;Size&lt;/em&gt; instance the is the preferred size you would like your control to be. That's it. Just override that one method and your done.&lt;br /&gt;&lt;br /&gt;This is so simple there is no excuse for not adding it to your own controls.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112120666951178096?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='.NET2, AutoSize'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112120666951178096/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112120666951178096' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112120666951178096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112120666951178096'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/07/net2-autosize.html' title='.NET2, AutoSize'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112094949632487503</id><published>2005-07-09T22:14:00.000Z</published><updated>2005-07-09T22:51:36.333Z</updated><title type='text'>microISV, Strapline Part Deux</title><content type='html'>&lt;strong&gt;Feedback&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Thanks for the great feedback comments.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Do we need a strapline?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;kris&lt;/em&gt; makes a good point by asking if a strapline is actually necessary? I assumed that just because most other companies have one that I should as well. Obviously that is not a good reason, but having thought about this more carefully I have come to the conclusion that actually it is a good idea. It's a good way to get across a simple fundamental message about the company.&lt;br /&gt;&lt;br /&gt;When visiting a website I tend to notice the logo and associated strapline first of all. Then my eyes scan downwards to the actual content of the page, skinning over the headlines to see what the content is all about.&lt;br /&gt;&lt;br /&gt;So in the worst case people just ignore the strapline, in which case it has caused no harm by being present. In the best case it gets across a simple message I want to convey. This is a no lose situation.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What is the message?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So I guess I need to ask myself what is the message I want to get across to the website visitor. Well I am very clear on what I would like to say. We produce a premium set of visual components that will save your business time and money.&lt;br /&gt;&lt;br /&gt;But we need to be careful about putting ideas like saving money or time in the strapline. Just about every company is going to claim they save time and money with their product and so the message is too generic. It needs to be specific.&lt;br /&gt;&lt;br /&gt;Looking at the suggestions and working from the ones I like, my new list of candidates comes out like this...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Component Factory&lt;/strong&gt;&lt;br /&gt;Making you look good.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Component Factory&lt;/strong&gt;&lt;br /&gt;We build components. You build solutions.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Component Factory&lt;/strong&gt;&lt;br /&gt;Passionate about your looks.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Component Factory&lt;/strong&gt;&lt;br /&gt;Creating components so you don't have to.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Component Factory&lt;/strong&gt;&lt;br /&gt;Tools that extend your potential.&lt;br /&gt;&lt;br /&gt;My current favorite is the second one, because it indicates our position in the value chain. We create the components, the building blocks that the customers use to create a full solution.&lt;br /&gt;&lt;br /&gt;If you have any more ideas or better variations then let me know!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112094949632487503?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Strapline Part Deux'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112094949632487503/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112094949632487503' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112094949632487503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112094949632487503'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/07/microisv-strapline-part-deux.html' title='microISV, Strapline Part Deux'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112076481644348783</id><published>2005-07-07T19:18:00.000Z</published><updated>2005-07-07T19:33:36.450Z</updated><title type='text'>microISV, Need a Strapline</title><content type='html'>All companies have a strapline to go with their company logo and company name. The idea, I assume, is to sum up the philosophy of the company or maybe the type of product or service it offers. &lt;br /&gt;&lt;br /&gt;Something short that embodies the whole concept of the company can make it quick and easy for new comers to the website to understand what it is they do. Here are a few examples from software companies that operate in the same market as our microISV.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Infragistics&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Powering The Presentation Layer&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pure Components&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Components...Pure And Simple&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ComponentOne&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;More Tools. Endless Possibilities&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Developer Express&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Improving the Developer Experience&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;So, I need my own strapline for &lt;em&gt;Component Factory&lt;/em&gt;. As a company we are going to produce user interface controls in order to make the customers applications look professional. They are intended to be a premium level product that speeds up project schedules by being quick and easy to use but also provide a high level of flexibility.&lt;br /&gt;&lt;br /&gt;So far I have only come up with one candidate. Here we go...&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Component Factory&lt;/strong&gt;&lt;br /&gt;&lt;em&gt;Making You Look Good&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Not sure if it sounds a bit cheesy. But it indicates straight away that we aiming to make your application look good and could also be taken to mean that the developer will look good for creating such a great appearance very quickly.&lt;br /&gt;&lt;br /&gt;Think you can do better? I hope so, lets hear your ideas!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112076481644348783?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Need a Strapline'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112076481644348783/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112076481644348783' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112076481644348783'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112076481644348783'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/07/microisv-need-strapline.html' title='microISV, Need a Strapline'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112060105702971743</id><published>2005-07-05T21:30:00.000Z</published><updated>2005-07-05T22:10:42.986Z</updated><title type='text'>microISV, Coding Progress</title><content type='html'>&lt;strong&gt;New Controls&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It's been almost two weeks since I last posted any pictures of coding progress. Progress was slowed because I spent a couple of days on a marketing course and then another couple of evenings making changes to my existing company website in order to implement some ideas that came from the course.&lt;br /&gt;&lt;br /&gt;But now I am back into full coding mode again and so here is the state of play as of today. We now have three different controls in our little toolkit. If you look at the image below you can see examples of all three.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Professional Renderer&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Header_0.gif" border="1" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;All of the above controls are drawn with the default settings using our single renderer currently in the toolkit. This is called the &lt;em&gt;Professional&lt;/em&gt; renderer and is intended to mimic the look and feel of the &lt;em&gt;Microsoft Office&lt;/em&gt; line of products. &lt;br /&gt;&lt;br /&gt;Most users are accustomed to this appearance and so the majority of business applications want to replicate it in their own applications. By making their own programs look familiar to customers it is likely to help customers believe the corporate application is as professional as &lt;em&gt;Microsoft&lt;/em&gt; programs.&lt;br /&gt;&lt;br /&gt;The first control on the left is the &lt;em&gt;Panel&lt;/em&gt; control and is intended to be used as the background filler for the client area of the application. In our case it is a simple light blue color. &lt;br /&gt;&lt;br /&gt;The middle control is the &lt;em&gt;Group&lt;/em&gt; control and it provides a border and background appearance for a control container. This is similar to what you might see in &lt;em&gt;Microsoft Outlook&lt;/em&gt;, where the contents are a preview of an email message.&lt;br /&gt;&lt;br /&gt;Finally our newest control is called &lt;em&gt;Header&lt;/em&gt; and as the name suggest is intended to be useful for providing a heading for other content on the user's page. Our header control can have three pieces of information displayed, an image, a primary piece of text and a secondary piece of text. All three pieces are optional and can be aligned against different edges. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Text Rendering&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;We use the same technique for drawing the text strings as we used previously for drawing the border and background elements. So you can use solid as well as gradient color effects on the text itself. Here is an example with large text so it is easy to see the color effect in action.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Header_1.gif" border="1" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;I did not need to write lots of new code for the rendering, I could completely reuse the existing code for creating an appropriate &lt;em&gt;Brush&lt;/em&gt; for painting the text area. &lt;br /&gt;&lt;br /&gt;In a previous post I showed how I had added the ability to provide an image for drawing the border and background. This has also been reused and so here is an example where an image is used to paint the text.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Header_2.gif" border="1" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;It only took about 30 seconds to create the following header instance with some interested color gradient effects in the border, background and the text itself. Although a little over the top for actual use it shows the potential for creating some cool looking design very quickly.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/Header_3.gif" border="1" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Next Step&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Although the basics of the &lt;em&gt;Header&lt;/em&gt; control are working I still need to flesh out the functionality before it is completed. I need to investigate the ability to auto size the control based on the content, add extra appearance settings so when it is disabled it has a disabled look and feel.&lt;br /&gt;&lt;br /&gt;It also needs to handle the &lt;em&gt;RightToLeft&lt;/em&gt; setting so international users get the reversed ordering they would expect. Small details like this tend to take up much of the development effort.&lt;br /&gt;&lt;br /&gt;Oh well, back to the keyboard...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112060105702971743?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Coding Progress'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112060105702971743/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112060105702971743' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112060105702971743'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112060105702971743'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/07/microisv-coding-progress.html' title='microISV, Coding Progress'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-112016506604725225</id><published>2005-06-30T19:39:00.000Z</published><updated>2005-06-30T21:30:20.156Z</updated><title type='text'>microISV, Internet Marketing</title><content type='html'>&lt;strong&gt;Marketing Course Evaluation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The second day of the marketing course covered several areas including: the creation of a good press release; how to get free PR; establishing joint ventures; and Internet marketing. &lt;br /&gt;&lt;br /&gt;All of the material was of a high standard and well thought out and I really enjoyed the whole course. Much of the useful information was given with case studies from the presenter's actual clients along with little stories and small details that really showed in depth how an interesting idea can be worked out in a real life business.&lt;br /&gt;&lt;br /&gt;As with most areas of business, and indeed life in general, most of the good advice is actually just well thought out common sense. This is not a get-rich-quick style scheme and you left the course with a marketing plan for your business covering actions to take over the next few months.&lt;br /&gt;&lt;br /&gt;I doubt that anything presented was actually completely new to the world of marketing but when you're starting out from ground zero, as I am, it was a great way to learn how to create a proper marketing plan and a systematic approach. No more random ideas that you try out, instead you're deliberately dedicating time to a proper plan.&lt;br /&gt;&lt;br /&gt;Here is a link to his website &lt;a href="http://www.cardellmedia.co.uk"&gt;Chris Cardell&lt;/a&gt; and I suggest you sign up to his newsletter that will give you some free tips for the first few weeks. Of course, he uses all this own tips and advice in marketing his own website!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Too Good to be True&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;If an advertising outlet, such as a trade magazine, contacted you and offered the oppourtunity to reach a group of people interested in your product, would you be interested? They also provide a guarantee so you only pay if the people actually express an interest in your offering. Of course you would think this is great. In reality it never happens, you try getting MSDN magazine to guarantee a response to your advert!&lt;br /&gt;&lt;br /&gt;But just imagine if you could get that kind of deal. No more spending a lump sum on a magazine advert with no idea if it really does get to the people you are interested in. No idea if they actually show an interest by visiting your website. That is the difference between pay-per-click advertising and traditional trade magazine adverts.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Pay-per-Click&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So the first strategy for Internet marketing is to ensure that you direct your target audience to your website using pay-per-click on Google. Of course, using the advice from the previous marketing post you would start very small and carefully. You would start by using a small daily budget and keep split testing your advert.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Split Testing&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You should always have two versions of your advert on Google that differ by only one small detail. For example, your first advert is in traditional English format and your second is identical except you use capital letters at the start of each word. Even such a small detail can make a big difference to the click through rate.&lt;br /&gt;&lt;br /&gt;After a few days you compare the click through rates of both adverts and then throw away the worst performer. Then you create another new advert and vary it from your best advert so far by just one factor. By constantly varying just one small detail you are constantly trying to improve the click through rate.&lt;br /&gt;&lt;br /&gt;This is important because how high up your advert appears is dependant not just on how much your willing to spend on the advert but also the number of click throughs. About 50% of the ranking is determined by the click through rate and so pushing this up higher will save money and improve the number of visitors to your site.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Email Marketing&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You should make a strong effort to get the email address of every visitor to your website. Not because you want to spam them, because we all know how annoying that is, but because it is much harder to get a completely new customer than communicate and sell to an existing one.&lt;br /&gt;&lt;br /&gt;If you offer a demo version of your product get the visitors email and send them a link to download it, rather than just giving the link straight away. Then you can follow up in the future. After a few days you can ask the potential customer for their feedback. &lt;br /&gt;&lt;br /&gt;At the very least this is useful in finding out what features are missing or putting off the visitors from buying. That is great information for helping you to improve your product. Asking existing customers what they think of the product is less useful because it obviously already meets their needs, otherwise they would not have bought it! But getting feedback from those that almost bought the product is of fantastic value and almost impossible to get from any other means.&lt;br /&gt;&lt;br /&gt;Of course you can also use the emails to send them special offers in the future so they do not miss out on new products you release or temporary price reductions. I would also suggest that you ensure it is easy for them to unsubscribe and never give their email to any other organisation. You're trying to establish a good quality relationship with them.&lt;br /&gt;&lt;br /&gt;If you do not have a demo or trial download then think about creating some useful information to give away for free. Give them a report or set of articles that has value to them and would entice them to supply an email address for them to be delivered. The key point is you have to give them something of real value in return for them being willing to let you communicate with them. The more value you can supply then the more likely they are to take you seriously and be interested in reading your other emails. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Auto-responders&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Before the course I had already heard of software to handle lists of subscribers. Just the sort of software needed to automate the process as described above. But I did not realise how easy it was to setup an auto responder for email marketing.&lt;br /&gt;&lt;br /&gt;For example, your website visitor is interested in your product and would like to download the demo to test it out. So they enter their email address and press the Submit button. Their email address is automatically added to an email list and they immediately get a auto response email with instructions on how to download the demo.&lt;br /&gt;&lt;br /&gt;The clever part is that the auto responder is set up to automatically send a follow up email to them after a certain number of days. So you configure the list to send a second email two days latter asking them to fill in a simple online feedback form to let you know what they think of the trial product. &lt;br /&gt;&lt;br /&gt;Then after another two days you could send them a free article that describes more advanced features that they would then be able to make use of, now they are more familiar with the software. Finally you might then send a last email 10 days after the original download and offer them a 10% discount if they buy in the next week.&lt;br /&gt;&lt;br /&gt;This sequence of emails and the delay between them is set up by you and then just works without any intervention. If you have 1000 requests for the download each month can you imagine the work involved in doing that manually? Crazy. But with an auto responder costing maybe $100 to buy it all happens completely automatically.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Automation, The microISV Friend&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The technology behind an auto responder is of course trivial but it is the fact you can automate the process that is so useful to us microISV businesses. Working on your own or maybe just in your spare time you have to automate absolutely everything that you can. Time is the one thing we do not have much off. (As well as money or enough customers!) &lt;br /&gt;&lt;br /&gt;It does not get much better than the following in terms of marketing...&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Let pay-per-click gather new visitors&lt;br /&gt;Let your website gain their interest&lt;br /&gt;Let the download page gather the email address &lt;br /&gt;Let the auto responder communicate with the visitor&lt;br /&gt;Let a third party handle the ecommerce sale&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;You sit at your computer and write the code and the automated system handles the majority of the heavy lifting. Of course you need to spend some time each week keeping an eye on the system and tweaking it to gain the best results.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Too Good to be True&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Just think, one night you will be fast asleep and someone on the opposite side of the world will travel through the entire automated system and buy your software. Now imagine you had told someone 10 or 15 years ago about this scenario. Add into the mix that you have almost no budget to spend and you only had to sit in your study, what would they say? They would say it was too good to be true.&lt;br /&gt;&lt;br /&gt;Now tell me the Internet is not amazing!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-112016506604725225?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Internet Marketing'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/112016506604725225/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=112016506604725225' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112016506604725225'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/112016506604725225'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/microisv-internet-marketing.html' title='microISV, Internet Marketing'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111998705203550575</id><published>2005-06-28T19:16:00.000Z</published><updated>2005-06-28T20:54:21.690Z</updated><title type='text'>microISV, Marketing - The 5 Rules</title><content type='html'>&lt;strong&gt;The Two Sides of a MicroISV&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;To be a successful microISV we need to achieve two things. First of all we need to be good at innovation. If we cannot come up with a great idea and write the code to make it happen then we do not have a product to sell. &lt;br /&gt;&lt;br /&gt;Creating an average product in a crowded marketplace is not a great recipe for sales. So we need to innovate in some way. It doesn't have to be the next killer application like VisiCalc but it has to be a compelling solution to a problem that people have.&lt;br /&gt;&lt;br /&gt;I think this half of the microISV equation comes quite easily to most developers. We love to write code and we always think we can do it better than anyone else. Plus we are always full of ideas of some cool product we would love to create. So usually the innovation side is where we get started.&lt;br /&gt;&lt;br /&gt;The second half of success is marketing. That forgotten half that most of us don't even think about until the product is already fully written. This includes me, the first product I wrote had no marketing strategy for at least the first 18 months of being sold!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Learn, Learn, Learn&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I was thinking about this issue a few weeks ago and wondering how to handle marketing for the components I will be creating over the coming months. Then it struck me that I should solve the problem in the same way I would a technical problem. &lt;br /&gt;&lt;br /&gt;If I need a new skill, such as learning a computer language, then I go on a training course. Why should learning a new skill like marketing being any different? So that is exactly what I have organized. Today I went on the first day of a two day marketing course that has a particular focus on Internet marketing.&lt;br /&gt;&lt;br /&gt;Rather than hog this information to myself I will post about the interesting points covered relevant to our situation. There is far too much detail to write up everything from the first day in one go, but we can start with the overview of the successful marketing process. (His claim, not mine!)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Five Golden Rules&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;em&gt;1. Purpose of your business&lt;/em&gt;&lt;br /&gt;&lt;em&gt;2. The three ways to grow your business&lt;/em&gt;&lt;br /&gt;&lt;em&gt;3. Create multiple pillars of marketing&lt;/em&gt;&lt;br /&gt;&lt;em&gt;4. Test and measure&lt;/em&gt;&lt;br /&gt;&lt;em&gt;5. Calculate your customers true value&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Lets have a look in more details at each area in turn.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;1. Purpose of your business&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;You probably think that the purpose of any business is to make money for the shareholders and especially so if your one of the shareholders yourself! But there is actually only one purpose that all really successful businesses have. Namely the desire to add value to the lives of their customers. &lt;br /&gt;&lt;br /&gt;In fact not just a desire to add value but an absolute passion for it. You need to have the mindset of wanting to create incredible value for your customers and then the profits will take care of themselves.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;2. The three ways to grow your business&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;There are only three ways to grow your business. You can increase the number of customers. You could increase the average spend from each customer and last of all you can increase the frequency that each customer buys from you.&lt;br /&gt;&lt;br /&gt;In fact you should be trying to increase all three at the same time. If you can increase your number of customers by 10%, and the average spend of customers by 10% and finally the buying frequency by 10% then your overall revenue goes up by an impressive 33%. Each individual 10% increase does not seem impossible to achieve but it is the cumulative effect that can make a really big difference.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;3. Create multiple pillars of marketing&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Most businesses rely on just one or maybe two different pillars of marketing. They use just advertising or maybe just direct mail to achieve sales. Instead you should ensure that you deliberately create and use multiple marketing pillars.&lt;br /&gt;&lt;br /&gt;So investigate advertising, direct mail, telephone sales, referrals, pay per click, email, PR and joint ventures. Have a deliberate policy of trying out new marketing methods on a regular basis to reach more potential customers.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;4. Test and measure&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;The vast majority of advertising and indeed marketing is a waste of money. In order to avoid wasting money you have to ensure that you can test and measure every aspect of your marketing.&lt;br /&gt;&lt;br /&gt;If you place an advert on a website, then ensure you can measure the number of visitors this brings to your site. Even more important, make sure you can measure the number of sales this generates. Everything from each advert to each email campaign must be measurable. &lt;br /&gt;&lt;br /&gt;Only then can you decide if the cost justified the resultant sales, and it also allows comparisons. You try one advert with a particular headline and you make 5 sales from it. Next month you do exactly the same but with a different headline and see what sales that generates. This way you can refine and improve the effectiveness of your marketing and constantly try out new ideas to find what does and does not work.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;5. Calculate your customers true value&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;This calculation is integral to helping with step 4. You need to work out how much each new customer is worth in revenue to your business. So for example, an average customer buys three products from you over a period of three years and that equates to $600 in revenue.&lt;br /&gt;&lt;br /&gt;Using this figure you can calculate if a marketing approach is worthwhile. If an advert on a website generates 3 new customers then you know that the value to you (on average) is $600 per customer or $1800 overall. But if the cost of the advert itself was only $1000 then you know it is worth doing again and again. &lt;br /&gt;&lt;br /&gt;This total value of a customer is important and not just the initial revenue they create. Your new customer might only make a single purchase in the first month and so only be worth an initial $200 to you. Multiply that by 3 new customers and it looks like your $1000 advert is only returning $600 in revenue. But from analysis of your customer buying patterns you know that over the full three years that the average customers stays with you it will actually pay off.&lt;br /&gt;&lt;br /&gt;Without knowing the true value of your average customer you cannot make intelligent decisions about what will and will not pay for itself in terms of your marketing spend.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Summary&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is really just a simple overview and does not provide the interesting stories and case studies that were the real heart of the presentation today. For me the really interesting points were 2, 4 and 5. &lt;br /&gt;&lt;br /&gt;Make sure you can measure, or at least roughly estimate, the value of each new customer. From that you can carefully test new marketing ideas and measure the effectiveness. Try each new idea on small scale and only when you know it is working do you then scale it up to achieve the big effect.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111998705203550575?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://componentfactory.blogspot.com' title='microISV, Marketing - The 5 Rules'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111998705203550575/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111998705203550575' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111998705203550575'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111998705203550575'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/microisv-marketing-5-rules.html' title='microISV, Marketing - The 5 Rules'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111956143243729050</id><published>2005-06-23T20:39:00.000Z</published><updated>2005-06-23T21:18:44.080Z</updated><title type='text'>microISV, Supporting Images</title><content type='html'>&lt;strong&gt;Adding Image Support&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;At the end of the last post I was about to add support for showing images over the border and background areas of the &lt;em&gt;Group&lt;/em&gt; control. The &lt;em&gt;Group&lt;/em&gt; control is our first control under development and is deliberately simple in order to allow the development of the basic framework code. &lt;br /&gt;&lt;br /&gt;I only managed to get the image support finished today which is a little longer than I anticipated. Not because the changes were that difficult but the heatwave here in England has made if difficult to get motivated in the evenings. After a day slogging away at an office without air conditioning you feel pretty wacked out by the time you get home. And of course, the only time I have to work on &lt;em&gt;Component Factory&lt;/em&gt; is my evenings and weekends.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Image Styles&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;In the following picture you have two instances of the &lt;em&gt;Group&lt;/em&gt; control where an image has been specified for the background appearance. The left instance has specified an image style of &lt;em&gt;Tile&lt;/em&gt;, hence the picture of a business man is repeated over the background area. The second instance has the same image but a style of &lt;em&gt;Stretch&lt;/em&gt; and so the image is stretched to fit whatever the background space happens to be.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/image_0.gif"&gt;&lt;br /&gt;&lt;br /&gt;Of course, you can also do the simple stuff you would expect like place the image in the middle of the background area or the top left or the bottom right and so forth. The first of the pictures below shows the businessman this time placed in the center. &lt;br /&gt;&lt;br /&gt;Of more interest is the second picture where the image is tiled over the background but this time using the &lt;em&gt;TileXY&lt;/em&gt; style setting. This means that each time the image is repeated over the X or Y axis it is flipped. Strange though this sounds it is actually very useful for tiling images you want to appear as smooth wallpapers.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/image_1.gif"&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Alpha Channels&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You can use exactly the same features on the border instead of the background, or even apply one image for the border and another for the background. The two pictures below have deliberately large borders so you can more easily see what is happening.&lt;br /&gt;&lt;br /&gt;Another point worth remembering is that using &lt;em&gt;PNG&lt;/em&gt; files means you can have an alpha transparency key allowing the image to overlay but still show the color behind it.&lt;br /&gt;&lt;br /&gt;If you look at the second of the two pictures below you will see that the background and the border have been defined with gradient color ranges. Then on top of these colors we are then applying images that come from &lt;em&gt;PNG&lt;/em&gt; files. So the mobile phone and post-it note pictures are allowing the gradient colors to show through where they are defined as transparent.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/image_2.gif"&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Next Step&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;You can imagine that with some experimentation it should be possible to use the color gradient capability and image overlay to achieve a wide varity of look and feels.&lt;br /&gt;&lt;br /&gt;My next step is to spend a little time creating a proper &lt;em&gt;Professional&lt;/em&gt; palette instead of my simple test implementation. This one needs to give the same look and feel as the &lt;em&gt;Microsoft Office 2003&lt;/em&gt; applications. So it needs to use the same blue, green or silver set of colors depending on the windows theme chosen.&lt;br /&gt;&lt;br /&gt;This is important as the majority of business customers will want to create applications that have the same style of appearance as &lt;em&gt;Microsoft&lt;/em&gt; standard application like &lt;em&gt;Outlook&lt;/em&gt;, &lt;em&gt;Excel&lt;/em&gt; and &lt;em&gt;Word&lt;/em&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111956143243729050?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Supporting Images'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111956143243729050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111956143243729050' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111956143243729050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111956143243729050'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/microisv-supporting-images.html' title='microISV, Supporting Images'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111887025471595101</id><published>2005-06-20T22:33:00.000Z</published><updated>2005-06-20T21:34:03.043Z</updated><title type='text'>microISV, First Code</title><content type='html'>&lt;strong&gt;First Code&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;After spending so long dealing with domain names and logos I've been itching to get my hands dirty and actually start coding. So it's been a relief to spend the last week getting stuck in and I've created a shed load of code. (For non-techies I will point out that &lt;em&gt;shed load&lt;/em&gt; is the technical term for &lt;em&gt;quite alot&lt;/em&gt;)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Basic Design Outline&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;I now have a collection of simple base classes and the framework code that makes it all hang together. The basic design is very simple. My control has a &lt;em&gt;Palette&lt;/em&gt;, &lt;em&gt;Renderer&lt;/em&gt; and &lt;em&gt;View&lt;/em&gt;. The &lt;em&gt;Palette&lt;/em&gt; acts as a source for providing colors and fonts to the &lt;em&gt;Renderer&lt;/em&gt; that knows how to actually draw in a particular style. The &lt;em&gt;View&lt;/em&gt; is a hierarchy of visual elements that know how to position and size themselves and then call onto the &lt;em&gt;Renderer&lt;/em&gt; when they need drawing. In the future I will be adding a &lt;em&gt;Controller&lt;/em&gt; that knows how to handle user interaction such as mouse and keyboard handling.&lt;br /&gt;&lt;br /&gt;The advantage of splitting these areas into their own implementations is that we can then vary them against each other. We could select a different &lt;em&gt;Palette&lt;/em&gt; to shift from the standard system color to an alternative fixed color scheme. A different &lt;em&gt;Renderer&lt;/em&gt; could be created that draws in a completely different style. These different areas can be independently varied and overridden by the developer as needed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Group Control&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The first control I have created is the about the simplest I could think of that would actually be useful in the future, the &lt;strong&gt;Group&lt;/strong&gt; control. This control is capable of drawing a border and background in the control client area and then positioning any child controls inside the border. Pretty simple stuff. Think of it as a &lt;em&gt;GroupBox&lt;/em&gt; but without the ability to even draw a text header!&lt;br /&gt;&lt;br /&gt;For the border you can define the width as well as how rounded the corners should be. Here is a picture of the control with solid colors defined, the first instance with no rounding on the corners and the second with a setting of 11 pixels.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/kGroup_1.gif"&gt;&lt;br /&gt;&lt;br /&gt;As well as solid colors you can also define a gradient color effect so that the border and/or background merges from one color to another. There are a variety of different merge settings but here is a picture of the simplest.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/kGroup_2.gif"&gt;&lt;br /&gt;&lt;br /&gt;In practice you would place one or more controls inside the group and use the &lt;em&gt;Group&lt;/em&gt; control to provide a consistent border and background with the rest of your application. Here are three simple examples I created in the designer within a couple of minutes.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/kGroup_3.gif"&gt;&lt;br /&gt;&lt;br /&gt;Obviously this control is not very exciting but it did allow me to create the framework around it and be able to debug quickly and easily. In fact I quickly did a scan of the code with a line counter just out of interest.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Line Count&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The framework classes consist of 6867 lines of code and the &lt;em&gt;Group&lt;/em&gt; control itself a mere 254 lines. This is a pretty impressive number of lines written in one week, until you realise it is really just counting carriage returns. So that is the total number of lines and many of those are white space, comments and file headers.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Next feature?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;My next step is to allow the display of images over the border and/or background instead of just colors. This would then allow the developer to drop the &lt;em&gt;Group&lt;/em&gt; control onto a design surface and just use properties to define either solid colors, gradient color effects or images.&lt;br /&gt;&lt;br /&gt;Is there anything else that you think should be standard that the developer can alter with properties on the border or background?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111887025471595101?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, First Code'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111887025471595101/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111887025471595101' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111887025471595101'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111887025471595101'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/microisv-first-code.html' title='microISV, First Code'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111903299509566388</id><published>2005-06-17T18:28:00.000Z</published><updated>2005-06-17T19:48:50.000Z</updated><title type='text'>.NET2, Creating a GroupBox</title><content type='html'>&lt;strong&gt;Traditional GroupBox&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;The first control we need to create for our &lt;em&gt;Navigator&lt;/em&gt; project is very similar to the traditional &lt;em&gt;GroupBox&lt;/em&gt; that comes with the framework. Just like that control we need ours to draw a border around the control area and allow any contained controls to be positioned inside that border.&lt;br /&gt;&lt;br /&gt;Here we can see the traditional &lt;em&gt;GroupBox&lt;/em&gt; control with a single &lt;em&gt;Button&lt;/em&gt; positioned inside it.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/GroupBox_1.gif"&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Positioning child controls&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;One of the great features introduced by version 1 of the framework is the &lt;em&gt;Dock&lt;/em&gt; property. If the developer decides to assign &lt;em&gt;DockStyle.Fill&lt;/em&gt; to the button then it will automatically size to fill the available area, like this.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/GroupBox_2.gif"&gt;&lt;br /&gt;&lt;br /&gt;This is useful because whenever the &lt;em&gt;GroupBox&lt;/em&gt; is resized the &lt;em&gt;Button&lt;/em&gt; willl automatically be resized to fill the available space. Unfortunately in version 1 of the framework there is no property that can be modified to inform the control to layout child controls within a particular area. So I was expecting to have to write a fair amount of code to get around this seemingly simple requirement.&lt;br /&gt;&lt;br /&gt;I was going to get around the problem by creating a child &lt;em&gt;Panel&lt;/em&gt; in the correct area and then letting the user design onto that panel instance. That way any &lt;em&gt;Dock&lt;/em&gt; property settings they use would be effective against the panel and not the whole custom control.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;.NET 2 Comes to the rescue&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Luckily for us it seems the &lt;em&gt;Microsoft&lt;/em&gt; developers realized this difficulty and have introduced a new property called &lt;em&gt;DisplayRectangle&lt;/em&gt; in version 2 of the framework. This property returns the rectangle that should be used to layout the child controls within the control.&lt;br /&gt;&lt;br /&gt;So all we need to do is override this virtual public property. There is one small complication that needs to be remembered though. Another new property introduced in version 2 of the framework is called &lt;em&gt;Padding&lt;/em&gt;. This defines how far to inset the child controls when they are layed out. We need to make sure that our override honors this property.&lt;br /&gt;&lt;br /&gt;So we end up with some code like the following in order to provide a 10 pixel border on all except the top edge that is given 20 pixels.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;public override Rectangle DisplayRectangle&lt;br /&gt;{&lt;br /&gt;   get&lt;br /&gt;   {&lt;br /&gt;      // Grab the total client size&lt;br /&gt;      Size s = ClientSize;&lt;br /&gt;&lt;br /&gt;      // Find the control defined padding&lt;br /&gt;      Padding p = Padding;&lt;br /&gt;&lt;br /&gt;      // Return the display rectangle&lt;br /&gt;      return new Padding(p.Left + 10,&lt;br /&gt;                         p.Top + 20,&lt;br /&gt;                         s.Width - p.Horizontal - 20,&lt;br /&gt;                         s.Height - p.Vertical - 30);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;This is one of things I love about the .NET framework, I often find that when I want to solve a problem the designer have already package up a nice simple solution for me!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111903299509566388?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='.NET2, Creating a GroupBox'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111903299509566388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111903299509566388' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111903299509566388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111903299509566388'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/net2-creating-groupbox.html' title='.NET2, Creating a GroupBox'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111887220800483235</id><published>2005-06-15T21:17:00.000Z</published><updated>2005-06-17T19:49:59.363Z</updated><title type='text'>.NET2, Transparent controls</title><content type='html'>&lt;strong&gt;Technical posts start with .NET2&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As I have now started coding I intend to feedback any useful technical discoveries as I go along. Hopefully this will help others save a little time in their own projects. You will have noticed the name of the post has &lt;em&gt;.NET2&lt;/em&gt; at the beginning instead of the usual &lt;em&gt;microISV&lt;/em&gt;. If your not interested in C# and .NET 2.0 then I guess you would skip these posts.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Rounded corners need to be transparent&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Today I came across a tricky problem. I need my control to draw a rounded border inside the edge of the control. This is easy enough to draw, but it does mean that I end up with a small area outside of the border in the wrong color. &lt;br /&gt;&lt;br /&gt;Imagine I have a Form with a gradient effect background and then I draw my control. The area outside of the rounded corner is not going to be drawn correctly. It will be the solid &lt;em&gt;BackColor &lt;/em&gt;of the control and not the gradient effect of the parent Form.&lt;br /&gt;&lt;br /&gt;The obvious solution, and so what I tried first, was to set the &lt;em&gt;BackColor &lt;/em&gt;of the control to be &lt;em&gt;Color.Transparent&lt;/em&gt;. To make this work you also need to set the control style to be &lt;em&gt;ControlStyles.SupportsTransparentBackColor&lt;/em&gt; in the control constructor. &lt;br /&gt;&lt;br /&gt;This I duly did and hay presto, it works like a treat. Problem solved, so I move onto another task and think no more about it.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Child controls inherit BackColor&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As my control acts like a container, in the same way as a &lt;em&gt;GroupBox&lt;/em&gt; does, I was testing it by placing a couple of &lt;em&gt;Button&lt;/em&gt; controls inside it. You can probably guess what happened. The &lt;em&gt;Button&lt;/em&gt; controls inherit the &lt;em&gt;BackColor&lt;/em&gt; from my control and so they now have a transparent background.&lt;br /&gt;&lt;br /&gt;This is definitely not a good thing and it looks truly horrific.&lt;br /&gt;&lt;br /&gt;So now I am stuck because I need the &lt;em&gt;BackColor&lt;/em&gt; to be transparent to let the parent background show through. But I cannot set the &lt;em&gt;BackColor&lt;/em&gt; to be transparent because it will be inherited by child controls.&lt;br /&gt;&lt;br /&gt;There are only two possible solutions that I can think of. If I assign transparent to the &lt;em&gt;BackColor&lt;/em&gt; then I need to detect any child control added and force its &lt;em&gt;BackColor&lt;/em&gt; to be a value from the parent of my own control. This sounds a bit tricky to make sure it works in all circumstances.&lt;br /&gt;&lt;br /&gt;The alternative is to leave the &lt;em&gt;BackColor&lt;/em&gt; property alone but modify my painting routine so it paints as if the property was defined as transparent. This sounds like a much better solution because it localizes the fix in my own code.&lt;br /&gt;&lt;br /&gt;So how do we manage to paint the transparent areas? &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Reflector&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;This is where the brilliant &lt;a href="http://www.aisto.com/roeder/dotnet/"&gt;Reflector&lt;/a&gt; tool written by Lutz Roeder comes in handy. If you have never used it then I suggest you download and install it straight away. It allows you to browse through any assembly, including the framework ones, and decompile the IL code to see how it works.&lt;br /&gt;&lt;br /&gt;After snooping around for about 10 minutes I manage to find the code that does the drawing of the background when the background is defined as transparent. Looking at this code it is actually very simple to create my own version that is called from my &lt;em&gt;OnPaint&lt;/em&gt; override.&lt;br /&gt;&lt;br /&gt;Let me save you the trouble of doing this yourself. Call the following routine to draw the parent over the control when the &lt;em&gt;OnPaint&lt;/em&gt; event is overridden.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;&lt;pre&gt;&lt;br /&gt;private void PaintParentBackground(PaintEventArgs e)&lt;br /&gt;{&lt;br /&gt; if (Parent != null)&lt;br /&gt; {&lt;br /&gt;  Rectangle rect = new Rectangle(Left, Top, &lt;br /&gt;                                 Width, Height);&lt;br /&gt;&lt;br /&gt;  e.Graphics.TranslateTransform(-rect.X, -rect.Y);&lt;br /&gt;&lt;br /&gt;  try&lt;br /&gt;  {&lt;br /&gt;   using (PaintEventArgs pea = &lt;br /&gt;               new PaintEventArgs(e.Graphics, rect))&lt;br /&gt;   {&lt;br /&gt;    pea.Graphics.SetClip(rect);&lt;br /&gt;    InvokePaintBackground(Parent, pea);&lt;br /&gt;    InvokePaint(Parent, pea);&lt;br /&gt;   }&lt;br /&gt;  }&lt;br /&gt;  finally&lt;br /&gt;  {&lt;br /&gt;   e.Graphics.TranslateTransform(rect.X, rect.Y);&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt; else&lt;br /&gt; {&lt;br /&gt;  e.Graphics.FillRectangle(SystemBrushes.Control, &lt;br /&gt;                           ClientRectangle);&lt;br /&gt; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Victory is mine!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;So there you have it. The &lt;em&gt;OnPaint&lt;/em&gt; override calls the above routine so that the entire control is initially painted with the appearance of the parent. Then I continue as normal and draw my rounded border, or any other shape I fancy, and the areas I decide not to paint look correct.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111887220800483235?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='.NET2, Transparent controls'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111887220800483235/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111887220800483235' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111887220800483235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111887220800483235'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/net2-transparent-controls.html' title='.NET2, Transparent controls'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111870192595012200</id><published>2005-06-13T21:50:00.000Z</published><updated>2005-06-13T22:32:05.956Z</updated><title type='text'>microISV, The Product Concept</title><content type='html'>&lt;strong&gt;Building the Foundation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As already mentioned in a post right back at the start of the blog, I already have a pretty clear idea of what the first three product components will be. Our first component is actually quite simple in concept and so don't expect it to blow your socks off!&lt;br /&gt;&lt;br /&gt;Although simple it is an essential building block needed for the second and third components that will be built on top of it. So it provides the foundation for the rest of the component suite. Not just as a reusable component but also by providing helper classes and base implementations that can be reused later on.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Classic Controls&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;After working with several different user interface libraries you being to notice that there are several custom controls that obviously are conceptually related. Yet, to my surprise, they have never been built from the same base class or using the same fundamental building blocks. This makes it difficult to interoperate between them.&lt;br /&gt;&lt;br /&gt;Think about the classic TabControl. This allows the user to navigate around a set of pages in a random manner. They can click from page to page by using the appropriate tab header. Now think about the classic Wizard dialog. Again the the user can navigate around a set of pages, but this time in a linear fashion. Another more recent control is the Outlook bar from Microsoft Outlook 2003. Here you can select pages at random by using the large square buttons at the bottom of the control.&lt;br /&gt;&lt;br /&gt;Really these are all just controls that allow the user to define a set of display pages and then provide different user interfaces for moving between them. So our first component is going to be called the &lt;em&gt;Navigator&lt;/em&gt; and do just that, give a variety of user interface mechanisms to move around pages.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The Navigator&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Having a component capable of providing many navigation interfaces has several key advantages. With other libraries you might create a TabControl with a set of TabPage instances. But if user feedback indicates you need to change over to a Wizard you cannot just copy across the TabPage instances. The chances are your Wizard component has a completely different set of classes and you need to go to some effort to copy across your designs. &lt;br /&gt;&lt;br /&gt;Although not a huge effort it does still take time to learn about the new component and copy across the controls for each page. With our navigator they just change the mode property and hay presto, it changes over. Better yet they can use the traditional TabControl style appearance when designing, making it easy to randomly move around, and then switch it to Wizard operation when finished.&lt;br /&gt;&lt;br /&gt;So our first unique selling point for the component is the provision of multiple modes or user interaction. We provide all your page navigation needs in one handy control that is a piece of cake to learn. You learn how one control works instead of having to understand several.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Separating the Layers&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Our second unique selling point is going to come from the architecture of the control. Instead of encapsulating all the drawing inside the control we are going to separate out the functionality into different layers. &lt;br /&gt;&lt;br /&gt;&lt;em&gt;Palette Layer&lt;/em&gt; - Provides the colors and font for drawing.&lt;br /&gt;&lt;em&gt;Rendering Layer&lt;/em&gt; - Draws using a palette in a particular style.&lt;br /&gt;&lt;em&gt;View Layer&lt;/em&gt; - Handles the layout of visual elements.&lt;br /&gt;&lt;em&gt;Controller Layer&lt;/em&gt; - Responds to events and initiates actions.&lt;br /&gt;&lt;em&gt;Model Layer&lt;/em&gt; - Manages the collection of pages.&lt;br /&gt;&lt;br /&gt;This is really just an extension of the traditional &lt;em&gt;Model-View-Controller&lt;/em&gt; design pattern where the &lt;em&gt;View&lt;/em&gt; is split into three separate layers. This makes it easy for us to change over the palette layer to give a different appearance without having to alter the renderer at all.&lt;br /&gt;&lt;br /&gt;Before I get stuck into too much of the actual coding, any feedback on the idea would be appreciated. But remember that although the &lt;em&gt;Navigator&lt;/em&gt; will be sold as a stand alone product in its own right, it is mainly intended as the building block for other more value added components later on. So don't be too harsh!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111870192595012200?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, The Product Concept'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111870192595012200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111870192595012200' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111870192595012200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111870192595012200'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/microisv-product-concept.html' title='microISV, The Product Concept'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111835245272272259</id><published>2005-06-09T20:40:00.000Z</published><updated>2005-06-09T22:22:24.043Z</updated><title type='text'>microISV, .NET2 vs Avalon</title><content type='html'>&lt;strong&gt;Logo Decision&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;First of all thanks for leaving comments on the last post about the final set of logos. At the last count the score was 5 for the first cartoon logo and 6 for the second corporate version. I was already leaning towards the second logo anyway but the feedback really confirms my initial preference. So I'm going to use the second logo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Technology Decision&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;My first major technical decision is the choice of technology for developing my C# visual components. We need to look into the future and ensure that anything written is not going to be out of date before it is even released. The current released development versions are .NET 1.1 for the Framework and VS.NET 2003 for the IDE.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Visual Studio .NET 2005 and .NET 2.0&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Looking ahead the next big change is the release of Visual Studio 2005 and .NET 2.0 on the 7th November 2005. I already have the Beta 2 release of this and have been playing around with it recently. Although a little shaky it is just about stable enough to develop against. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Avalon and Longhorn&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Further out is the new Avalon user interface framework that was originally slated to be released with Longhorn. For those not familiar with Avalon its a fundamentally new framework for developing user interfaces in the managed code environment. &lt;br /&gt;&lt;br /&gt;Whereas Windows.Forms is based on GDI+ the Avalon framework uses DirectX. There are early releases of Avalon being made in order for developers to play around with it. However these are very much development releases and each update contains fundamental changes to part of the design.&lt;br /&gt;&lt;br /&gt;A full stable release of this technology cannot be expected until the release of Longhorn, which is scheduled for the end of 2006.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Comparing the two options&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;If we develop for .NET 2.0 then we can start development straight away and know that few, if any, changes will be needed when the full release is made. Another advantage is that we only have to wait 5 months until its released and so we can sell components from then onwards. On the negative side the product will have a lifespan limited by the time it takes for Avalon to really take off.&lt;br /&gt;&lt;br /&gt;If instead we go for Avalon then we don't have a proper development environment and have to learn this new technology from scratch. That also means we have to wait some time before a commercial market emerges for these components. On the plus side it would mean we can get involved right from the onset of the new technology, and stay at the leading edge of the system as well as enjoying a longer lifetime for any software developed.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The final decision&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;As a code monkey I am tempted by the idea of getting into Avalon, if only for the excitement of getting into something new and interesting. But from a business point of view I believe the correct decision is to go with .NET 2.0, at least for the time being.&lt;br /&gt;&lt;br /&gt;A would rather go with the more certain opportunity even if it has a shorter potential lifetime, than try and go for something way off in the future that is currently vapourware. Plus the release of .NET 2.0 is about the right time frame for writing a first release of a product and having the website and e-commerce ready.&lt;br /&gt;&lt;br /&gt;So, time to create a new VS.NET 2005 Beta 2 solution and get cracking!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111835245272272259?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, .NET2 vs Avalon'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111835245272272259/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111835245272272259' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111835245272272259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111835245272272259'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/microisv-net2-vs-avalon.html' title='microISV, .NET2 vs Avalon'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111817787606164202</id><published>2005-06-07T20:38:00.000Z</published><updated>2005-06-07T20:59:57.830Z</updated><title type='text'>microISV, Final Logo</title><content type='html'>At the end of the last post we gave two of the designers the chance to refine the concepts I selected in order to approach a final design. Both came back with very good changes and so here they are. &lt;br /&gt;&lt;br /&gt;They do not look quite as good here as they are in practice because they have been shrunk and reduced in quality in order to post as small files for the blog. Here is the first finished logo.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Candidate B - $125 From Romania&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/logo_c2_r2.gif"&gt;&lt;/img&gt;&lt;br /&gt;&lt;br /&gt;This has actually come out much better than I was expecting. I think the factory itself looks very clear and the smoke gives it a nice added extra. The 3D appearance and the use of gradient colors is clear and distinctive, creating a memorable image.&lt;br /&gt;&lt;br /&gt;Our other designer can up with the following final work.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Candidate C - $199 From Argentina&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/logo_c3_r2.gif"&gt;&lt;/img&gt;&lt;br /&gt;&lt;br /&gt;Again I like the use of the gradient effect and I also like the way the left and right edges slant inwards slightly. Although some may think the use of 0's and 1's to make up the smoke is cheesy, I love that effect. Maybe I am just a cheesy sort of person!&lt;br /&gt;&lt;br /&gt;Both provided the finished artwork in several formats. The usual BMP and GIF but also the original vector files as well. This is really important and I would urge anyone else getting graphics created to ensure they have the design in the original format. &lt;br /&gt;&lt;br /&gt;That way you can always tweak it and provide it to other designers in the future. When you need to create that first print advert, you will be glad you have the vector format to pass over to a designer.&lt;br /&gt;&lt;br /&gt;So which one should I go with? At the moment I prefer the second design and you can see that logo placed on the domain home page, as well as a smaller white version on the heading of the blog itself. But there is still plenty of time before I need the website itself creating and so I can still change my mind.&lt;br /&gt;&lt;br /&gt;I suspect I prefer the second one because it feels a safer choice and a little more formal and corporate like. I doubt anyone will hate the second one, although few will love it either. But the first is likely to evoke a stronger reaction either in favour or against.&lt;br /&gt;&lt;br /&gt;This is where the blog readers have the chance to steer me in the right direction. If the vast majority of people prefer the first then I am willing to switch over to that one instead. &lt;br /&gt;&lt;br /&gt;So, what do you say? First or second?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111817787606164202?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Final Logo'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111817787606164202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111817787606164202' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111817787606164202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111817787606164202'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/microisv-final-logo.html' title='microISV, Final Logo'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111784000199260027</id><published>2005-06-03T22:10:00.000Z</published><updated>2005-06-05T09:40:52.496Z</updated><title type='text'>microISV, Logo Round 1</title><content type='html'>&lt;strong&gt;The Logo Brief&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;My brief to the designers was to create a logo with two parts. First of all it needs to have the &lt;em&gt;Component Factory&lt;/em&gt; name in a modern but professional font style. Second, and more important, is the creation of an image to go with the text. &lt;br /&gt;&lt;br /&gt;It has to be an image that when seen without the text is still instantly recognizable. One look at the image should be enough to know the company. Remember that a logo is not just a pretty picture but the foundation of an identity that the user will associate with you for a long time.&lt;br /&gt;&lt;br /&gt;I also want the image to have a professional but stylish feel. A difficult balance to achieve, but as the company is going to sell components based largely on the quality of presentation this is essential. If you visit a company that is selling visual components and the logo and website are of a poor quality, why would you even bother to check out the components themselves?&lt;br /&gt;&lt;br /&gt;So lets see what each designer came up with as a first set of concepts...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Candidate A - $75 from India&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/logo_c1_r1.gif" /&gt;&lt;br /&gt;&lt;br /&gt;I was very disappointed with this initial set of ideas. They all appear very flat, boring and frankly very amateurish. I would say that none of these are of a professional standard and even with some direction I doubt they could be progressed into anything worthwhile.&lt;br /&gt;&lt;br /&gt;This was the first reply received and I became very worried that the idea of working with three cheap designers was going to back fire. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Candidate B - $125 from Romania&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/logo_c2_r1.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Phew, this is more like it. Not fantastic but certainly they had more potential to be worked with. A little disappointed that my brief about the picture being instantly recognized was not really been worked into the image. But I like the 3D effect of the boxes even if they are not obviously factory related.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Candidate C - $199 from Argentina&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.componentfactory.com/images/logo_c3_r1.gif" /&gt;&lt;br /&gt;&lt;br /&gt;Aha, the best has been left to last. I am really pleased that they have been creative and come up with a variety of quite different ideas. The text on the first picture is really nice and I like the contrast in colors for the two words that place the emphasis on the word &lt;em&gt;factory&lt;/em&gt;. Plus it looks quite modern without becoming so arty farty that it would date quickly.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Ding Ding, Round 2&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It only took about 10 minutes to sit down with the concepts and decide on the next stage. Candidate A needed to be dropped entirely because I could see no way forward with that work. Still, that's only $75 wasted.&lt;br /&gt;&lt;br /&gt;The feedback for Candidate B was to take the image of the 3D box but work it into a more realistic factory. I want to create an association in my market place of the image of a factory and my company.&lt;br /&gt;&lt;br /&gt;Candidate C was instructed to work on the 3D folder logo and to try and add a smokestack. Also I like the clever use of 0's and 1's in the third picture as the way of drawing the smoke.&lt;br /&gt;&lt;br /&gt;So far nothing is obviously grabbing my attention as the definite way to go forward but it is still early days in the design process. Lets see what they can do in the next round.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111784000199260027?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Logo Round 1'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111784000199260027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111784000199260027' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111784000199260027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111784000199260027'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/microisv-logo-round-1.html' title='microISV, Logo Round 1'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111774103424135280</id><published>2005-06-02T19:34:00.000Z</published><updated>2005-06-02T22:05:33.456Z</updated><title type='text'>microISV, My logo beauty parade</title><content type='html'>I love the process of getting a logo created! &lt;br /&gt;&lt;br /&gt;In fact not just a logo but getting any professional graphics created by a designer is such fun. You give them a brief of what you want and then sit back and wait with anticipation for the email alert to ping. &lt;br /&gt;&lt;br /&gt;This is how it must feel to be a judge at a beauty parade; you wallow in the power of choosing based on shallow aesthetic criteria. Is this how it feels to be a woman shopping? I don't care about the V8 engine or turbo lag; I want the shiny red one!&lt;br /&gt;&lt;br /&gt;But how to go about it?&lt;br /&gt;&lt;br /&gt;There has never been a better or cheaper time to get professional graphics created. In the bad old days you had to either pay a fortune to a graphics design company or know a friend of a friend that was a professional designer. Not any more. With the internet reaching all over the world you can access the zillions of talented arties. (If a programmer is techie then surely an artist is an artie?).&lt;br /&gt;&lt;br /&gt;A couple of months ago I came across a great internet site called &lt;a href="http://www.guru.com"&gt;Guru.com&lt;/a&gt;. This is a kind of meeting place for matching up project requirements to skilled professionals. Along with experts in technical areas such as internet programming skills, it also covers graphic design of logos, web templates and much more. This seemed the perfect place to find a great logo.&lt;br /&gt;&lt;br /&gt;So I went ahead and posted details about the task and sat back to see if anyone would ask to get involved. Well it didn't take 24 hours and I had 25 experts providing quotes for the job. These ranged from as low as $50, from individuals in far off countries, up to $1500 from design agencies in the developed world. &lt;br /&gt;&lt;br /&gt;One of the great features of the site is that you can browse the portfolio of previous work from each applicant. Being a diligent type of fellow I did exactly that for all 25 quotes. To my surprise the quality of the applicants work was not directly proportional to the price they quoted. Some of those quoting only $50/$200 were of an excellent standard and it is surprising how average the work of some $1500 agencies were.&lt;br /&gt;&lt;br /&gt;I decided to offer the work to not one but three applicants. Looking at the cheap end of the quotes that also had good portfolios I appointed the following...&lt;br /&gt;&lt;br /&gt;Candidate A - $75 from India&lt;br /&gt;Candidate B - $125 from Romania&lt;br /&gt;Candidate C - $199 from Argentina&lt;br /&gt;&lt;br /&gt;So the total cost will be $399 but with three different sources I expect to definitely achieve the look and feel I want. This is still much cheaper than the $800 I paid to get a logo done in the past. I like the idea of having plenty of different ideas at the start of the process. With a logo that will be with me for many years to come we need to ensure its a good one. &lt;br /&gt;&lt;br /&gt;I will show the initial ideas that each candidate came up with in the next post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111774103424135280?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, My logo beauty parade'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111774103424135280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111774103424135280' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111774103424135280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111774103424135280'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/06/microisv-my-logo-beauty-parade.html' title='microISV, My logo beauty parade'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111749173250607689</id><published>2005-05-30T22:17:00.000Z</published><updated>2005-05-30T23:32:32.193Z</updated><title type='text'>microISV, Think of a name</title><content type='html'>Deciding on the name for your company is much more important than most developers would think. This is the first point of contact for any potential customers and so creating the right impression from the outset is important. &lt;br /&gt;&lt;br /&gt;As our target customers are actually other software developers we have the advantage of doing all our selling via the internet. If a programmer wants to buy a software component they are almost bound to start by using either a google search or by visiting an online component store such as &lt;a href="http://www.componentsource.com"&gt;Component Source&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We want to have a domain name that instantly tells the potential customer what it is we do, so they know they are coming to the right place. So the name needs to be specific enough to tell them what we do but not so specific that creating other products invalidates it. Getting the balance right is important but tricky.&lt;br /&gt;&lt;br /&gt;There are two obvious approaches to creating a name. Either create a completely new word that is not in the dictionary or create a name from correct English words. A good example of the first approach would be &lt;em&gt;Microsoft&lt;/em&gt; and the second would be &lt;em&gt;Rational Software&lt;/em&gt;. &lt;br /&gt;&lt;br /&gt;After spending an hour working on the first approach I gave up. Coming up with a new word is really hard and no matter what I tried it sounded really stupid. The best I managed was &lt;em&gt;Visiwig&lt;/em&gt; and so you can see how bad things were! So I kicked this idea into the long grass and opted to try the second approach.&lt;br /&gt;&lt;br /&gt;I began by creating a list of words appropriate for the company. As we intend to sell visual components to developers I can up with the following set of words:-&lt;br /&gt;&lt;em&gt;&lt;br /&gt;Art, Visual, Widget, Doodads&lt;br /&gt;Component, Software, Dynamic&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;From this I derived lots of potential names that were then thinned down to the following set that appealed to me. You will of course instantly notice that the first one has no relation to the what the company does and is not related to the list of original words either.&lt;br /&gt;&lt;em&gt;&lt;br /&gt;Crazy Software&lt;br /&gt;Visual Widgets&lt;br /&gt;Visual Dynamics&lt;br /&gt;Software Dynamics&lt;br /&gt;&lt;/em&gt;&lt;br /&gt;This is an interesting phenomenon that might be just me or maybe it occurs to everyone. But as I was thinking of names a new idea would suddenly pop into my head from nowhere. If I liked the idea I would write it down.&lt;br /&gt;&lt;br /&gt;Next I showed the list to the wife to see how they sounded to someone else.  Lucky for me she was sat down when I read out &lt;em&gt;Crazy Software&lt;/em&gt; because she doubled up with laughter for about 5 minutes and almost wet herself. So I scratched that one off the list. &lt;br /&gt;&lt;br /&gt;Next up was &lt;em&gt;Visual Widgets&lt;/em&gt;, which only evoked a quizzical look because being a girl and from Australia she had no idea what a &lt;em&gt;Widget&lt;/em&gt; is. The last two were given the seal of approval with &lt;em&gt;Software Dynamics&lt;/em&gt; being the clear favorite. It was also my favorite and so the decision was made.&lt;br /&gt;&lt;br /&gt;You can probably guess what is coming next. I tride to registier the domain name and sure enough &lt;a href="http://www.softwaredynamics.com"&gt;www.softwaredynamics.com&lt;/a&gt; was already registered. Well I should not be surprised, if it sounds good to me then it probably sounds good to someone else. But there was a glimmer of hope. Instead of being registered to a trading company it was held by one of those domain name sharks that is holding it with the sole purpose of selling it on at a profit to some poor mug like me.&lt;br /&gt;&lt;br /&gt;Well I sent them an email and after about a day they responded saying it would cost a mere $6000 to buy. But I had better be quick because domain name prices are rising all the time! As a microISV that is more than I want to spend in the first year of starting the company and so that idea is out the window. Not to mention that I object to lining the pockets of the these domain name sharks anyway.&lt;br /&gt;&lt;br /&gt;But one good thing came out of the process and that is finding a good use for the search page on the sharks website. Now instead of generating potential domain names myself I entered my list of keywords into their page and let it come up with lots of ideas for me. You can try it yourself by entering a list of words into the &lt;em&gt;Keyword(s)&lt;/em&gt; field and then pressing the &lt;em&gt;Search&lt;/em&gt; button on this &lt;a href="http://www.buydomains.com/searchPremiums.jsp"&gt;Search Page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Obviously all the ideas they come up with are for domains that they happen to want to sell, but it does create lots of variations which lead you to new ideas. It certainly beats using a pen and paper. After doing this for a couple of minutes I came up with the &lt;em&gt;Component Factory&lt;/em&gt; name. This appealed to me because it encapsulates exactly what the company produces, components. Plus the use of the word factory would make it easy to create a distinctive logo and identity for the company. &lt;br /&gt;&lt;br /&gt;It also conforms to the criteria I started with. Specific enough to describe what the company does but not too specific that it would become obsolete quickly. Most important of all it has the feel good factor. It feels good and appeals to me which is important because the whole point of being your own boss is to do things your own way and enjoy the process.&lt;br /&gt;&lt;br /&gt;Now all I had to do was register the name and its various extensions in the way described in my last article. On investigation it turns out that the name is already registered by a shark, albeit a different shark this time. This time the shark only wanted $600 for the name. I did think about ditching the name and starting all over again just as a matter of principle. But in the end I decided I could afford that amount and I really wanted to get hold of that name.&lt;br /&gt;&lt;br /&gt;So I bought the &lt;a href="http://www.componentfactory.com"&gt;ComponentFactory.com&lt;/a&gt; domain name for $600 and then purchased some other variations such as .co.uk, .us, .org, .biz, .name and .info and ensured they were all fully paid up for 5 years into the future. I used &lt;a href="http://www.networksolutins.com"&gt;Network Solutions&lt;/a&gt; to register the names, perform the transfer from the shark and host a website.&lt;br /&gt;&lt;br /&gt;At the end of the long winded process I can recommend that you leave yourself plenty of time to come up with a name and be prepared to find that your first few ideas have already been registered. But make sure you do not give in and keep going until you get something you are 100% happy with because your going to be using it, hopefully, for many years to come!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111749173250607689?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Think of a name'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111749173250607689/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111749173250607689' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111749173250607689'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111749173250607689'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/05/microisv-think-of-name.html' title='microISV, Think of a name'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111697297957139182</id><published>2005-05-24T21:32:00.000Z</published><updated>2005-05-24T22:16:19.800Z</updated><title type='text'>microISV, Domain name mistakes</title><content type='html'>Now that we have decided on the type of software to be produced, visual components for Windows .NET developers, we need to think about a domain name (the company name will be the same as the domain name).&lt;br /&gt;&lt;br /&gt;Coming up with a good name is actually much harder than you think. It took me several weeks to get from starting to think about possible names to actually having bought the domain names. Right at the start I was determined to avoid two mistakes I have made in the past when doing the same thing.&lt;br /&gt;&lt;br /&gt;My first mistake was to create a domain name that was exactly the same as the name of the product. On first inspection this does not seem such a bad idea. Users that can remember the name of your product can find the website without having to remember the name of the company that produces it. I certainly sometimes struggle to recall the name of the company associated with a particular product and vica versa.&lt;br /&gt;&lt;br /&gt;If you are definitely only ever going to be a one product company then I suppose it is an appropriate strategy. This is the way that Winzip has developed itself. Their website is www.winzip.com and we have all heard of the product. &lt;br /&gt;&lt;br /&gt;But what happens when you create your second product? You need to have another domain name for that new product and then you have to start from scratch in building up awareness of the new name. Now if you created Winzip then it's not a problem, your laying on the beach in Hawaii sipping a gin and tonic without caring about product number two. &lt;br /&gt;&lt;br /&gt;For the rest of us there is a good chance there will be a second product and we might as well leverage all the effort in getting the company name into the customers mind. When they come back to our website to check for a later version of product number one we have a chance to tell them how cool our second product is. When product one is discontinued because of changes in technology we still have that brand name of the company in their head.&lt;br /&gt;&lt;br /&gt;My second mistake was to let a domain name I had registered lapse. This was not deliberate but a simple oversight because I was not keeping track of when it was due to expire. Once I realised my first years registration had lapsed, and it was only about one day afterwards, I tried to register it again. You can guess what happened. Someone else had registered the name straight away and now suddenly I had lost the domain name!&lt;br /&gt;&lt;br /&gt;I was lucky in that the domain name was the domain name of the company and not the product and at that point the vast majority of people were using the product domain name. So although I did not lose any real business it did mean that from then on I was stuck using the product domain name as the website access to not just the product but the whole company.&lt;br /&gt;&lt;br /&gt;From these mistakes I have come up with the following domain name rules that I intend to follow this time around:-&lt;br /&gt;&lt;br /&gt;1. Think of a domain name for the brand&lt;br /&gt;2. Register popular variants (.com, .net, .org etc)&lt;br /&gt;3. Register all domain names for 5 years&lt;br /&gt;4. If possible enable auto renew for after the 5 years&lt;br /&gt;&lt;br /&gt;If your hosting company allows you to auto renew then you could just initially pay for a single year and let the automatic renew handle it from then one. That would reduce the initial costs for your own microISV. &lt;br /&gt;&lt;br /&gt;But after the pain of losing a domain name in the past I am determined it will never happen again and instead will definitely stump up for an initial 5 years cost in one go. Actually, if your only registering a single domain name this cost is not that prohibitive anyway, it is really only when doing this for several different domain name extensions it starts to add up.&lt;br /&gt;&lt;br /&gt;Now all I have to do is think of a decent name for the company!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111697297957139182?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Domain name mistakes'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111697297957139182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111697297957139182' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111697297957139182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111697297957139182'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/05/microisv-domain-name-mistakes.html' title='microISV, Domain name mistakes'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111642948926190210</id><published>2005-05-18T15:12:00.000Z</published><updated>2005-05-18T16:32:35.796Z</updated><title type='text'>microISV, Do something easy</title><content type='html'>Do something that comes easy to you but not to others. &lt;br /&gt;&lt;br /&gt;That is the best career advice I ever heard and I think it applies equally to a business. But it also has to be combined with the work ethic to really get the maximum benefit. This is the guiding principle used to decide on the type of software and the market to target with my microISV.&lt;br /&gt;&lt;br /&gt;My development background is based on 8 years of C++ on Windows and then using C# and .NET since it was first released as a Beta version. During all this time I have spent more time working on user interface controls than anything else. &lt;br /&gt;&lt;br /&gt;This has been a deliberate focus because I find working on visual components easier then working with databases, middleware or other areas. Being easier meant it was enjoyable and fun rather than feeling like a chore. I also find it easy to work hard in this area precisely because I enjoy it, which is not something I have ever been able to say about database schemas!&lt;br /&gt;&lt;br /&gt;So after many years of spending long hours working on various custom controls and user interfaces I think I understand this area well. More importantly I believe that I can produce software as good as anything else on the market.&lt;br /&gt;&lt;br /&gt;Therefore it is an obvious decision on what type of software to produce and the market to target. My microISV is going to produce user interface components for the Microsoft Windows platform based on C# and .NET technology.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111642948926190210?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, Do something easy'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111642948926190210/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111642948926190210' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111642948926190210'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111642948926190210'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/05/microisv-do-something-easy.html' title='microISV, Do something easy'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111636203409988572</id><published>2005-05-17T20:32:00.000Z</published><updated>2005-05-27T08:23:57.193Z</updated><title type='text'>microISV, The vision thing</title><content type='html'>With any new business you're supposed to create a business plan. I can see the point if you're going to start a new mobile phone company. You're investing a few hundred million and I can see your investors wanting to see a bit of documentation before going ahead. But for a microISV I really don't see the point. &lt;br /&gt;&lt;br /&gt;The big advantage of being a one man outfit is speed. You can change direction in an instant and react to events on the moment. I'm not trying to convince a bank manager or outside investor to stump up some cash so I am not bothering with the business plan. Far more important is to have the vision thing. &lt;br /&gt;&lt;br /&gt;Every successful software project I have worked on always has one person that has the big vision and it is always a techie. They have a vision inside their head of how the product is going to work. Not just in the look and feel but also the design and structure of the resulting code. Every developer gains confidence from this and you end up working as team and all moving in the same direction. The net result is a good chance of success. &lt;br /&gt;&lt;br /&gt;As it happens I already have the vision of where I want the company to be and the kind of products it will be producing. Just as important I can visualise the first two product ideas very clearly, both in terms of how they will look and also the overall design. &lt;br /&gt;&lt;br /&gt;Now we need to turn the vision into some concrete goals. After all, the reason most people never achieve their goals in life is simple. They never actually set any. So lets define the overall goals for the company itself... &lt;br /&gt;&lt;br /&gt;Goal 1: Achieve first sale &lt;br /&gt;Goal 2: Annualised sales equal to day job salary &lt;br /&gt;Goal 3: Annualised sales twice day job salary &lt;br /&gt;Goal 4: Net revenue twice day job, quit day job!&lt;br /&gt;&lt;br /&gt;The whole point of the microISV is to earn enough to quit the day job and work full time for myself. I have no idea how long it will take to achieve this and so see no point in putting target dates against the goals.&lt;br /&gt;&lt;br /&gt;From now on I am focused just on the first goal, working towards the first sale.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111636203409988572?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com' title='microISV, The vision thing'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111636203409988572/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111636203409988572' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111636203409988572'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111636203409988572'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/05/microisv-vision-thing.html' title='microISV, The vision thing'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-12760115.post-111564328533816611</id><published>2005-05-11T12:54:00.000Z</published><updated>2005-05-18T16:31:52.750Z</updated><title type='text'>microISV, The impossible dream</title><content type='html'>I want to live the impossible dream.&lt;br /&gt;&lt;br /&gt;For the first few years of being a programmer I never even thought about the possibility of being my own boss, of actually owning and running my own company. That was the sort of thing a few lucky others might do but never me. I only thought of myself as a code monkey, grinding away at the keyboard and enjoying the technical challenges involved.&lt;br /&gt;&lt;br /&gt;But then things started to change. After being made redundant from my permmie job I became a contractor and enjoyed the easy money that went with the dot com boom years. Although being a contractor meant having a company it was really only a half way house to being a real business. But I started to dream the impossible, to dream of a day when I would actually start and run a real software business.&lt;br /&gt;&lt;br /&gt;Then for a couple of years I had a little accidental success. Whilst investigating the new Microsoft .NET technology, then just being released, I created a small software library as a learning exercise. I managed to turn this little spare time project into something that could be sold to other developers. This has made a little bit of money and I learned some useful lessons from the process but this came about more by accident than by planning. But it wetted my appetite.&lt;br /&gt;&lt;br /&gt;Since then I have read with interest the articles by &lt;a href="http://software.ericsink.com/"&gt;Erik Sink&lt;/a&gt; about the concept of the &lt;a href="http://msdn.microsoft.com/Longhorn/default.aspx?pull=/library/en-us/dnsoftware/html/software09012004.asp"&gt;microISV&lt;/a&gt;. The idea of a one-man company that produces software products in order to create a viable stand alone company. Of actually giving up the day job and working for yourself, not as a contractor or self employed, but as a fully-fledged product based business.&lt;br /&gt;&lt;br /&gt;This microISV concept has really fired my enthusiasm and I have read every blog and article I can find on the idea. Combine this concept with a few ideas I have for products and suddenly I am not just dreaming about the impossible but planning on living the dream.&lt;br /&gt;&lt;br /&gt;So that's the purpose of this blog, to track the process of starting a microISV from ground zero and seeing where it goes. It might be very embarrassing if it turns into a complete turkey, but I think the extra motivation of trying to avoid public humiliation will help me during the long dark hours ahead.&lt;br /&gt;&lt;br /&gt;And this is where you come into the picture. I am hoping that you will be able to provide useful feedback and ideas to help me out along the way. As I share some of the problems and issues I encounter I would love to hear others ideas and suggestions. So join me for the ride and lets see where it goes!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/12760115-111564328533816611?l=componentfactory.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.componentfactory.com/' title='microISV, The impossible dream'/><link rel='replies' type='application/atom+xml' href='http://componentfactory.blogspot.com/feeds/111564328533816611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=12760115&amp;postID=111564328533816611' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111564328533816611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/12760115/posts/default/111564328533816611'/><link rel='alternate' type='text/html' href='http://componentfactory.blogspot.com/2005/05/microisv-impossible-dream.html' title='microISV, The impossible dream'/><author><name>Phil Wright</name><uri>http://www.blogger.com/profile/04771126316868841603</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry></feed>
