<?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"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>david mccuskey.com &#187; Geek</title>
	<atom:link href="http://davidmccuskey.com/category/geek/feed/" rel="self" type="application/rss+xml" />
	<link>http://davidmccuskey.com</link>
	<description>my slice of the Internet</description>
	<lastBuildDate>Thu, 22 Jul 2010 16:58:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Generating Random Session IDs</title>
		<link>http://davidmccuskey.com/2009/09/generating-random-session-ids/</link>
		<comments>http://davidmccuskey.com/2009/09/generating-random-session-ids/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 21:03:36 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[Code Sample]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.mccuskey.com/?p=578</guid>
		<description><![CDATA[For any online service you must login so you can gain access to your stuff. So that you only have to put in your password once, the website must maintain a special unique character sequence called a session key to know that you have already authenticated. There is a problem with these keys, however, if [...]]]></description>
			<content:encoded><![CDATA[<p>For any online service you must login so you can gain access to your stuff.  So that you only have to put in your password once, the website must maintain a special unique character sequence called a <em>session key</em> to know that you have already authenticated.</p>

<p>There is a problem with these keys, however, if they are not truly random. This is detailed in a paper I stumbled upon entitled &#8220;Brute-Force Exploitation of Web Application Session IDs&#8221; by David Endler. It covers ways in which these keys can be &#8220;hacked&#8221; because they are not unique, but rather follow some sequence which can be guessed. He lists some major websites which he was able to get access to information that should have been private.</p>

<p>The paper got me thinking about how to generate random session keys, so I created some quick Python scripts using Twisted which demonstrates my solution. (This was my first time using Twisted, so it&#8217;s very possible that there is a better way to structure the code).</p>

<h4>Solution</h4>

<p>The character buffer in the server is used to generate new keys.</p>

<p>To fill the buffer:</p>

<p>0. Create a list of websites which themselves deliver random web pages (eg, wikipedia)<br />
1. Select a website from random and ask for a random page<br />
2. Grab the data within the <span class="caps">HTML </span><em>body</em> tags and put that string in the character buffer<br />
3. When the buffer needs more data, go back to 1.</p>

<p>To generate X number of keys:</p>

<p>0. Grab two random lengths of the character buffer. Use one to re-seed the random generator and the other as the basis for the new session key. Create the session key using <span class="caps">MD5 </span>and the key seed<br />
1. Update() the current <span class="caps">MD5 </span>session key using a generated random character / string<br />
2. Add that key to the buffer.<br />
3. When the key buffer needs more keys, go back to Step 1. For every Y number of keys generated, go back to Step 0.</p>


<h4>Notes</h4>

<p>We don&#8217;t use a a new seed for each <span class="caps">MD5 </span>session key because the buffer will be emptied too quickly. Of course, the settings for the buffer size, etc could be tweaked.</p>

<h4>Performance</h4>

<p>Running the server code on my Mac Mini (2.16GHz Dual Core) and 5 clients on another machine, I was able to service ~8000 keys/sec (~750 million keys/day).</p>

<h4>Conclusion</h4>

<p>My experiment satisfied my curiosity and answered the questions from my own project.</p>

<p>There are, of course, many tweaks that can be made. Send me the code changes to your favorites and I&#8217;ll include them.</p>

<p><a href="/downloads/code/HTTP-Session-Key.zip">Click to download the client server files.</a></p>

<h3>Resources</h3>


<ul>
<li><a href="http://www.cgisecurity.com/lib/SessionIDs.pdf">Brute-Force Exploitation fo Web Application Session IDs</a> (PDF)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://davidmccuskey.com/2009/09/generating-random-session-ids/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to build and install the Metakit DB for Python on MacOSX</title>
		<link>http://davidmccuskey.com/2009/02/how-to-build-and-install-the-metakit-db-for-python-on-macosx/</link>
		<comments>http://davidmccuskey.com/2009/02/how-to-build-and-install-the-metakit-db-for-python-on-macosx/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 02:39:38 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[Code Sample]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[macosx]]></category>
		<category><![CDATA[metakit]]></category>
		<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.davidmccuskey.com/?p=237</guid>
		<description><![CDATA[Ever since I used it years ago on a geek-project for my Zaurus, the Metakit DB has always been a favorite of mine. I had the chance to use it again on another personal project and this time on MacOSX. Unfortunately, the prebuilt binaries on the Metakit site are for older versions of MacOSX, so [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since I used it years ago on a geek-project for my Zaurus, the Metakit DB has always been a favorite of mine. I had the chance to use it again on another personal project and this time on MacOSX. Unfortunately, the prebuilt binaries on the Metakit site are for older versions of MacOSX, so I had to build it myself.</p>

<p>Normally one would simply follow the <a href="http://www.equi4.com/pub/mk/">Metakit installation instructions</a>, but they are old and didn&#8217;t work correctly with 10.5 Leopard. I scraped enough information together from the Internet to get it working, but I had to do a lot of research. To save others the same hassle, I have put together all of the changes and put them here in their entirety:</p>

<p><strong>Building Metakit</strong></p>

<p>Make sure you have Xcode installed on your system before starting.</p>

<p>Get the latest source from the <a href="http://www.equi4.com/pub/mk/">Metakit downloads page</a>. At this time the latest version is <code>metakit-2.4.9.7.tar.gz</code>.</p>

<p>Uncompress the archive in a work directory and run the following commands:</p>



<pre>
&amp;gt; cd builds
&amp;gt; ../unix/configure --with-python=/System/Library/Frameworks/Python.framework/Versions/2.5
</pre>



<p>Note: Your Python install might be in a different location. If so, give the  <code>--with-python</code> arg the proper value.</p>

<p><em>&#8220;Fat&#8221; binary setup</em></p>

<p>If you need this to run on the <span class="caps">PPC </span>architecture you will need to make a couple of modifications to <code>./builds/Makefile</code> <em>after</em> running <code>configure</code>, otherwise you can skip this step and build the binaries with <code>make</code>.</p>

<p>Find <code>CXXFLAGS = $(CXX_FLAGS)</code> and change to the following:</p>



<pre>
CXXFLAGS = $(CXX_FLAGS) -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
</pre>



<p>Find <code>SHLIB_LD = g++ -dynamiclib -flat_namespace -undefined suppress</code> and change to the following:</p>



<pre>
SHLIB_LD = g++ -dynamiclib -flat_namespace -undefined suppress -arch ppc -arch i386
</pre>



<p><em>Build the binaries</em></p>

<p>Run your typical <code>Makefile</code> commands:</p>



<pre>
&amp;gt; make
&amp;gt; make test
</pre>



<p><strong>Installing Metakit</strong></p>

<p>Rename the shared library which is now in the <code>./builds</code> directory:</p>



<pre>
&amp;gt; mv Mk4py.dylib Mk4py.so
</pre>



<p>And copy the following files to <code>/System/Library/Frameworks/Python.framework/Versions/2.5/Extras/lib/python</code> (be sure to adjust the path name for your version of Python):</p>



<pre>
../python/metakit.py
./Mk4py.so
</pre>



<p><strong>Testing Metakit</strong></p>

<p>At this point you should have a working system and ought to be able to run the following command in a Python shell without issue:</p>



<pre>
&amp;gt;&amp;gt;&amp;gt;from metakit import *
</pre>



<p>Enjoy !</p>

<h3>Resources</h3>


<ul>
<li><a href="http://www.equi4.com/metakit/python.html">Metakit for Python website</a></li>
</ul>




<ul>
<li><a href="http://www.ospace.net/wiki/index.php/ServerHowTo">helpful instructions from www.ospace.net</a></li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://davidmccuskey.com/2009/02/how-to-build-and-install-the-metakit-db-for-python-on-macosx/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Freezing away my Nokia woes</title>
		<link>http://davidmccuskey.com/2006/04/freezing-away-my-nokia-woes/</link>
		<comments>http://davidmccuskey.com/2006/04/freezing-away-my-nokia-woes/#comments</comments>
		<pubDate>Mon, 24 Apr 2006 09:49:43 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://www.davidmccuskey.com/files/freezing-away-my-nokia-woes.html#unique-entry-id-18</guid>
		<description><![CDATA[The biggest problem which still plagues my Nokia 6600 is that the phone is difficult to turn on after it has been turned off. When I try to turn it on the backlight will illuminate, but the boot sequence stops there (eg, the Nokia symbol won&#8217;t show, etc). &#8230;I won&#8217;t go into too much detail [...]]]></description>
			<content:encoded><![CDATA[<p>The biggest problem which still plagues my Nokia 6600 is that the phone is difficult to turn on after it has been turned off.   When I try to turn it on the backlight will illuminate, but the boot sequence stops there (eg, the Nokia symbol won&#8217;t show, etc).</p>

<p>&#8230;I won&#8217;t go into too much detail about why I decided to put my phone in the freezer, though the seed was planted after a conversation with my friend Simon regarding my phone issues.</p>

<p>&#8230;A couple of days later, I was ready to try and reformat the internal memory to see if that would cure my reboot problems.   I turned off the phone to start the process, but I then remembered that I had forgotten to synchronize the latest changes in my address book with my computer.</p>

<p>&#8230;Just to make sure it wasn&#8217;t a fluke, I turned the phone off and on several times and it booted without any problems (though the display/CPU were a little sluggish because of the cold).</p>

<p>In the end I was able to make a final backup and do a synchronization before I started doing other radical fix-it things with my phone.</p>

<p>As final words I will say that there was a little more condensation buildup on the phone than I felt comfortable with only because moisture and electronics don&#8217;t mix.   So midway through the process I started to put the phone in a plastic Zip-lock bag and squeezed out most of the air to keep the condensation to a minimum.</p>]]></content:encoded>
			<wfw:commentRss>http://davidmccuskey.com/2006/04/freezing-away-my-nokia-woes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nokia 6600 Resurrection</title>
		<link>http://davidmccuskey.com/2006/03/nokia-6600-resurrection/</link>
		<comments>http://davidmccuskey.com/2006/03/nokia-6600-resurrection/#comments</comments>
		<pubDate>Wed, 29 Mar 2006 03:30:53 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[Geek]]></category>

		<guid isPermaLink="false">http://www.davidmccuskey.com/files/nokia-6600-resurrection.html#unique-entry-id-12</guid>
		<description><![CDATA[I have reason to believe that my mobile phone is dying, but I hope not. I bought my Nokia 6600 about 1.5 years ago and, up until 2.5 weeks ago, it has been a very dependable phone. Symptoms &#226;€&#162; The Message application crashes every time when trying to display the &#8216;My Folders&#8217; area of Messages. [...]]]></description>
			<content:encoded><![CDATA[I have reason to believe that my mobile phone is dying, but I hope not. I bought my Nokia 6600 about 1.5 years ago and, up until 2.5 weeks ago, it has been a very dependable phone.<br />
<h5>Symptoms</h5>
&acirc;€&cent; The Message application crashes every time when trying to display the &#8216;My Folders&#8217; area of Messages. I get the error &#8220;App. closed mce !&#8221;.

<p>&acirc;€&cent; The phone won&#8217;t boot up when I put in a freshly recharged battery, though the backlight will come on like it&#8217;s trying. Sometimes it takes 20 attempts before the Nokia logo will appear (the logo signals that the phone is booting up). Also I&#8217;ve found that, when there are these startup problems, the phone won&#8217;t charge when the power adapter is connected directly to it.</p>

The interesting thing is that once I am able to get the phone to boot, it will continue to run like normal until the battery is drained. However, if the phone is switched off when the battery starts to drain, the phone will never boot back up with that battery. The phone will also charge the battery when in this situation.<br />
<h5>Possible Causes</h5>
I think there are two things going on:

<p><strong>&acirc;€&cent; Old batteries<br />
</strong><br />
I&#8217;m starting to think that my two batteries are getting old and don&#8217;t have the maximum voltage that for which they are rated. I have the original and also bought a spare almost exactly one year ago from Malcomwireless.</p>

<p>I theory is that that the phone the circuitry can&#8217;t power up unless there is sufficient voltage. Consequently it takes several tries to get the phone to turn on.</p>

<p>I wish that I had my voltmeter handy to test this.</p>

<p><strong>&acirc;€&cent; Memory issues<br />
</strong><br />
I initially thought that the crashing Messages application was due to the fact that I had saved too many messages in the &#8216;My Folders&#8217; area on the external memory card. Even though I had over 300 messages in a single folder, this doesn&#8217;t seem like a lot because the phone has a somewhat &#8216;modern <span class="caps">OS&#8217; </span>on it &#8211; Symbian Series 60. I checked the manual for folder limits, but there was nothing written.</p>

All this seemed to have happened all at once.<br />
<h5>Conclusion</h5>
I will rebuild it &#8211; better, stronger, faster.]]></content:encoded>
			<wfw:commentRss>http://davidmccuskey.com/2006/03/nokia-6600-resurrection/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hacking the front page to display my blog entries</title>
		<link>http://davidmccuskey.com/2006/03/hacking-the-front-page-to-display-my-blog-entries/</link>
		<comments>http://davidmccuskey.com/2006/03/hacking-the-front-page-to-display-my-blog-entries/#comments</comments>
		<pubDate>Mon, 13 Mar 2006 01:53:28 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[main template]]></category>
		<category><![CDATA[plone]]></category>

		<guid isPermaLink="false">http://www.davidmccuskey.com/files/hacking-the-front-page-to-display-my-blog-entries.html#unique-entry-id-6</guid>
		<description><![CDATA[The problem I wanted the home page of my web site to show my blog entries and also be a little more dynamic by displaying other related content. The default index_html page for my blog software, Quills, does display the current entries, but from what I read online there was no great solution to get [...]]]></description>
			<content:encoded><![CDATA[<h3>The problem</h3>

<p>I wanted the home page of my web site to show my blog entries and also be a little more dynamic by displaying other related content.</p>

<p>The default <code>index_html</code> page for my blog software, Quills, does display the current entries, but from what I read online there was no great solution to get its default page to show at the root.</p>

<p>Plan B was to replace my generic <code>index_html</code> page with one which would query the Quills weblog object for all of its entries and then display them one at a time. I wanted to use one of Plone&#8217;s built-in user-addable types for the script but as far as I can tell they are only used to display formatted text and won&#8217;t execute any code. I finally used the Zope Management Interface (ZMI) to add a single Zope Page Template (ZPT) called <code>index_html</code>.</p>

<h3>Understanding how Plone draws a page</h3>

<p>I read several chapters in the book <em>The Definitive Guide to Plone</em> to figure out how to proceed, but the one which gave the most pertinent information was <strong>Chapter 7 &#8211; Customizing the Main Template</strong>.</p>

<p>In short, Plone has a special Zope Page Template (ZPT)  at <code>/your_plone_site_folder/portal_skins/plone_templates/main_template</code> which contains the <span class="caps">HTML </span>and special markup used to render the basic structure of each page in the site. Among other things, the markup defines regions within the page called <code>define-slots</code>. These slots are <strong>filled in</strong> by an object as it is being rendered for view in the browser. Using a master template like this assures that the site has a consistent page layout.</p>

<p>Within this master template there are slots defined for different sections of the <span class="caps">HTML </span>like <code>head_slot</code>, <code>css_slot</code>, <code>column_one_slot</code>, and <code>content</code>. Some examples of these slot definitions follow. Notice that they can be within different types of tags.</p>



<pre><code>
  This content will be replaced.

&lt;td&gt;...&lt;/td&gt;
</code></pre>



<p>When you are rendering <em>your</em> <span class="caps">ZPT, </span>you define the areas which will &#8220;fill&#8221; these slots and place the pertinent content within them. These areas are appropriately called <code>fill-slots</code>. Here are some examples:</p>



<pre><code>
  your stuff here


&lt;div&gt;
  your stuff here
&lt;/div&gt;
</code></pre>



<p>There are other things to know about how a page gets rendered, but this is the basic idea.</p>

<h3>Creating the page</h3>

<p>With <code>define-slots</code>  and <code>fill-slots</code> in mind, I created my <span class="caps">ZPT </span>at the root of my Plone site called <code>index_html</code> so I could start hacking. For my purposes I was only interested in changing the fill-slot <code>main</code> so I defined my fill-slot like above and put some bogus content in it to make sure I was on the right track. I filled out the rest of the code with guidance from examples in the book, other code in the Plone <code>portal_skins</code> area as well as in the Quills product directory.</p>

<h3>Getting the entries</h3>

<p>The Quills file <code>/Zope/Products/Quills/WeblogArchive.py</code> had two methods defined which return a list of blog entries &#8211; <code>getEntries()</code> and <code>getLazyEntries()</code>. The difference being that the latter only returns the catalog search objects, so it&#8217;s fast but the data which can be displayed is limited to the metadata definitions in the <code>portal_catalog</code>. I was hoping to get the full text of the entry so initially used <code>getEntries()</code>, but it turned out to be too slow.</p>

<h3>Keeping with the site look</h3>

<p>Next I wanted to use as much of the site style sheet as possible too keep the look consistent. Most of the important entries are in the main style sheet which is found at <code>/your_plone_site_folder/portal_skins/plone_styles/plone.css</code>.</p>

<h3>Extras</h3>

<p>I added this page to the site <span class="caps">RAM</span> Cache since this is the front page and the entries don&#8217;t change very often. <span class="caps">ZMI </span>&gt; Cache Tab &gt; Cache Object Using <span class="caps">RAM</span> Cache &gt; Save Changes. Easy.</p>

<p>I also hacked together an <span class="caps">RSS </span>icon and feed in the h1 title.</p>

<h3>Things to update</h3>

<p>My page works, but I should tidy up some of the <span class="caps">CSS </span>and change the design to be a little more interesting. I also have hard-coded the name of my weblog object instead of using the <code>portal_catalog</code> to find it for me.</p>

<p>You can <a href="/wp-content/uploads/2010/07/blog-entry-code.txt" title="blog-entry-code.txt" alt="blog-entry-code.txt"> click here to download the template</a>.</p>]]></content:encoded>
			<wfw:commentRss>http://davidmccuskey.com/2006/03/hacking-the-front-page-to-display-my-blog-entries/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ho Hum on the Apple front, but I still want a Mini</title>
		<link>http://davidmccuskey.com/2006/03/ho-hum-on-the-apple-front-but-i-still-want-a-mini/</link>
		<comments>http://davidmccuskey.com/2006/03/ho-hum-on-the-apple-front-but-i-still-want-a-mini/#comments</comments>
		<pubDate>Wed, 01 Mar 2006 20:52:41 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[Apple]]></category>
		<category><![CDATA[Geek]]></category>
		<category><![CDATA[Misc]]></category>

		<guid isPermaLink="false">http://www.davidmccuskey.com/files/ho-hum-on-the-apple-front-but-i-still-want-a-mini.html#unique-entry-id-5</guid>
		<description><![CDATA[I am glad that Apple has upgraded the Mac Mini with the new Intel processors because I wanted to get one to use as my web server. Awhile back I read something which stated that Python runs slower with FreeBSD on a Mac. I can&#8217;t remember if it was a combination between the language/processor or [...]]]></description>
			<content:encoded><![CDATA[<p>I am glad that Apple has upgraded the Mac Mini with the new Intel processors because I wanted to get one to use as my web server. Awhile back I read something which stated that Python runs slower with FreeBSD on a Mac. I can&#8217;t remember if it was a combination between the language/processor or language/OS, though I&#8217;m hoping for the former. The latter would mean that the processor change wasn&#8217;t going to help the bottleneck in the multi-threaded environment (or whatever the issue happened to be). Now that the upgrades are a reality perhaps I can dig into the problem again and see if it&#8217;s is no longer an issue.</p>

<p>The performance of Python is important because my web server of choice is Zope and it&#8217;s written in Python. Within the next year I&#8217;d like to have my web sites on a hosted server instead of sharing space, and I&#8217;d rather it be running on a Macintosh. I like the idea of having a Mac because they&#8217;re easier to administer when you&#8217;re not a system administrator in real life. On the other hand I&#8217;d hate to buy a Mini and have it sitting in a dark colocation somewhere with no one to fully appreciate its classy exterior. It would better serve me running Front Row, sitting on top of my entertainment center right next to my Airport Express, and then I could ship a &#8220;Dull&#8221; to the data center.</p>]]></content:encoded>
			<wfw:commentRss>http://davidmccuskey.com/2006/03/ho-hum-on-the-apple-front-but-i-still-want-a-mini/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Setup MarsEdit with Quills 0.9 Final</title>
		<link>http://davidmccuskey.com/2006/02/setup-marsedit-with-quills-09-final/</link>
		<comments>http://davidmccuskey.com/2006/02/setup-marsedit-with-quills-09-final/#comments</comments>
		<pubDate>Sun, 26 Feb 2006 02:30:08 +0000</pubDate>
		<dc:creator>david</dc:creator>
				<category><![CDATA[Geek]]></category>
		<category><![CDATA[How-To]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[plone]]></category>
		<category><![CDATA[zope]]></category>

		<guid isPermaLink="false">http://www.davidmccuskey.com/files/setup-marsedit-with-quills-0.9-final.html#unique-entry-id-3</guid>
		<description><![CDATA[I have been wanting to find a better way to write blogs rather than using the Plone interface. I was happy to find that MarsEdit and Quills both implement several blog APIs. Though it would appear that the implementation for both the BloggerAPI and the MetaWeblogAPI are not complete, MarsEdit can still be used to [...]]]></description>
			<content:encoded><![CDATA[<p>I have been wanting to find a better way to write blogs rather than using the Plone interface. I was happy to find that MarsEdit and Quills both implement several blog <span class="caps">API</span>s. Though it would appear that the implementation for both the BloggerAPI and the MetaWeblogAPI are not complete, MarsEdit can still be used to post articles using the BloggerAPI.</p>

<p>Here are examples of necessary configuration:</p>



<pre><code>Name: MyBlog
Home URL: http://www.davidmccuskey.com/weblog
Software: Other Blogger-compatible
RPC URL: http://www.davidmccuskey.com/weblog
Blog ID: weblog.2006-01-10.2395214781</code></pre>



<p>The tricky part is obtaining the Blog <span class="caps">ID.</span> Plone uses an immutable identifier for all objects so that they can be found even after renaming them. Quills in turn uses this ID to get at your weblog object.</p>

<p>In order get this ID you&#8217;ll need to login to your Zope Management Interface (ZMI) and go digging through the <strong>uid_catalog</strong> in Plone. When you have clicked on the catalog object, click on the <em>tab</em> labeled Catalog. Find your blog object in the list of results and click on its link.</p>

<p>Search on the resulting popup page for the key named <strong><span class="caps">UID</span></strong>. The value of this key is what you will need to use for the Blog <span class="caps">ID.</span></p>

<p>Note: Because of errors in the implementation of the MetaWeblog <span class="caps">API, </span>you will see a Zope error after posting, however the post will be correctly saved.</p>]]></content:encoded>
			<wfw:commentRss>http://davidmccuskey.com/2006/02/setup-marsedit-with-quills-09-final/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

