<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://mindjetlabs.com/cs/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>The Organizational Irritant</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/default.aspx</link><description /><dc:language>en</dc:language><generator>CommunityServer 2.1 (Build: 60809.935)</generator><item><title>A Working MindManager Sample Add-in</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/11/23/MindManager-Sample-Add_2D00_in.aspx</link><pubDate>Fri, 23 Nov 2007 22:04:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:1627</guid><dc:creator>dethomas</dc:creator><slash:comments>0</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/1627.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=1627</wfw:commentRss><description>There are a number of reasons why writing a MindManager Add-in can be useful. Most obvious is the desire for intimate control over user interaction, and the ability to manipulate some external system using map data as a guide. Creating an Add-in begins...(&lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/11/23/MindManager-Sample-Add_2D00_in.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=1627" width="1" height="1"&gt;</description><enclosure url="http://mindjetlabs.com/cs/blogs/organizational_irritant/attachment/1627.ashx" length="5351322" type="application/x-zip-compressed" /><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Add-in+development/default.aspx">Add-in development</category></item><item><title>The File Explorer Map Part - Now that's a useful error message</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/10/06/The-File-Explorer-Map-Part-_2D00_-Now-that_2700_s-a-useful-error-message.aspx</link><pubDate>Sun, 07 Oct 2007 04:47:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:1522</guid><dc:creator>dethomas</dc:creator><slash:comments>3</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/1522.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=1522</wfw:commentRss><description>There is no painless way to start this post, so I&amp;#39;ll just leap in and thrash about. This blog has been dark for several months. Since I have a day job, that&amp;#39;s not completely surprising. Somehow I fell out of the habit of posting, if I ever had...(&lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/10/06/The-File-Explorer-Map-Part-_2D00_-Now-that_2700_s-a-useful-error-message.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=1522" width="1" height="1"&gt;</description><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/map+parts/default.aspx">map parts</category></item><item><title>Creating a MindManager 7 Add-in Sample</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/07/15/Creating-a-MindManager-7-Add_2D00_in-Sample.aspx</link><pubDate>Mon, 16 Jul 2007 03:32:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:1343</guid><dc:creator>dethomas</dc:creator><slash:comments>0</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/1343.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=1343</wfw:commentRss><description>So I started to think about how to write coherently about creating a C# MindManager 7 Add-in sample. While the MindManager Add-in model loosely follows that seen in Visual Studio and the Microsoft Office products, there are a number of areas specific...(&lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/07/15/Creating-a-MindManager-7-Add_2D00_in-Sample.aspx"&gt;read more&lt;/a&gt;)&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=1343" width="1" height="1"&gt;</description><enclosure url="http://mindjetlabs.com/cs/blogs/organizational_irritant/attachment/1343.ashx" length="35956" type="application/vnd.mindjet.mindmanager" /><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/MM7/default.aspx">MM7</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Add-in+development/default.aspx">Add-in development</category></item><item><title>MindManager 7 - Getting Over Ribbon Shock </title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/07/03/MindManager-7-_2D00_-Getting-Over-Ribbon-Shock-.aspx</link><pubDate>Tue, 03 Jul 2007 16:55:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:1317</guid><dc:creator>dethomas</dc:creator><slash:comments>0</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/1317.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=1317</wfw:commentRss><description>&lt;p&gt;Howdy. &lt;/p&gt;&lt;p&gt;I&amp;#39;d apologize for the lengthy silence on this blog, except I don&amp;#39;t have a good reason beyond the stress of modern life.&amp;nbsp; That and the release of MindManager 7.&lt;/p&gt;&lt;p&gt;I was getting ready to post an Add-in sample written in C# for MindManager 6 when the first MM7 ripples started to lap at my toes.&amp;nbsp; I decided to hold off posting something new since the environment was changing. While I was holding off, MM7 launched and other threads of my life snarled up. &lt;/p&gt;&lt;p&gt;But things settled down, I untangled the strands of family/work/health/purpose/goals and other basic life stuff, and finally got around to installing MM7.&amp;nbsp; I wanted to see how much work it would be to port the various add- ins and macros I use to the MM7 platform.&amp;nbsp; But I need to keep MM6 around until my employer upgrades.&lt;/p&gt;&lt;p&gt;So I fired up MM7, and immediately succumbed to serious ribbon shock.&amp;nbsp; The UI looks way different.&amp;nbsp; Since I haven&amp;#39;t been using Office 2007, the new &lt;a href="http://rcd.typepad.com/rcd/2007/06/mindmanager_pro.html#more"&gt;&lt;span&gt;Fluent UI&lt;/span&gt;&lt;/a&gt;&lt;span&gt; meant climbing a new learning curve. On an application I thought I knew, thank you very much.&amp;nbsp; And this is just a preview for when my employer gets around to upgrading to Office 2007, sometime after the second Cheney presidency.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;But after some curmudgeonly snarling, I found this &lt;a href="http://wiki.activityowner.com/index.php?title=Mindmanager7_Setup_Tips"&gt;&lt;span&gt;nice set of MM7 setup hints&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&amp;nbsp; Bringing back the task pane and workbook tabs made it easier to orient myself in the application.&amp;nbsp; Hooray for Google, and hooray for the &lt;a href="http://wiki.activityowner.com" target="_blank"&gt;Activity Owner Wiki&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;So what else is there to like in MM7?&amp;nbsp; The application seems faster overall, especially on startup.&amp;nbsp; Shortcut keys still work. We can save Power Filters settings as &amp;quot;Queries&amp;quot; in a map, but not outside a map for easy use in many maps. Old maps load without error or conversion. Copy my macros into the &amp;quot;C:\Documents and Settings\dethomas\Local Settings\Application Data\Mindjet\MindManager\7\macros&amp;quot; directory, and they work.&amp;nbsp;&amp;nbsp;Update the File Explorer with my modified version, and it works.&amp;nbsp; And the UI customizations made by my MM6 add-ins - menus, menu items, toolbars and toolbar buttons - are assigned to an Add-in ribbon tab with Menu Commands and Toolbar Command groups without source code change.&amp;nbsp; All I had to do was reference the MindManager 7 Type Library, change a &amp;quot;6&amp;quot; to a &amp;quot;7&amp;quot;&amp;nbsp; in the registry key ( &lt;font size="2"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Mindjet\MindManager\7\AddIns&lt;/font&gt;) MM uses to find the Add-in components, and rebuild/register the Add-ins to get them running.&lt;/p&gt;&lt;p&gt;I do have some annoying MM7-and-Windows Installer interactions.&amp;nbsp;Upon loading&amp;nbsp;some maps, but not all, the Windows Installer asks for my Office 2003 CD.&amp;nbsp; I haven&amp;#39;t figured that one out, but uninstalling MM6 will probably make it stop.&lt;/p&gt;&lt;p&gt;The Fluent UI has a footprint in the MindManager object model, so it appears an Add-in can add a new Ribbon Tab with one or more custom Ribbon Tab Groups, then add commands to that group.&amp;nbsp; Or the Add-in could retrieve an existing Ribbon Tab and add a Group to it, or even add new commands to an existing Ribbon Tab group. In pseudo code, making a new tab goes like this:&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Get the Ribbon object from the Application object&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Get the RibbonTabs collection from the Ribbon&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Call RibbonTabs.Add() to create a new ribbonTab object, passing a caption and a URI as an identifier. Use a URI like &amp;quot;URI://SomeAddInName/2007/Tabs&amp;quot; or something.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Get the ribbonTab.Groups collection from the new ribbonTab instance&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Call RibbonGroups.Add() to create a new RibbonGroup, passing a caption and a URI like &amp;quot;URI://SomeAddInName/2007/Tabs/SomeGroupName&amp;quot;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Having the new RibbonGroup, get its Controls collection, and add your commands to that collection. This appears to be the same Controls collection type as in MM6, so the &lt;a href="http://www.mindjet.com/us/devzone/6/mm6_object_model/Page106.html#Commands"&gt;&lt;span&gt;DevZone MM6 UI customization material &lt;/span&gt;&lt;/a&gt;&lt;span&gt;regarding Commands and Controls applies.&amp;nbsp; The basic idea is to create a Command object, which carries Click, UpdateState and UpdateCommand handlers to be called by the host, then add that Command instance to a Controls collection by way of Controls.AddButton().&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;But I haven&amp;#39;t figured out how to get &lt;a href="http://blogs.msdn.com/microsoft_office_word/archive/2007/01/04/keyboard-shortcuts-keytips-and-comics.aspx"&gt;&lt;span&gt;Fluent KeyTips&lt;/span&gt;&lt;/a&gt;&lt;span&gt; to work on individual commands.&amp;nbsp; Using &amp;quot;Tab&amp;amp;Name&amp;quot; as a Tab caption makes ALT+N the KeyTip for a ribbonTab instance, but using the &amp;#39;&amp;amp;&amp;#39; character in a command caption doesn&amp;#39;t seem to make the following character a KeyTip for the command.&amp;nbsp; And KeyTips don&amp;#39;t appear in the VisualStudio Object Browser when you point it at the MM7 metadata.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;All this is nice, but if an Add-in was adding commands to the MM6 menus using the mmDynamicMenu enumeration, things have changed.&amp;nbsp; There are a bunch more enumeration values and the MM6 values are deprecated.&amp;nbsp; You can get a grip on this by looking at the Tools- &amp;gt;Macro- &amp;gt;OrganizeMacros dialog, (Alt+F8) clicking Modify on a macro, and looking at the Menu list box. The familiar menus from MM6 are there, but they carry a &amp;quot;No longer used&amp;quot; note. Passing one of these deprecated values when creating a menu control results in an entry in the MenuCommands group on the Add-in tab I mentioned above.&lt;/p&gt;&lt;p&gt;There&amp;#39;s a number of other things to explore in the MM7 object model.&amp;nbsp; What does the ICustomMdiWindow interface do?&amp;nbsp; How about IBrowserDialog?&amp;nbsp; Or IDocumentBar?&lt;/p&gt;&lt;p&gt;Recalling the amount of whining I did about the MM6 object model docs, and how little good it did, I&amp;#39;m assuming there won&amp;#39;t be an DevZone MM7 Object Model update for a while.&amp;nbsp; But maybe I&amp;#39;ll be pleasantly surprised.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Right now, the plan is to get my sample Add-in stable on MM7, post the source and go from there.&amp;nbsp; &lt;/p&gt;&lt;p&gt;So I&amp;#39;ll be spelunking both the new Ribbon UI and the MM7 object model at the same time.&amp;nbsp; Bummer, but I could be flying Jet Blue.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=1317" width="1" height="1"&gt;</description><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/object+model/default.aspx">object model</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/MM7/default.aspx">MM7</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Ribbon+UI/default.aspx">Ribbon UI</category></item><item><title>The File Explorer Map Part - Extensions and Enhancements</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/04/15/The-File-Explorer-Map-Part-_2D00_-Extensions-and-Enhancements.aspx</link><pubDate>Sun, 15 Apr 2007 18:31:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:1100</guid><dc:creator>dethomas</dc:creator><slash:comments>0</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/1100.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=1100</wfw:commentRss><description>&lt;p&gt;In an imperfect world, even perfection is flawed.&amp;nbsp; Which you would think might make me feel a little better after rereading my last &lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/04/14/The-File-Explorer-Map-Part-_2D00_-Just-Deep-Enough.aspx"&gt;&lt;span&gt;File Explorer Map Part post&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, but that turned out to be only true in part.&amp;nbsp; What did make me feel better was compiling a list of further extensions and enhancements to the File Explorer Map Part. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;Here&amp;#39;s a fast bullet point summary of things that could be done to the File Explorer Map Part, with an eye to making it more flexible:&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Let the user adjust the Skip List - There&amp;#39;s a hard coded set of file name specifications (*.exe, *.dll and the like) to ignore when generating file system topic content in the &lt;em&gt;Refresh.mmbas&lt;/em&gt;. script. Would be nice to keep this as a default and let the user add or remove additional specifications.&lt;br /&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Let the user choose to always use the maximum possible folder depth - a persistent option to always expand the map part sub tree might be useful, but this expansion can be slow in the current implementation, particularly for deep file/folder hierarchies.&lt;br /&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Display File Explorer Map Part version number - Would be handy to know what version of the map part we&amp;#39;re dealing with in a given Map document.&lt;br /&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Auto-expand the map part to some level less than or equal to maximum - Having a defined folder depth to limit tree expansion upon refresh might be useful.&lt;br /&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Solicit the user to provide a prefix string for either or both File and Folder topics - There&amp;#39;s an unused feature in the stock implementation which could be used to prefix file and folder names in the topic text.&amp;nbsp; Tying this to some file specification list might be handy, say &amp;quot;*.txt&amp;quot; files get a &amp;quot;Text File - &amp;quot; prefix.&lt;br /&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Speed up the file/folder traversal - The stock File Explorer map part uses the Scripting.FileSystemObject in a quasi-recursive manner. For more than 2 to 4 folder levels, or say more than 20 files or so, this implementation takes a while.&amp;nbsp; A COM object built for the purpose could be much faster, and could perhaps support non-local-file-system protocols like WebDAV, FTP or even HTMLHelp.&lt;br /&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Provide an optional total file/folder count as Callout or Topic Text in the File Explorer Map Part - &amp;nbsp;Since we have the information, it would be a user courtesy to annotate File Explorer Map Part topic text with a count of the number of files and folders beneath it in a Map document.&lt;br /&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Host a property grid in an actual property page dialog - If we&amp;#39;re going to have all these user- settable values, we should put them in a Property Grid presentation, provide both default and per- instance settings, and support a &amp;quot;Restore Defaults&amp;quot; button to reset a given instance to the defaults.&lt;br /&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Remove the smiley robot face from message boxes and dialogs - OK, now I&amp;#39;m just whining.&amp;nbsp; But I&amp;#39;d like to get rid of the smiling robot icon appearing in the upper left corner of WinWrap Basic message boxes and dialogs.&amp;nbsp; It clashes with the rest of the MindManager UI look. &amp;quot;Mawkish Macro Manifestation&amp;quot; is a descriptive phrase for the appearance. (Don&amp;#39;t wince, just &lt;a href="http://dictionary.reference.com/browse/mawkish"&gt;&lt;span&gt;look it up&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.)&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Of course, these extensions would have to maintain compatibility with prior versions of File Explorer Map Parts.&amp;nbsp; Or we should create a distinct map part using the &lt;a href="http://www.mindjet.com/us/devzone/6/mm6_smart_map_parts_tech_doc/index.html"&gt;&lt;span&gt;MindManager GSMP&lt;/span&gt;&lt;/a&gt;&lt;span&gt; technology and avoid the issue.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;While generating this list might fall into a category labeled &amp;quot;Here Motion Gives the Illusion of Progress,&amp;quot; it also let me fool around with the MindManager macro language with some sense of purpose.&amp;nbsp; My primary source was the Language Help accessible from the MindManger Macro Editor (Tools-&amp;gt;Macro-&amp;gt;Macro Editor, then in the resulting window, Help-&amp;gt;Language Help)&amp;nbsp; Sparse help topics are provided for both the Integrated Development Environment (IDE) and the macro language itself.&lt;/p&gt;&lt;p&gt;Under the covers, the MindManager macro language is a Visual Basic compatible scripting engine known at the time of first release (1993? 1994?) as SAX Basic.&amp;nbsp; This is the name appearing in the Help topics provided by the Macro Editor, with copyright cited for &amp;quot;1993-2001.&amp;quot;&amp;nbsp; &lt;/p&gt;&lt;p&gt;By the by, if you look at the set of executable modules loaded by the MindManager application program (say using the most excellent &lt;a href="http://www.microsoft.com/technet/sysinternals/SystemInformation/ProcessExplorer.mspx"&gt;&lt;span&gt;Process Explorer&lt;/span&gt;&lt;/a&gt;&lt;span&gt; from &lt;/span&gt;&lt;a href="http://www.microsoft.com/technet/sysinternals/default.mspx"&gt;&lt;span&gt;SysInternals&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, there&amp;#39;s a module called &amp;quot;SBE6_32.DLL.&amp;quot;&amp;nbsp; The version properties of this module give &amp;quot;WinWrap Basic&amp;quot; as a description, and &amp;quot;Polar Engineering and Consulting&amp;quot; as the vendor.&amp;nbsp; A second, related component, SB6ENT.OCX, also appears in the MindManager process image.&amp;nbsp; These modules carry copyright info with a 1993- 1999 date range.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;A reasonable guess is that MindJet integrated the SAX Basic product in late 1999-2000, and has stuck with that version since.&amp;nbsp; Sort of a bummer, since things have changed in the last seven years or so.&lt;/p&gt;&lt;p&gt;This Visual Basic compatible scripting engine product is now known as &lt;a href="http://www.winwrap.com/web/basic/"&gt;&lt;span&gt;WinWrap Basic&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&amp;nbsp; New .Net features are planned for later this year, it appears the Polar Engineering developers are intent on maintaining compatibility as Microsoft platforms evolve.&amp;nbsp; We can hope that MindJet will pick these up at some point, without major disruption to existing macros.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If I was looking for a procedural scripting engine to manipulate a COM-based application data model, WinWrap Basic would be a very attractive option when compared to integrating the legacy Visual Basic for Applications technology from Microsoft.&amp;nbsp; Polar Engineering&amp;#39;s WinWrap is particularly attractive if it continues to evolve to support .Net technology, freeing the application data model from the legacy Microsoft COM environment dominated by IDispatch.&lt;/p&gt;&lt;p&gt;However, MindJet has committed to support of both Windows and Apple editions of MindManager.&amp;nbsp; It may be that the COM IDispatch level may be the most appropriate point of commonality between the two editions of the product.&amp;nbsp; Common in terms of the concepts exposed, not the implementation.&lt;/p&gt;&lt;p&gt;The only product I&amp;#39;m familiar with that maintains scriptable object models for both Microsoft and Apple editions is Adobe Illustrator.&amp;nbsp; While Illustrator is a very cool drawing package for commercial artists, I have no clue how much effort Adobe expends on maintaining parity between the Microsoft and Apple scripting interfaces.&amp;nbsp; With respect to Illustrator, it appears that Adobe obtained a certain level of common functionality, and let it go at that, choosing instead to focus on workgroup and workflow features involving the rest of the Adobe Creative Studio product portfolio.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Lacking the stable of related products enjoyed by Adobe, and operating in a distinct market segment without the deep history of graphic art production, MindJet probably doesn&amp;#39;t have the option of &amp;quot;being just good enough&amp;quot; with respect to a procedural scripting engine.&amp;nbsp; However, large opportunities exist by blending procedural scripting with declarative XML technology.&amp;nbsp; Seems to me that an &lt;a href="http://www.w3.org/XML/XProc/docs/alternate/"&gt;&lt;span&gt;XProc&lt;/span&gt;&lt;/a&gt;&lt;span&gt; implementation hosted in MindManager could be a powerful way to manipulate the content of one or more Map documents, hosted locally or behind some yet-to-be-designed web service.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;But then again, I&amp;#39;m a MindJet customer.&amp;nbsp; Without any knowledge of current product plans, I can wish for whatever I can dream up.&amp;nbsp; Ah, such luxury.&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=1100" width="1" height="1"&gt;</description><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/map+parts/default.aspx">map parts</category></item><item><title>The File Explorer Map Part - Just Deep Enough</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/04/14/The-File-Explorer-Map-Part-_2D00_-Just-Deep-Enough.aspx</link><pubDate>Sun, 15 Apr 2007 04:10:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:1096</guid><dc:creator>dethomas</dc:creator><slash:comments>2</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/1096.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=1096</wfw:commentRss><description>&lt;p&gt;The other day, a co-worker sent me a mail like this:&lt;/p&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;span&gt;&lt;em&gt;Hey Beavis:&lt;br /&gt;How come that All Files and Folders map part you showed me only goes two folders deeper than the starting folder?&amp;quot;&lt;/em&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The story behind this mail is recounted in a &lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/04/08/File-Explorer-Map-Part-_2D00_-How-Deep-is-Deep_3F00_.aspx"&gt;&lt;span&gt;previous post&lt;/span&gt;&lt;/a&gt;&lt;span&gt; in this blog.&amp;nbsp; The story behind why this coworker calls me &amp;quot;Beavis&amp;quot; is one I can&amp;#39;t recall at the moment, if I ever knew.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;In the &amp;quot;&lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/04/08/File-Explorer-Map-Part-_2D00_-How-Deep-is-Deep_3F00_.aspx"&gt;&lt;span&gt;The File Explorer Map Part - How Deep is Deep?&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;quot; blog post, I made a general (and somewhat lame) request for a modified File Explorer Map Part that would allow the user to set the recursion depth, and hence the depth of the file/folder topic sub-tree rooted in the map part.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Well, like a scab or blister or some other blemish, I couldn&amp;#39;t leave the problem alone. &lt;/p&gt;&lt;p&gt;In my installation of MindManager Pro 6 (6.2.399, service pack 2) the macro script that animates the File Explorer Map Part variants is located at&amp;nbsp; &lt;em&gt;&amp;lt;ProgramFiles&amp;gt;\Mindjet\MindManager 6\Generic Smart Map Part\File Explorer\ENU\scripts\Refresh.mmbas&lt;/em&gt;&lt;br /&gt;where &lt;em&gt;&amp;lt;ProgramFiles&amp;gt; &lt;/em&gt;is the usual &lt;em&gt;&amp;quot;C:\Program Files&amp;quot; &lt;/em&gt;folder. The File Explorer map parts are actually variations on one &lt;a href="http://www.mindjet.com/us/devzone/6/mm6_smart_map_parts_tech_doc/Page13.html#Topic13"&gt;&lt;span&gt;Generic Smart Map Part (GSMP)&lt;/span&gt;&lt;/a&gt;&lt;span&gt; implementation.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;By way of background, the Generic Smart Map Part is a MindManager add-in that will use the Windows Registry and MindManager Map Part information to locate macro scripts, making calls into those scripts at specific points in the &lt;font size="2"&gt;lifecycle&lt;/font&gt;&lt;font face="Arial" size="2"&gt; of a M&lt;/font&gt;&lt;font size="2"&gt;ap &lt;/font&gt;&lt;font face="Arial" size="2"&gt;P&lt;/font&gt;&lt;font size="2"&gt;art&lt;/font&gt;&lt;font face="Arial" size="2"&gt; instance&lt;/font&gt;.&amp;nbsp; Each set of scripts is associated with a specific Map Part. &lt;/p&gt;&lt;p&gt;The lifecycle points involving GSMP macro scripts are fairly straightforward. One point is the first insertion of the map part, another is upon refresh of the map part, and still another is associated with Topic context menu commands associated with instances of the map part in the map document.&amp;nbsp; By default, the File Explorer Map Part adds a &amp;quot;Convert to Regular&amp;quot; context menu command that turns the map part and its children into normal Map document Topics.&lt;/p&gt;&lt;p&gt;It turns out that the MindManager macro language can support user dialogs with a basic set of dialog controls: static text, checkboxes, edit boxes, drop-down lists, combo boxes,and the like.&amp;nbsp; There&amp;#39;s even a handy User Dialog editor in the macro development editor under the Edit-&amp;gt;User Dialog menu command.&amp;nbsp; The macro language help topics &amp;quot;Begin Dialog Definition&amp;quot; and &amp;quot;DialogFunc Prototype&amp;quot; provide some bare bones information on using this MindManager macro language feature.&lt;/p&gt;&lt;p&gt;I was mildly disappointed after reading the distribution copy of &lt;em&gt;Refresh.mmbas&lt;/em&gt; animating the File Explorer map part. The &lt;em&gt;Description.mmbas&lt;/em&gt; script used a localizable string&amp;nbsp; from the &lt;em&gt;Language.mmbas&lt;/em&gt; module, but a number of English Language string constants still appeared in &lt;em&gt;Refresh.mmbas&lt;/em&gt;. In addition, the recursion depth of the folders was controlled by literal constants.&amp;nbsp; Further, there are several unmet error cases (try a hyperlink pointing at www.mindjet.com, for example) and some tortured logic trying to decide if the hyperlink held by the parent topic of the File Explorer map part is referencing a file, a folder or something else.&lt;/p&gt;&lt;p&gt;I reined in my editorial shrew and resisted the impulse to completely rewrite &lt;em&gt;Refresh.mmbas&lt;/em&gt;.&amp;nbsp; Rather, I modified it in the following ways:&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;added a custom attribute to carry folder depth&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;added a Topic map part context menu item to get folder depth from user (set every time the refresh routine runs)&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;set the Description and Convert to Regular Topic map part context menu items to reference the right scripts&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;added a MsgBox call in the QuitOnException exit point&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;added &amp;quot;No Hyperlink&amp;quot; and &amp;quot;Hyperlink does not point into file system&amp;quot; tests and error messages&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;used the language.mmbas module to carry all the constants used in error messages, user prompts and topic attribute identification &lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;added logic and error messages to detect some missing or invalid parent Topic Hyperlink cases&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;All this involved writing a new script called &lt;em&gt;FolderDepth.mmbas&lt;/em&gt; to carry the user dialog to set the folder depth. This script includes a test to validate the user-supplied folder depth against maximum and minimum values. Since there is apparently no convenient way to force the user entry to consist of digits only, this test has to accommodate arbitrary non-numeric characters.&lt;/p&gt;&lt;p&gt;So now I can set a folder depth to control the recursion that builds the child topics beneath a File Explorer Map part.&amp;nbsp; If you want this code, see the &lt;a href="http://mindjetlabs.com/cs/files/folders/macros/entry1097.aspx" target="_blank"&gt;Modified File Explorer Map Part download&lt;/a&gt;, and follow the installation directions.&amp;nbsp; However, use it at your own risk.&amp;nbsp; I&amp;#39;d like to hear your reactions, good or bad, but I can&amp;#39;t promise to fix every possible problem.&amp;nbsp; See the &lt;em&gt;readme.txt&lt;/em&gt; file in the download for a description of installation, use and returning to the original File Explorer Map Part functionality.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=1096" width="1" height="1"&gt;</description><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/map+parts/default.aspx">map parts</category></item><item><title>The File Explorer Map Part - How Deep is Deep?</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/04/08/File-Explorer-Map-Part-_2D00_-How-Deep-is-Deep_3F00_.aspx</link><pubDate>Mon, 09 Apr 2007 03:29:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:1071</guid><dc:creator>dethomas</dc:creator><slash:comments>0</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/1071.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=1071</wfw:commentRss><description>&lt;p&gt;I had another one of those &amp;quot;how does this work?&amp;quot; moments with MindManager the other day.&amp;nbsp; A colleague was using MindManager to document a software installation process, mapping binary image&amp;nbsp;locations in the target file system with the install steps that placed&amp;nbsp;the image&amp;nbsp;there.&amp;nbsp; When I innocently asked &amp;quot;Did you use the File Explorer Smart Map Part to get the file list?&amp;quot; I got one of those &amp;quot;Huh?&amp;quot; looks.&amp;nbsp; &lt;/p&gt;&lt;p&gt;You know,&amp;nbsp;the &amp;quot;Huh?&amp;quot; look.&amp;nbsp; The one where&amp;nbsp;you ask someone a seemingly simple question and they look at you like there&amp;#39;s a funnel growing out of your forehead, or you&amp;#39;re speaking in tongues, or professing a desire to maintain legacy code or something.&lt;/p&gt;&lt;p&gt;Turns out my colleague had never used the File Explorer map part that ships with MindManger Pro.&amp;nbsp; If you open a Map Document, then open the Map Parts task pane, you can select the &amp;quot;File Explorer&amp;quot; category folder to reveal three Map Parts: &amp;quot;All Files and Folders&amp;quot;, &amp;quot;All Files&amp;quot; and &amp;quot;All Folders&amp;quot;. Drag one of these onto a Map, and place it beneath a Topic that has a HyperLink pointing at a file system folder, and the File Explorer Map Part grabs a snapshot of the folder contents and formats it into Map SubTopics.&amp;nbsp; Which beats the heck out of switching between Windows Explorer and MindManger, copying and pasting file&amp;nbsp;and folder names.&amp;nbsp; Or at least my co-worker thought so, since that&amp;#39;s what he&amp;#39;d been doing for 50 files or so.&amp;nbsp; &lt;/p&gt;&lt;p&gt;The MindManager Pro help explains all this better than I did.&amp;nbsp; See the &amp;quot;Using Smart Map Parts&amp;quot; page in the help for details.&amp;nbsp; &lt;/p&gt;&lt;p&gt;But the next day I received an e-mail that ran like this:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;Hey Beavis:&lt;br /&gt;How come that All Files and Folders map part you showed me only goes two folders deeper than the starting folder?&amp;quot;&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;It was my turn to say &amp;quot;Huh?&amp;quot;&amp;nbsp; Sure enough, if you point the HyperLink of a Topic at &amp;quot;FolderX&amp;quot; and add the &amp;quot;All Files and Folders&amp;quot; Map Part to that Topic, you get the files in FolderX, and the child folders in FolderX, and the children (both files and folders) of those child folders, and that&amp;#39;s it.&amp;nbsp; But we needed at least three levels below the starting folder.&amp;nbsp; I had assumed the File Explorer&amp;nbsp;map parts&amp;nbsp;would just recurse to the end of the file/folder tree, but that isn&amp;#39;t the case.&lt;/p&gt;&lt;p&gt;Well, &lt;a href="http://www.mindjet.com/us/devzone/6/devzone/Page5.html" target="_blank"&gt;Smart Map Parts&lt;/a&gt;&amp;nbsp;(SMPs) are a nifty part of the MindManager Platform.&amp;nbsp; Briefly, they let you put script behind a Topic and run that script to obtain Topic content.&amp;nbsp; So there had to be some script code around somewhere that ran when the File Explorer Map Part was inserted, and some more script that ran when that Map Part was refreshed.&amp;nbsp; Some digging around in the Registry (thanks be for the Edit-&amp;gt;Find command in Regedit.exe) produced a key with a &lt;em&gt;ScriptPath&lt;/em&gt; value like this:&lt;/p&gt;&lt;p&gt;&lt;font face="courier new,courier"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Mindjet\MindManager\6\AddIns\Mindjet.Mm5GenericSmartMapPart.AddIn.2\SMPs\Mindjet.FileExplorer.Smp.1&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Turns out that in the English version of a MindManager Pro 6 installation, there&amp;#39;s a folder called&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;&amp;lt;ProgramFiles&amp;gt;\Mindjet\MindManager 6\Generic Smart Map Part\File Explorer\ENU\scripts&lt;/em&gt;&lt;br /&gt;(where &lt;em&gt;&amp;lt;ProgramFiles&amp;gt; &lt;/em&gt;is usually &lt;em&gt;&amp;quot;C:\Program Files&amp;quot;) &lt;/em&gt;and in that folder is a MMBasic script called &lt;em&gt;Refresh.mmbas&lt;/em&gt;.&amp;nbsp; This is the code that animates the File Explorer Smart Map Part.&amp;nbsp; Seems likely that other languages are in a similiar folder, replacing &amp;quot;ENU&amp;quot; with a language-dependent identifier.&amp;nbsp; Buried in the &lt;em&gt;Refresh.mmbas &lt;/em&gt;code is a snippet like so:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;font color="#3300ff" face="courier new,courier" style="background-color:#ffff66;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Set attr = folderTopic.Attributes(&amp;quot;&lt;/font&gt;&lt;font color="#3300ff" face="courier new,courier" style="background-color:#ffff66;"&gt;http://schemas.mindjet.com/MindManager/GSMP/2003&lt;/font&gt;&lt;font color="#3300ff" face="courier new,courier" style="background-color:#ffff66;"&gt;&amp;quot;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; t = attr.GetAttributeValue(&amp;quot;Type&amp;quot;)&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;font color="#3300ff" face="courier new,courier" style="background-color:#ffff66;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; If t = &amp;quot;Files&amp;quot; Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; showFiles = True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxDepth = 1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ElseIf t = &amp;quot;Folders&amp;quot; Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; showFolders = True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxDepth = 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ElseIf t = &amp;quot;FilesAndFolders&amp;quot; Then&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; showFiles = True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; showFolders = True&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; maxDepth = 2&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; End If&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;/font&gt;&lt;font color="#3300ff" face="courier new,courier"&gt;&lt;font style="background-color:#ffff66;"&gt;&amp;nbsp;&amp;#39; Everything is OK, ready to go&lt;br /&gt;&amp;nbsp;Call recurMap(folderTopic, mapPath, 0) &amp;#39; map files and folders&lt;br /&gt;&amp;nbsp;folderTopic.SetLevelOfDetail(1)&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;font color="#3300ff"&gt;&lt;font color="#000000"&gt;Hmmm....&amp;nbsp; Looks like this is where we decide what sort of update we&amp;#39;re going to do, and set some control variables to achieve that result.&amp;nbsp;&amp;nbsp; Look around some more, and it turns out &lt;em&gt;showFolders&lt;/em&gt;, &lt;em&gt;showFiles&lt;/em&gt; and &lt;em&gt;maxDepth&lt;/em&gt; are all global variables, used in a subroutine called &lt;em&gt;recurMap&lt;/em&gt; to control&amp;nbsp;the scan of files and folders starting at a folder provided by the user in the HyperLink carried in the parent Topic.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;font color="#3300ff" face="courier new,courier" size="1"&gt;&lt;font color="#000000" face="Arial" size="2"&gt;Usually, I break out in hives when I see &amp;quot;magic numbers&amp;quot; in code,&amp;nbsp;that is, numerics used in the manner of &amp;quot;1&amp;quot; and &amp;quot;2&amp;quot; in the snippet above.&amp;nbsp; In this case, I wimped out and just mailed the code snippet and its location to my co-worker with a &amp;quot;don&amp;#39;t set maxDepth&amp;nbsp;too big (like 10 or something) because the map will take a year to refresh&amp;quot; caveat.&amp;nbsp; But I also made a copy of the &lt;em&gt;Refresh.mmbas&lt;/em&gt; file and added code to use constants like these:&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;font color="#3300ff" face="courier new,courier" style="background-color:#ffff00;"&gt;Const MAX_FILE_DEPTH = 1&lt;br /&gt;Const MAX_FOLDER_DEPTH = 6&lt;br /&gt;Const MAX_FILEFOLDER_DEPTH = 3&lt;/font&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;font face="arial,helvetica,sans-serif"&gt;&lt;font color="#3300ff" face="courier new,courier" size="1"&gt;&lt;font color="#000000" face="Arial" size="2"&gt;&lt;p&gt;&lt;br /&gt;Which is how I learned about the long file/folder scan time.&amp;nbsp; But&amp;nbsp;this got me to thinking.&amp;nbsp; Shouldn&amp;#39;t the user be able to select this level (and possibly the default) for individual File Explorer Smart Map Parts?&amp;nbsp; And shouldn&amp;#39;t there be a way to put an SMP command on the Topic context menu to solicit the user for this settting?&amp;nbsp; The DevZone content talks about a &amp;quot;Generic SMP&amp;quot; framework that hosts user SMP scripts, and mentions pre-defined context menu items for use by such a map part, and the MMBasic language help has a &lt;em&gt;Dialog&lt;/em&gt; keyword. Seems like&amp;nbsp;it should be possible to combine these to get a &amp;quot;how many levels deep&amp;quot; value from the user.&lt;/p&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;p&gt;I&amp;#39;m hoping someone has already done something like this.&amp;nbsp; And I&amp;#39;m hoping that someone&amp;nbsp;will post a modified FileExplorer SMP on the &lt;a href="http://mindjetlabs.com/cs/files/folders/map_parts/default.aspx" target="_blank"&gt;Downloads/Map Parts&lt;/a&gt;&amp;nbsp;page.&amp;nbsp; I may feel guilty (or bored, or inspired, or something just plain bloody-minded) at some future date and cobble up a modified File Explorer that lets&amp;nbsp;the user&amp;nbsp;set the folder depth of the Topic content created by an instance of this Smart Map Part, but then again it might take me until the second&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Janet_Reno" target="_blank"&gt;Reno&lt;/a&gt; presidency to get around to it.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=1071" width="1" height="1"&gt;</description><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/map+parts/default.aspx">map parts</category></item><item><title>MindManager in Software Development - Creating Tables From Topics - Part 3</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/03/18/MindManager-in-Software-Development-_2D00_-Creating-Tables-From-Topics-_2D00_-Part-3.aspx</link><pubDate>Sun, 18 Mar 2007 23:38:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:978</guid><dc:creator>dethomas</dc:creator><slash:comments>0</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/978.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=978</wfw:commentRss><description>&lt;p&gt;&amp;quot;Once more into the breach, dear friends,&amp;quot; spoke Henry the Fifth, delivering the line Shakespeare&amp;nbsp; wrote in 1600 or so.&amp;nbsp; We&amp;#39;re not invading France in the early 1400&amp;#39;s as Henry was, but the line seems to fit.&amp;nbsp; This post delivers the third version of a software development sample, and like Henry I&amp;#39;m growing somewhat weary but am too proud to give up.&amp;nbsp; &lt;br /&gt;&lt;/p&gt;&lt;p&gt;But no one is hacking at me with a sword, nor am I &lt;a href="http://hosted.ap.org/dynamic/stories/S/STRANDED_FLIGHTS?SITE=INEVA&amp;amp;SECTION=HOME&amp;amp;TEMPLATE=DEFAULT" target="_blank"&gt;stuck on a plane in Philadelphia&lt;/a&gt;, so life could definitely be worse. &lt;/p&gt;&lt;p&gt;The point of doing this sample was to demonstrate the use of MindManager in software development. The problem at hand is the creation of tables from Map document Topic content. A MindManager macro implementation, &lt;a href="http://mindjetlabs.com/cs/files/folders/macros/entry834.aspx" target="_blank"&gt;MakeTable&lt;/a&gt;, is available for download.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;This version incorporates additional content in the areas of architecture, design, test and implementation, and expands the background material topics.&amp;nbsp; The sample itself is attached to this post.&amp;nbsp; A Software Architecture Description map template included in the attached content&amp;nbsp;is also available as a separate &lt;a href="http://mindjetlabs.com/cs/files/folders/templates/entry976.aspx" target="_blank"&gt;download&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=978" width="1" height="1"&gt;</description><enclosure url="http://mindjetlabs.com/cs/blogs/organizational_irritant/attachment/978.ashx" length="1528299" type="application/x-zip-compressed" /><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Tables/default.aspx">Tables</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Design/default.aspx">Design</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Test/default.aspx">Test</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>From Skepticism to Enthusiasm by Way of Text Markers</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/03/17/From-Skepticism-to-Enthusiasm-by-Way-of-Text-Markers.aspx</link><pubDate>Sat, 17 Mar 2007 18:06:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:971</guid><dc:creator>dethomas</dc:creator><slash:comments>6</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/971.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=971</wfw:commentRss><description>&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Originally, I didn&amp;#39;t run out and get a copy of MindManager to become a Customer Evangelist.&amp;nbsp; I don&amp;#39;t like to admit it, but somehow I&amp;#39;ve become one, at least locally and with a very small &amp;#39;e&amp;#39;.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;That&amp;#39;s evangelist, &lt;em&gt;sotto voce&lt;/em&gt;, not a gadfly Evangelist, or the embarrassing &lt;/span&gt;&lt;strong&gt;&lt;em&gt;&lt;span style="font-size:10pt;font-family:'Calisto MT';"&gt;EVANGELIST&lt;/span&gt;&lt;/em&gt;&lt;/strong&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;, &lt;span&gt;&amp;nbsp;&lt;/span&gt;which is followed by fanfare, distant cheering, divine imperative commands, luminous messages written on the inside of your forehead, insidious menacing opposition, ale with dwarves and elves,&lt;/span&gt;&lt;span style="font-size:10pt;"&gt;&lt;font face="Times New Roman"&gt; &lt;/font&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;hordes of orks crossing the plains at a lope, talking trees, enslaved masses, battles with darkness, etcetera and so on.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;It&amp;#39;s just that people keep asking me questions about how to do something in MindManager, even if I&amp;#39;d rather talk about guitars. Or beer. Or software architecture. Or rocket surgery and brain science, or surgery science and rocket brains, or even rocket science and brain surgery, though I don&amp;rsquo;t normally dissect my personal problems in casual conversation.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Despite these qualms, this week I found myself in two different conversations with two different co-workers on the general tangent of &amp;quot;I have this MindManager software, how do I use it to ...&amp;quot;&amp;nbsp; One person is trying to organize a piece of a large business process integration project, while the other is trying to capture, summarize and publish department activity status reports over time.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The interesting thing is that one MindManager feature turned out to be useful in two different contexts - Topic Text Markers.&amp;nbsp; And I didn&amp;#39;t have to write code to obtain a good outcome.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;strong&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;A Problem of Integration &lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The Integration Project person has a mass of details to deal with.&amp;nbsp; This is raw material for a potentially large map or set of maps, organized around structural elements of the project - &amp;nbsp;stakeholders, customer data-sets, legacy systems, upgrade procedures, enterprise system rollouts, etc.&amp;nbsp; But there were a number of themes running through these structural topics and areas.&amp;nbsp; For example, how to connect the stakeholders using legacy system X, maintaining data-set Y, with the two different-but-related enterprise applications meant to replace X, but that will become available for adoption at different times? This person wanted to pick a main topic and have the map re-orient around that topic, sort of like the &lt;u&gt;&lt;span style="color:blue;"&gt;&lt;a href="http://www.thebrain.com/"&gt;&lt;font color="#800080"&gt;Personal Brain&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/u&gt; presentation discussed on the &lt;u&gt;&lt;span style="color:blue;"&gt;&lt;a href="http://www.mindjet.com/us/forum/viewtopic.php?t=1626&amp;amp;highlight=brain"&gt;&lt;font color="#800080"&gt;map navigation thread&lt;/font&gt;&lt;/a&gt;&lt;/span&gt;&lt;/u&gt; in the &lt;a href="http://www.mindjet.com/us/forum/index.php"&gt;&lt;font color="#800080"&gt;MindJet User Forum&lt;/font&gt;&lt;/a&gt;.&amp;nbsp; The number of these kinds of connections made map Relationships among topics unwieldy.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;But when I demonstrated the Text Marker search feature on a trial map, shazam, a dubious user became enthusiastic.&amp;nbsp; We invented a Text Marker (I think we used the word &amp;quot;Slugs&amp;quot;) for a phase of the integration project, tagged everything that cared about that phase, and then searched across the 50 or so Topics for that Text Marker. Generated by a Topic Text Marker search, the navigable list of Topics tagged as &amp;quot;Slugs&amp;quot; was what turned the tide.&amp;nbsp; The idea that sets of Text Markers are completely user defined and a given Topic can have several Text markers from the same or different sets was icing on the cake. This user suddenly had a sense of control over a morass of details that had seemed overwhelming.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;So if you haven&amp;#39;t yet, check out Text Markers and the Search task pane. Beat it up a little, Text Markers are under the Options link in the Search task pane.&amp;nbsp; If you have several Map documents linked to a master Map, the Search for Text Markers works across them in Multi-map view.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Trick, very trick.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;strong&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Meetings, Bloody Meetings&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;The Status Summary problem belonged to a different person with different goals.&amp;nbsp; This person attends department management status meetings, but was unhappy with the flat Word documents used to capture the meeting results. To paraphrase, the problem goes something like this: &amp;quot;This meeting minutes Word format thing is fine the day of the meeting, but I want a larger picture, one that shows progress on action items over time.&amp;nbsp; I don&amp;#39;t want to dig through a pile of documents to find out who did or didn&amp;#39;t act on action items for improving how we do process X or whatever it is we&amp;#39;re working on.&amp;nbsp; I want to generate some content to post on the SharePoint site without doing a lot of cut-paste-point-click stuff, and I want it organized by subject, not date.&amp;quot; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Since there&amp;#39;s usually a number of activities going on in parallel, some sort of status meeting to ride herd over the work seems needed, at least to the management folk involved. Each meeting report has the same three major sections: Attendees (who&amp;#39;s at the meeting), Discussion Items (what they talked about), and Action Items (what they did or are going to do about some subject area). Part of the reason for the meeting is to provide senior management with a sense of what is happening on a given subject. Who took what Action Items and did they get it done yet? &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Since there are direct and indirect lines of reporting in this case, a phone conference is more comforting to management than reading e-mail or discussion thread posts and generating a mental picture of progress on a given subject.&amp;nbsp; And meetings are, after all, the practical alternative to work.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Well, the meetings happen weekly.&amp;nbsp; Seems to make sense to have one Map document to hold the meeting minutes info, a Map Part to provide the three main common Topics for each week, and to add subtopics to each of the three meeting Topics to capture individual bullet points.&amp;nbsp; But how to produce a summary rolling-up the details for a given set of related action items?&amp;nbsp; This user is starting to wonder if this MindManager thing is really all that useful after all.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;If you thought Text Markers on Topics, maybe you&amp;#39;re psychic. That&amp;#39;s what jumped out at me. By tagging individual Action Item topics with a Text Marker giving the controlling subject of the action item, a once skeptical user was able to generate a complete, chronological action item list, on a given subject, using the Power Filter to hide all Topics not marked with a given Text Marker.&amp;nbsp; With the desired content visible and the rest hidden, it is only a few mouse clicks to generate Web, Word or HTML Help documents giving the actions and results.&amp;nbsp; Automating this by creating temporary summary topics for each Text Marker in the Action Items group is only a macro away.&lt;span&gt;&amp;nbsp; &lt;/span&gt;And I won&amp;rsquo;t have to write it.&lt;span&gt;&amp;nbsp; &lt;/span&gt;Maybe.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;strong&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Brown Paper Packages Tied Up with String....&lt;/span&gt;&lt;/strong&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;So Text Markers on Topics, coupled with the Search task pane and the Power Filter, is my favorite MindManager thing this week.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Two different user problems solved by the same product content filtering features, leaving the user in control of how filtering is performed and the identity of the filtering terms, that&amp;#39;s a good thing.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:2.8pt 0in 5.65pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;Two people feeling more effective in dealing with their seemingly endless problem data, that&amp;#39;s a good thing.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;span style="font-size:10pt;font-family:Arial;"&gt;One reluctant customer evangelist wondering &amp;quot;How did I get here? Where&amp;#39;s the men&amp;#39;s room?&amp;quot; well, I guess I&amp;#39;ll have to live with it.&amp;nbsp; To paraphrase &lt;a href="http://en.wikipedia.org/wiki/Will_Rogers" target="_blank"&gt;Will Rogers&lt;/a&gt;, stupidity might have gotten me into this mess, but it won&amp;#39;t get me out.&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:0in 0in 0pt;"&gt;&lt;font face="Times New Roman" size="3"&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=971" width="1" height="1"&gt;</description><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/text+markers/default.aspx">text markers</category></item><item><title>MindManager in Software Development - Creating Tables From Topics - Part 2</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/03/11/MindManager-in-Software-Development-_2D00_-Creating-Tables-From-Topics-_2D00_-Part-2.aspx</link><pubDate>Mon, 12 Mar 2007 04:48:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:942</guid><dc:creator>dethomas</dc:creator><slash:comments>0</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/942.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=942</wfw:commentRss><description>&lt;font size="2"&gt;&lt;p align="left"&gt;So we&amp;#39;re back with the second installment of the Table Creation sample, rolling up Part 1 into Part 2&amp;nbsp;of a description of the &lt;a href="http://mindjetlabs.com/cs/files/folders/macros/entry834.aspx" target="_blank"&gt;MakeTable&lt;/a&gt; macros.&amp;nbsp; Attached to this post is Part 2 of the Table Creation sample in both Word and .CHM formats.&amp;nbsp;&amp;nbsp;I&amp;#39;m using the rolling update model, so&amp;nbsp;Part 2 includes the Part 1 content, lightly augmented and copyedited.&lt;/p&gt;&lt;p align="left"&gt;Part 2 introduces the Architecture, Design and Test sections. While I have draft content for&amp;nbsp;additional sections dealing with Implementation and Delivery, those sections don&amp;#39;t appear in the attached content.&amp;nbsp; &lt;/p&gt;&lt;p align="left"&gt;But I spent too much time on Table Creation sample content, and not enough on the BackGround Material.&amp;nbsp; The Background Material sections dealing with Architecture, Design and Test software development activities fell behind the content.&amp;nbsp; Those sections need some work in terms of content and references.&amp;nbsp; While the structure of software development Architecture, Design and Test content need not be as&amp;nbsp;formal as use cases, a&amp;nbsp;map template or two would be useful in maintaining consistency.&lt;/p&gt;&lt;p align="left"&gt;I&amp;#39;m having trouble breaking out time to work on this during the week, and sessions in front of the keyboard during the weekend aren&amp;#39;t getting other things done.&amp;nbsp; Could be that it&amp;#39;s time for some serious marriage maintenance.&amp;nbsp; Or I can just sleep under my desk and not explain this behavior to my wife.&amp;nbsp; But that doesn&amp;#39;t sound like a viable long term strategy.&lt;/p&gt;&lt;p align="left"&gt;Regardless, I decided to post this to get a&amp;nbsp;stake in the ground.&amp;nbsp; &lt;/p&gt;&lt;p&gt;On a related note, has anyone besides me experienced some unrecoverable errors after using the &lt;a href="http://mindjetlabs.com/cs/files/folders/mindjetlabs/entry153.aspx" target="_blank"&gt;HTML Help Builder&lt;/a&gt; from inside or outside MindManger?&amp;nbsp; I modified version 1.0.7 to let topics hidden in the source map remain hidden in the Complied HTML Help output, but it is hard to see how those changes would cause MindManager editing problems.&amp;nbsp; I have experienced MindManager crashes with and without the Library task pane open when deleting icons from topics, and when closing a map after generating a .CHM without that map loaded.&amp;nbsp; But the Map recovery feature didn&amp;#39;t kick in at next MindManager startup, even with the lock file present.&amp;nbsp; Seems strange.&amp;nbsp; I don&amp;#39;t know if the MindManager development group has signed up with&amp;nbsp;Microsoft to obtain crash dumps, but there is probably some useful information buried in there.&amp;nbsp; If I had worlds enough and time, or maybe a debug build, I&amp;#39;d be tempted to dig around in that material.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;/font&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=942" width="1" height="1"&gt;</description><enclosure url="http://mindjetlabs.com/cs/blogs/organizational_irritant/attachment/942.ashx" length="1335887" type="application/x-zip-compressed" /><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Tables/default.aspx">Tables</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Design/default.aspx">Design</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Test/default.aspx">Test</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>MindManager in Software Development - Creating Tables From Topics - Part 1</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/03/04/MindManager-in-SOftware-Development-_2D00_-Creating-Tables-From-Topics.aspx</link><pubDate>Mon, 05 Mar 2007 04:05:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:895</guid><dc:creator>dethomas</dc:creator><slash:comments>2</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/895.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=895</wfw:commentRss><description>&lt;p&gt;One of the things I&amp;#39;ve done with MindManager is write software requirements as&amp;nbsp;&lt;a href="http://en.wikipedia.org/wiki/Use_case" target="_blank"&gt;Use Case&lt;/a&gt; behavior descriptions.&amp;nbsp; Since I wanted to generate another post about &lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/02/25/Turning-Topics-Into-Tables.aspx"&gt;creating Map document Notes tables from Topics&lt;/a&gt;, it makes some sense to write a Use Case describing what this MindManager &lt;a href="http://mindjetlabs.com/cs/files/folders/macros/entry834.aspx"&gt;&lt;span&gt;MakeTable macro&lt;/span&gt;&lt;/a&gt;&lt;span&gt; should do. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;This is an example of step one&amp;nbsp;in a three part software development formula - first understand what it is the software should do, then make a solution work, and then make it work better.&lt;/p&gt;&lt;p&gt;As I got started, I realized the Use Case would make more sense in context.&amp;nbsp; So I adopted table generation as a sample software development problem.&amp;nbsp; The first installment, demonstrating the use of MindManager in creating use cases, is in the attached zip file, together with background information about requirements capture with Use Cases.&amp;nbsp; The same content is found in two formats - compiled HTML Help and as a Word document.&amp;nbsp; The .compiled HTML Help file contains a &lt;a href="http://mindjetlabs.com/cs/files/folders/templates/entry894.aspx"&gt;&lt;span&gt;Use Case Map Template&lt;/span&gt;&lt;/a&gt;&lt;span&gt;, this template is also posted in the &lt;/span&gt;&lt;a href="http://mindjetlabs.com/cs/files/default.aspx"&gt;&lt;span&gt;Downloads&lt;/span&gt;&lt;/a&gt;&lt;span&gt; section of this site.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Here&amp;#39;s an excerpt from the attached sample:&lt;/p&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;font face="Times New Roman"&gt;&lt;span&gt;This material is an example of the use of MindManager in software development. The subject at hand is the creation of tables within MindManager Topic Notes in the context of an interactive user session. &lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;font face="Times New Roman"&gt;&lt;span&gt;As a sample problem, table generation is complex enough to warrant a solution, small enough to easily understand, yet big enough that work in the areas of Requirements, Architecture, Design, Test, Implementation and Delivery need not be overly contrived. The first part of the story covers table creation requirements through a Use Case and some Policy and Practice statements. Subsequent parts will deal with other development activities.&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;font face="Times New Roman"&gt;&lt;span&gt;There is something appealing about using the MindManager product to develop and document an extension behavior for the product. If nothing else, we have a clearly defined application domain for the effort.&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;font face="Times New Roman"&gt;&lt;span&gt;An unstated assumption runs throughout this material, we&amp;#39;ll mention it here and then leave it be. There is a big difference between performing software development and managing software development. This material is not meant to endorse a single development method or process. If a waterfall process, or a spiral process, or an iterative method, or another variation on the agile development theme floats your boat, go for it. My view is that good ideas (and good people) breed other good ideas (and grow more good people) as long as management doesn&amp;#39;t go out of its way to shoot itself in the foot. The material presented here, using the sample problem as a basis of discussion, are things I regard as good ideas in software development. However, like any other tool or technique it is possible to use these things incorrectly. &amp;quot;By their works shall ye know them&amp;quot; says the Bible, and this applies to techniques, people, teams, technologies and organizations as well. &lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;font face="Times New Roman"&gt;&lt;span&gt;In the end, software development is about how people can use their time, talent and the available technology to produce something useful, possibly valuable and perhaps even beautiful. If the ride is also exhilarating, fun and satisfying, then you are fortunate as well as gifted. But I also believe that neckties are commonly used in corporate culture to hide the marks left by sphincters, so what do I know?&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Assuming I can maintain the momentum, I plan on expanding this sample with additional content.&amp;nbsp; Where I see the opportunity, I&amp;#39;ll point out how MindManager supports software development activity.&lt;/p&gt;&lt;p&gt;In fact, I&amp;#39;ll do that now.&amp;nbsp; The compiled HTML Help file in the attached zip file was created with a modified version of the most excellent &lt;a href="http://mindjetlabs.com/cs/files/folders/mindjetlabs/entry153.aspx"&gt;&lt;span&gt;HTML Help Builder&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&amp;nbsp; I brazenly steal the map template in that download, including it in the sample content attached to this post.&amp;nbsp; I made several modifications to the 1.0.7 version of the HTML Help Builder - one to style the Topic Hyperlinks in box with a pale yellow background, a second to omit hidden Map Topics from the generated HTML output, and a third to remove&amp;nbsp; the &amp;#39;*&amp;#39; character from subheadings in the help pages.&amp;nbsp; I plan to forward these changes to MichaelS for possible inclusion in&amp;nbsp;some future HTML Help Builder revision at his discretion.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Without MindManager, I wouldn&amp;#39;t have bothered to create the HTML Help form of the MakeTable sample.&amp;nbsp; By using a MindManager Map to create, organize and refine the content,&amp;nbsp; it is straightforward to publish in several formats - Word, web and HTML Help - repurposing the content for different uses.&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=895" width="1" height="1"&gt;</description><enclosure url="http://mindjetlabs.com/cs/blogs/organizational_irritant/attachment/895.ashx" length="531205" type="application/x-zip-compressed" /><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Tables/default.aspx">Tables</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Use+Cases/default.aspx">Use Cases</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Software+Development/default.aspx">Software Development</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Requirements/default.aspx">Requirements</category></item><item><title>Turning Topics Into Tables</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/02/25/Turning-Topics-Into-Tables.aspx</link><pubDate>Mon, 26 Feb 2007 05:28:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:835</guid><dc:creator>dethomas</dc:creator><slash:comments>1</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/835.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=835</wfw:commentRss><description>&lt;p&gt;One formatting thing I seem to do a lot in MindManager is fool with tables in Topic Notes.&amp;nbsp; I often treat a Topic like a file card, and wind up stuffing a lot of information into the Notes attached to a Topic.&amp;nbsp; But maybe this formatting task is a consequence of the kind of content I&amp;#39;m creating in MindManager. &lt;/p&gt;&lt;p&gt;Much of my time in MindManger is spent capturing requirements and architecture content for software systems.&amp;nbsp; One of the things I like about MindManager in this usage is the ability to move, subdivide and link to topics.&amp;nbsp; A second thing I like a lot is the ability to generate Word documents or web content from a MindManager Map document. &lt;/p&gt;&lt;p&gt;In the beginning, I would be beavering away creating and organizing Topics in the map, and often leaving the Notes text window open to quickly capture additional material on a given Topic.&amp;nbsp; But Notes content that was fine in the map at time of capture often left a lot to be desired when I came back to it later, and really fell short of a satisfying result when I started to share the map content as Word documents and web pages. So I would spend time cleaning up the Notes text, and as a consequence, spend time and effort trying to create tables in the Notes content.&amp;nbsp; And wind up with stray rows or several unconnected table sections when I created Word or Web content from the map.&lt;/p&gt;&lt;p&gt;If table editing is sort of awkward to use, why bother?&amp;nbsp; Well, in general tables can be a useful way to group together related information like definitions or glossary entries for the reader.&amp;nbsp; &lt;/p&gt;&lt;p&gt;I also use tables to capture logic conditions and outcomes in a sort of decision table format.&amp;nbsp; This is useful for stating all the conditions a given piece of logic should cover in a MindManager Map document by collapsing sub-topics for each condition into a parent topic for the piece of logic.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Sure, I can open up Word, format a table as I please, then use the keyboard wizard to copy that table from Word and paste it into the MindManager Notes editor window. While this works well for tables with three, four or more columns, it&amp;#39;s sort of a pain for simpler tables.&amp;nbsp; And if I need to modify the table content, I&amp;#39;m back in the Topic Notes editor window, fooling with the row insert button or something.&lt;/p&gt;&lt;p&gt;So what I needed was a macro or helper or something that would format tables for me, using content in the map.&amp;nbsp; And that&amp;#39;s what I wrote.&amp;nbsp; The &lt;a href="http://mindjetlabs.com/cs/files/folders/macros/entry834.aspx"&gt;&lt;span&gt;current version is posted&lt;/span&gt;&lt;/a&gt;&lt;span&gt; in the Downloads area, the &lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/attachment/835.ashx"&gt;SeeMeMakeTable.jpg&lt;/a&gt; file attached to this post gives a rough&amp;nbsp;idea of what the generated table content looks like.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Along the way, I discovered that MindManager Topic Notes cannot carry nested tables.&amp;nbsp;&amp;nbsp;Here&amp;#39;s a &lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/pages/Topic-Notes-Don_2700_t-Support-Nested-Tables.aspx"&gt;crude nested table example&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;If you try to paste a table into an existing table, you wind up with three distinct tables in the Topic Notes. One is the table content ahead of the insertion point, the second is the inserted content, and the third is whatever original table content comes after the insertion point. I didn&amp;#39;t experiment too much with splitting and merging cells, but it didn&amp;#39;t seem to matter.&amp;nbsp; Pasting one table into another resulted in three tables and some funny formatting.&lt;/p&gt;&lt;p&gt;Topic Notes are stored as XHTML markup, the MMx object provides access to this content. If you force the issue by formatting the XHTML markup for a nested table and assigning it to the Notes content, MindManager crashes.&amp;nbsp; Oops.&amp;nbsp; Don&amp;#39;t do that.&amp;nbsp; So the macros in &lt;span&gt;&lt;a href="http://mindjetlabs.com/cs/files/folders/macros/entry834.aspx"&gt;MakeTable.zip&lt;/a&gt;&lt;/span&gt;&lt;span&gt; look for table markup in child Topics, and just turn it into text.&amp;nbsp; They also expect a Boundary around the parent and child Topics, complain if there are no child Topics found, or if no parent Topic can be found, or if there are too many child Topics, or if either the Boundary, the parent Topic or some child Topic is not selected when the macro run.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span&gt;I&amp;#39;m thinking this &amp;quot;create table&amp;quot; problem might be a good one to use in talking about MindManager use in software development.&amp;nbsp; Not too big, not too small, not too contrived.&amp;nbsp; But we&amp;#39;ll see what time allows.&lt;/span&gt;&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=835" width="1" height="1"&gt;</description><enclosure url="http://mindjetlabs.com/cs/blogs/organizational_irritant/attachment/835.ashx" length="49822" type="image/jpeg" /><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/Tables/default.aspx">Tables</category></item><item><title>MindManager as a Platform  - Revisited</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/01/27/MindManager-as-a-Platform-Revisited.aspx</link><pubDate>Sat, 27 Jan 2007 20:32:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:686</guid><dc:creator>dethomas</dc:creator><slash:comments>5</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/686.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=686</wfw:commentRss><description>&lt;p&gt;It&amp;#39;s been a few weeks since my last post.&amp;nbsp; Somehow time just passes when you&amp;#39;re not looking.&amp;nbsp; There&amp;#39;s a John Lennon quote for this - &amp;ldquo;Life is what happens to you while you&amp;#39;re busy making other plans.&amp;rdquo;&amp;nbsp; Or working on other problems.&lt;/p&gt;&lt;p&gt;I&amp;#39;m somewhat disappointed in the dearth of comments on the &lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2006/12/22/Six-Elements-of-Greatness.--Or-Something_2E00_.aspx"&gt;Six Elements of Greatness&lt;/a&gt; posts.&amp;nbsp; Of course, maybe no one cares, or the posts are too long, or too dense or not immediately useful.&amp;nbsp; Or all those things. Or those posts (and the rest of this blog) just make me sound like a pompous jerk.&amp;nbsp; &lt;/p&gt;&lt;p&gt;But these six things - Unity, Theme, Variation, Evolution, Balance, and Hierarchy&amp;nbsp; - provide reason and rationale for why, where, when and how a platform feature&amp;nbsp;should be&amp;nbsp;exposed.&amp;nbsp; In good platforms (and good products, good art, good engineering and so on) these characteristics make their presence felt, supporting each other in meeting goals and enhancing the experience&lt;/p&gt;&lt;p&gt;When these six characteristics are at odds with each other, we get bad platforms (and bad products, bad art, bad engineering and so on).&amp;nbsp; The experience is awkward.&amp;nbsp; If we can&amp;#39;t escape (and buy/use/own something else)&amp;nbsp;we&amp;nbsp;may find ourselves in the role of apologist, rationalizing bad work and awkward results through selective perception and revisionist history.&lt;/p&gt;&lt;p&gt;Whew.&amp;nbsp; Glad I got all that off my chest.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Moving On...&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In an attempt to generate a little blog momentum, I thought I&amp;#39;d close out the platform post series by listing the good, bad and awkward points of MindManager 6 as a software platform.&amp;nbsp; Most of this I ran across while composing the Six Elements posts, or in writing macros and add- ins.&amp;nbsp; Each list and its content is debatable, each is fodder for future posts. Or comments, questions or cream pies.&amp;nbsp; Or something.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Good Points:&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;MindMaps are a great free-form, tree-oriented way to capture and organize information for a wide variety of uses&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;User interface can be customized by user without writing code.&amp;nbsp; Check out this nice &lt;a href="http://rcd.typepad.com/rcd/2007/01/mindmanager_cus.html"&gt;&lt;span&gt;UI toolbar addition&lt;/span&gt;&lt;/a&gt;&lt;span&gt; at RobinZ CAD Blog&lt;/span&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Automation object model exposes map document content and most of application user interface &lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Add-in model allows external components (and developers, yeah!)&amp;nbsp; to provide new extensions to user interface and command logic &lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Macro editor has a form&amp;nbsp;of keyword completion, type-sensitive&amp;nbsp;method/property help, syntax check command, a step through debugger and a reasonably small footprint&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Library, Map Parts and Map Marker task panes provide convenient access to supplementary map elements&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Smart Map Parts are a nice way to package up and reuse functionality&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;New Icons, Text Markers, Images, and Templates can be organized and shared via the Library&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Topic Attributes can store new data properties on a per Topic basis&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Business Topics are associations between Topic Attribute sets and logic&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;XML data formats allow out-of-band use of map to create and present content in other forms, act as user-side of legacy applications or web services.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Import button on Explorer, and Word is useful in capturing content for map topics&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Auto-recovery of maps is seamless&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Application Update via Help menu is handy way to obtain MindJet-supplied service pack&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Bad Points:&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;MindManager will not launch as an OLE Automation server. There is a mysterious, intermittent General Protection Fault after use as Automation server, which seems to require a repair install to recover normal operation. &lt;em&gt;(This may be pilot error, MM launches in Javascript/VBScript just fine...)&lt;/em&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Only one MindManager process at a time. &lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;An Add-in cannot create a submenu on the existing Topic right-mouse context menu &lt;em&gt;(While an&amp;nbsp;Add-in can add new commands to the Topic context menu,&amp;nbsp;it cannot create a brand new sub-menu. Nor can it insert new commands in the Insert, Icon Marker, Text Marker or Image sub-menus that are parented by the Topic Context menu)&lt;/em&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No support for a multi-map collection in object model,&amp;nbsp; no collection of maps linked to by this map&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Notes content supports a subset of XHTML transitional, cannot embed information in comments, no use of &amp;lt;hr&amp;gt; &amp;lt;div&amp;gt; or &amp;lt;style&amp;gt; tags, no link or meta tags, no raw HTML edit/copy/paste, no superscript, no subscript, no image map support, no nested tables, etc.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Notes content makes extensive use of inline styles, making modern styling harder to do.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No direct support for new Vista features - file tagging, sidebar, visual themes, etc...&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No information on command line startup modes - Benchmark, Bookmark, Mode, etc.&amp;nbsp; which hints that these will go unsupported in the future.&amp;nbsp; A &amp;quot;diagnostic&amp;quot; mode would be useful in giving the development team some clues on problematic behavior.&amp;nbsp; Try the command &amp;quot;MindManager /?&amp;quot; for a summary of these modes.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;The developer documentation could be more helpful.&amp;nbsp; More samples, more links among content, some indication of the type returned from a method or property accessor like &lt;em&gt;Document.Selection, &lt;/em&gt;all these would be useful.&amp;nbsp; Further, better formatting of the &lt;a href="http://www.mindjet.com/us/devzone/6/devzone/index.html"&gt;DevZone content&lt;/a&gt; would make it easier to follow what samples are provided. The code examples use &amp;amp;#160 (&amp;amp;nbsp) extensively as content to tables whose width is 100%, so I see one long, wide block that runs off the right edge of the brower window.&amp;nbsp; Not very useful...&lt;/li&gt;&lt;/ul&gt;&lt;p style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Awkward Points&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;This list fell apart into several lists : Product Stuff, Object Model Stuff, Markup Stuff and Macro Stuff.&amp;nbsp; These points aren&amp;#39;t generally deal- killers, but rather just sort of irritating in the right (or wrong) context.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Product Stuff&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Spell checker doesn&amp;#39;t ignore words in all caps. &lt;font face="Arial" size="2"&gt;Or handle first letter capitalization of new dictionary entries.&lt;/font&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Multi-map web export is difficult to find, slow to run, awkward to modify, no common table of contents, CSS, index, etc. among resulting pages.&amp;nbsp; And hyperlinks in Topic Notes that point at external map topics do not resolve to HTML pages, even if those maps are in the Multi-map Export, but rather point to a complete map file stashed in a child LinkedDocument folder. Click the link in the browser and you&amp;#39;re prompted with the Save/Open/Cancel dialog.&amp;nbsp; Not too useful.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Word Export seems to ignore target template and styles in favor of creating MMxxx paragraph styles.&amp;nbsp; So getting Map document content into a particular Word format is a pain.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No in place editing of maps using OLE technology, so no embedding maps in Word, Excel&amp;nbsp;or Visio&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No support for hosting OLE embedded/linked objects, so no adding ActiveX controls to a map, even in a Task Pane.&amp;nbsp; &lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Topic Call-out positioning is not intuitive. Call-outs don&amp;#39;t stay where you put them relative to Topic&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;There&amp;#39;s a &amp;quot;Right Map&amp;quot; topic layout on the &lt;em&gt;SubTopics Layout&lt;/em&gt; tab of the Format Topic dialog (try the Format-&amp;gt;Topic menu command) but no &amp;quot;Left Map&amp;quot; option.&amp;nbsp; This makes some forms of maps dealing with &amp;quot;several inputs, one result&amp;quot; sort of a pain to deal with.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No image map editing in Topic Notes.&amp;nbsp; Would be way nice to have a way to create hotspots to other topics or external URLs in Notes images.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;A way to browse a Map, say a Map Explorer tree presentation, would make some edit, find and re-write tasks easier&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Power Filters help control topic visibility, but cannot be saved for later use&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Object Model Stuff&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Object model documentation lacks examples, cross-references, related links and even complete entries in some cases.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Cannot set the wait cursor during operation and have it stick, the cursor is reset to an arrow&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Cannot intercept the &amp;quot;delete topic&amp;quot; event to prevent user deletion of a given topic&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No inheritance of Business Topics, Topic Attributes among topics, smart map parts, etc&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No abstraction to support sets of linked maps, say a &amp;quot;parent&amp;quot; map linking to several &amp;quot;child&amp;quot; maps&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No abstraction to support storing, loading&amp;nbsp;and applying view filters set by user&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No means to &amp;quot;compare maps and find differences&amp;quot; in object model.&lt;/li&gt;&lt;/ul&gt;&lt;p style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Markup Stuff &lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Wrong XHTML namespace for hyperlink targets in Topic Notes markup.&amp;nbsp; Sometimes the namespace is given as &lt;font color="#0000ff"&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&amp;#39;http://www.w3.org/1999/xhtml&amp;#39;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;font color="#ff0000"&gt;&lt;span&gt; &lt;/span&gt;&lt;/font&gt;instead of &lt;font color="#0000ff"&gt;&lt;span&gt;&amp;quot;&lt;/span&gt;&lt;/font&gt;http://www.w3.org/1999/xhtml&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;quot;.&amp;nbsp; &lt;/span&gt;&lt;/font&gt;Note the extra single quotes.&lt;font color="#ff0000"&gt;&lt;span&gt; &lt;font color="#000000"&gt;(&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;em&gt;But this appears to be fixed in 6.2.399.)&lt;/em&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Dirty flag in XML map markup just adds to file size bloat&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;XSD content could carry more information in &amp;lt;xsl:documentation&amp;gt; tags.&amp;nbsp; If http://schemas.mindjet.com/MindManager/Application/2003 is going to resolve to a document, let&amp;#39;s make it an informative description of the schema.&amp;nbsp; Seems like the license info is longer than the &amp;lt;xsl:documentation&amp;gt; content&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;XSD schema files are available both in local file and via resolvable URL &lt;em&gt;(this may not be a bad thing....)&lt;/em&gt;&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;&amp;lt;span&amp;gt; and &amp;lt;font&amp;gt; tag usage, together with inline styling&amp;nbsp;in Topic Notes content works against more flexible content styling techniques.&amp;nbsp; Think Cascading Style Sheets, someone.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No nested tables in Notes content.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Macro Stuff&lt;/strong&gt;&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Cannot disable or replace the smile icon in the upper left of macro message box displays&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;Cannot handle events in the macro language&lt;/li&gt;&lt;/ul&gt;&lt;p style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;That&amp;#39;s a lot of bullet items, but it is the sort of content and feedback useful to product design teams.&amp;nbsp; We can only hope that the MindManager development team considers some of these things as time passes and new MindJet products emerge. And keep on using MindManager to generate, capture and organize information in&amp;nbsp;interesting&amp;nbsp;ways.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=686" width="1" height="1"&gt;</description><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/MindManager/default.aspx">MindManager</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/platform/default.aspx">platform</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/xml/default.aspx">xml</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/object+model/default.aspx">object model</category></item><item><title>Platform Greatness - Balance and Hierarchy</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2007/01/06/Platform-Greatness-_2D00_-Balance-and-Hierarchy.aspx</link><pubDate>Sat, 06 Jan 2007 18:42:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:594</guid><dc:creator>dethomas</dc:creator><slash:comments>0</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/594.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=594</wfw:commentRss><description>&lt;p&gt;Two of &lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2006/12/22/Six-Elements-of-Greatness.--Or-Something_2E00_.aspx"&gt;&lt;span&gt;six elements of greatness&lt;/span&gt;&lt;/a&gt;&lt;span&gt; remain in this series of software platform blog posts. These are the topics of &lt;em&gt;Balance &lt;/em&gt;and &lt;em&gt;Hierarchy. &lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Balance? Like On One Foot?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;With respect to a software platform, balance speaks less to the notion of equality and more to the relationships among different behaviors of the platform.&amp;nbsp; Not every aspect of a platform, as exposed by the Application Programming Interface (API), will receive equal weight. But in a useful platform, there is a working equilibrium, a sort of harmony, among the various parts of the API.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Distinct from this view of platform balance is the notion of hierarchy as a way to manage detail.&amp;nbsp; The basic idea of a platform - a chunk of technology that can be extended or specialized for a particular purpose - is itself a form of detail management. There are a number of aspects to an executing computer application. Examples include lifecycle, user presentation, application logic and data storage. When we build upon a well- constructed platform, we may simply take these aspects for granted. The platform handles them.&amp;nbsp; &lt;/p&gt;&lt;p&gt;Taking a broader view, a computer operating system itself is a platform example.&amp;nbsp; It is not necessary to understand heads, sectors or rotation speeds in order to write a file to a hard disk. &lt;em&gt;(Be grateful.&amp;nbsp; Be very, very grateful.)&lt;/em&gt; The operating system exposes an API involving handles and read/write buffers.&amp;nbsp; Using this interface, an application can treat a disk file as a contiguous logical entity even if the actual file contents are scattered across disjoint sections of the physical disk.&lt;/p&gt;&lt;p&gt;Just as an application reading a file doesn&amp;#39;t worry about the physical disk location of the data, a MindManager macro or add-in extension doesn&amp;#39;t care very much about the actual memory layout of a Mind Map. The MindManager platform deals with loading the map into memory, displaying menus, drawing topics and so on.&amp;nbsp; The macro/add-in can just concern itself with operating on a specific part of the map when the user asks it to do so.&amp;nbsp; This separation of concerns is a good thing. When separations of this type are easy to make and maintain, the platform is demonstrating good behavior, enabling extensions with appropriate effort.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Exposure Need Not Be Indecent&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;We&amp;#39;ve used the verb &lt;em&gt;expose&lt;/em&gt; in the sense of becoming visible or becoming known. MindManager 6 platform functionality is exposed in two main ways - an &lt;a href="http://www.mindjet.com/us/devzone/6/devzone/Page6.html"&gt;&lt;span&gt;object model&lt;/span&gt;&lt;/a&gt;&lt;span&gt; and an &lt;/span&gt;&lt;a href="http://www.mindjet.com/us/devzone/6/devzone/Page3.html"&gt;&lt;span&gt;XML document schema&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&amp;nbsp; The MindManager object model provides access to both map content and the application when MindManager is executing.&amp;nbsp; In contrast, the map XML schema describes a map markup format accessible on disk, with or without the presence of MindManager the application.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;As MindManager creates, saves and loads map content, data moves between the object model and the markup format. The object model provides access to a set of currently loaded maps in the context of an executing MindManager process, while the markup format for stored maps permits out-of-application processing on map contents.&amp;nbsp; Further, we can obtain XML markup from a MindManager object instance, or create a new instance by supplying markup.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Object Model Conventions&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;When dealing with an object model, there are several distinctions to keep in mind. One is that the term &lt;em&gt;object&lt;/em&gt; has been grossly overloaded in the literature.&amp;nbsp; The root meaning and latent power of object-oriented programming concepts has long since been obscured by strata of marketing and other twaddle. Lucky for us there a just a few fundamentals to understand. The rest reveals itself with use. The better you know the application as a user, the better you can employ the object model to solve problems. &lt;/p&gt;&lt;p&gt;The first thing to get straight is the difference between the &lt;em&gt;class &lt;/em&gt;of an object and an &lt;em&gt;instance&lt;/em&gt; of an object.&amp;nbsp; A class acts as a definition or specification for data and the code which acts upon the data.&amp;nbsp; These definitions are used at runtime to create object instances which carry and manipulate data.&amp;nbsp; The platform developers define the classes, we as platform consumers write code to create and manipulate instances of those classes.&lt;/p&gt;&lt;p&gt;Another object model distinction is made between &lt;em&gt;application&lt;/em&gt; classes and &lt;em&gt;document&lt;/em&gt; classes.&amp;nbsp; For the MindManager platform, application-related classes deal with an executing MindManager process, allowing us to iterate all the open documents, open dialogs, embellish the user interface with menus or&amp;nbsp; menu items and so on.&amp;nbsp; The main class used here is named &lt;a href="http://www.mindjet.com/us/devzone/6/mm6_object_model/Page167.html"&gt;&lt;span&gt;Application&lt;/span&gt;&lt;/a&gt;&lt;span&gt;; one (and only one) instance of this class is created when MindManager loads and is destroyed when MindManager exits.&amp;nbsp; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;If an object can be created, saved and later loaded as part of a map, it is an instance of a document-related class.&amp;nbsp; In the MindManger object model, the chief object of this kind is called the &lt;a href="http://www.mindjet.com/us/devzone/6/mm6_object_model/Page211.html"&gt;&lt;span&gt;Document&lt;/span&gt;&lt;/a&gt;&lt;span&gt;.&amp;nbsp; We can pretty much equate map Document instances and files. The object model provides methods to allow the examination of the current collection of Documents, the Topics carried by a given Document, and the variety of objects that can be associated with a Topic - Notes, Icons, Relationships, Callouts and so on. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;Sets or groups of object instances are handled in object models through the notion of &lt;em&gt;collections&lt;/em&gt;. Using one abstraction, the collection, for different kinds of objects means the same techniques used in iterating Icons will also work for iterating child Topics.&amp;nbsp; The extension developer can learn one thing, the collection, and use that knowledge in many places. &lt;/p&gt;&lt;p&gt;&lt;strong&gt;MindManager XML From 50,000 Feet&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;There&amp;#39;s a boatload of material available on XML and related markup technologies, we won&amp;#39;t dive into that technology here.&amp;nbsp; However, while the W3C &lt;a href="http://www.w3.org/XML"&gt;&lt;span&gt;XML page&lt;/span&gt;&lt;/a&gt;&lt;span&gt; carries links to the actual specifications, reference books are also useful.&amp;nbsp; One comprehensive reference is the &lt;/span&gt;&lt;a href="http://www.amazon.com/Essential-XML-Quick-Reference-Programmers/dp/0201740958"&gt;&lt;span&gt;&lt;em&gt;Essential XML Quick Reference&lt;/em&gt;&lt;/span&gt;&lt;/a&gt;&lt;span&gt; by Skonnard and Gudgin.&amp;nbsp; This covers several markup technologies, including Extensible Stylesheet Language transformations (XSLT).&amp;nbsp; This transformation technology is a powerful tool for converting XML content to other forms, say generating HTML web pages from a MindManager map, or converting a structured table in Word or Excel into a MindManager document.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;MindManager maps are inherently tree structures, formed by parent-child arrangements of Topics and related objects.&amp;nbsp; This characteristic fits well with the basic &amp;quot;nested tags&amp;quot; structure of XML documents.&amp;nbsp; Having a reasonably well-designed schema, the MindManager markup is extensible.&amp;nbsp; We can add new kinds of data to the map, data the base MindManager application knows nothing about, and still edit the map while maintaining the new data.&amp;nbsp; It is worth noting that XML schema defines markup structure, much as a class defines an object. Likewise, a given piece of XML markup is like an object instance, it is defined by some schema and carries data in the form of attributes and text content.&amp;nbsp; There&amp;#39;s a direct correspondece between tags in the XML format and object instances in the MindManager object model.&amp;nbsp; And this is a good thing.&lt;/p&gt;&lt;p&gt;Markup and its use in the MindManager platform to too broad and deep for this post to continue with the topic. However, by exposing and consuming map content through XML technology, the MindManager platform makes some forms of further extension straightforward. One way to get started with this side of the platform is to create a simple map in MindManager, save it as a .xml or .xmmap file, and open that file in a browser such as Internet Explorer.&amp;nbsp; Both the structure and the content of the map are captured in the markup format used to create these files.&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;Balance and Hierarchy in Practice&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;There are many examples of balance and hierarchy within the MindManager platform, but this post is getting overly long.&amp;nbsp; A forum post asking for a way to &lt;a href="http://mindjetlabs.com/cs/forums/thread/453.aspx"&gt;&lt;span&gt;display both ends of a Relationship&lt;/span&gt;&lt;/a&gt;&lt;span&gt; gives us an opportunity to show an example of platform variation and hierarchy in practice.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The Document Object abstraction in the&lt;a href="http://mindjetlabs.com/cs/files/folders/macros/entry592.aspx"&gt;&lt;span&gt; ExpandSelectedRelationships macro&lt;/span&gt;&lt;/a&gt;&lt;span&gt; gives an indication of the leverage provided by balance and hierarchy.&amp;nbsp; The Document Object class acts as a parent to the Topic class, the Boundary class and the Relationship class.&amp;nbsp; The macro walks the current object Selection, and gets a Relationships collection, if any, from the current object.&amp;nbsp; The macro then walks the Relationships collection, which can carry only Relationship instances, each Relationship joins two DocumentObject-derived instances. The macro calls the SnapIntoView() method of each DocumentObject instance.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The balance part of this example is how the MindManager platform lets the user choose the objects and presents them to macro code in the Selection object as part of the object model. We&amp;#39;re interacting with the user without doing much work.&amp;nbsp; We could operate on a saved map file, reading map markup and looking for hidden Topics, Relationships and Boundaries, but that seems ham-handed.&lt;/p&gt;&lt;p&gt;The hierarchy part of this example is how we can rely on the SnapIntoView() method of a DocumentObject instance to take care of showing the object to the user.&amp;nbsp; We don&amp;#39;t have to worry about the details of positioning the drawing page, finding a hidden child topic or boundary, deciding if some map content is hidden or not, and all the other details of drawing a map.&amp;nbsp; The macro just calls SnapIntoView() on both Relationship endpoints and moves on to the next Relationship in the collection.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What&amp;#39;s Not To Like?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;While this post has pointed to several aspects of the MindManager platform as examples of good balance and hierarchy, there are some gaps in the platform as well.&amp;nbsp; Here&amp;#39;s a brief, incomplete list of places in the platform where the extension developer does too much work:&lt;/p&gt;&lt;ul style="margin-top:0pt;margin-bottom:0pt;"&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;No way to store a filtered view of a map for later use in this or other maps.&amp;nbsp; If you want to apply the same filter to a set of maps,you&amp;#39;re pretty much on your own in defining the view and storing/loading/modifying that definition&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;The Power Filter is not exposed in the object model, so if you want to hide map content marked by specific content, say all Topics with the stop sign icon, you are reduced to iterating the map and making manual tests.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;The platform provides no diagnostics or performance monitoring to help the Macro or Add-in developer decide if his design is too big, too slow or just awkward.&amp;nbsp; If the platform was instrumented, so the time duration of an operation was easy to obtain, it would be easier to decide what needs to be optimized.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;While the BusinessTopics abstraction is a useful way to add custom properties to a topic, and supports editing those properties in a purpose built user interface, BusinessTopics are defined entirely by function calls in code. A data- driven model would be more useful to the extension developer.&amp;nbsp; A similar comment holds for adding new menus and menu items&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;The object model has the notions of an ExternalTopic and an ExternalTopicHandler, intended to allow Topics to be created &amp;quot;on demand&amp;quot;, say from a database or some external source.&amp;nbsp; This works, but a more useful, less awkward API might use the notion of a &amp;quot;TopicProvider.&amp;quot;&amp;nbsp; This idea supposes a component that can be plugged-in to the MindManager platform, and be available as a source of Topics, Callouts and other map content.&amp;nbsp; &lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;There&amp;#39;s no provision for creating sub-menus on context menus, particularly the Topic content menu.&amp;nbsp; So extensions have no way of mimicking the &amp;quot;Send To&amp;quot; or &amp;quot;Icon Marker&amp;quot; sub-menus seen when a Topic is right-clicked and the Topic context menu is displayed.&lt;/li&gt;&lt;li style="padding-left:0mm;margin-left:-4mm;margin-right:0mm;"&gt;The platform lacks ways for dealing with sets of related maps.&amp;nbsp; While the use has a Multi-Map view, there&amp;#39;s no collection of those maps available in the object model.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;But these complaints are somewhat removed from the basic behaviors exposed by the platform.&amp;nbsp; Each deals with a somewhat more advanced use of the MindManager platform in extending or specializing the MindManager product.&amp;nbsp;They aren&amp;#39;t really defects or problems, but rather opportunities to make a good platform better.&amp;nbsp; &lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=594" width="1" height="1"&gt;</description><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/platform/default.aspx">platform</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/xml/default.aspx">xml</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/object+model/default.aspx">object model</category></item><item><title>Platform Greatness - Variation and Evolution</title><link>http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2006/12/30/Platform-Greatness-_2D00_-Variation-and-Evolution.aspx</link><pubDate>Sat, 30 Dec 2006 21:37:00 GMT</pubDate><guid isPermaLink="false">dc0ed168-ddb3-4ca3-855b-6bc812d319a8:571</guid><dc:creator>dethomas</dc:creator><slash:comments>0</slash:comments><comments>http://mindjetlabs.com/cs/blogs/organizational_irritant/comments/571.aspx</comments><wfw:commentRss>http://mindjetlabs.com/cs/blogs/organizational_irritant/commentrss.aspx?PostID=571</wfw:commentRss><description>&lt;p&gt;What are the essential characteristics of a great software solutions platform?&amp;nbsp; A previous post in this blog talked about &lt;em&gt;variation&lt;/em&gt; and &lt;em&gt;evolution&lt;/em&gt; as two of &lt;a href="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/2006/12/22/Six-Elements-of-Greatness.--Or-Something_2E00_.aspx"&gt;&lt;span&gt;six elements&lt;/span&gt;&lt;/a&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;&lt;p&gt;In dealing with software platforms, variation is how the major themes of the platform emerge.&amp;nbsp; Related but different, evolution pertains to both how we understand the platform and how complexity is managed by the platform.&amp;nbsp; From the outside, both&amp;nbsp; variation and evolution are revealed through the Application Programming Interfaces (APIs) supported by the platform.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Just Code Something, Will Ya?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In understanding a software platform, sometimes it is useful to just make something work.&amp;nbsp; A &lt;a href="http://mindjetlabs.com/cs/forums/thread/464.aspx"&gt;&lt;span&gt;forum post&lt;/span&gt;&lt;/a&gt;&lt;span&gt; on this site made a plea for a way to count the words in the Notes associated with individual Topics.&amp;nbsp;That post mentions the File- &amp;gt;Properties-&amp;gt;Statistics menu command, and points out that Notes text word counts are not included.&amp;nbsp; There&amp;#39;s no obvious way to get a word count for Topic Notes text. So how can we solve this problem?&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Well first, exactly what is the problem?&amp;nbsp; &lt;/p&gt;&lt;p&gt;Seems the immediate user need is a way to get a word count for the Notes text attached to individual Topics.&amp;nbsp; We can generate several different problem statements:&lt;/p&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;span&gt;1) A user should be able to select a Topic, choose a command off a menu, and see a Topic Notes word count in a display of some sort.&amp;nbsp; That&amp;#39;s it.&amp;nbsp; The count is not stored, the user repeats the action to get an updated count.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;span&gt;2) OK, 1) would work, but wouldn&amp;#39;t it be handy to have this information available all the time?&amp;nbsp; We could have a Map Statistics or Map Info menu command, or maybe a floating map part, which would give a count of all the Topics, Relationships, and Callouts, together with the word count of the Notes attached to each Topic and Callout.&amp;nbsp; The display could automatically update as the user makes changes in Notes text and the Topic tree, or be manually refreshed on demand.&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;span&gt;3) Well, we already have a Statistics page in a tab dialog under a File-&amp;gt;Properties menu command.&amp;nbsp; Why don&amp;#39;t we just add Notes text word counts to the File-&amp;gt;Properties- &amp;gt;Statistics tab?&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p style="margin-left:11mm;text-indent:0mm;margin-right:0mm;"&gt;&lt;span&gt;4) Cogitate on this a little more, and we can ask &amp;quot;Why do we have to be in an active MindManager session at all in order to get a word count for Topic Notes text?&amp;nbsp; Why not be able to choose an arbitrary MindManager Map stored in the file system and get the Map Statistics, including word counts?&amp;quot;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Now all this may seem a little contrived, but I hope you have noticed something about each of these problem statements, both individually and as a group.&amp;nbsp; What the problem statements are trying to do is specify behavior, that is, state requirements.&amp;nbsp; This turns out to be harder than it looks.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Problem With Problem Statements&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;First, each supposes a human user in the picture, a human with a need for Topic Notes word counts. We&amp;#39;re discarding any notion that some other piece of software needs this information.&amp;nbsp; Since the basic on-disk storage format for MindManager map documents is XML markup, other software can count Topic Notes by parsing the file itself.&lt;/p&gt;&lt;p&gt;Second, note how each problem statement grows in complexity by adding more specific conditions (like &amp;quot;available all the time&amp;quot; or &amp;quot;choose an arbitrary MindManager Map stored in the file system&amp;quot;) and constraints (like &amp;quot;add Topic Notes word counts to the File-&amp;gt;Properties-&amp;gt;Statistics tab&amp;quot;). What&amp;#39;s interesting about this is how these conditions and constraints are phrased in terms of existing behaviors seen by the user.&amp;nbsp; If these behaviors are not exposed by the platform, or lie outside the scope of the platform, the problem statements become less useful. And more humorous, if your inclination runs that way.&amp;nbsp; The point to absorb is that how a problem statement is structured can play a large role in how a solution is built. The basic building blocks used in formal or informal problem statements are often concepts we are familiar with, which may not be the most appropriate concepts to use in describing the problem.&amp;nbsp; What you already know may blind you to what is possible. Or appropriate.&lt;/p&gt;&lt;p&gt;Third, we invented a term - Map Statistics - and gave a partial definition that skirted some essentials.&amp;nbsp; Does the term Map Statistics include means, medians, averages and standard deviations of sentences and paragraphs within and across Topic Notes text? Do we include the parent-child Topic structure in some way? Do we actually need some sort of content analysis that mines the Topic Notes text for keywords, and grades them on frequency and Topic depth?&amp;nbsp; &lt;/p&gt;&lt;p&gt;Finally, note how the term &amp;quot;word&amp;quot; played an essential role in each problem statement.&amp;nbsp; Each statement just assumed a common understanding of what a &amp;quot;word&amp;quot; is, and went on to talk about how many there are, that is, a word count. But the meaning of &amp;quot;word count&amp;quot; is dependent on the meaning of &amp;quot;word.&amp;quot; Seems like we missed something essential.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;What Would a Solution Look Like?&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;In practice, a useful rule of thumb is to do the simplest thing that could possibly work.&amp;nbsp; If we apply this to our crop of problem statements, we immediately opt for problem statement 1.&amp;nbsp; Statement 2 assumes some implementation details that add complexity, while statement 3 assumes access to a user interface dialog the MindManager platform does not directly expose.&amp;nbsp; While it is technically possible to use Win32 operating system services, hook the Properties dialog and modify the presentation, even from the MindManager macro language, that seems like way too much work. Meanwhile, statement 4 takes us out of the MindManager platform space all together, and into the Windows Explorer&amp;nbsp;space.&amp;nbsp; That&amp;#39;s a tangent way out of scope for this post.&lt;/p&gt;&lt;p&gt;Further, rather than deal with the semantic meaning of the term &amp;quot;word&amp;quot; we&amp;#39;ll take the simple route and opt for a structural definition.&amp;nbsp; A word is a character sequence delimited by space characters. Period. So there will be corner cases in which our count is incorrect, like two non-space character sequences separated only by a end-of-line sequence. &lt;/p&gt;&lt;p&gt;So while the MindManger platform offers several ways to solve the word count problem - we could write a Save-As XSL transform, or write an add-in to compute Map Statistics (whatever those are), or write a Smart Map Part that refreshes three ways (manually, on a timer and in response to changes)&amp;nbsp; - the useful solution is also the simplest. All we need is a menu command that operates on the currently selected Topics, computing the word count of any Notes text attached to the selected topics.&amp;nbsp; &lt;/p&gt;&lt;p&gt;This is the sort of thing a macro language is made for - one shot interactions with the user, operating on an easily obtained data structure.&amp;nbsp; A MindManager macro that does just that - iterates the current user selection and shows word counts in message boxes -&amp;nbsp; is &lt;a href="http://mindjetlabs.com/cs/files/folders/macros/entry566.aspx"&gt;&lt;span&gt;posted&lt;/span&gt;&lt;/a&gt;&lt;span&gt; in the Downloads area. Deciding &lt;/span&gt;&lt;a href="http://mindjetlabs.com/cs/content/AddingMacros.aspx"&gt;&lt;span&gt;which menu will carry the macro command&lt;/span&gt;&lt;/a&gt;&lt;span&gt; is a problem left to the user.&amp;nbsp; However, it seems the smiling icon in the upper left corner of the message box is outside our control without some surgery on the installed binary resource files.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Of Course, There is More to Say&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;A more generic design would use a &lt;a href="http://www.exciton.cs.rice.edu/JavaResources/DesignPatterns/VisitorPattern.htm"&gt;&lt;span&gt;Visitor design pattern&lt;/span&gt;&lt;/a&gt;&lt;span&gt; to traverse the current Selection, passing each Topic into the current Operation.&amp;nbsp; One class of Operation could count words, another could count words, sentences and paragraphs, while a third could look for keyword candidates or something else.&amp;nbsp; The menu commands would configure a Visitor instance with the appropriate Operation instance, then turn the Visitor loose to traverse the Map document.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;If we anticipated that we would have to add more behaviors without changing the basic structure of a MindManager Map document, this approach has some value.&amp;nbsp; Fortunately, the MindManager platform designers have been here before us.&amp;nbsp; A variation on the Visitor pattern is offered by the MindManager platform in the form of a &lt;a href="http://www.mindjet.com/us/devzone/x5/mm5_object_model_reference/TopicFinderObject.html#Topic74"&gt;&lt;span&gt;TopicFinder&lt;/span&gt;&lt;/a&gt;&lt;span&gt; object.&amp;nbsp; This platform feature will traverse the Topics in the map, not just the selected ones, invoking a function you supply when it finds a Topic that matches some criteria specified when the TopicFinder is defined.&amp;nbsp; This is a useful feature, since it hides all the details of maintaining the Map data structure from our code.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;While the topics of variation and evolution in software platforms are both broad and deep, we&amp;#39;ll quit while we&amp;#39;re ahead. The word count macro says we&amp;#39;re over 1300 words, which is more than enough for now, even if we haven&amp;#39;t found the bottom of the either subject in the MindManager platform.&lt;/p&gt;&lt;img src="http://mindjetlabs.com/cs/aggbug.aspx?PostID=571" width="1" height="1"&gt;</description><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/experts/default.aspx">experts</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/platform/default.aspx">platform</category><category domain="http://mindjetlabs.com/cs/blogs/organizational_irritant/archive/tags/macro/default.aspx">macro</category></item></channel></rss>