<?xml version='1.0' encoding='UTF-8' ?>
<rss version="2.0" xml:base="http://www.cincomsmalltalk.com/userblogs/mls/" xmlns:admin="http://webns.net/mvcb/" xmlns:blogChannel="http://backend.userland.com/blogChannelModule" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:icbm="http://postneo.com/icbm" xmlns:includedComments="http://www.laudably.com/rss2-comments" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:media="http://search.yahoo.com/mrss/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/">
	<channel>
		<title>Smalltalk and my misinterpretations of life</title>
		<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView</link>
		<description>Smalltalk and my misinterpretations of life</description>
		<webMaster>michael.lucassmith@gmail.com</webMaster>
		<lastBuildDate>Tue, 17 Apr 2012 18:00:22 GMT</lastBuildDate>
		<image>
			<url>/images/why-small.png</url>
			<title>Smalltalk and my misinterpretations of life</title>
			<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView</link>
			<height>50</height>
			<width>81</width>
		</image>
		<admin:generatorAgent rdf:resource="/CincomSmalltalkWiki/Silt"></admin:generatorAgent>
		<admin:errorReportsTo rdf:resource="mailto:michael.lucassmith@gmail.com"></admin:errorReportsTo>
		<dc:language>en-us</dc:language>
		<dc:creator>Michael Lucas-Smith</dc:creator>
		<dc:rights>Copyright 2005 Michael Lucas-Smith</dc:rights>
		<dc:date>2012-04-17T18:00:22-04:00</dc:date>
		<icbm:latitude>-35.283333</icbm:latitude>
		<icbm:longitude>149.133333</icbm:longitude>
		<item>
			<title>My blog has moved.</title>
			<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&amp;printTitle=My_blog_has_moved.&amp;entry=3484921625</link>
			<category>blog</category>
			<pubDate>Tue, 07 Jun 2011 17:47:05 GMT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>I've moved my blog to a new server, <a href="http://mlucassmith.tumblr.com">mlucassmith.tumblr.com</a>. It's not actually a full copy of this blog, so this blog stays - but it is my new blog, where I'll be posting new content. Please subscribe.</p>

</div>]]></description>
			<guid isPermaLink="false">3484921625</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/mls/servlet/CommentAPIPBServlet?guid=3484921625</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/mls/blogView?guid=3484921625</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
		</item>
		<item>
			<title>C++ template aliasing</title>
			<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&amp;printTitle=C++_template_aliasing&amp;entry=3461924974</link>
			<category>programming</category>
			<pubDate>Tue, 14 Sep 2010 13:49:34 GMT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>Recently I have been working on some C++ classes which make heavy use of templates. In particular there are two classes Vector, T, N and Matrix&lt;T, M, N=M&gt; where you specify the type of the elements and the number of elements for both. Examples of how you would use these are:</p>
<pre>
Vector&lt;double, 3&gt; myVector(1, 2, 3);
Matrix&lt;float, 3&gt; myIdentityMatrix;
</pre>
<p>As you can imagine, typing out that full declaration everywhere gets a little tiresome after a while. What I really wanted was a way to alias Vector3 to mean Vector&lt;double, 3&gt; yet at the same time be able to easily do Vector3&lt;float&gt;.</p>
<p>The most logical thing you might try and do is to template the typedef, eg:</p>
<p>template &lt;typename T=double&gt; typedef Vector&lt;T, 3&gt; Vector3;</p>
<p>However, you'll quickly discover that this is an unimplemented feature of C++0x. So what can you do instead? The simplest thing that came to mind at first was to make a subclass:</p>
<pre>
template &lt;typename T=double&gt; class Vector2 : public Vector&lt;T, 2&gt; {
Vector2 (void) : Vector () {}
Vector2 (T x, T y) : Vector (x, y) {}
};
</pre>
<p>The obvious problem here is that you have to re-implement the constructors and destructors each time you do this and if new constructors are added, they have to be added to the subclasses as well.</p>
<p>A thread on stack overflow had a different solution to the problem. While C++ doesn't let you template typedefs, it does let you template structs, which can contain typedefs:</p>
<pre>
template &lt;typename T=double&gt; struct Vector2 {
typedef Vector&lt;T, 2&gt; type;
};
</pre>
<p>This approach is a true alias, however it requires you to declare your variables like this:</p>
<p>Vector2&lt;&gt;::type myVector;</p>
<p>That's almost as much typing as you would be doing before - albeit without having to redeclare the types and dimensions every time. As I discussed this problem with a friend, he suggested that I template a namespace and then import the types with using, but it turns out that the following is invalid:</p>
<p>using LinearMath::Vectors&lt;&gt;;</p>
<p>You cannot have a template-id in a using-declaration. It introduces ambiguities in to the namespace. But this got me thinking about importing stuff in to your namespace and I realized I could actually do it using subclassing. Since all my code was generally in classes already, it was a simple matter of creating a class that I could inherit from.</p>
<pre>
template &lt;typename T=double&gt; class Vectors {
public:
typedef Vector Vector2;
};
</pre>
<pre>
class MyClass : Vectors&lt;&gt; {
Vector2 myVector;
};
</pre>
<p>What's particularly neat about this is that all the code in my class gets to uniformly use the same vector types and matrix types where appropriate - and they are true aliases, so two compatible types blend together without issue.</p>
<p>This goes to demonstrate the already well known fact that C++ is a very unpolished language with lots of rough edges. Templates exist, but they are not uniform across the language and there are many holes you can easily fall in to. Without namespace templates, typedef templates, using templates.. I was luckily able to find a solution using multiple inheritance.</p>

</div>]]></description>
			<guid isPermaLink="false">3461924974</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/mls/servlet/CommentAPIPBServlet?guid=3461924974</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/mls/blogView?guid=3461924974</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
		</item>
		<item>
			<title>Making WebVelocity apps look like iPhone apps</title>
			<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&amp;printTitle=Making_WebVelocity_apps_look_like_iPhone_apps&amp;entry=3458403271</link>
			<category>WebVelocity</category>
			<pubDate>Wed, 04 Aug 2010 19:34:31 GMT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>Recently I was asked to make a demo application that makes a standard WebVelocity application using scaffolding with active record look and work on the iPhone. There are three tricks to making a web page look like a native iPhone app: 1) colours, 2) orientation detection, 3) animations. In this demo I show off #1 and #2 and leave #3 for any <a href="http://www.jqtouch.com/">adventurous jQuery users out there</a>. The demo is in the Examples repository of WebVelocity under the name 'IPhone' and here is a video of it in action:</p>
<p><a href="http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/WebVelocity-20100804-iPhone.mov">http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/WebVelocity-20100804-iPhone.mov</a> (5.2mb)</p>
<p>
<object classid="" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="680" width="680">
<param name="src" value="http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/WebVelocity-20100804-iPhone.mov">
<param name="autoplay" value="false">
<param name="type" value="video/quicktime" height="680" width="680">
<embed src="http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/WebVelocity-20100804-iPhone.mov" height="680" width="680" autoplay="false" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/">
</object>
</p>
</div>]]></description>
			<guid isPermaLink="false">3458403271</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/mls/servlet/CommentAPIPBServlet?guid=3458403271</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/mls/blogView?guid=3458403271</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Making_WebVelocity_apps_look_like_iPhone_apps&amp;entry=3458403271</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Making_WebVelocity_apps_look_like_iPhone_apps&amp;entry=3458403271</includedComments:puid>
					<includedComments:author>Maarten</includedComments:author>
					<includedComments:pubDate>2010-08-10T06:38:24-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;This looks cool, but can you do the same with a desktop application ?&lt;/p&gt;&lt;p&gt;@+Maarten,&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Making_WebVelocity_apps_look_like_iPhone_apps&amp;entry=3458403271</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Making_WebVelocity_apps_look_like_iPhone_apps&amp;entry=3458403271</includedComments:puid>
					<includedComments:author>Michael</includedComments:author>
					<includedComments:pubDate>2010-08-10T12:48:10-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;What do you mean?&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
		</item>
		<item>
			<title>WebVelocity 1.1 is here!</title>
			<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&amp;printTitle=WebVelocity_1.1_is_here!&amp;entry=3457971233</link>
			<category>WebVelocity</category>
			<pubDate>Fri, 30 Jul 2010 19:33:53 GMT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>As you read this (assuming you're not reading this months from now) the final product media is being cut and burnt and tested. The software is done and as proof of that, you can actually start using it <b>right now</b> on Amazon Web Services.</p>
<p>So now that we've reached this milestone for the product, I wanted to talk about what it has become. It started off as VisualWorks with Seaside and Glorp and a few web tools to help you build applications more efficiently. But for 1.1, we thought bigger &#8212; what if we focused on making it super easy to develop and deploy your applications in the cloud itself?</p>
<p>We revamped all the tools, removed the old GUI layer and have the whole environment running in a web browser using HTML5, Javascript, Smalltalk, jQuery, Sweat, Blood and Tears. Now that we're in the web browser fully, you can use tabs to divide your work up and you can collaborate with other developers by sharing the web address around.</p>
<p>We wanted to make it super easy to get up and running this time around. With version 1.0 you had to run your own server or pave your own path to run it on top of Amazon EC2. This time we come packing with a complete solution running on top of EC2 and Amazon RDS if you so desire.</p>
<p>I've never worked on a product from scratch before that has so many buzzwords attached to it that it actually does. You can literally have your development environment up and running in the cloud, developing application collaboratively, deploying them to multiple instances in the cloud, load balancing it and sharing a cloud based database system in fifteen minutes flat. In fact, the most awkward part of the whole experience is the lack of tools from Amazon for Amazon RDS.</p>
<p>After watching the videos below it becomes difficult to think of WebVelocity as VisualWorks with a web skin over the top of it. It has become its own creation, a mythos of Smalltalks prowess all to its own. But unlike other variations of Smalltalk, we've done our best to reduce barrier to entry. Any one who can afford a few cents to fire up an Amazon EC2 instance can be using Smalltalk in minutes. We have examples, documentation and state of the art technology under the hood.</p>
<p>We started off chasing the tail of Ruby on Rails but at this point it's futile to compare ourselves to them too. Ruby has never believed in tools &#8212; we do, in a big way. Can you imagine writing code in a web browser, running it in a second tab to see how it works, discovering a bug and debugging with edit and continue in your main tab and then having the second tab instantly finish loading as if nothing had ever gone wrong? ... now can you imagine that you don't know how to fix the bug, so you just send the bug over to a friend working on his laptop at a coffee shop and having him fix it in moments?</p>
<p>Today we can get a true glimpse of what the future of cloud computing will be like for everyone. For we who are in the know we can start enjoying its virtues today. Please enjoy the videos produced by my colleague Jerry below:</p>
<ul>
  <li><a href="http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/AmazonRDS-2010-07-22-part1.mp4">WebVelocity on Amazon Web Services part 1</a></li>

  <li><a href="http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/AmazonRDS-2010-07-22-part2.mp4">WebVelocity on Amazon Web Services part 2</a></li>
</ul>
<p>Expect to see the <a href="http://www.web-velocity.com">website</a> updated soon with the release and if you're a customer already, expect to get the commercial CD soon.</p>

</div>]]></description>
			<guid isPermaLink="false">3457971233</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/mls/servlet/CommentAPIPBServlet?guid=3457971233</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/mls/blogView?guid=3457971233</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=WebVelocity_1.1_is_here!&amp;entry=3457971233</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=WebVelocity_1.1_is_here!&amp;entry=3457971233</includedComments:puid>
					<includedComments:author>Pete F</includedComments:author>
					<includedComments:pubDate>2010-08-01T20:01:21-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;When I tried 1.0 it struck me as very odd to be running it locally. Here was a solution that seemed such a natural fit for SAAS, why was the server running on my machine?&lt;/p&gt;&lt;p&gt;It also seems to me that selling WV as a service only would help with what I assume is a tricky issue of avoiding cannibalising your existing VisualWorks business. &lt;/p&gt;&lt;p&gt;To the extent that I could potentially make my written-in-WebVelocity app run on Squeak, renting  WebVelocity as a *development* tool is not scary  -and my bet is that 90% of folks would just run with the Cincom hosted "runtime" anyway having the *possibility* to move is enough  (eg the way Mono's mere existence keeps me ok to keep developing on .net)&lt;/p&gt;&lt;p&gt;Presumably the big 200th mininterpretations episode will be a WebVelocity 1.1 launch. It would be good to hear about the portability angle. Does WebVelocity 1.1 development lock me in to Cincom?&lt;/p&gt;&lt;p&gt;If you do the 200th show live, us punters could try hosted WV 1.1 during the show...&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
		</item>
		<item>
			<title>Development Utilities 6 years later</title>
			<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&amp;printTitle=Development_Utilities_6_years_later&amp;entry=3457955630</link>
			<category>smalltalk</category>
			<pubDate>Fri, 30 Jul 2010 15:13:50 GMT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>Six years ago I wrote a blog post about <a href="http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&amp;entry=3262461779">development utilities that I used on a day to day basis</a> in VisualWorks. I stumbled across it in a Google search today and I thought it'd be interesting to contrast what I was using back then with their status today.</p>
<ul>
  <li>UIPainter -- Almost nothing has changed with this part of the product since 2004. For the most part, it does its job fairly well, but I personally think it's starting to show a bit of ware and tear with age.</li>

  <li>ProgrammingExtensions -- This is as useful as it was back in 2004, specifically for the extension that lets you middle click on a widget and inspect it.</li>

  <li>Method-History -- this extension no longer works. This differed from the two built-in tools in that it monitored the system for changes and recorded them so you could find what changed quickly. We have two tools in the system, the first scans the changes file for the method in question and the other looks up store versions of the method. Squeak makes the changes file scan fast by indexing it - we do not. Still, all in all, I don't miss this tool - but I might consider re-introducing it as an extension to Searchlight one of these days.</li>

  <li>AutoComplete -- I haven't had an auto completer loaded in to my image in -years-. This is quite bizarre because I use them all the time when I'm working in other tools like Xcode of VirtualStudio. The state of the art here hasn't changed, but I suspect one of these days we may hook it up to the Searchlight database for faster suggestion searching.</li>

  <li>ExtraEmphasis -- This has slowly plodded along and will one day help push the state of text attributes forward in VisualWorks. For now, it's still in use by many people - but it's not in the base.</li>

  <li>MouseWheelX11 -- The bug was fixed, this package is obsolete.</li>

  <li>FileProgress -- This parcel is still around and it might be useful when you're copying files around. I haven't even thought of this thing since 2004 apparently.</li>

  <li>RBSUnitExtensions -- I actually use SUnitToo(ls) now because most of my tests are written on top of SUnitToo. This package is still around and works, but I prefer SUnitToo(ls) integration in to the code browser better.</li>

  <li>RBRegexExtensions -- I use this on a day to day basis. It's just one of those useful swiss army knives. I want to integrate this kind of capability in to WebVelocity.</li>

  <li>RBStoreExtensions -- I haven't used this in a long time. I use some internal tools we have here at Cincom which integrate in to our issue management system instead.</li>

  <li>SmaCC Runtime -- I haven't needed to load this in a long time. I prefer using PEGs now in Xtreams where I can. The PEG technology is behind the syntax highlighters in WebVelocity 1.1</li>

  <li>RBBytecodeTool -- Still the same as it was before. It's neat for learning how bytecodes are applied under the hood in VisualWorks but not really useful day to day.</li>

  <li>ThreePaneSelectorsBrowser -- I've had reports that this might be broken in the latest version of VisualWorks. I don't use it any more, I use Searchlight-Tools instead. It doesn't do quite the same job (allowing you to quickly see related methods to a search) but it does other things much better.</li>

  <li>RBCodeHighlighting -- This guy has been upgraded over the years and has many extensions to it - such as a spell checker!</li>

  <li>HyperRBCodeHighlighting -- This one fell off the wagon a while ago and hasn't had much love compared to the RBCodeHighlighting package.</li>

  <li>Arbor Hypertext -- Avoid if at all possible I'd say. This is oooolllddd tech. Heck we integrated URL navigation in to the comment panes a year or so back as part of the RBCodeHighlighting package and the base image.</li>

  <li>All Advanced Tools -- Same as it was before, the profiling tools are the most important part of this package set.</li>

  <li>ImageCompression -- Well it's there and I use it, but it's one of those tools that lives on the side of my packaging process. Set and forget.</li>

  <li>ThrottledCursor -- The bug was fixed, this package is obsolete.</li>

  <li>NewPrerequisiteEngine -- Integrated!, this package is obsolete.</li>

  <li>DMTrippyEnhancements -- I'm not sure if this is compatible any more, but it might be. It added an XML pane when you're inspecting XML dom nodes, which was neat and useful for me at the time.</li>

  <li>ExtraIcons -- Deprecated, new icons are integrated the whole environment.</li>

  <li>StackOverflow -- Still useful from time to time, especially when you're running code in a sandbox.</li>

  <li>NextVersionPundlePublishing -- I haven't looked at this in years, I don't even remember what problem it was trying to solve exactly.</li>

  <li>File Repository -- Defunct, file versioning is supported by Bundles, however that support is pretty awful. Personally, I'd just use svn, git or mercurial now.</li>

  <li>LearningMenus -- It did its job when I made it, data discovered with it was used to enhance the product as a whole over several years. We may resurrect this when designing new UIs from time to time.</li>

  <li>SpsMergeToolMods -- Defunct, there are a whole new set of tools for merging and changes in the product now.</li>

  <li>AddInstVarAtCompileTime -- Merged a long time ago.</li>

  <li>ProportionalTabs -- Perhaps this might be useful to people still, but I haven't seen the issue it was addressing in a while now. It may have been the kinds of UIs I was making back then had a lot of tabs, but that doesn't bother me much these days.</li>

  <li>RBDiffs -- Integrated.</li>

  <li>RB_Tabs -- Not integrated, but really I think this type of functionality should be in the product.</li>

  <li>BuffersAreBack -- I guess this is still relevant, if you want 'old style' buffers in the RB - the RB already has buffers though and they work just fine.</li>
</ul><br />

</div>]]></description>
			<guid isPermaLink="false">3457955630</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/mls/servlet/CommentAPIPBServlet?guid=3457955630</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/mls/blogView?guid=3457955630</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Development_Utilities_6_years_later&amp;entry=3457955630</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Development_Utilities_6_years_later&amp;entry=3457955630</includedComments:puid>
					<includedComments:author>Karsten</includedComments:author>
					<includedComments:pubDate>2010-08-01T16:05:00-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Another interesting questing, besides these tool's status today is: did anything new join your toolbox? :-D&lt;/p&gt;&lt;p&gt;Karsten&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Development_Utilities_6_years_later&amp;entry=3457955630</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Development_Utilities_6_years_later&amp;entry=3457955630</includedComments:puid>
					<includedComments:author>Chris</includedComments:author>
					<includedComments:pubDate>2010-08-02T00:04:11-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;Definitely agree with you on the UIPainter. Parts of the cairo graphics kit are my attempt to breath some new life into it, but there is no doubt that it's more than a one man job to modernize it. I have a long laundry list of things I want to improve / add, but at my pace, it will be out of date again by the time I finish what I want to do with it! &lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Development_Utilities_6_years_later&amp;entry=3457955630</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Development_Utilities_6_years_later&amp;entry=3457955630</includedComments:puid>
					<includedComments:author>Michael</includedComments:author>
					<includedComments:pubDate>2010-08-02T17:45:57-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;SpellcheckHighlighting and HyperlinkHighlighting are two new toys - the first adds spell checking to the comment tabs and to the comments in your source code, which is just -fantastic-. The second makes URLs in the comments clickable, which is neat. Of course there is Searchlight which is a staple for me.&lt;/p&gt;&lt;p&gt;I try to be fairly minimalistic in my approach to 'extras' these days. If I find something really useful I'll usually try to get it in to the product so that it isn't hidden away for only those who know where to look.&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
		</item>
		<item>
			<title>Normalization vs Compression</title>
			<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&amp;printTitle=Normalization_vs_Compression&amp;entry=3456140556</link>
			<category>computing</category>
			<pubDate>Fri, 09 Jul 2010 15:02:36 GMT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p>Recently I was working on a relational database and I was juggling the eternal act of normalization with efficiency. There are many books about database normalization written by people who love writing books about database normalization. I've read a couple myself and it all seemed reasonable back in university.</p>
<p>But it's the 21st century and it dawned on me that normalization is the futile act of trying to manually compress data. If you break up your data records in to its related component parts to -avoid duplicate data- then you're literally trying to re-invent compression ..badly.</p>
<p>So let's say we let compression deal with our data storage. Smart hashing would mean you'd easily be able to store just as much data in "document" format. But how do you identify when two records are actually the same? I suspect this is the job of hashing and indexing. If two people have the same (and more interestingly - similar) address, statistical machine analysis will find this fact without a programmer having to define the concept of address as its own table.</p>
<p>I've also seen a few impressive search engines that work by doing exactly this - compressing the data and using hashes to look it up rapidly. That combined with similar indexing and automatic data normalization through reduction seems interesting to me. It could find patterns that you'd never think of normalizing normally but ultimately make your program more efficient, based on how you're using the data.</p>
<p>You can also use the same technique to apply indexing automatically. It is compression after all, so finding the kinds of data you're looking for is the job of statistical machine learning. Is there anyone out there doing this right now? I'd be interested in trying to use this kind of database over a classical relational database.</p>

</div>]]></description>
			<guid isPermaLink="false">3456140556</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/mls/servlet/CommentAPIPBServlet?guid=3456140556</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/mls/blogView?guid=3456140556</pingback:target>
			<includedComments:comment-collection>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Normalization_vs_Compression&amp;entry=3456140556</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Normalization_vs_Compression&amp;entry=3456140556</includedComments:puid>
					<includedComments:author>Cees de Groot</includedComments:author>
					<includedComments:pubDate>2010-07-13T08:38:00-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;It's exactly the sort of stuff we deal with on a day-by-day basis. Any big website will have search engines and whatnot backing up a relational database, but we never use the actual relational bits of it. Accesses to the DB are usually by primary key only, the search engine handles the rest. &lt;/p&gt;&lt;p&gt;So, what you end up with is further screwing up the issues with disk latency. Instead of a single read to pull a 4k block from the drive containing The Document, the relational database gets a slew of queries scattered over several tables to pull together all the various normalized records that comprise the logical datum. &lt;/p&gt;&lt;p&gt;As far as I'm concerned, normalization is definitely a thing of the past for the sort of website I work at :)&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Normalization_vs_Compression&amp;entry=3456140556</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Normalization_vs_Compression&amp;entry=3456140556</includedComments:puid>
					<includedComments:author>Isaac</includedComments:author>
					<includedComments:pubDate>2010-07-13T08:45:36-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;I don't think normalization is primarily meant to save disk/memory space, but rather to make the model of the data as exact as possible so that you can contruct any sort of query you want against it, and to make sure you know that data has a single canonical source.  If the same data is in the database in multiple places (an employee's phone number is repeated for every project she is assigned to) then it's not clear which is authoritative.  &lt;/p&gt;&lt;p&gt;I've generally found normalization to be extremely helpful with any long lasting dataset (since you end up using it later in ways you hadn't expected originally), and also think it's acceptable to de-normalize pieces of data for performance reasons, as long as it's still clear where the "official" source of that data is.  &lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Normalization_vs_Compression&amp;entry=3456140556</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Normalization_vs_Compression&amp;entry=3456140556</includedComments:puid>
					<includedComments:author>JenaVelescu</includedComments:author>
					<includedComments:pubDate>2010-07-13T15:37:03-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;&lt;/p&gt;&lt;p&gt;mmmmI think you may be right in what you have said in this post. Whoever there will be many people will not agree with your opinion&lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
				<includedComments:comment>
					<includedComments:guid>blogView?showComments=true&amp;printTitle=Normalization_vs_Compression&amp;entry=3456140556</includedComments:guid>
					<includedComments:puid>blogView?showComments=true&amp;printTitle=Normalization_vs_Compression&amp;entry=3456140556</includedComments:puid>
					<includedComments:author>Joerg Beekmann</includedComments:author>
					<includedComments:pubDate>2010-07-16T17:51:48-04:00</includedComments:pubDate>
					<includedComments:content>&lt;div xmlns="http://www.w3.org/1999/xhtml"&gt;
&lt;p&gt;In your example if the "same" address can be entered multiple times  you know there will be discrepancies. If the data was guaranteed to be duplicated exactly I couldn't care less how many times it written. &lt;/p&gt;
&lt;/div&gt;</includedComments:content>
					<includedComments:title>Untitled</includedComments:title>
				</includedComments:comment>
			</includedComments:comment-collection>
		</item>
		<item>
			<title>Of 3D Engines and 3D Modelers</title>
			<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&amp;printTitle=Of_3D_Engines_and_3D_Modelers&amp;entry=3453803536</link>
			<category>opengl</category>
			<pubDate>Sat, 12 Jun 2010 13:52:16 GMT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><b>What a mess!</b> The next big step to take for 3D graphics in VisualWorks is to get some serious models in to the system, with <a href="http://www.public-action.com/SkyWriter/WacoMuseum/library/bones1.jpg">bones</a>, <a href="http://en.wikipedia.org/wiki/Animation">animations</a>, <a href="http://en.wikipedia.org/wiki/Computer_facial_animation">facial structures and animations</a>, UVW mapping, high polygon-count -&gt; low triangle count with <a href="http://en.wikipedia.org/wiki/Bump_mapping">bump mapping</a>, etc. It turns out this is a huge black hole of technology.</p>
<p>Premise 1: <b>Making a 3d modeler is a lot of work</b>, not because of the rendering and interactive capabilities - both of which you'd need for any serious 3d program/game - but because of the transformative properties of such an application. You also have to consider the kind of modeler you want to make. The simplest is polygonal modeling, but this is incredible difficult to use to make organic looking shapes. Next is <a href="http://en.wikipedia.org/wiki/Non-uniform_rational_B-spline">NURBS</a> which is used by the big guns, Maya and 3ds Max. <a href="http://en.wikipedia.org/wiki/Spline_(mathematics)">Splines</a> and patches are the poor mans version of NURBS. Next, <a href="http://en.wikipedia.org/wiki/Geometric_primitive">Primitives</a> which is a set of <a href="http://www.peachpit.com/articles/article.aspx?p=30594&amp;seqNum=5">geometrics</a> such as balls, cyilnders, cubes that can be used and parameterised as the building blocks of a model. Finally, there is the newer techniques of sculpt modeling where you use things like <a href="http://en.wikipedia.org/wiki/Subdivision_surface">subdivision surfaces</a> or <a href="http://en.wikipedia.org/wiki/Voxel">voxels</a> to build shapes from blobs.</p>
<p>Premise 2: <b>Importing from a proprietary format or open format is less work</b> than building a whole modeler, so let's just do that <i>kthx bai</i>. Well, interesting in theory but it turns out in practice there are a few stumbling blocks here. First off, most of the formats you can use do not include any bone structures or animation. If they do include animation often it is a single key-frame timeline without any markers to indicate start/stop points of an animation, let alone evolution between animation modes.</p>
<p>The 'serious' format of the business right now is still .fbx which is <a href="http://usa.autodesk.com/adsk/servlet/pc/item?siteID=123112&amp;id=10775847">Autodesk's format</a> supported by Maya and 3ds and it is the main import format in to Microsoft's XNA. This is the most 'standard' of the formats because they provide a free SDK written in C++ to import their .fbx files in to memory for you to then render. The format is proprietary and as we well know, integrating with a C++ library from VisualWorks is a real pita. Despite this, fbx includes animation data, bone structures, just about everything you might ever need to render something properly. Yet, Microsoft built pipeline tools to convert the .fbx format in to their own format - the SDK contains a HUGE swath of code to render a scene, manipulate cameras, etc, all of which is redundant and out dated when you build a custom rendering pipeline such as deferred shading and SSAO.</p>
<p>Premise Each format of course is dictated by the kind of modeling technique used - as described above, are you going to get lists of triangles, NURBS, patches or primitives? What do you do with all that once you've got it. One of the advantages of the .fbx SDK is that it comes with an API to tesselate the model in to triangles - I expect this is what Microsoft does in their pipeline. But even here we're making too many assumptions about the end result dataset. What if we want more triangles? What if want to bump map?Too many what ifs.</p>
<p>3: <b>It's what the big guys do, so it's probably what we should do</b>. Cry Engine 3, one of the more famous 3d engines around has ways of importing content just like Microsoft XNA. But, it becomes apparent very quickly that all but the most simplest of data comes from the 3d modeler in to Cry Engine. Terrain is their game, they build roads, trees, oceans, mountains. They also do facial animations, <a href="http://www.it.hiof.no/~borres/gb/exp-skeletal/p-skeletal.html">body animations</a>, bone structuring, sound tagging.. all kinds of stuff that cannot be done inside of 3ds Max or Maya. So essentially, even when you're using the biggest baddest 3d engine out there, you're molding the clay, then moving over to their engine to do the heavy lifting.</p>
<p>Conclusion: <b>Everything is one giant mess</b>. Even if you go with 3ds Max or Maya, or a free variant such as <a href="http://www.wings3d.com/">Wings 3d</a> or a cheap variant such as <a href="http://chumbalum.swissquake.ch/">Milkshape 3D</a>, you're still only going to get as much data out of it as you can invest in to it - which is to say, usually not very much. If we go back to Premise #1 we posit that it's hard to make a 3d modeler. It's probably not as hard as everything else you have to do <i>after</i> you've made your model. <a href="http://www.crytek.com/technology/cryengine-3/specifications/">Cry Engine 3</a> lets you build the world while you're in it; sound familiar? very smalltalk-ish isn't it. So why not have the whole tool chain from go-to-woe all in the one engine? Then, rendering in Maya is never going to look different to how it looks in the final rendering engine with sun-moon cycles, retinal brightness adjustment, material and shader integration, mood lighting, sound integration (yes, sounds do affect the way you see things), etc.</p>
<p>What this has led me to conclude is that the main reason to support <a href="http://lib3ds.sourceforge.net/">3ds Max</a> or Maya is to <b>import talent</b> - any one who is familiar with these tools can build you 3d models very easily. Unfortunately for you, the models will often be boneless, animation-less, facial animation-less, jointless, muscleless and be stacked with all kinds of custom shader options, unique primitives you don't support, etc.</p>
<p>What's the alternative? <b>Make your own 3d modeler as part of your 3d engine</b>. The downfall here is that you have to train up the talent to use your software - however, your entire content pipeline can be fully integrated between the software and the modelers as well as the world/terrain editor. There is another hidden pitfall too - your assets are less portable if they're only stored in your own proprietary format. I'd bet money that Duke Nukem Forever hit this problem when they were porting between engines.</p>
<p>So my next step now is to take the dive, start making a 3d modeler / world / terrain editor all in one (since they are very similar in nature) which will further allow me to build a geometry rendering / deferred shading renderer with <a href="http://www.gamedev.net/community/forums/topic.asp?topic_id=463075&amp;whichpage=2&amp;#3196920">SSAO</a> for high quality rendering, as well as day-night cycle. Two other engines that aren't "big guns" that I take inspiration from are <a href="http://www.quelsolaar.com/">Quel Solaar</a> and <a href="http://www.leadwerks.com/">Leadworks</a>. If nothing else, it'll educate me more and I should have fun trying.</p>

</div>]]></description>
			<guid isPermaLink="false">3453803536</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/mls/servlet/CommentAPIPBServlet?guid=3453803536</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/mls/blogView?guid=3453803536</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
		</item>
		<item>
			<title>WebVelocity 1.1 beta preview</title>
			<link>http://www.cincomsmalltalk.com/userblogs/mls/blogView?showComments=true&amp;printTitle=WebVelocity_1.1_beta_preview&amp;entry=3453034958</link>
			<category>WebVelocity</category>
			<pubDate>Thu, 03 Jun 2010 16:22:38 GMT</pubDate>
			<description><![CDATA[<div xmlns="http://www.w3.org/1999/xhtml">
<p><p style="width: 640px">Now that we're very close to releasing a beta, I thought it was time to do a screencast to give everybody a sneak peek at what's been since WebVelocity 1.0. The answer is: a lot. A whole new editor, a whole new look refresh, a whole new slew of tools, a whole new debugger, a whole new version of Seaside underneath, support for SQLite3 active record, Amazon EC2 deployment capabilities, now runs in Firefox, Chrome and Safari.. and a whole lot more.</p>
<p style="width: 640px">If you would like to try out WebVelocity 1.1 beta, email <a href="mailto:athomas@cincom.com">Arden Thomas</a> or <a href="mailto:jrobertson@cincom.com">James Robertson</a> and they'll get you started. You can download the movie directly from here: <a href="http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/WebVelocity-20100603-WV11BetaPreview.mov">http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/WebVelocity-20100603-WV11BetaPreview.mov</a>.</p>
<p>
<object classid="" codebase="http://www.apple.com/qtactivex/qtplugin.cab" height="760" width="1290">
<param name="src" value="http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/WebVelocity-20100603-WV11BetaPreview.mov">
<param name="autoplay" value="false">
<param name="type" value="video/quicktime" height="760" width="1290">
<embed src="http://dl.dropbox.com/u/20291/Cincom%20Smalltalk/WebVelocity-20100603-WV11BetaPreview.mov" height="760" width="1290" autoplay="false" type="video/quicktime" pluginspage="http://www.apple.com/quicktime/download/">
</object>
</p>
</p></div>]]></description>
			<guid isPermaLink="false">3453034958</guid>
			<pingback:server>http://www.cincomsmalltalk.com/userblogs/mls/servlet/CommentAPIPBServlet?guid=3453034958</pingback:server>
			<pingback:target>http://www.cincomsmalltalk.com/userblogs/mls/blogView?guid=3453034958</pingback:target>
			<includedComments:comment-collection></includedComments:comment-collection>
		</item>
	</channel>
</rss>
