<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	>

<channel>
	<title>Apokalypse Software Corp. &#187; mori</title>
	<atom:link href="http://apokalypsesoftware.com/blog/tags/mori/feed/" rel="self" type="application/rss+xml" />
	<link>http://apokalypsesoftware.com</link>
	<description>words from the wilderness</description>
	<pubDate>Sun, 13 Jul 2008 03:48:17 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Web Site Issues Persist Still, Sometimes I&#8217;m to Blame, And &#8220;Hello, Mori 1.6.11!&#8221;</title>
		<link>http://apokalypsesoftware.com/blog/2008/07/12/117/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/07/12/117/#comments</comments>
		<pubDate>Sun, 13 Jul 2008 03:48:17 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[mori]]></category>

		<category><![CDATA[process failure]]></category>

		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/?p=117</guid>
		<description><![CDATA[In spite of updating WordPress a couple months ago, a spammer has managed to hack his junk into the blog webpages. You can see it at the end the page source. It&#8217;s after the closing &#60;html&#62; tag, where browsers ignore it, but Google doesn&#8217;t. Looks like I&#8217;ll be dumping WP to handle the blog, and [...]]]></description>
			<content:encoded><![CDATA[<p>In spite of updating WordPress a couple months ago, a spammer has managed to hack his junk into the blog webpages. You can see it at the end the page source. It&#8217;s after the closing &lt;html&gt; tag, where browsers ignore it, but Google doesn&#8217;t. Looks like I&#8217;ll be dumping WP to handle the blog, and just let Drupal do it all, at least for the time being.</p>
<p>Another issue I frequently see in the logs is user activity which is denied. A few in particular are some pages which anonymous users were trying to access. Today, however, I noticed that a normal user tried to access one of those pages so I decided to investigate. That&#8217;s when I discovered he tried adding an entry to the Mori User Story page and the system refused him! How can we refuse a user&#8217;s desire to add his own story to the story page? So I fished around in the admin controls until I found a couple that might have prevented him from doing this generous thing for us. So, hopefully, he&#8217;ll once again feel the creative mood strike him to share his experiences with us. And if this oversight and ignorance on my part also hindered your desire to let the world know about the awesome work you&#8217;re doing in Mori, please give it another shot. The community is certainly happy to find more inspiration by what you&#8217;re doing. After releasing Mori 1.6.11, I know I certainly am!</p>
<p>That&#8217;s right. Mori 1.6.11 is finally out, and it&#8217;s got the major smackdown on a few nasties. First, problem #2608, freezing during Spotlight updating after emptying the trash. Fixed. Second, (hmm&#8230;no problem number. Oh, well.) user&#8217;s autosave interval not being respected by Mori. Fixed. And finally, a problem that I finally managed to isolate after the beta went out (which was this past Monday, July 7, 2008): intermittent crash when updating the live search database. That long-standing bug is now dead! (It&#8217;s so old I don&#8217;t even know where the bug report for it is.)</p>
<p>Anyway, enough progress has been made to Mori&#8217;s internal structure since the last update, that except for taking care of some long-neglected responsibilities this weekend, I&#8217;ve been working on the polish and features that will make it into 1.7! And I understand how frustrating it is not to know the details of what they are, but it would&#8217;ve given Mori&#8217;s competitors a chance to duplicate before it&#8217;s release. But I&#8217;m looking forward to its release so I can finally share what they are with you.</p>
<p>In the meantime, there&#8217;s still some issue with the mGTD plugin. So there might be a Mori 1.6.12 soon if we get the cause for it, and any other open bugs, nailed down in time.</p>
<p>Alfonso<br />
P.S. Did you notice the View item in the toolbar? It allows you to select either table (immediate descendants) or outline mode for the entries view. I enabled that feature a few versions back. Give it a try, if you haven&#8217;t before. Also, try out the options for Layout in the View menu. The menu isn&#8217;t quite friendly enough yet, but it still gives you a lot of flexibility to work in your own style.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/07/12/117/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Keep Tabs on Apokalypse Software Between Blog Postings With Twitter</title>
		<link>http://apokalypsesoftware.com/blog/2008/03/10/112/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/03/10/112/#comments</comments>
		<pubDate>Mon, 10 Mar 2008 07:48:12 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[clockwork]]></category>

		<category><![CDATA[community]]></category>

		<category><![CDATA[corporate]]></category>

		<category><![CDATA[marketing]]></category>

		<category><![CDATA[mori]]></category>

		<category><![CDATA[twitter]]></category>

		<category><![CDATA[yourdon]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/03/10/112/</guid>
		<description><![CDATA[Just a simple reminder, if you&#8217;ve got questions or suggestions regarding any Apokalypse products, I invite you to post them at the forums if they&#8217;ll be of benefit and/or interest to the communities which use the products.
Post feature requests and bug reports so I keep track of what needs to be done to keep these [...]]]></description>
			<content:encoded><![CDATA[<p>Just a simple reminder, if you&#8217;ve got questions or suggestions regarding any Apokalypse products, I invite you to post them at the <a href='http://apokalypsesoftware.com/products/forum'>forums</a> if they&#8217;ll be of benefit and/or interest to the communities which use the products.</p>
<p>Post <a href='http://apokalypsesoftware.com/products/requests'>feature requests and bug reports</a> so I keep track of what needs to be done to keep these products relevant to the work you do. The issue tracking system even has a polling feature which allows you to vote on the most important issues for you.</p>
<p>For any communication which doesn&#8217;t apply to the community of users here, I invite you to contact me via <a href='http://apokalypsesoftware.com/products/contact'>private correspondence</a> or iChat/AIM/IRC (huperniketes).</p>
<p>However, if you just want to know what&#8217;s currently transpiring, and what&#8217;s going on in-between the lengthy times between my irregular posts (I&#8217;ve got a huge backlog of unfinished posts, I do apologize), there&#8217;s another way to see what I&#8217;m up to. That technique is through the <a href='http://twitter.com/'>Twitter</a> service.</p>
<p>Here&#8217;s a simple description of how Twitter is useful for me to keep you aware of what&#8217;s going on:<br />
<object width="425" height="350"><param name="movie" value="http://www.youtube.com/v/ddO9idmax0o"></param><embed src="http://www.youtube.com/v/ddO9idmax0o" type="application/x-shockwave-flash" width="425" height="350"></embed></object></p>
<p>Ed Yourdon, whose <a href ='http://www.amazon.com/Techniques-Program-Structure-Design-Yourdon/dp/013901702X'>Techniques of Program Structure and Design</a> revolutionized my thinking and methods in developing software, has written a <a href='http://www.yourdonreport.com/index.php/2008/03/09/the-awesomeness-of-twitter/'>great example</a> of why I use Twitter.</p>
<p>I invite you to follow <a href='http://twitter.com/huperniketes'>my tweets</a>, or those for <a href='http://twitter.com/apokalypse_mori'>Mori</a> and <a href='http://twitter.com/clockwork'>Clockwork</a> product info. I also invite you to sign up and send your own message to any of those accounts.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/03/10/112/feed/</wfw:commentRss>
		</item>
		<item>
		<title>An Urgent Mori 1.6.10 Release To Correct Bugs, and Workaround Spotlight Flaws</title>
		<link>http://apokalypsesoftware.com/blog/2008/02/27/110/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/02/27/110/#comments</comments>
		<pubDate>Wed, 27 Feb 2008 20:54:33 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[apple]]></category>

		<category><![CDATA[bugs]]></category>

		<category><![CDATA[debugging]]></category>

		<category><![CDATA[design]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[leopard]]></category>

		<category><![CDATA[localization]]></category>

		<category><![CDATA[mori]]></category>

		<category><![CDATA[mox]]></category>

		<category><![CDATA[rant]]></category>

		<category><![CDATA[tiger]]></category>

		<category><![CDATA[unit tests]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/02/27/110/</guid>
		<description><![CDATA[While making the changes to Mori&#8217;s code for 1.7, I encountered some oddities in test results, and it turned out there was a bug which I had introduced in an earlier release. While it doesn&#8217;t appear to endanger data in Mori notebooks, it might not return all the results you expect in a search, or [...]]]></description>
			<content:encoded><![CDATA[<p>While making the changes to Mori&#8217;s code for 1.7, I encountered some oddities in test results, and it turned out there was a bug which I had introduced in an earlier release. While it doesn&#8217;t appear to endanger data in Mori notebooks, it might not return all the results you expect in a search, or in entry summaries.</p>
<p>In addition, it has what I hope are a couple of performance improvements, continued improvements to Italian localization, and a work-around for Leopard&#8217;s insistence to treat non-Apple Spotlight metadata files as third-class citizens.</p>
<p>Normally when Spotlight discovers a file has been created or changed, it will ask the responsible program to figure out what&#8217;s inside, and feed it back to Spotlight. But one of the drawbacks to Spotlight&#8217;s design is it lacks the ability to define containers, or documents which contain logically distinct elements such as the chapters of a book, pictures in a photo album, or entries from a Mori notebook; and which can nest other containers as well. Treating a document as a single entity, Spotlight will open a document at the beginning (or maybe the place where the cursor was the last time it was open), even if what you&#8217;re looking for is somewhere near the end.</p>
<p>Because it doesn&#8217;t understand that a file can have distinct elements, the development teams for other Apple software (e.g., iPhoto, Safari, Stickies, etc.) came up with a scheme to trick Spotlight by creating new files with the data for those elements. So that&#8217;s how Jesse coded Mori&#8217;s behavior: duplicate the data for that logically distinct element in its own file. A separate copy of each element&#8217;s data in its own file. One extra file per element. That means the space taken up by your data is easily half again more than if Apple just added a container definition for Spotlight metadata (once for the notebook, another for the entry metadata file, and the third copy in Spotlight&#8217;s database).</p>
<p>But that isn&#8217;t all. While we&#8217;d like to keep all those extra files inside a notebook bundle (a directory which Finder treats as a file), because Spotlight treats a document as a single element it won&#8217;t look for those files inside the bundle. So Mori creates those files in the metadata cache folder (in your Library/Caches/Metadata folder), along with the metadata files from some of Apple&#8217;s programs. If you open the metadata folder and look at these files, you&#8217;ll see they have numbers to help Mori figure out which entry contains that data. But when you do a search using the Spotlight menu, and when you select menu item &#8216;Show All&#8217; and the results are displayed in the Finder, you won&#8217;t see the numbers; you&#8217;ll see the titles for the entries they represent.</p>
<p>Leopard however, isn&#8217;t so democratic; which is why users where complaining about the entries when Leopard was released. First off, it ignores any non-Apple metadata files in the cache folder <em>unless</em> you set your Spotlight preferences to use those files. Secondly, it will ignore the title info embedded in the entry metadata file and just display the file&#8217;s actual title, meaning the number. How&#8217;s that for Apple <strong>undermining the work of third-party developers</strong>?</p>
<p>So the workaround I came up with is to add the entry&#8217;s title (or Untitled, if it has none) at the <em>beginning</em> of the filename, so you at least have an idea which entry matches your search terms.</p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/02/refilename.png' alt='Spotlight Filename Workaround' /> (Thanks for wasting about a whole month total of my development time on that alone, Apple. I feel the love.)</p>
<p>I am, of course, more than happy to eat crow should I be proven to be completely mistaken or speaking from out-dated information. It&#8217;s easily worth it in order to improve the user experience.</p>
<p>Regardless of the rationale for the design decisions, <a href='http://apokalypsesoftware.com/products/files/releases/Mori-1.6.10.zip'>enjoy</a>, and thank you for being part of the community and continuing to support Mori!</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/02/27/110/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A Look (Back) at Mori&#8217;s Code</title>
		<link>http://apokalypsesoftware.com/blog/2008/02/11/107/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/02/11/107/#comments</comments>
		<pubDate>Mon, 11 Feb 2008 11:37:33 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[Xcode]]></category>

		<category><![CDATA[design]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[mori]]></category>

		<category><![CDATA[nostalgia]]></category>

		<category><![CDATA[refactoring]]></category>

		<category><![CDATA[scm]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/02/11/107/</guid>
		<description><![CDATA[When I purchased Mori, one of the first things I did was generate some documents about its codebase. For this, the main tool I used was Xcode&#8217;s Class Model tool to generate charts of the various classes involved. I spent several days laying out the classes on the charts, then printing and then folding and [...]]]></description>
			<content:encoded><![CDATA[<p>When I purchased Mori, one of the first things I did was generate some documents about its codebase. For this, the main tool I used was Xcode&#8217;s Class Model tool to generate charts of the various classes involved. I spent several days laying out the classes on the charts, then printing and then folding and taping the pages together. (This is a process which I am replacing with specific related classes that occupy only one or two pages, so I can keep them in a notebook; or sending a PDF to Kinko&#8217;s the next time I need to print the whole chart.) They helped me get an understanding of how code was laid out, and their relationships.</p>
<p>After a while, the tape that held the charts up on the wall would lose their adhesiveness and down they&#8217;d come…again and again, eventually falling into disuse. Having gotten a digital camera, I spent a day reassembling the crumpled remains of the charts about a week or so ago, and snapped a few shots which I present here.</p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/02/moridocclasses.jpg' alt='Mori’s Document Classes' /></p>
<p>There are 33 classes, and 25 protocols defined for the document back-end plugin, and quite a few supplementary category methods extending Cocoa&#8217;s foundation classes.</p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/02/mori-ui-classes.jpg' alt='Mori’s User Interface Classes' /></p>
<p>The user interface plugin has 85 classes, 18 protocols, and its own quantity of supplementary category methods.</p>
<p>At least, that&#8217;s what Mori&#8217;s classes looked like when the shots were taken. Today it looks a tad different.</p>
<p>Oneill, the branch for Mori 1.7 is under active development again and will bring substantial changes to the UI and back-end architecture. You shouldn&#8217;t notice any hiccups in the file format, but you should see better functionality and performance.</p>
<p>At least that&#8217;s what the testing support should help me do. Thankfully, I make heavy use of the <a href='http://subversion.tigris.org/'>Subversion</a> <a href='http://en.wikipedia.org/wiki/Source_Code_Management'>SCM system</a>. <em>Just in case.</em></p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/02/11/107/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Solving a New Event Bug Present in iCal When Scripting</title>
		<link>http://apokalypsesoftware.com/blog/2008/01/25/100/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/01/25/100/#comments</comments>
		<pubDate>Fri, 25 Jan 2008 16:46:44 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[AppleScript]]></category>

		<category><![CDATA[bugs]]></category>

		<category><![CDATA[code]]></category>

		<category><![CDATA[debugging]]></category>

		<category><![CDATA[iCal]]></category>

		<category><![CDATA[mgtd]]></category>

		<category><![CDATA[mori]]></category>

		<category><![CDATA[mox]]></category>

		<category><![CDATA[process failure]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[tiger]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/01/25/100/</guid>
		<description><![CDATA[While trying to solve a user&#8217;s problem with an mGTD script, I came across a subtle issue that demonstrates some issues that arise when violating a programming philosophy, tackling bugs in other people&#8217;s code, and general uncertainty whenever coding in AppleScript.
Working with AppleScript is generally considered iffy, because a lot seems ambiguous and so much [...]]]></description>
			<content:encoded><![CDATA[<p>While trying to solve a user&#8217;s <a href='http://apokalypsesoftware.com/products/node/2597'>problem with an mGTD script</a>, I came across a subtle issue that demonstrates some issues that arise when violating a programming philosophy, tackling bugs in other people&#8217;s code, and general uncertainty whenever coding in AppleScript.</p>
<p>Working with AppleScript is generally considered iffy, because a lot seems ambiguous and so much is dependent on how the dialect is interpreted and how scriptable apps handle some of the application events which scripting is dependent on. I&#8217;ve written scripts before, some I&#8217;m pretty awed by (that it works, actually, but also what it does), but I&#8217;m still hesitant to tackle some scripting issues. In addition, being a GTD greenhorn, and an mGTD noob made trying to respond to this issue authoritatively very questionable.</p>
<p>Thankfully, BMEGuy, mGTD&#8217;s author and all-around community nice guy, tackled the question with a quick solution. But the updated script was still problematic, and so I felt I really needed to participate in coming up with a solution.</p>
<p>Again, being an mGTD noob and all, it took me at least half an hour to figure out how the plugin worked, and the script on top of that. Then, after I was able to get the script to run, it worked for me. Hmm.</p>
<p>But that&#8217;s because I was testing with an entry with a date due of today. Once I switched it to later in the week, the entry was still showing up for today. <em>Isn&#8217;t that odd?</em> It seemed I had inadvertently left in the date line from the original script. When I removed it, I witnessed the same problem.</p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/01/icalbugweek.png' alt='Artifacts of the shy scripted event' align='left' /></p>
<p>It turns out there&#8217;s a bug in MOX 10.4.11&#8217;s iCal 2.0.5 (I&#8217;m guessing it&#8217;s present in earlier versions as well) where it doesn&#8217;t properly update the calendar display for new events made by the script. You won&#8217;t see it in the monthly view. However, you might notice a little oddness in the weekly view.</p>
<p>You can see the event if you add &#8217;show theEvent&#8217; after the script makes a new display alarm for the event (between the 2nd and 3rd &#8216;end tell&#8217; up from the bottom). This will display it&#8217;s properties in the info drawer, but you won&#8217;t see the event anywhere on the calendar (in either week or month view) until iCal is restarted.</p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/01/icalbugweekshow.png' alt='Although the event doesn't show up in the calendar, its properties are displayed in the info drawer' /></p>
<p>Running the script in monthly view doesn&#8217;t show any artifact in the calendar, but the data is shown in the info drawer.</p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/01/icalbugmonthshow.png' alt='icalbugmonthshow.png' /></p>
<p>You could also run the script in the weekly view and then switch to the monthly view, in which case you get this: </p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/01/icalbugmonthswitched.png' alt='icalbugmonthswitched.png' align='left' /></p>
<p>So now that the question of the event&#8217;s presence in the calendar was settled in my mind, I had to figure out why my faulty script displayed the event, but not the proper one; and how to coax iCal to display it.</p>
<p>Being unfamiliar with mGTD still, I tried to figure out the difference between the <var>attribute name &#8220;dateDue&#8221;</var> and <var>due date</var>. <var>due date</var> is one of the standard properties for entries in a Mori document. <var>attribute name &#8220;dateDue&#8221;</var> is a user column added in the example mGTD notebook. You can view them all the user columns by selecting the menu item <q>Edit > Edit Notebook Columns…</q></p>
<p>Okay, good so far, but why would one cause iCal to display properly and not the other? After moving the <var>due date</var> line about for a while, I checked <em>Script Editor</em>&#8217;s <cite>Event Log</cite>, and saw</p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/01/icalbugmissingvalue.png' alt='icalbugmissingvalue.png'/></p>
<p>The event reply for the <var>due date</var> had a <q>missing value</q>! Mori wasn&#8217;t returning a value for the <var>due date</var> property because it wasn&#8217;t set (and wouldn&#8217;t be in the example notebook). Now I had to find a way to use one of those missing values to make <var>theEvent</var> visible without setting it to the wrong date. And the problem with that is most of the properties used in Mori&#8217;s entries aren&#8217;t appropriate for an iCal event.</p>
<p>I eventually thought about re-ordering the messages to iCal instead of being so fixated on a change in the messages to Mori or playing with the properties being set in creating the event. What I came up with was a plan to use the messed up <q>missing value</q> date as before to make the event visible first, and <em>then</em> set the date correctly. The code turned out like this:</p>
<pre>
tell application "Mori"
	tell current entry
		set theDate to (get attribute name "dateDue")
		set faultyDate to due date
		set theName to name
		set theNote to note
	end tell
end tell
tell application "iCal"
	tell calendar "Scramble" -- the user should specify the name of the target calendar here
		set theEvent to make new event at end with properties {description:theNote, summary:theName, start date:faultyDate, allday event:true}
		tell theEvent
			make new display alarm at end with properties {trigger date:theDate}
		end tell
		-- show theEvent
		set theEvent's start date to theDate
	end tell
end tell
</pre>
<p>And to my surprise, it worked! So as I began gathering the materials together for my reply to the issue, I noticed something in the event&#8217;s info drawer that had escaped my attention before:</p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/01/icalbughilite.png' alt='The previous script set up appointments for H. G. Wells.' align='left' /></p>
<p>iCal, that&#8217;s just crazy talk! But at least it would explain why it would display traces of an event, if anything at all; and why it wasn&#8217;t noticeable earlier: iCal would correct the event data when reading it in when it started (&#8221;iCal database, that&#8217;s just crazy talk!&#8221;). But somebody forgot to add a sanity check when creating a new event from the properties passed to it by our script. (This is an example of why the <a href='http://en.wikipedia.org/wiki/Once_and_only_once'>Once and Only Once</a> principle should be heeded. If there&#8217;s only one place where events are synthesized from pre-recorded values, whether those values are from a stored file, a script or the UI, then all those code paths will benefit from any sanity checks added to event creation.)</p>
<p>Knowing this, here&#8217;s another means of working around this bug, by sending iCal info that won&#8217;t confuse it:</p>
<pre>tell application "Mori"
	tell current entry
		set theDate to (get attribute name "dateDue")
		-- set faultyDate to due date
		set theName to name
		set theNote to note
	end tell
end tell
tell application "iCal"
	tell calendar "Scramble" -- the user should specify the name of the target calendar here
		set theEvent to make new event at end with properties {description:theNote, summary:theName, start date:theDate, end date:(theDate + 1), allday event:true}
		tell theEvent
			make new display alarm at end with properties {trigger date:theDate}
		end tell
		-- show theEvent
		-- set theEvent's start date to theDate
	end tell
end tell
</pre>
<p>Thinking about these two solutions it&#8217;s clear that picking the latter one, with well-formed properties, is the safest choice to make. <strong>Here&#8217;s additional proof:</strong> the first solution, the one which plays with the start date to make the event appear, will indeed make the event appear. But if there&#8217;s less than 24 hours until the event begins, <em>it will appear on the wrong date</em> and still require iCal to be restarted to appear in the proper location!</p>
<p>It just goes to show you, while you might be able to get away with just the barest minimum, and someone else might normally clean up after you, it&#8217;s best if you did the job correctly from the start in case your safety net disappears from under you.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/01/25/100/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Mori v1.6.9 is Being Packaged for Release</title>
		<link>http://apokalypsesoftware.com/blog/2008/01/13/96/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/01/13/96/#comments</comments>
		<pubDate>Sun, 13 Jan 2008 23:04:53 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[Xcode]]></category>

		<category><![CDATA[bugs]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[mori]]></category>

		<category><![CDATA[process failure]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[unit tests]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/01/13/96/</guid>
		<description><![CDATA[This has taken much longer than I hoped for, and it lacks the features I wanted to add in there, but due to another empty-window bug I&#8217;m releasing Mori 1.6.9 today as a stopgap measure.
I had hoped for a quick release to get the fix out to those who are upgrading now (particularly from older, [...]]]></description>
			<content:encoded><![CDATA[<p>This has taken <em>much longer</em> than I hoped for, and it lacks the features I wanted to add in there, but due to another empty-window bug I&#8217;m releasing Mori 1.6.9 today as a stopgap measure.</p>
<p>I had hoped for a quick release to get the fix out to those who are upgrading now (particularly from older, Hog Bay Software versions), but I had upgraded my Xcode installation mid-stream, which is generally a bad idea if you can&#8217;t test the effects a tool migration will have on your projects. And Mori is quite unique in the way it&#8217;s constructed, being almost entirely plugins, and plugins which run plugins.</p>
<p>It took a week to resolve unit testing problems, some of which were due to Mori&#8217;s unique project files, some of which were due to changes in the layout of Xcode&#8217;s tools directories and one due to a bug in the unit tests for the &#8216;Check and Repair Notebooks&#8217; functionality (which I wasn&#8217;t going to risk going out with a bug whose cause I hadn&#8217;t determined).</p>
<p>Anyway, testing problems aside, I&#8217;m packaging the latest for release now. You&#8217;ll be able to read the <a href='http://apokalypsesoftware.com/products/mori/releasenotes'>release info</a> shortly.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/01/13/96/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Just Squeaked by With the New Mori v1.6.9 Test Version!</title>
		<link>http://apokalypsesoftware.com/blog/2008/01/02/95/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/01/02/95/#comments</comments>
		<pubDate>Thu, 03 Jan 2008 03:26:10 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[beta tests]]></category>

		<category><![CDATA[bugs]]></category>

		<category><![CDATA[mori]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/01/02/95/</guid>
		<description><![CDATA[I said I&#8217;d have the new release available for the Beta Test Team on January 2nd, and I made it! But just barely. It was up, but I didn&#8217;t finish the email informing them of its availability (nor of its secret location) until almost 12:03am of January 3rd!
There is a fresh bug in Mori v1.6.8, [...]]]></description>
			<content:encoded><![CDATA[<p>I said I&#8217;d have the new release available for the Beta Test Team on January 2nd, and I made it! But just barely. It was up, but I didn&#8217;t finish the email informing them of its availability (nor of its secret location) until almost 12:03am of January 3rd!</p>
<p>There is a fresh bug in Mori v1.6.8, so this one now in testing may go official without all the features I had promised, but I&#8217;m sure you&#8217;d rather have it lacking those features and working than to use the buggy version and wait for all the new fixes to be incorporated in v1.6.9.</p>
<p>Speaking of new fixes, I might add some more drag and drop capability as the lack of dropping groups of files, or folders, or even JPEGs into the source and entries view is seriously hampering productivity for a lot of us.</p>
<p>Anyway, we&#8217;ll see how this test version works out. I&#8217;ll try to add those other fixes, but when the latest incarnation of the empty window bug is fully squashed, I&#8217;ll release it with whatever fixes are completed and begin adding the rest to v1.6.10.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/01/02/95/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Happy New Year and a New Mori Update</title>
		<link>http://apokalypsesoftware.com/blog/2008/01/02/94/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/01/02/94/#comments</comments>
		<pubDate>Wed, 02 Jan 2008 06:24:50 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[development]]></category>

		<category><![CDATA[mori]]></category>

		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/01/02/94/</guid>
		<description><![CDATA[In case you&#8217;re running one of the older releases of Mori, one with a bug in the update mechanism, this is just a brief note to let you know Mori v1.6.8 has now been released!
The fixes include:

Rewrote user settings handling subsystem (to prevent wayward settings from affecting other operations).
Improved notebook check and repair functionality to [...]]]></description>
			<content:encoded><![CDATA[<p>In case you&#8217;re running one of the older releases of Mori, one with a bug in the update mechanism, this is just a brief note to let you know Mori v1.6.8 has now been released!</p>
<p>The fixes include:</p>
<ul>
<li>Rewrote user settings handling subsystem (to prevent wayward settings from affecting other operations).</li>
<li>Improved notebook check and repair functionality to fix orphaned entries and entry data records.</li>
<li>Fixed <a href='node/2508'>stall when dropping items into Mori&#8217;s source or entries lists</a>.</li>
<li>Fixed (or at least improved) <a href='node/2505'>Italian localization</a>.</li>
<li>Fixed faulty version update notification.</li>
</ul>
<p>The code <a href='http://apokalypsesoftware.com/blog/2007/12/17/88'>I had hoped to incorporate</a> into the update, but which didn&#8217;t make it (because it was already three weeks or so overdue) included fixes for Smart Folder Rules, non-wildcard searches, and word-count bugs, which are among those to be included in v1.6.9. Also to be included are user-settable font settings in the source and entries views, and the fix for the font prefs for notes.</p>
<p>Work on v1.6.9 has already begun, and my work in v1.6.8 improved the ability to perform testing in new releases. The Beta Test Gang will find the first test version on the site Jan 2nd.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/01/02/94/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Day&#8217;s Not Done Yet</title>
		<link>http://apokalypsesoftware.com/blog/2007/12/25/92/</link>
		<comments>http://apokalypsesoftware.com/blog/2007/12/25/92/#comments</comments>
		<pubDate>Wed, 26 Dec 2007 03:51:44 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[debugging]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[mori]]></category>

		<category><![CDATA[process failure]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[unit tests]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2007/12/25/92/</guid>
		<description><![CDATA[it&#8217;s been excessively frustrating and tiring. To cap off the season I was hoping to release the overdue 1.6.8 today, but there are still difficulties in getting the new defaults system working correctly.
The debugger is failing in the middle of an initializer method (self becomes 0&#215;1, and the argument becomes invalid), which typically indicates an [...]]]></description>
			<content:encoded><![CDATA[<p>it&#8217;s been excessively frustrating and tiring. To cap off the season I was hoping to release the overdue 1.6.8 today, but there are still difficulties in getting the new defaults system working correctly.</p>
<p>The debugger is failing in the middle of an initializer method (self becomes 0&#215;1, and the argument becomes invalid), which typically indicates an invalid pointer, but I&#8217;m just using -[NSCharacterScanner scanInt:], which shouldn&#8217;t be so problematic. (But it is, after all, Cocoa.) And it turns out that isn&#8217;t the correct tactic to use anyway as I want to extract info from the internal version number (MMmmb.bs.rr), not the public (MM.mm.bb[s[rr]]), and Cocoa doesn&#8217;t have an API for handling fixed-length records. (Possibly the <a href='http://supportline.microfocus.com/documentation/books/ocds42/lrpdf4.htm#s018'>only functionality</a> from COBOL I actually miss! I mean, there are BCD libraries for C, right?)</p>
<p>So I&#8217;ve spent much of the day tussling through docs and links for various RegEx frameworks for Cocoa, and trying to add <a href='http://regexkit.sourceforge.net/'>RegexKit</a> to the Blocks plugin framework; first 0.5beta and then 0.4beta via compilation. Now I&#8217;m attempting to use the prebuilt binary, which is problematic because frameworks are normally used by applications, <a href='http://lapcatsoftware.com/blog/2007/08/11/embedding-frameworks-in-loadable-bundles/'>not plugins</a>, so it doesn&#8217;t exactly fit right (or run). But as the clock&#8217;s been ticking, it looks like it&#8217;s time to punt and attempt another tactic by hard-coding a parser for the internal version scheme or using defaults for the optional fields in the public version scheme.</p>
<p>This is just to fix the bugs in the version class I added in an earlier version, which I have to get out of the way to continue fleshing out the revamped defaults system I created with unit tests and component code in order to release! Argh!</p>
<p>It hasn&#8217;t been all sweat and tears, though. I went through a period of idea generation (both software and marketing/entrepreneurism) early during the process and also, last night as I was organizing several years of accumulated papers, bills and what-not, found several new UI ideas I had come up with (and forgotten) and the missing FreeHand install CDs.</p>
<p>Now to get these final PITA problems licked so I can continue to move Mori forward!</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2007/12/25/92/feed/</wfw:commentRss>
		</item>
		<item>
		<title>A (Hopefully Brief) Update on the Delay of Mori 1.6.8</title>
		<link>http://apokalypsesoftware.com/blog/2007/12/21/90/</link>
		<comments>http://apokalypsesoftware.com/blog/2007/12/21/90/#comments</comments>
		<pubDate>Fri, 21 Dec 2007 17:58:06 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[agile]]></category>

		<category><![CDATA[beta tests]]></category>

		<category><![CDATA[bugs]]></category>

		<category><![CDATA[development]]></category>

		<category><![CDATA[mori]]></category>

		<category><![CDATA[mox]]></category>

		<category><![CDATA[process improvement]]></category>

		<category><![CDATA[software]]></category>

		<category><![CDATA[unit tests]]></category>

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2007/12/21/90/</guid>
		<description><![CDATA[As I was reviewing the code changes I had made, I slowly realized that the Mac&#8217;s user preferences system  had a minor philosophical flaw which makes for dangerous situations in the program.
One of the goals of this version is improved recovery from faulty stored values relating to the preferences and UI, so you can [...]]]></description>
			<content:encoded><![CDATA[<p>As I was reviewing the code changes I had made, I slowly realized that the Mac&#8217;s <a href='http://developer.apple.com/documentation/Cocoa/Conceptual/UserDefaults/Tasks/UsingDefaults.html'>user preferences system</a>  had a minor philosophical flaw which makes for dangerous situations in the program.</p>
<p>One of the goals of this version is improved recovery from faulty stored values relating to the preferences and UI, so you can continue with only minor inconvenience and perhaps a need to again set preferences to your liking. Not adequately performing this resulted in some of the missing toolbar and empty window problems that were experienced before. (For a more exciting example of cascading faults, read about the <a href='http://en.wikipedia.org/wiki/2003_North_America_blackout'>2003 Northeast blackout</a>.)</p>
<p>So after some delays in getting the unit tests for this new component to execute properly, I&#8217;m now adding that component into the program. Once I have the Cocoa preferences system replaced, I&#8217;ll be releasing 1.6.8. Then I&#8217;ll work on the possible fix for the SpotLight &#8216;odd name&#8217; bug for a quick-turnaround (later today) 1.6.9.</p>
<p>If that particular bug can&#8217;t be quickly fixed, I&#8217;ll work on some other long-standing issues in Mori for an update that will be released after a few days.</p>
<p>Incidentally, Tobias had a <a href='http://apokalypsesoftware.com/blog/2007/12/17/88/#comment-290'>valid concern</a> regarding the update process: <em>&#8220;Where does testing feature in this? In olden times an update was a build with only known problems since a few people played with it for a week before it was awarded a version number. WebKit offers a choice between bleeding edge nightly r1234 and release 3.0.&#8221;</em></p>
<p>I plan to continue to rely on the Beta Test Group for testing updates, with a release candidate at least one version ahead of what is shipping. However, at the time of this writing there are 320 <a href='http://apokalypsesoftware.com/products/project/issues/statistics/mori'>open bug reports</a> for Mori, even after having pre-release testing candidates as part of the process. That just isn&#8217;t right.</p>
<p>I&#8217;m primarily depending on the unit tests to prevent shipping defects to you. They serve to expose bugs in existing and new code; and by adding tests for the types of bugs identified in the bug reports, the tests will continue becoming more valuable to the release process.</p>
<p>The purpose is to continuously speed up the process by improving its results. It shouldn&#8217;t be a shock when a program works right off the bat. The delays are (partly) associated with having so many steps of repeated inspections on the same system. It multiplies the time it takes to get a new release out the door. The less I tolerate it, the quicker it gets done correctly.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2007/12/21/90/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
