<?xml version="1.0"?>
<rss version="2.0">
<channel>

	<title>Looking for a few good ideas: Programming</title> 
	<link>http://spacefold.com/colin/</link> 
	<description>amongst the irregular verbiage</description> 
	<language>en-us</language> 
	
	<copyright>Copyright 1996-2008 Colin Nicholls</copyright> 
	
	<managingEditor>colin@spacefold.com (Colin Nicholls)</managingEditor> 
	<webMaster>colin@spacefold.com (Colin Nicholls)</webMaster> 
	<image>
		<title>Colin Nicholls</title> 
		<url>http://www.spacefold.com/colin/pics/rss_2005.jpg</url> 
		<link>http://spacefold.com/colin/</link> 
		<width>60</width> 
		<height>60</height> 
		<description>diving into the stream of conciousness</description> 
	</image>

	
	
	
	

	<item>
		<title>Thank You Derek Crudginton</title>
		<link>http://www.spacefold.com/colin/posts/2008/01-22ThankYouDerekCrudgin.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2008/01-22ThankYouDerekCrudgin.html</guid>
		<pubDate>Tue, 22 Jan 2008 11:52:40 PST</pubDate>
		<description>
			<![CDATA[
			<p><a href="http://hell.jedicoder.net/?p=87">This</a> is exactly what I needed to know:</p>
<blockquote dir="ltr" style="MARGIN-RIGHT: 0px">
<p>Installing Oracle 10g r2 on Solaris 5.11 is painless except before you ./runInstaller you have to edit the ./install/oraparam.ini and change line 42 to something like:</p>
<p class="code">Solaris=5.8,5.9,5.10,5.11</p>
<p>Then it will pass the first check and continue with install.</p>
</blockquote>
			]]>
		</description>
	</item>

	
	

	
	

	<item>
		<title>Essential Software List 2007</title>
		<link>http://www.spacefold.com/colin/posts/2008/01-20EssentialSoftwareLis.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2008/01-20EssentialSoftwareLis.html</guid>
		<pubDate>Sun, 20 Jan 2008 02:08:28 PST</pubDate>
		<description>
			<![CDATA[
			<p>Time for a round-up of the Free and/or Open Source tools I've been using on my work laptop.</p>
<p>1. <a href="http://www.eclipse.org/downloads/">Eclipse 3.3</a>&nbsp;(IDE, Java and generic)</p>
<p>I've been dipping into various versions of Eclipse for Java development for years. Its plugin architecture is brilliant (see below). Out of the box it handles Java development as sweetly as any "Professional" edition out there. It also has a built-in editor for Ant build files (an XML dialect) which I'm finding particularly handy right now. One feature I really appreciate is the ability to create a "generic" project that basically just lists all the files in a directory, regardless of what type of file they are. Very handy for my current work which involves a series of versioned directories containing&nbsp; various flavors of text files. Which brings me to:</p>
<p>2. <a href="http://robrohan.com/2007/11/17/afae-update-site-online/">Afae Plugin for Eclipse</a></p>
<p>"Afae" stands for "Another Freebooter's All-purpose Editor". It doesn't appear to be under active development and has stalled at version 0.9, but don't let that stop you from using it. It adds a <a href="http://macromates.com/">TextMate</a>-flavored text editor to Eclipse that allows me to edit .sh, .bat, .sql, and other types of files in syntax-colored goodness. It has a bunch of other features that I'm not using (such as a "post to blog" button on the toolbar?) but I've found the text editing to be solid.</p>
<p>3. <a href="http://www.sourcegear.com/diffmerge/index.html">DiffMerge</a></p>
<p>I've <a href="http://www.spacefold.com/colin/posts/2007/08-15DiffMerge.html">mentioned this before</a>. Since then it is up to version 3.1 but it is still free, and although other file comparison tools probably have more features, I've grown to like this one.</p>
<p>4. <a href="http://astrogrep.sourceforge.net/">AstroGrep</a></p>
<p>I have long ago given up on making <a href="http://www.microsoft.com/windowsxp/using/helpandsupport/learnmore/crawford_september03.mspx">Windows Search</a> find anything on my file system. How I long for the File Manager applet in FoxPro for DOS 2.0. That thing was fast. AstroGrep is a GREP utility for Windows, with a simple UI on top. It's fast, and I can search the contents of text file with <a href="http://www.regular-expressions.info/">regular expressions</a>. On my latest project I have found it invaluable.</p>
			]]>
		</description>
	</item>

	
	

	
	

	<item>
		<title>My Office Bookshelf</title>
		<link>http://www.spacefold.com/colin/posts/2008/01-07MyOfficeBookshelf.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2008/01-07MyOfficeBookshelf.html</guid>
		<pubDate>Mon, 07 Jan 2008 01:12:23 PST</pubDate>
		<description>
			<![CDATA[
			<p><img style="MARGIN-LEFT: 5px" height="199" alt="" src="http://www.spacefold.com/colin/posts/2008/my_bookshelf.jpg" width="200" align="right" border="0" /></p>
<p>Those of you curious about what I've been up to lately regarding my working day may be interested in perusing my office bookshelf.</p>
<p>This is a lot of fun.</p>
			]]>
		</description>
	</item>

	
	

	
	

	<item>
		<title>Advancing Backwards</title>
		<link>http://www.spacefold.com/colin/posts/2007/11-04AdvancingBackwards.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2007/11-04AdvancingBackwards.html</guid>
		<pubDate>Sun, 04 Nov 2007 10:27:12 PST</pubDate>
		<description>
			<![CDATA[
			<p>I've posted a new article on the Spacefold site: <a href="http://www.spacefold.com/articles/RSFundaments_part1.aspx">VFP 9.0 Reporting System Fundamentals</a>. (I couldn't let L <a href="http://spacefold.com/lisa/post/Two-steps-forward%2c-one-step-back%2c-in-TMM-progress-tonight.aspx">have all the fun</a>.)</p>
<p>In other news, I've un-installed Office 2007 (Word, Excel, and PowerPoint) and reinstalled the 2003 versions. Ah, it feels so good to go back. So much snappier.</p>
			]]>
		</description>
	</item>

	
	

	
	

	<item>
		<title>Enterprise-ready</title>
		<link>http://www.spacefold.com/colin/posts/2007/09-06Enterprise-ready.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2007/09-06Enterprise-ready.html</guid>
		<pubDate>Fri, 07 Sep 2007 08:40:44 PST</pubDate>
		<description>
			<![CDATA[
			<p>So, what makes an "enterprise" application architecture?</p>
<p>As far as I can tell, it's the 'eee's after the dollar sign.</p>
			]]>
		</description>
	</item>

	
	

	
	

	<item>
		<title>DiffMerge</title>
		<link>http://www.spacefold.com/colin/posts/2007/08-15DiffMerge.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2007/08-15DiffMerge.html</guid>
		<pubDate>Wed, 15 Aug 2007 12:48:41 PST</pubDate>
		<description>
			<![CDATA[
			<p><a href="http://www.sourcegear.com/diffmerge/downloads.html">DiffMerge</a> is a tool recently made freely available from SourceGear. If you are not a programmer then you probably have no need of this, but if you do find yourself needing to compare two different versions of source files, then I recommend this tool</p>
<p>I used&nbsp;<a href="http://winmerge.org/">WinMerge</a>&nbsp;for a while, but the other day I needed to do the file comparison thing and I found that on my laptop, not only had I not installed WinMerge, I didn't have an installer conveniently located in my c:\downloads folder either.</p>
<p>Since I regularly read <a href="http://software.ericsink.com/">Eric Sink's Blog</a>, I knew about DiffMerge, and so I gave it a try.</p>
<p>It's excellent. It blows WinMerge out of the water. Recommended.</p>
			]]>
		</description>
	</item>

	
	

	
	

	<item>
		<title>Expression Web vs Visual Studio 2005</title>
		<link>http://www.spacefold.com/colin/posts/2007/07-07ExpressionWeb.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2007/07-07ExpressionWeb.html</guid>
		<pubDate>Sat, 07 Jul 2007 10:24:52 PST</pubDate>
		<description>
			<![CDATA[
			<p>I'm happy to know that Visual Studio .NET 2008 ("Orcas") is going have the HTML designer from Expression Web built-in. It's much better than the editor in VS 2005.</p>
<p>Unfortunately my copy of Expression Web appears to be <strong>missing the third checkbox</strong> in the CSS options dialog, shown below:</p>
<p align="center"><img height="310" alt="" src="http://www.spacefold.com/colin/posts/2007/images/ExpressionWebOptions.png" width="570" border="0" /></p>
<p>Can anyone tell me where to find it?</p>
			]]>
		</description>
	</item>

	
	

	
	

	<item>
		<title>Putting it all together (V)</title>
		<link>http://www.spacefold.com/colin/posts/2007/07-05Puttingitalltogether.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2007/07-05Puttingitalltogether.html</guid>
		<pubDate>Thu, 05 Jul 2007 06:27:01 PST</pubDate>
		<description>
			<![CDATA[
			<p><em>This series of posts began <a href="http://www.spacefold.com/colin/posts/2007/05-19IHateKnobs.html">here</a>.</em></p>
<p> <a href="http://www.spacefold.com/colin/posts/2007/07-04TheToggleButton.html">Previously</a> I covered the design of some standard controls for virtual hardware. Now let's put them together into a mockup of a software synthesiser. I chose to revise Arturia's CS-80V because it's the greatest synth ever. Here's the controls for one voice module:</p>
<p align="center"> <a href="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/cs80_mockup.png"><img height="102" alt="" src="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/cs80_mockup_small.png" width="586" border="0" /></a><br /><font size="2">(Click on the image to zoom)</font></p>
<p></p>
<p> Things to note:</p>
<ul>
<li> The toggle buttons that enable the high and low pass filters on the voice are colored green, to match the filter level sliders.
</li>
<li> The current input focus is located on the VCF <em>initial level</em> (IL) slider, indicated by the red dot. If you pressed the TAB key at this point, the dot would move to the <em>attack level</em>&nbsp;(AL) slider.
</li>
<li> The range of the PWM percentage slider is 60-90%, reflected in the displayed value of the control.
At its minimum setting, the slide shows a value of 60.
</li>
<li> Likewise, the VCA <em>sustain</em> (S) slider shows a maximum setting of "10", while the <em>release</em> slider is the default 0-99.
</li>
</ul>
<p>That's all I planned to say for now on this topic. If I think of anything else I'll continue the series. Thanks for reading.</p>
<p><strong><em>Postscript</em></strong>: I implemented the mock-ups using Visual FoxPro 9.0. The controls are more-or-less fully functional (even if the control panel itself doesn't do anything!) If you would like to experiment with the controls, you can <a href="http://www.spacefold.com/colin/posts/2007/images/synthui/synth_ui.zip">download the VCX library</a>&nbsp; here.</p>
			]]>
		</description>
	</item>

	
	

	
	

	<item>
		<title>The Toggle Button (IV)</title>
		<link>http://www.spacefold.com/colin/posts/2007/07-04TheToggleButton.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2007/07-04TheToggleButton.html</guid>
		<pubDate>Wed, 04 Jul 2007 04:41:12 PST</pubDate>
		<description>
			<![CDATA[
			<p><em>This series of posts began <a href="http://www.spacefold.com/colin/posts/2007/05-19IHateKnobs.html">here</a>.</em></p>
<p><a href="http://www.spacefold.com/colin/posts/2007/05-28TheValueSlider.html">Last time</a> I looked at the design of a value slider control. Another useful control that should be made a standard UI component in virtual hardware is the toggle button. This should be substituted for situations where checkboxes and option buttons (radio buttons) are space-consuming or aesthetically displeasing:</p>
<p align="center"><img height="152" alt="" src="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/toggle_button_states.png" width="454" border="0" /></p>
<p>Toggle buttons can be clicked to switch between "on" and "off" states. If you group two or more of them together, you can use them to switch between many options. This design allows for color to be used to highlight contols that are related in function, and it shoulb be obvious what state the control is in and whether or not you can change the value.</p>
<p><a href="http://www.spacefold.com/colin/posts/2007/07-05Puttingitalltogether.html">Next</a>, we'll put it all together in a mock-up of the CS-80 voice control panel.</p>
			]]>
		</description>
	</item>

	
	

	
	

	<item>
		<title>The Value Slider (III)</title>
		<link>http://www.spacefold.com/colin/posts/2007/05-28TheValueSlider.html</link>
		<author>colin@spacefold.com</author>
		<guid isPermaLink="true">http://www.spacefold.com/colin/posts/2007/05-28TheValueSlider.html</guid>
		<pubDate>Mon, 28 May 2007 09:36:24 PST</pubDate>
		<description>
			<![CDATA[
			<p><em>This discussion began <a href="http://www.spacefold.com/colin/posts/2007/05-19IHateKnobs.html">here</a>, and continued <a href="http://www.spacefold.com/colin/posts/2007/05-27IHateKnobs.html">here</a>.</em></p>
<p>A modest proposal: Virtual audio hardware manufacturers should define and agree to use some additional standard controls for their user interfaces instead of inventing their own widgets. It's Anarchy in the UI out there... the causes for it are reasonable: 1) the standard dialog controls specified by OS vendors such as&nbsp;<a href="http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/index.html?http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/XHIGIntro/chapter_1_section_1.html">Apple</a> &nbsp;and&nbsp;<a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/UxGuide/UXGuide/Controls/CommonControls.asp">Microsoft</a>&nbsp;are boring, incapable, or not compact enough; 2) they are trying to distinguish their products from others; 3) their intent is to make their software mimic the UI of the original hardware that they are modelling.</p>
<p>This discussion is an attempt to address reason #1. I think reason #2 is not valid. Guys, make your products excellent and usable, and believe me, you'll be distinguished from those that don't. One way of making your products usable is to use standard controls in your editing interfaces!</p>
<p><a href="http://www.arturia.com/evolution/en/products/cs-80v/intro.html">Arturia's CS-80V</a> is a case in point for reason #3. The software <a href="http://www.savedbytechnology.com/2003/arturia_CS_80V.htm">mimics the original front panel</a> of the <a href="http://www.synthmuseum.com/yamaha/yamcs8001.html">Yamaha CS-80</a> synthesiser religiously, and looks great. Except when you try to edit a patch, and then it's horrible.</p>
<p>There's a fourth reason: multi-platform support. It is very hard to use standard UI widgets when you are also trying to write software for Macintosh, Windows, and perhaps Linux as well. Much easier to roll-your-own controls. That's no excuse to ignore standard behavior, though.</p>
<p>I think there is room for a middle ground, where virtual hardware interfaces can be designed to look good, resemble the source hardware where appropriate, but use standard controls to improve usability. All we need is a couple more standard controls: a <em>Value Slider</em>, and a <em>Toggle Button</em>. In this post I'm going to look at how a Value Slider control could express the principles of UI I established <a href="http://www.spacefold.com/colin/posts/2007/05-27IHateKnobs.html">last time</a>. <a href="http://www.spacefold.com/colin/posts/2007/07-04TheToggleButton.html">Later on</a> I'll look at the toggle button.</p>
<p><strong>The Value Slider</strong></p>
<p>Sliders already exist in most standard GUI toolkits, but they are not ubiquitous, and I don't want to be constrained by their default specified appearance. So here's ours:</p>
<p align="center"><img height="62" alt="" src="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/value_slider_1.png" width="248" border="0" /></p>
<p align="left">It consists of four main visual components: a perimeter rectangle; a colored bar proportional to the <em>value</em> of the control; a handle widget to grab with the mouse pointer to set the value; and a label that displays the value in text form.</p>
<p align="center"><img height="68" alt="" src="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/value_slider_tooltip.png" width="265" border="0" /></p>
<p>When the slider is adjusted with the mouse, I recommend that a tooltip or similar metaphor is used to display a more precise value (see above).</p>
<p>So the control expresses its value in three increasing levels of detail: 1) the size of the colored bar; 2) the value displayed in the control, and 3) the more precise value displayed in the tooltip.</p>
<p align="left"><strong>Color and Clarity<br /></strong>We've got some flexibility here. We can decide not to show the text representation of the value if we like, or move the text display to the other end of the control when the handle would otherwise obscure it:</p>
<p align="center"><img height="53" alt="" src="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/value_slider_options.png" width="344" border="0" /></p>
<p align="left">We can use color to relate and distinguish controls. We are also not limited to a horizontal orientation:</p>
<p align="center"><img height="109" alt="" src="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/value_slider_options_2.png" width="253" border="0" /></p>
<p align="left">Here I am using the red and green color to distinguish between the level of high-pass filtering applied, and the amount of resonance in the filter circuit.</p>
<p align="left">The slider on the right is an experiment to see how it handles the concept of +/- deviations from a center value. This is an important type of value editing in virtual audio hardware and our control should be able to express it clearly.</p>
<p align="left"><strong>State<br /></strong>Typically, UI controls can be in one of a number of states: Enabled and editable; Disabled; and Read-Only. Our control should express its state visually:</p>
<p align="center"><img height="63" alt="" src="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/value_slider_states.png" width="437" border="0" /></p>
<p>The difference between disabled and read-only is subtle. Both states are not editable, and the control should express this fact clearly so that a user is alerted to it and doesn't attempt to change the value. However a read-only control is allowed to receive the <a href="http://doc.trolltech.com/3.2/focus.html">keyboard focus</a>&nbsp;(more on this below), whereas a disabled control will not.</p>
<p><strong>Scalability<br /></strong>One problem common to many applications, not just virtual hardware implementations, is that high-resolution displays tend to make everything look smaller on the screen, unless they've been <a href="http://blogs.msdn.com/greg_schechter/archive/2006/08/07/690704.aspx">explicitly written to deal</a> with this problem. Our value slider control should be designed in such a way that it can be scaled easily:</p>
<p align="center"><img height="62" alt="" src="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/value_slider_scales.png" width="455" border="0" /></p><p><strong>Behavior<br /></strong>Controls should not respond to mouse-wheel events unless they have the focus. That really needs to be engraved on stone tablets and placed in <a href="http://b4a.healthyinterest.net/extras/thing/000449.html">the temple of the whatever, high atop the thing</a>. Take the following as an example: You're in Cakewalk SONAR 6.0, scrolling down the list of tracks, and an input trim control scrolls up underneath the mouse pointer. <a href="http://forum.cakewalk.com/tm.asp?m=979827&amp;mpage=1&amp;key=scroll%2Cwheel&amp;#980783">Suddenly, you're scrolling the value of the input trim control instead of the track list</a>. (Note: they fixed this in 6.2)</p>
<p>On the other hand, if you click on a control, you should be able to use the mouse wheel to change the value. The control has to have an understanding of focus. Once a control has focus, you should be able to use the keyboard to change the value also. I suggest the + and - keys.</p>
<p><strong>Precision<br /></strong>Some values need precise editing. In situations where dragging the slider does not allow for the necessary level of precision, you should be able to double-click the control to get to an editor:</p>
<p align="center"><img height="114" alt="" src="http://www.spacefold.com/colin/posts/2007/images/synthui/my_widgets/value_slider_editing.png" width="415" border="0" /></p>
<p><a href="http://www.spacefold.com/colin/posts/2007/07-04TheToggleButton.html">Next up</a>, I'm going to talk about the second proposed standard control, the toggle button. Should be simpler.</p>
			]]>
		</description>
	</item>

	
	

	
</channel>
</rss>