<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss'><id>tag:blogger.com,1999:blog-795937163424479586</id><updated>2009-10-28T19:32:15.231-07:00</updated><title type='text'>C. Bess Wonders</title><subtitle type='html'>Explore the amazing wonders of Christopher Bess</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-3988001921430220951</id><published>2009-10-28T18:32:00.000-07:00</published><updated>2009-10-28T19:32:15.443-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='java'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>Mac Android SDK Setup</title><content type='html'>Android in now in my sights. I am recalling Java, my favorite language when I was 15-16 years old.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The below is a concise guide to installing the Android Development Environment on Mac OS X 10.6 (Snow Leopard).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;Download and install Eclipse&lt;/b&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Download and extract the Android SDK&lt;/b&gt; (which is contains the SDK tools) - &lt;a href="http://developer.android.com/sdk/index.html"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;run `sdk/tools/android` from Terminal.app (it will launch the Android SDK UI) and &lt;b&gt;install SDK components&lt;/b&gt; - &lt;a href="http://developer.android.com/sdk/adding-components.html"&gt;http://developer.android.com/sdk/adding-components.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Install ADT plugin&lt;/b&gt; - &lt;a href="http://developer.android.com/sdk/eclipse-adt.html"&gt;http://developer.android.com/sdk/eclipse-adt.html&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;b&gt;Create an Android device&lt;/b&gt; (emulator). In the same window from #4, in the left pane, click "Virtual Devices". Then click "New", in the window, change "Target" to Android. Then fill out the other information as necessary. &lt;/li&gt;&lt;/ol&gt;&lt;div&gt;Don't forget to add the SDK library to Eclipse (from Preferences -&gt; Android)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://developer.android.com/guide/index.html"&gt;http://developer.android.com/guide/index.html&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="overflow:auto"&gt;Thats about it. Anything else is all you.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-3988001921430220951?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/3988001921430220951/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=3988001921430220951' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3988001921430220951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3988001921430220951'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2009/10/mac-android-sdk-setup.html' title='Mac Android SDK Setup'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-8518645105502956362</id><published>2009-09-05T00:48:00.001-07:00</published><updated>2009-09-05T00:55:51.635-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cbess'/><category scheme='http://www.blogger.com/atom/ns#' term='macos'/><title type='text'>Mail.app deleted my subject column!</title><content type='html'>Like most who prefer a more readable and efficient mail view, you may have used WideMail (or LetterBox) before Snow Leopard. I did, and apparently the Snow Leopard ripped into my plugins and mauled the subject column.&lt;br /&gt;&lt;br /&gt;I restored it by deleting a couple nodes from: ~/Library/Preferences/com.apple.mail.plist&lt;br /&gt;&lt;br /&gt;#1 Quit Mail.app&lt;br /&gt;&lt;br /&gt;#2 double click the plist file and remove:&lt;br /&gt;Root/ActiveViewers&lt;br /&gt;Root/TableColumns&lt;br /&gt;&lt;br /&gt;#3 Save the plist and start Mail.app&lt;br /&gt;&lt;br /&gt;Subject column is now present, done.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-8518645105502956362?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/8518645105502956362/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=8518645105502956362' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/8518645105502956362'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/8518645105502956362'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2009/09/mailapp-deleted-my-subject-column.html' title='Mail.app deleted my subject column!'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-3724726794350674527</id><published>2009-07-17T17:22:00.000-07:00</published><updated>2009-07-17T17:32:03.906-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='webos'/><category scheme='http://www.blogger.com/atom/ns#' term='palm'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Palm webOS emulator fun?</title><content type='html'>In my excitement of the release of webOS SDK, I downloaded and installed the emulator. To my surprise I found no instructions on how to use the more advanced features/gestures.&lt;br /&gt;&lt;br /&gt;#1 How do you rotate the emulator to landscape? &lt;br /&gt;iPhone emulator: press Cmd + left or right&lt;br /&gt;Palm emulator: ?&lt;br /&gt;&lt;br /&gt;#2 How do you perform multi-touch gestures? &lt;br /&gt;iPhone emulator: press Option (Alt) and mouse down.&lt;br /&gt;Palm emulator: ?&lt;br /&gt;&lt;br /&gt;If you zoom in on something, best of luck returning it to full view without closing the app.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-3724726794350674527?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/3724726794350674527/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=3724726794350674527' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3724726794350674527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3724726794350674527'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2009/07/palm-webos-emulator-fun.html' title='Palm webOS emulator fun?'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-6058742337126251132</id><published>2009-01-07T15:06:00.000-08:00</published><updated>2009-01-08T11:47:51.907-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='crm'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Python SUDS with Windows Authentication (SOAP)</title><content type='html'>While intergrating Plone with CRM4, I stumbled upon Suds. However, it didn't support NTLM. Then I found python-ntlm, and merged the two libs.&lt;br /&gt;&lt;br /&gt;Below is the result.&lt;br /&gt;&lt;br /&gt;You can add it at the bottom of suds/transport.py&lt;br /&gt;&lt;br /&gt;&lt;div style="overflow:auto"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[code]&lt;br /&gt;class WindowsHttpAuthenticated(HttpAuthenticated):&lt;br /&gt;    """&lt;br /&gt;    Provides Windows (NTLM) http authentication.&lt;br /&gt;    @ivar pm: The password manager.&lt;br /&gt;    @ivar handler: The authentication handler.&lt;br /&gt;    @author: Christopher Bess&lt;br /&gt;    """&lt;br /&gt;    &lt;br /&gt;    def __init__(self, options):&lt;br /&gt;        # try to import ntlm support&lt;br /&gt;        try:&lt;br /&gt;            from ntlm import HTTPNtlmAuthHandler&lt;br /&gt;        except ImportError:&lt;br /&gt;            raise Exception("Cannot import python-ntlm module")&lt;br /&gt;            return&lt;br /&gt;            &lt;br /&gt;        HttpTransport.__init__(self, options)&lt;br /&gt;        self.pm = u2.HTTPPasswordMgrWithDefaultRealm()&lt;br /&gt;        self.handler = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(self.pm)&lt;br /&gt;        self.urlopener = u2.build_opener(self.handler)&lt;br /&gt;        u2.install_opener(self.urlopener)&lt;br /&gt;        pass # end class&lt;br /&gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[code]&lt;br /&gt;from suds import transport&lt;br /&gt;#&gt;&gt;&gt;&lt;br /&gt;from suds import client&lt;br /&gt;#&gt;&gt;&gt;&lt;br /&gt;from suds.options import Options&lt;br /&gt;#&gt;&gt;&gt;&lt;br /&gt;options = Options(username='DOMAIN\username',&lt;br /&gt;                  password='password')&lt;br /&gt;#&gt;&gt;&gt;&lt;br /&gt;c = client.Client(url='http://0.0.0.0/mscrmservices/2007/CrmServiceWsdl.aspx',&lt;br /&gt;                  username='DOMAIN\username',&lt;br /&gt;                  password='password',&lt;br /&gt;                  transport=transport.WindowsHttpAuthenticated(options))&lt;br /&gt;#&gt;&gt;&gt;&lt;br /&gt;c&lt;br /&gt;#---&lt;br /&gt;&lt;suds.client.Client object at 0x9c3d86c&gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-6058742337126251132?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/6058742337126251132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=6058742337126251132' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/6058742337126251132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/6058742337126251132'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2009/01/python-suds-with-windows-authentication.html' title='Python SUDS with Windows Authentication (SOAP)'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-5602522270506926133</id><published>2008-10-24T14:16:00.000-07:00</published><updated>2008-10-24T14:21:13.156-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tal'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone: Reverse Folder Contents in TAL Define</title><content type='html'>Using TAL, I needed to display the folder contents with dates ascending (newest first). By default context/folderlistFolderContents returns the tuple descending.&lt;br /&gt;&lt;br /&gt;So I fixed it by using a ternary statment hack, that evaluates both entries/blocks.&lt;br /&gt;&lt;br /&gt;&lt;div style="overflow:auto"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;[code]&lt;br /&gt;    &amp;lt;metal:fill fill-slot="main"&amp;gt;&lt;br /&gt;      &amp;lt;metal:main_macro define-macro="main"&lt;br /&gt;            tal:define="portal_type python:here.getPortalTypeName().lower().replace(' ', '_');&lt;br /&gt;            folder_list context/folderlistingFolderContents;&lt;br /&gt;&lt;br /&gt;            folder_list python: (folder_list.reverse(), folder_list)[1];&lt;br /&gt;&lt;br /&gt;            base_macros here/base/macros;&lt;br /&gt;            view_template python:'%s_view' % portal_type;&lt;br /&gt;&amp;lt;!-- rest of code --&amp;gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-5602522270506926133?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/5602522270506926133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=5602522270506926133' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/5602522270506926133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/5602522270506926133'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/10/plone-reverse-folder-contents-in-tal.html' title='Plone: Reverse Folder Contents in TAL Define'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-3643105809893744971</id><published>2008-10-24T07:34:00.000-07:00</published><updated>2008-10-24T14:21:58.986-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='eggs'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='plone'/><title type='text'>Plone: Reinstall Product Button</title><content type='html'>While creating Plone Products, I noticed that Plone will delete any created Portal objects, once a product associated with it has been uninstalled. Since I created a ZCatalog, which had data in it, I don't want that feature. After marching through the QuickInstaller code, I decided to add a "Reinstall Button" to all the respective products, to prevent uninstallation.&lt;br /&gt;&lt;br /&gt;In your egg or product code root, simple add:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;version.txt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Directory Structure Example (Python Pkg):&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;myproduct.stuff/myproduct/stuff/version.txt&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The contents should be: &lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1.0-alpha build 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;When ever the version.txt is changed it will display the reinstall button.&lt;br /&gt;&lt;br /&gt;Note: If you add the version.txt file to an existing product, you will have to manually uninstall the Product, then install it again. Otherwise, pressing "reinstall product" will anger the QuickInstaller (very bad).&lt;br /&gt;&lt;br /&gt;The Fix for angry QuickInstaller:&lt;br /&gt;If you manage to click "reinstall product" before you uninstall and install again, shame on you. To resolve, simply delete the QuickInstaller from the ZMI, then go to portal_setup, click the "Import" tab, select "QuickInstaller" from the list of profiles, then at the bottom, click "Import All Steps". This will cause all the installed products to go back to the "Products available for install" section, simply tick all the ones previously installed, and install them again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-3643105809893744971?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/3643105809893744971/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=3643105809893744971' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3643105809893744971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3643105809893744971'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/10/plone-reinstall-product-button.html' title='Plone: Reinstall Product Button'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-8819108906091939446</id><published>2008-09-02T19:02:00.001-07:00</published><updated>2008-09-02T19:05:57.459-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pcre'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>ObjPCRE on iPhone</title><content type='html'>I have been having fun with my ObjPCRE framework and the iPhone SDK.&lt;br /&gt;&lt;br /&gt;Just drop the contents of this archive in your Xcode project and build.&lt;br /&gt;&lt;br /&gt;The archive contains the debug libs, for the simulator and the release builds, for iPhone.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cbbess.googlepages.com/objpcre-libpcre-7.6-iphone.zip"&gt;ObjPCRE iPhone Libraries&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you use ObjPCRE for iPhone or anywhere else, please comment.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-8819108906091939446?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/8819108906091939446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=8819108906091939446' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/8819108906091939446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/8819108906091939446'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/09/objpcre-on-iphone.html' title='ObjPCRE on iPhone'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-3902239392121340329</id><published>2008-07-09T20:59:00.000-07:00</published><updated>2008-07-09T21:07:26.252-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='grep'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Custom Grep Format via Python</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_pVeh7_7SuSg/SHWJnG7tOGI/AAAAAAAAACM/VkjZd4zXwLw/s1600-h/screenshot_02.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp0.blogger.com/_pVeh7_7SuSg/SHWJnG7tOGI/AAAAAAAAACM/VkjZd4zXwLw/s320/screenshot_02.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5221230647974901858" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I really wanted a custom output format for the great grep, I used standard Python to do it.&lt;br /&gt;&lt;br /&gt;Needs Python 2.4+&lt;br /&gt;&lt;br /&gt;GrepOut is the name and grep formatting is it's game.&lt;br /&gt;&lt;br /&gt;Its free, its BSD.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://cbbess.googlepages.com/grepout-0.1-src.zip"&gt;Download Here&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-3902239392121340329?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/3902239392121340329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=3902239392121340329' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3902239392121340329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3902239392121340329'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/07/custom-grep-format-via-python.html' title='Custom Grep Format via Python'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_pVeh7_7SuSg/SHWJnG7tOGI/AAAAAAAAACM/VkjZd4zXwLw/s72-c/screenshot_02.jpg' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-3440708350036312269</id><published>2008-05-26T06:43:00.000-07:00</published><updated>2008-05-26T06:48:25.711-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Combat the WTF in iPhone Development</title><content type='html'>I thought I would share some information for those that may be new to iPhone development, or may have forgotten.&lt;br /&gt;&lt;br /&gt;If you see this: &lt;span style="font-weight:bold;"&gt;__TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION__&lt;/span&gt;&lt;br /&gt;popup during a runtime error, check here: &lt;span style="font-weight:bold;"&gt;Console.app&lt;/span&gt;&lt;br /&gt;for a more verbose explanation.&lt;br /&gt;&lt;br /&gt;Most of the time you will find the WTF.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-3440708350036312269?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/3440708350036312269/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=3440708350036312269' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3440708350036312269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/3440708350036312269'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/05/combat-wtf-in-iphone-development.html' title='Combat the WTF in iPhone Development'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-7909537839868747059</id><published>2008-05-20T21:50:00.000-07:00</published><updated>2008-05-20T21:51:58.503-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='git'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Google Open Source Blog: Develop with Git on a Google Code Project</title><content type='html'>&lt;a href="http://google-opensource.blogspot.com/2008/05/develop-with-git-on-google-code-project.html"&gt;Google Open Source Blog: Develop with Git on a Google Code Project&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Also check out: &lt;a href="http://github.com"&gt;github.com&lt;/a&gt; (free 100MB git repo host)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-7909537839868747059?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/7909537839868747059/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=7909537839868747059' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/7909537839868747059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/7909537839868747059'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/05/google-open-source-blog-develop-with.html' title='Google Open Source Blog: Develop with Git on a Google Code Project'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-2500504080223298535</id><published>2008-05-10T15:08:00.000-07:00</published><updated>2008-05-20T20:36:36.310-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='cbess'/><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone'/><title type='text'>Find the WTF in iPhone Xcode builds!</title><content type='html'>I'm an avid iPhone developer and I've been developing with Xcode for Mac OS X a while (about 4 years) now. In all my days I have never seen an error from Xcode (even the crazy ones from objc) so sick and twisted that it takes almost an hour to fix.&lt;br /&gt;Luckily this &lt;a href="http://www.everythingicafe.com/forum/developers/those-grumble-i-just-spent-an-hour-and-a-half-tracking-down-what-moments-27604.html"&gt;fellow&lt;/a&gt; ran into the same issue (and posted it). I wasn't using a button, but a "search bar"; and when I removed it everything built just fine. I don't think IB files like multiple "bars". Oh well, back to hard coding GUIs.&lt;br /&gt;&lt;div style="overflow: auto;"&gt;&lt;pre&gt;[error-message]&lt;br /&gt;*** -[UIImage encodeWithCoder:]: unrecognized selector sent to instance 0x44d470&lt;br /&gt;[/error-message]&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;I also learned that Xcode or IB doesn't like "lonely" outlets. Meaning, if you assign an instance to an outlet in IB, you better make sure the instance variable is in the corresponding class file. It will build and launch, but crash with some error like: __TERMINATING_DUE_TO_UNCAUGHT_EXCEPTION__&lt;br /&gt;&lt;br /&gt;Fun with WTFs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-2500504080223298535?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/2500504080223298535/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=2500504080223298535' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/2500504080223298535'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/2500504080223298535'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/05/find-wtf-in-iphone-xcode-builds.html' title='Find the WTF in iPhone Xcode builds!'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-6557402308232339953</id><published>2008-03-16T01:27:00.000-07:00</published><updated>2008-03-16T01:40:05.215-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='c++'/><category scheme='http://www.blogger.com/atom/ns#' term='kate'/><category scheme='http://www.blogger.com/atom/ns#' term='qt'/><category scheme='http://www.blogger.com/atom/ns#' term='c bess'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><title type='text'>Fun With Creating Kate Plugins Using KDevelop</title><content type='html'>To use KDevelop Kate Plugin Templates:&lt;br /&gt;-&gt; Create a project using the respective Kate Plugin template as normal.&lt;br /&gt;-&gt; After the build, change line 6 in the created *.desktop file (in your "src" folder)&lt;br /&gt;&lt;br /&gt;Old:&lt;br /&gt;X-Kate-Version=2.2&lt;br /&gt;&lt;br /&gt;New (working):&lt;br /&gt;X-Kate-Version=2.5&lt;br /&gt;&lt;br /&gt;I never knew the *.desktop file only installed the plugin for the target Kate version.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;The story:&lt;/span&gt;&lt;br /&gt;During my first attempt at creating a C++ Kate Plugin (used Python [Pate] prior), I noticed KDevelop had a project template for it! It was great all the way up until the 'make install'. Then I noticed my plugin was showing up. Well after about 20mins of following make install paths... I started comparing rc files, with those plugins that were working. Everything looked fine. Then I noticed the lonely *.desktop file, and wow it was the culprit. "Kate Version", must be set to 2.5 (or whatever version you are using).&lt;br /&gt;&lt;br /&gt;Now on to creating some plugins for the Kate community!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-6557402308232339953?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/6557402308232339953/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=6557402308232339953' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/6557402308232339953'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/6557402308232339953'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/03/fun-with-creating-kate-plugins-using.html' title='Fun With Creating Kate Plugins Using KDevelop'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-1352170287618951675</id><published>2008-03-15T15:34:00.000-07:00</published><updated>2008-03-16T01:41:01.938-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='kde3'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='ubuntu'/><title type='text'>KDE Mime Type Issue</title><content type='html'>KDE3 freaked out on me recently.&lt;br /&gt;&lt;br /&gt;If KDE says: "could not find mime type" (application octet-stream)&lt;br /&gt;You do:&lt;br /&gt;-&gt; Delete '~/.kde/share/mimelnk/application/octet-stream.desktop'&lt;br /&gt;-&gt; reboot&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;OR&lt;/span&gt;&lt;br /&gt;sudo kcontrol&lt;br /&gt;-&gt; File associations&lt;br /&gt;-&gt; "Add"&lt;br /&gt;-&gt; group: application&lt;br /&gt;-&gt; type name: octet-stream&lt;br /&gt;&lt;br /&gt;Now do: happy dance&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-1352170287618951675?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/1352170287618951675/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=1352170287618951675' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/1352170287618951675'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/1352170287618951675'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/03/kde-mime-type-issue.html' title='KDE Mime Type Issue'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-6722611621148258954</id><published>2008-03-09T12:19:00.001-07:00</published><updated>2008-03-09T12:30:39.548-07:00</updated><title type='text'>NSView Screenshots Using Cocoa</title><content type='html'>While hacking away with the iPhone SDK &amp; Cocoa, I discovered (from Ryan Britton) this code to capture a NSView as a NSImage.&lt;br /&gt;&lt;br /&gt;&lt;pre style="overflow:auto;"&gt;&lt;br /&gt;[code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;NSView&lt;/span&gt; *view = self;&lt;br /&gt;[view lockFocus];&lt;br /&gt;&lt;span style="font-style:italic;"&gt;NSBitmapImageRep&lt;/span&gt; *bitmap = [[[&lt;span style="font-style:italic;"&gt;NSBitmapImageRep&lt;/span&gt; alloc] initWithFocusedViewRect: [view bounds]] autorelease];&lt;br /&gt;[view unlockFocus];&lt;br /&gt; &lt;br /&gt;&lt;span style="font-style:italic;"&gt;NSImage&lt;/span&gt; *image = [[[&lt;span style="font-style:italic;"&gt;NSImage&lt;/span&gt; alloc] initWithSize: [view bounds].size] autorelease];&lt;br /&gt;[image addRepresentation:bitmap];&lt;br /&gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ref: &lt;a href="http://lists.apple.com/archives/cocoa-dev/2005/Oct/msg00771.html"&gt;http://lists.apple.com/archives/cocoa-dev/2005/Oct/msg00771.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Other references: &lt;a href="http://www.cocoadev.com/index.pl?ScreenShotCode"&gt;http://www.cocoadev.com/index.pl?ScreenShotCode&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-6722611621148258954?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/6722611621148258954/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=6722611621148258954' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/6722611621148258954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/6722611621148258954'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2008/03/nsview-screenshots-using-cocoa.html' title='NSView Screenshots Using Cocoa'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-437333724367565467</id><published>2007-09-10T11:29:00.000-07:00</published><updated>2007-11-12T16:22:39.754-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ajax'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='apache'/><category scheme='http://www.blogger.com/atom/ns#' term='web'/><title type='text'>QuTags - Easy Ajax Usage, Fast PHP Results</title><content type='html'>QuTags - http://qutags.sourceforge.net - has finally hit 1700+ downloads (since 05/2007). I guess its about time I post a little blog entry about its existence.&lt;br /&gt;&lt;br /&gt;QuTags is the culmination of thoughts and examples of great ways to implement AJAX for PHP, without knowing any JavaScript; none. But this implementation actually does hide the JavaScript from the PHP programmer. Don't get me wrong, its not invisible to the advanced user, but most of the time (if not all), you can do without touching the JavaScript. QuTags allows you to easily and rapidly bring Ajax advantages to ANY existing PHP web application. Simple, fast and supported. The framework is young but extremely powerful. It dominates every other attempt at simplicity; seriously.&lt;br /&gt;&lt;br /&gt;The following example demonstrates the Javascript-less Ajax framework. Its a simple page that changes the DIV's text when the user clicks the button.&lt;br /&gt;&lt;br /&gt;Ex:&lt;br /&gt;[code]&lt;br /&gt;&lt;div style="overflow: auto;"&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt; # include qutags script (if you're no using the Apache module)&lt;br /&gt; require_once("qutags.php");&lt;br /&gt; init_qutags();&lt;br /&gt;&lt;br /&gt; function show_new_text() {&lt;br /&gt;  # send the new inner html to the client&lt;br /&gt;  send_quinnerhtml("divId", "this is the new inner html!");&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; echo "&amp;lt;form&amp;gt;";&lt;br /&gt;&lt;br /&gt; # output &amp;lt;div&amp;gt; tag&lt;br /&gt; qudiv("divId", "i'm innerhtml stuff");&lt;br /&gt;&lt;br /&gt; # output html button&lt;br /&gt; qubutton("bt", array(onclick=&amp;gt;"show_new_text", quvalue=&amp;gt;"Click Me"));&lt;br /&gt;&lt;br /&gt; echo "&amp;lt;/form&amp;gt;";&lt;br /&gt;?&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;That's it! From start to finish, you stay in PHP land and never need to know what the JavaScript has to do. There are so many different ways to utilize QuTags... But most notably you would take advantage of its ease of use and performance. Oh yes, not only is QuTags crazy easy to use, but the server &lt;--&gt; client conversations are fast, really fast. The average request is less than 200ms.&lt;br /&gt;&lt;br /&gt;More examples can be found at: &lt;a target='_blank' href="http://www.ajaxforphp.com/"&gt;QuTags.com - Live Ajax Demos&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;A Christopher Bess Creation sponsored by Quantum Quinn&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-437333724367565467?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/437333724367565467/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=437333724367565467' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/437333724367565467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/437333724367565467'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2007/09/qutags-easy-ajax-usage-fast-php-results.html' title='QuTags - Easy Ajax Usage, Fast PHP Results'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-1377882833486099270</id><published>2007-08-24T15:03:00.000-07:00</published><updated>2007-08-24T15:22:34.207-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>Load .NET Assembly Using Python</title><content type='html'>To load .NET assemblies via Python you should use Python.NET. I choose Python.NET over IronPython, because IronPython seems less compatible with standard Python libraries (amongst other things).&lt;br /&gt;&lt;br /&gt;Once you've downloaded and installed Python.NET (http://pythonnet.sourceforge.net/), you can begin the integration.&lt;br /&gt;&lt;br /&gt;Integration Code Sample:&lt;br /&gt;[code]&lt;br /&gt;&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;# import Python.NET module(s)&lt;br /&gt;import CLR&lt;br /&gt;from CLR.System.Reflection import Assembly&lt;br /&gt;&lt;br /&gt;# get the root path (for the dlls)&lt;br /&gt;pythonLoc = sys.path[0]&lt;br /&gt;pythonLoc = pythonLoc[0:pythonLoc.rindex("\\")+1]&lt;br /&gt;&lt;br /&gt;for dllName in ["MyDLL.dll",&lt;br /&gt;"Microsoft.Practices.EnterpriseLibrary.Common.dll",&lt;br /&gt;               "Microsoft.Practices.EnterpriseLibrary.Data.dll"]:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Assembly.LoadFile(pythonLoc+dllName)&lt;br /&gt;# end for&lt;br /&gt;&lt;br /&gt;# create instance of .NET class&lt;br /&gt;csharpClass = clr.MyDLL.MyCsharpClass()&lt;br /&gt;&lt;br /&gt;# call member of .NET class&lt;br /&gt;result = csharpClass.SomeMethod()&lt;br /&gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;As you can see the key here is to use absolute paths. The variable 'pythonLoc' can be the path to any directory that contains your target .NET assembles.&lt;br /&gt;If only Python provided intellectual property protection we would be in business!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-1377882833486099270?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/1377882833486099270/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=1377882833486099270' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/1377882833486099270'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/1377882833486099270'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2007/08/load-net-assembly-using-python.html' title='Load .NET Assembly Using Python'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-4545450093668460342</id><published>2007-08-24T13:59:00.000-07:00</published><updated>2007-08-24T14:59:14.559-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='wxpython'/><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='programming'/><title type='text'>wxPython with Python .NET intergration</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" title='PyCrust' href="http://3.bp.blogspot.com/_pVeh7_7SuSg/Rs9PCBktDjI/AAAAAAAAAAw/CGRJqh4ZzF0/s1600-h/wxpython-pythonnet.JPG"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_pVeh7_7SuSg/Rs9PCBktDjI/AAAAAAAAAAw/CGRJqh4ZzF0/s320/wxpython-pythonnet.JPG" alt="wxPython PyCrust - Screenshot" id="BLOGGER_PHOTO_ID_5102383799034777138" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;To use wxPython and Python.NET together is a simple task. Luckily Python.NET is an interpreter and wxPython are modules.&lt;br /&gt;&lt;br /&gt;This will allow you to utilize wxPython and the .NET framework all from Python. Its a Win32 Python programmer's dream, leverage .NET assemblies, wxWidgets UI, and Python!&lt;br /&gt;&lt;br /&gt;1.) Download wxPython (http://www.wxpython.org/download.php) &amp;amp; Python.NET (http://pythonnet.sourceforge.net/)&lt;br /&gt;2.) Install Python.NET (and remember the install directory)&lt;br /&gt;3.) Install wxPython in the same directory you installed Python.NET&lt;br /&gt;&lt;br /&gt;Notes:&lt;br /&gt;To access PyCrust (interactive wxPython shell), go to 'C:\PythonNet\Lib\site-packages\wx-2.8-msw-unicode\wx\py\pycrust.py'&lt;br /&gt;&lt;br /&gt;To access XRCed (XRC editor), go to 'C:\PythonNet\Lib\site-packages\wx-2.8-msw-unicode\wx\tools\XRCed\xrced.py'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-4545450093668460342?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/4545450093668460342/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=4545450093668460342' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/4545450093668460342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/4545450093668460342'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2007/08/wxpython-with-python-net-intergration.html' title='wxPython with Python .NET intergration'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_pVeh7_7SuSg/Rs9PCBktDjI/AAAAAAAAAAw/CGRJqh4ZzF0/s72-c/wxpython-pythonnet.JPG' height='72' width='72'/><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-208099984818161658</id><published>2007-06-30T15:26:00.000-07:00</published><updated>2008-03-21T19:58:33.053-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='migration'/><category scheme='http://www.blogger.com/atom/ns#' term='c bess'/><category scheme='http://www.blogger.com/atom/ns#' term='ppc to intel'/><title type='text'>PPC to Intel Mac - Migration Assistant</title><content type='html'>Its really easy to migrate from PPC to Intel (or from Intel to Intel). &lt;br /&gt;&lt;br /&gt;Extra step:&lt;br /&gt;- If you are &lt;span style="font-weight:bold;"&gt;transferring an existing user&lt;/span&gt;, as in you want the "from" mac to be used on your "to" mac, make sure you are not using the Migration Assistant from the "to" account on your "to" mac.&lt;br /&gt;&lt;br /&gt;Old mac user Account to New mac old user account:&lt;br /&gt;1.) Create a temp administrative account on the "to" mac, and launch the Migration Assistant&lt;br /&gt;2.) Once the account transfer is complete, logoff/restart and your "from" account will be available.&lt;br /&gt;&lt;br /&gt;Migrate from PPC to Intel:&lt;br /&gt;1.) Grab a male to male (6-pin) firewire cable.&lt;br /&gt;2.) Connect only one end of the cable to the "from" mac.&lt;br /&gt;3.) restart the "from" mac, with the keyboard ready&lt;br /&gt;4.) as soon as you hear the restart chime, hold "t"&lt;br /&gt;5.) release "t" after you see the firewire icon on the screen of the "from" mac&lt;br /&gt;6.) now connect the other end of the cable to the "to" mac&lt;br /&gt;7.) begin or finish the steps to using Migration Assistant&lt;br /&gt;&lt;br /&gt;Also you can ignore the "Estimated transfer time", I transferred approx. 30gb in less than an hour.&lt;br /&gt;&lt;br /&gt;The key here is to &lt;span style="font-weight:bold;"&gt;NOT have any devices connected to firewire&lt;/span&gt; or USB (other than a keyboard), until the mac is in "Target Disk Mode".&lt;br /&gt;&lt;br /&gt;I transfered the data from my PPC (mac mini) to my Intel (MacBook) with no problems. Of course, you may have to re-enter your registration info for some software, all your keychains will have to be updated, and the old "System" folder can be deleted.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-208099984818161658?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/208099984818161658/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=208099984818161658' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/208099984818161658'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/208099984818161658'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2007/06/ppc-to-intel-mac-migration-assistant.html' title='PPC to Intel Mac - Migration Assistant'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-795937163424479586.post-4637324035740724834</id><published>2007-03-25T18:56:00.000-07:00</published><updated>2007-08-24T15:01:43.144-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='introduction'/><category scheme='http://www.blogger.com/atom/ns#' term='quantum quinn'/><category scheme='http://www.blogger.com/atom/ns#' term='c bess'/><title type='text'>Quantum Quinn® (A Next Generation Software Company)</title><content type='html'>&lt;a href="http://www.QuantumQuinn.com" title="Visit Quantum Quinn"&gt;A software company that reaches a higher plateau&lt;/a&gt;. A software company that prizes making high quality software, but not charging high profit prices. Quantum Quinn believes that everyone should have a chance to own enterprise level software, not just enterprises. Working with Qu and being sponsored by Qu is a great opportunity to share equal beliefs.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/795937163424479586-4637324035740724834?l=cbess.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cbess.blogspot.com/feeds/4637324035740724834/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='https://www.blogger.com/comment.g?blogID=795937163424479586&amp;postID=4637324035740724834' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/4637324035740724834'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/795937163424479586/posts/default/4637324035740724834'/><link rel='alternate' type='text/html' href='http://cbess.blogspot.com/2007/03/quantum-quinn-next-generation-software.html' title='Quantum Quinn&amp;reg; (A Next Generation Software Company)'/><author><name>C. Bess</name><uri>http://www.blogger.com/profile/17697469073701170135</uri><email>noreply@blogger.com</email><gd:extendedProperty xmlns:gd='http://schemas.google.com/g/2005' name='OpenSocialUserId' value='12071609506850617719'/></author><thr:total xmlns:thr='http://purl.org/syndication/thread/1.0'>0</thr:total></entry></feed>