<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;C08MSXc8eSp7ImA9WhBUFUw.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330</id><updated>2013-05-02T11:24:48.971-05:00</updated><category term="opsware" /><category term="CML" /><category term="vim" /><category term="Perl" /><category term="Windows" /><title>IT Non-whizzos</title><subtitle type="html">I search the Internet for answers to computer technical problems that I encounter.  When the Internet does not supply me with an answer, I research one on my own.  Then, I document the answer here so others can find it.

Also, for your benefit, this stupid blog name makes a great mnemonic.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://it-nonwhizzos.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>69</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/ItNon-whizzos" /><feedburner:info uri="itnon-whizzos" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;C08MSXczeip7ImA9WhBUFUw.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-1897904079123379545</id><published>2013-04-25T17:25:00.000-05:00</published><updated>2013-05-02T11:24:48.982-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-05-02T11:24:48.982-05:00</app:edited><title>Viewing NSException reason when "All Exceptions" breakpoint set in Xcode.</title><content type="html">I have not memorized this yet. &lt;a href="http://humblebeesoft.com/blog/?p=36"&gt;HumbleBee blog&lt;/a&gt; is the first to explain it to me accurately.&lt;br /&gt;
&lt;br /&gt;
In short:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Click on &lt;b&gt;objc_execption_throw&lt;/b&gt; frame.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;po $eax&lt;/span&gt; on simulator.&lt;/li&gt;
&lt;li&gt;&lt;span style="font-family: Courier New, Courier, monospace;"&gt;po $r0&lt;/span&gt; on device.&lt;/li&gt;
&lt;/ol&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/fZDIik6b2MY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/1897904079123379545/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2013/04/viewing-nsexception-reason-when-all.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/1897904079123379545?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/1897904079123379545?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/fZDIik6b2MY/viewing-nsexception-reason-when-all.html" title="Viewing NSException reason when &quot;All Exceptions&quot; breakpoint set in Xcode." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2013/04/viewing-nsexception-reason-when-all.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUAQH0zfip7ImA9WhBWF08.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-332926844196605106</id><published>2013-04-11T17:44:00.000-05:00</published><updated>2013-04-11T17:44:01.386-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-04-11T17:44:01.386-05:00</app:edited><title>Reminder to self: use Objective-C literals, dummy.</title><content type="html">I love how Objective-C is becoming more Perlish. See &lt;a href="http://clang.llvm.org/docs/ObjectiveCLiterals.html"&gt;docs&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;NSDictionary *fruits2colors = @{
                                @"apple"  : @"red",
                                @"banana" : @"yellow",
                                @"pear"   : @"green"
                                };
&lt;/pre&gt;
&lt;br /&gt;
Although I am too scared to put a trailing comma after the last element, which is perfectly safe in Perl.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/ztXMQ57FeCU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/332926844196605106/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2013/04/reminder-to-self-use-objective-c.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/332926844196605106?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/332926844196605106?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/ztXMQ57FeCU/reminder-to-self-use-objective-c.html" title="Reminder to self: use Objective-C literals, dummy." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2013/04/reminder-to-self-use-objective-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYNSXwzeyp7ImA9WhBRFkw.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-6322779602879656771</id><published>2013-03-06T19:03:00.002-06:00</published><updated>2013-03-06T19:03:18.283-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-03-06T19:03:18.283-06:00</app:edited><title>Auto Layout support for UIScrollView.</title><content type="html">&lt;b&gt;Note to self: &lt;/b&gt;do not forget about this in &lt;a href="http://developer.apple.com/library/ios/#releasenotes/General/RN-iOSSDK-6_0/"&gt;iOS 6.0 Release Notes&lt;/a&gt;. Just search the page for "translatesAutoresizingMaskIntoConstraints".&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/onA9Zg5dycM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/6322779602879656771/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2013/03/auto-layout-support-for-uiscrollview.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6322779602879656771?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6322779602879656771?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/onA9Zg5dycM/auto-layout-support-for-uiscrollview.html" title="Auto Layout support for UIScrollView." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2013/03/auto-layout-support-for-uiscrollview.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8MQXY_cCp7ImA9WhNUEk4.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-4851345652494444130</id><published>2013-01-03T11:41:00.001-06:00</published><updated>2013-01-03T11:41:20.848-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-03T11:41:20.848-06:00</app:edited><title>Size of UIViews throughout startup.</title><content type="html">Looking again at this iPad container-VC-plus-two-content-VCs storyboard setup:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-FxQKvTaStkA/UOW6NngqowI/AAAAAAAAAm8/hXJVHMUFx98/s1600/Screen+Shot+2013-01-03+at+11.02.52+AM.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-FxQKvTaStkA/UOW6NngqowI/AAAAAAAAAm8/hXJVHMUFx98/s320/Screen+Shot+2013-01-03+at+11.02.52+AM.png" width="152" /&gt;&lt;/a&gt;
&lt;a href="http://2.bp.blogspot.com/-0oalou9kg6U/UOW6Qov0sEI/AAAAAAAAAnE/nOVGFmhDHIg/s1600/Screen+Shot+2013-01-03+at+11.03.13+AM.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://2.bp.blogspot.com/-0oalou9kg6U/UOW6Qov0sEI/AAAAAAAAAnE/nOVGFmhDHIg/s320/Screen+Shot+2013-01-03+at+11.03.13+AM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;/div&gt;
In the Storyboard, the size of ZetaView is 768 × 669 and MuView is 768&amp;nbsp;×&amp;nbsp;338. Suppose you need to perform calculations on these numbers at some point while your app is starting up. Those views are not always those dimensions at every phase of start up. These logs show you.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;2013-01-03 11:23:07.588 Sandbox[11233:11303] -[SBAppDelegate application:didFinishLaunchingWithOptions:] [Line 16] Entered here.
2013-01-03 11:23:07.593 Sandbox[11233:11303] -[SBContainerViewController prepareForSegue:sender:] [Line 76] childViewController count = 0
2013-01-03 11:23:07.596 Sandbox[11233:11303] -[SBContainerViewController prepareForSegue:sender:] [Line 78] Fired segue = ZetaSegue
2013-01-03 11:23:07.626 Sandbox[11233:11303] -[SBZetaViewController viewDidLoad] [Line 37] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.627 Sandbox[11233:11303] -[SBZetaViewController viewDidLoad] [Line 38] self.view.frame.size.height = 1004.000000
2013-01-03 11:23:07.628 Sandbox[11233:11303] -[SBContainerViewController prepareForSegue:sender:] [Line 76] childViewController count = 1
2013-01-03 11:23:07.628 Sandbox[11233:11303] -[SBContainerViewController prepareForSegue:sender:] [Line 78] Fired segue = MuSegue
2013-01-03 11:23:07.630 Sandbox[11233:11303] -[SBMuViewController viewDidLoad] [Line 37] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.630 Sandbox[11233:11303] -[SBMuViewController viewDidLoad] [Line 38] self.view.frame.size.height = 1004.000000
2013-01-03 11:23:07.631 Sandbox[11233:11303] -[SBContainerViewController viewDidLoad] [Line 37] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.738 Sandbox[11233:11303] -[SBContainerViewController viewDidLoad] [Line 38] self.view.frame.size.height = 1004.000000
2013-01-03 11:23:07.739 Sandbox[11233:11303] -[SBContainerViewController viewWillAppear:] [Line 46] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.740 Sandbox[11233:11303] -[SBContainerViewController viewWillAppear:] [Line 47] self.view.frame.size.height = 1004.000000
2013-01-03 11:23:07.741 Sandbox[11233:11303] -[SBZetaViewController viewWillAppear:] [Line 46] self.view.frame.size.width = 0.000000
2013-01-03 11:23:07.741 Sandbox[11233:11303] -[SBZetaViewController viewWillAppear:] [Line 47] self.view.frame.size.height = 0.000000
2013-01-03 11:23:07.742 Sandbox[11233:11303] -[SBMuViewController viewWillAppear:] [Line 46] self.view.frame.size.width = 0.000000
2013-01-03 11:23:07.742 Sandbox[11233:11303] -[SBMuViewController viewWillAppear:] [Line 47] self.view.frame.size.height = 0.000000
2013-01-03 11:23:07.748 Sandbox[11233:11303] -[SBContainerViewController viewWillLayoutSubviews] [Line 62] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.749 Sandbox[11233:11303] -[SBContainerViewController viewWillLayoutSubviews] [Line 63] self.view.frame.size.height = 1004.000000
2013-01-03 11:23:07.750 Sandbox[11233:11303] -[SBContainerViewController viewDidLayoutSubviews] [Line 69] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.751 Sandbox[11233:11303] -[SBContainerViewController viewDidLayoutSubviews] [Line 70] self.view.frame.size.height = 1004.000000
2013-01-03 11:23:07.752 Sandbox[11233:11303] -[SBMuViewController viewWillLayoutSubviews] [Line 62] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.753 Sandbox[11233:11303] -[SBMuViewController viewWillLayoutSubviews] [Line 63] self.view.frame.size.height = 338.000000
2013-01-03 11:23:07.754 Sandbox[11233:11303] -[SBMuViewController viewDidLayoutSubviews] [Line 69] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.755 Sandbox[11233:11303] -[SBMuViewController viewDidLayoutSubviews] [Line 70] self.view.frame.size.height = 338.000000
2013-01-03 11:23:07.756 Sandbox[11233:11303] -[SBZetaViewController viewWillLayoutSubviews] [Line 62] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.757 Sandbox[11233:11303] -[SBZetaViewController viewWillLayoutSubviews] [Line 63] self.view.frame.size.height = 669.000000
2013-01-03 11:23:07.758 Sandbox[11233:11303] -[SBZetaViewController viewDidLayoutSubviews] [Line 69] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.759 Sandbox[11233:11303] -[SBZetaViewController viewDidLayoutSubviews] [Line 70] self.view.frame.size.height = 669.000000
2013-01-03 11:23:07.760 Sandbox[11233:11303] -[SBMuViewController viewWillLayoutSubviews] [Line 62] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.761 Sandbox[11233:11303] -[SBMuViewController viewWillLayoutSubviews] [Line 63] self.view.frame.size.height = 338.000000
2013-01-03 11:23:07.761 Sandbox[11233:11303] -[SBMuViewController viewDidLayoutSubviews] [Line 69] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.762 Sandbox[11233:11303] -[SBMuViewController viewDidLayoutSubviews] [Line 70] self.view.frame.size.height = 338.000000
2013-01-03 11:23:07.763 Sandbox[11233:11303] -[SBZetaViewController viewWillLayoutSubviews] [Line 62] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.764 Sandbox[11233:11303] -[SBZetaViewController viewWillLayoutSubviews] [Line 63] self.view.frame.size.height = 669.000000
2013-01-03 11:23:07.765 Sandbox[11233:11303] -[SBZetaViewController viewDidLayoutSubviews] [Line 69] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.765 Sandbox[11233:11303] -[SBZetaViewController viewDidLayoutSubviews] [Line 70] self.view.frame.size.height = 669.000000
2013-01-03 11:23:07.768 Sandbox[11233:11303] -[SBAppDelegate application:didFinishLaunchingWithOptions:] [Line 20] Done here.
2013-01-03 11:23:07.772 Sandbox[11233:11303] -[SBContainerViewController viewDidAppear:] [Line 55] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.773 Sandbox[11233:11303] -[SBContainerViewController viewDidAppear:] [Line 56] self.view.frame.size.height = 1004.000000
2013-01-03 11:23:07.774 Sandbox[11233:11303] -[SBZetaViewController viewDidAppear:] [Line 55] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.775 Sandbox[11233:11303] -[SBZetaViewController viewDidAppear:] [Line 56] self.view.frame.size.height = 669.000000
2013-01-03 11:23:07.776 Sandbox[11233:11303] -[SBMuViewController viewDidAppear:] [Line 55] self.view.frame.size.width = 768.000000
2013-01-03 11:23:07.777 Sandbox[11233:11303] -[SBMuViewController viewDidAppear:] [Line 56] self.view.frame.size.height = 338.000000
&lt;/pre&gt;
&lt;br /&gt;
Take a look at the journey MuView goes through. It starts off full screen in &lt;i&gt;viewDidLoad&lt;/i&gt;. Then it becomes 0&amp;nbsp;× 0 in &lt;i&gt;viewWillAppear&lt;/i&gt;. &amp;nbsp;The first time it has the correct size is in &lt;i&gt;viewWillLayoutSubviews&lt;/i&gt;.&lt;br /&gt;
&lt;br /&gt;
But again, keep in mind that &lt;i&gt;viewWillLayoutSubviews&lt;/i&gt; can get called frequently during a running app.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/qXTkQYBJ_WY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/4851345652494444130/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2013/01/size-of-uiviews-throughout-startup.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/4851345652494444130?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/4851345652494444130?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/qXTkQYBJ_WY/size-of-uiviews-throughout-startup.html" title="Size of UIViews throughout startup." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-FxQKvTaStkA/UOW6NngqowI/AAAAAAAAAm8/hXJVHMUFx98/s72-c/Screen+Shot+2013-01-03+at+11.02.52+AM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2013/01/size-of-uiviews-throughout-startup.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMBSHY_cSp7ImA9WhNUEk4.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-3359950537315094878</id><published>2013-01-03T11:17:00.003-06:00</published><updated>2013-01-03T11:17:39.849-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-03T11:17:39.849-06:00</app:edited><title>Custom container UIViewController from UIStoryboard order of operations.</title><content type="html">Here is an iPad container view controller with two content view controllers setup in a storyboard:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;
&lt;a href="http://2.bp.blogspot.com/-FxQKvTaStkA/UOW6NngqowI/AAAAAAAAAm8/hXJVHMUFx98/s1600/Screen+Shot+2013-01-03+at+11.02.52+AM.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-FxQKvTaStkA/UOW6NngqowI/AAAAAAAAAm8/hXJVHMUFx98/s320/Screen+Shot+2013-01-03+at+11.02.52+AM.png" width="152" /&gt;&lt;/a&gt;
&lt;a href="http://2.bp.blogspot.com/-0oalou9kg6U/UOW6Qov0sEI/AAAAAAAAAnE/nOVGFmhDHIg/s1600/Screen+Shot+2013-01-03+at+11.03.13+AM.png" imageanchor="1" style="float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="221" src="http://2.bp.blogspot.com/-0oalou9kg6U/UOW6Qov0sEI/AAAAAAAAAnE/nOVGFmhDHIg/s320/Screen+Shot+2013-01-03+at+11.03.13+AM.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class="separator" style="clear: both;"&gt;
&lt;/div&gt;
I added logging to every relevant&amp;nbsp;overridable&amp;nbsp;UIViewController method to show the order that these methods get called upon app startup.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;2013-01-03 10:13:38.960 Sandbox[11029:11303] -[SBAppDelegate application:didFinishLaunchingWithOptions:] [Line 16] Entered here.
2013-01-03 10:13:38.968 Sandbox[11029:11303] -[SBContainerViewController prepareForSegue:sender:] [Line 59] childViewController count = 0
2013-01-03 10:13:38.969 Sandbox[11029:11303] -[SBContainerViewController prepareForSegue:sender:] [Line 61] Fired segue = ZetaSegue
2013-01-03 10:13:38.970 Sandbox[11029:11303] -[SBZetaViewController viewDidLoad] [Line 30] Entered here.
2013-01-03 10:13:38.972 Sandbox[11029:11303] -[SBContainerViewController prepareForSegue:sender:] [Line 59] childViewController count = 1
2013-01-03 10:13:38.973 Sandbox[11029:11303] -[SBContainerViewController prepareForSegue:sender:] [Line 61] Fired segue = MuSegue
2013-01-03 10:13:38.974 Sandbox[11029:11303] -[SBMuViewController viewDidLoad] [Line 30] Entered here.
2013-01-03 10:13:38.975 Sandbox[11029:11303] -[SBContainerViewController viewDidLoad] [Line 27] Entered here.
2013-01-03 10:13:38.976 Sandbox[11029:11303] -[SBContainerViewController viewWillAppear:] [Line 34] Entered here.
2013-01-03 10:13:38.977 Sandbox[11029:11303] -[SBZetaViewController viewWillAppear:] [Line 38] Entered here.
2013-01-03 10:13:38.978 Sandbox[11029:11303] -[SBMuViewController viewWillAppear:] [Line 38] Entered here.
2013-01-03 10:13:39.283 Sandbox[11029:11303] -[SBContainerViewController viewWillLayoutSubviews] [Line 48] Entered here.
2013-01-03 10:13:39.284 Sandbox[11029:11303] -[SBContainerViewController viewDidLayoutSubviews] [Line 53] Entered here.
2013-01-03 10:13:39.286 Sandbox[11029:11303] -[SBMuViewController viewWillLayoutSubviews] [Line 52] Entered here.
2013-01-03 10:13:39.287 Sandbox[11029:11303] -[SBMuViewController viewDidLayoutSubviews] [Line 57] Entered here.
2013-01-03 10:13:39.288 Sandbox[11029:11303] -[SBZetaViewController viewWillLayoutSubviews] [Line 52] Entered here.
2013-01-03 10:13:39.289 Sandbox[11029:11303] -[SBZetaViewController viewDidLayoutSubviews] [Line 57] Entered here.
2013-01-03 10:13:39.290 Sandbox[11029:11303] -[SBMuViewController viewWillLayoutSubviews] [Line 52] Entered here.
2013-01-03 10:13:39.291 Sandbox[11029:11303] -[SBMuViewController viewDidLayoutSubviews] [Line 57] Entered here.
2013-01-03 10:13:39.292 Sandbox[11029:11303] -[SBZetaViewController viewWillLayoutSubviews] [Line 52] Entered here.
2013-01-03 10:13:39.294 Sandbox[11029:11303] -[SBZetaViewController viewDidLayoutSubviews] [Line 57] Entered here.
2013-01-03 10:13:39.328 Sandbox[11029:11303] -[SBAppDelegate application:didFinishLaunchingWithOptions:] [Line 20] Done here.
2013-01-03 10:13:39.394 Sandbox[11029:11303] -[SBContainerViewController viewDidAppear:] [Line 41] Entered here.
2013-01-03 10:13:39.395 Sandbox[11029:11303] -[SBZetaViewController viewDidAppear:] [Line 45] Entered here.
2013-01-03 10:13:39.396 Sandbox[11029:11303] -[SBMuViewController viewDidAppear:] [Line 45] Entered here.
&lt;/pre&gt;
&lt;br /&gt;
&lt;b&gt;Note:&lt;/b&gt; the methods &lt;i&gt;view(Did|Will)LayoutSubviews&lt;/i&gt; gets called over and over again during regular application execution. Be careful what initialization code you put in there.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/ZwOuOrepg04" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/3359950537315094878/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2013/01/custom-container-uiviewcontroller-from.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3359950537315094878?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3359950537315094878?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/ZwOuOrepg04/custom-container-uiviewcontroller-from.html" title="Custom container UIViewController from UIStoryboard order of operations." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-FxQKvTaStkA/UOW6NngqowI/AAAAAAAAAm8/hXJVHMUFx98/s72-c/Screen+Shot+2013-01-03+at+11.02.52+AM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2013/01/custom-container-uiviewcontroller-from.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08ASXczeyp7ImA9WhNbE0s.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-3317020558031727249</id><published>2013-01-02T21:42:00.001-06:00</published><updated>2013-01-16T14:57:28.983-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-16T14:57:28.983-06:00</app:edited><title>I think I just experienced a bracing/indent style shift within my mind.</title><content type="html">And may the sweet Lord have mercy on me.&lt;br /&gt;
&lt;br /&gt;
So I'm swapping back and forth between demonstration code and my own analogous code trying to figure out a bug on my side. As I swapped back and forth I thought to myself, "Clean looking example code always gets crowded and less readable once converted to actual-use code." Then I realized the particular code paragraph on my side that triggered this thought was just a cut-n-paste of the demo code. Uh oh.&lt;br /&gt;
&lt;br /&gt;
So I swapped back and forth a few more times and realized the problem. I use K&amp;amp;R style and the example code uses Allman style. Oh, boy. Maybe, I'm tired or getting too old, but that initial brace all by itself sure looks cleaner to me right now.&lt;br /&gt;
&lt;br /&gt;
I didn't mean to sin. I mean no disrespect to the zealots of my order, but I think I may have just been converted.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/OK25vl4HjjI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/3317020558031727249/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2013/01/i-think-i-just-experienced.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3317020558031727249?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3317020558031727249?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/OK25vl4HjjI/i-think-i-just-experienced.html" title="I think I just experienced a bracing/indent style shift within my mind." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2013/01/i-think-i-just-experienced.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcMRn84cCp7ImA9WhNUEk8.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-2460313283585823792</id><published>2012-12-26T15:22:00.001-06:00</published><updated>2013-01-03T08:41:27.138-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2013-01-03T08:41:27.138-06:00</app:edited><title>Managed object context in iOS should get passed around not kept in a global object.</title><content type="html">I'm baffled why this information is under &lt;a href="https://developer.apple.com/library/mac/documentation/DataManagement/Conceptual/CoreDataSnippets/Articles/stack.html#//apple_ref/doc/uid/TP40008283-SW2"&gt;&lt;i&gt;Core Data Snippets&lt;/i&gt;&lt;/a&gt; instead of &lt;i&gt;Core Data Programming Guide&lt;/i&gt;, but anyway:&lt;br /&gt;
&lt;blockquote class="tr_bq"&gt;
When you create a view controller, you pass it the context it should use....&amp;nbsp;A view controller typically shouldn’t retrieve the context from a global object such as the application delegate....&lt;/blockquote&gt;
Thanks to this &lt;a href="http://stackoverflow.com/questions/2070565/how-to-share-a-managedobjectcontext-when-using-uitabbarcontroller"&gt;Stackoverflow question/answer&lt;/a&gt; (in a comment on a bad answer).&lt;br /&gt;
&lt;br /&gt;
If you're skilled enough to ignore dogmatic directives of this nature, then good for you, but I'm not (at the time of this writing). I'm logging this entry because I'm sick of over thinking this topic and then researching it repeatedly.&lt;br /&gt;
&lt;br /&gt;
I would like to add that if I have a class that is passed an NSManagedObject, I do &lt;b&gt;not&lt;/b&gt; need to also pass in an NSManagedObjectContext because &lt;i&gt;managedObjectContext&lt;/i&gt; is a property of every NSManagedObject. In these cases, I simply extract the MOC from the managed object somewhere within the class.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/uIt2x7Y61W8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/2460313283585823792/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2012/12/managed-object-context-in-ios-should.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/2460313283585823792?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/2460313283585823792?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/uIt2x7Y61W8/managed-object-context-in-ios-should.html" title="Managed object context in iOS should get passed around not kept in a global object." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2012/12/managed-object-context-in-ios-should.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08AQH87fyp7ImA9WhNVFEg.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-6468767248726782506</id><published>2012-12-25T10:08:00.003-06:00</published><updated>2012-12-25T10:10:41.107-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-12-25T10:10:41.107-06:00</app:edited><title>NSNumber arithmetic now has simpler syntax.</title><content type="html">If you have ever wanted to perform quick and simple math operations on NSNumber values without having to pull out the value into a C data type and then putting it back into the NSNumber object, then you&amp;nbsp;should know about&amp;nbsp;&lt;a href="http://clang.llvm.org/docs/ObjectiveCLiterals.html"&gt;boxed expressions&lt;/a&gt;&amp;nbsp;in Objective C.&lt;br /&gt;
&lt;br /&gt;
For example, to increment an NSNumber value, the old syntax was this:&lt;br /&gt;
&lt;pre&gt;// Assume x is a pointer to NSNumber with a value already assigned.
int tmpX = [x intValue];
x = [NSNumber numberWithInt:(tmpX + 1)];
&lt;/pre&gt;
Now becomes this:&lt;br /&gt;
&lt;pre&gt;x = @([x intValue] + 1);
&lt;/pre&gt;
I saw this on &lt;a href="http://stackoverflow.com/questions/4793181/how-to-increment-an-nsnumber"&gt;Stackoverflow&lt;/a&gt;, and as is usual on that site in regards to evolving technologies, an unpopular answer has the best info.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/_Sl84R6qwFY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/6468767248726782506/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2012/12/nsnumber-arithmetic-now-has-simpler.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6468767248726782506?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6468767248726782506?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/_Sl84R6qwFY/nsnumber-arithmetic-now-has-simpler.html" title="NSNumber arithmetic now has simpler syntax." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2012/12/nsnumber-arithmetic-now-has-simpler.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkINR38zfip7ImA9WhNXEEs.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-4077855279716458476</id><published>2012-11-27T19:03:00.001-06:00</published><updated>2012-11-27T19:03:16.186-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-27T19:03:16.186-06:00</app:edited><title>A commercial plug for a friend: Home Inspection in Central Texas = George Russell.</title><content type="html">I'll never do this again for anyone, but I want to write a plug for a friend who does home inspections. So here goes...&lt;br /&gt;
&lt;br /&gt;
If you are buying a house, condo, warehouse or other commercial or residential structure located in Central Texas (Lampasas to Austin and beyond) then please contact him. Link to his business sites:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://georgerussellprofessionalinspections.com/"&gt;http://georgerussellprofessionalinspections.com&lt;/a&gt;&lt;br /&gt;
&lt;a href="https://www.facebook.com/austinhomeinspections"&gt;https://www.facebook.com/austinhomeinspections&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/TERLsZXD_ug" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/4077855279716458476/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2012/11/a-commercial-plug-for-friend-home.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/4077855279716458476?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/4077855279716458476?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/TERLsZXD_ug/a-commercial-plug-for-friend-home.html" title="A commercial plug for a friend: Home Inspection in Central Texas = George Russell." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2012/11/a-commercial-plug-for-friend-home.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAARX87fyp7ImA9WhNXE04.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-3616554577438357229</id><published>2012-11-27T18:46:00.000-06:00</published><updated>2012-11-30T23:12:24.107-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-30T23:12:24.107-06:00</app:edited><title>Once again, GitGuys explains git better than anyone else.</title><content type="html">I have no idea why, but&amp;nbsp;&lt;a href="http://www.gitguys.com/"&gt;GitGuys&lt;/a&gt; explains &lt;b&gt;git&lt;/b&gt; to me in a way I understand best. Lots of other sites (on that first page of results from any search) either rehash the same old basics with nothing added or get too opaque when venturing into the concepts behind &lt;b&gt;git&lt;/b&gt; features. Their site should come up ranked higher than it currently does on searches.&lt;br /&gt;
&lt;br /&gt;
Here is what &lt;i&gt;GitGuys&lt;/i&gt; is perfect for: when you want to do something in &lt;b&gt;git&lt;/b&gt;, and you don't want to just copy a recipe from &lt;i&gt;Stackoverflow&lt;/i&gt; because, damn it, what you want to do is a fairly basic function of an SCCS and you want to know how &lt;b&gt;git&lt;/b&gt; approaches the task so you actually know what you are doing instead of blindly memorizing a formulae. If I had to recommend a "learning git" book, it would be the &lt;i&gt;GitGuys&lt;/i&gt; site.&lt;br /&gt;
&lt;br /&gt;
So, in general, my &lt;b&gt;git&lt;/b&gt; resources are:&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;&lt;b&gt;git&lt;/b&gt; &lt;b&gt;man&lt;/b&gt; page for reference, figuring things out myself.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;GitGuys.com&lt;/i&gt; for explanations and tutorials when I don't feel like experimental learning or when I want an authority to confirm my conclusions.&lt;/li&gt;
&lt;li&gt;&lt;i&gt;Stackoverflow&lt;/i&gt; searches (via &lt;i&gt;Google&lt;/i&gt;) for specific recipes.&lt;/li&gt;
&lt;li&gt;I follow &lt;a href="http://nvie.com/posts/a-successful-git-branching-model/"&gt;this branching model&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
FYI, my problem this time was that I had made changes to my local files while I was on the &lt;i&gt;develop&lt;/i&gt; branch, and I had forgotten to make a &lt;i&gt;feature&lt;/i&gt; branch. I wanted to create a new branch and switch to it without stomping on my local modifications. The GitGuys had a &lt;a href="http://www.gitguys.com/topics/switching-branches-without-committing/"&gt;perfect page already written &lt;/a&gt;explaining exactly what I wanted to know and the reasoning behind the approach.&lt;/div&gt;
&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/8NPzG32osA8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/3616554577438357229/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2012/11/once-again-gitguys-explains-git-better.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3616554577438357229?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3616554577438357229?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/8NPzG32osA8/once-again-gitguys-explains-git-better.html" title="Once again, GitGuys explains git better than anyone else." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2012/11/once-again-gitguys-explains-git-better.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ECRXs6eip7ImA9WhNXEEs.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-3708690972145253851</id><published>2012-10-12T15:59:00.000-05:00</published><updated>2012-11-27T18:14:24.512-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-11-27T18:14:24.512-06:00</app:edited><title>Uninstall Adobe Reader X (10) on Mac OS X</title><content type="html">I loathe &lt;b&gt;Adobe Reader&lt;/b&gt; on OS X. &lt;b&gt;Preview&lt;/b&gt; is so sleek and fast. Adobe Reader on Windows 7 is fine, however. It fits right in with all the other clutter.&lt;br /&gt;
&lt;br /&gt;
The online method of paying corporate taxes in my county requires the use of the Adobe Reader plugin for&amp;nbsp;&lt;b&gt;Safari&lt;/b&gt;. &lt;i&gt;Yuck!&amp;nbsp;&lt;/i&gt;So I install and uninstall the whole mess every year. This post is to document what I did this time.&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;Turn off &lt;b&gt;MozyHome&lt;/b&gt; (offsite backup) and&amp;nbsp;&lt;b&gt;Time Machine&lt;/b&gt; (site backup). These will slow down my &lt;b&gt;find&lt;/b&gt; below if they happen to fire off in the middle of running that command.&lt;/li&gt;
&lt;li&gt;Throw &lt;b&gt;Adobe Reader&lt;/b&gt; into &lt;b&gt;Trash&lt;/b&gt;.&lt;/li&gt;
&lt;li&gt;From &lt;b&gt;Terminal&lt;/b&gt; run this: &lt;tt&gt;sudo find / -name '*[Aa][Dd][Oo][Bb][Ee]*'&lt;/tt&gt;&lt;/li&gt;
&lt;li&gt;Manually pick through that list of files and throw them in &lt;b&gt;Trash&lt;/b&gt;, too. But be careful! Some applications have Adobe libraries that I don't want trashed. Also, I certainly don't want to accidentally delete sadobeauties768.jpg. See list of files that I actually removed below.&lt;/li&gt;
&lt;li&gt;Turn &lt;b&gt;Time Machine&lt;/b&gt; and &lt;b&gt;Mozy Home&lt;/b&gt; back on.&lt;/li&gt;
&lt;/ol&gt;
/Library/Internet Plug-Ins/AdobePDFViewer.plugin&lt;br /&gt;
/Library/Internet Plug-Ins/AdobePDFViewerNPAPI.plugin&lt;br /&gt;
/Library/Preferences/com.adobe.acrobat.pdfviewer.plist&lt;br /&gt;
/Library/Preferences/com.adobe.acrobat.pdfviewer.plist.lockfile&lt;br /&gt;
/Users/mylogin/Library/Application Support/Adobe/Acrobat&lt;br /&gt;
/Users/mylogin/Library/Logs/Adobe&lt;br /&gt;
/Users/mylogin/Library/Preferences/com.adobe.Reader.plist&lt;br /&gt;
/Users/mylogin/Library/Preferences/com.adobe.Reader.plist.lockfile&lt;br /&gt;
&lt;br /&gt;
Keep in mind, I am still grudgingly forced to keep the Adobe Flash plugin installed for &lt;b&gt;Safari&lt;/b&gt;. This means I can't blindly delete everything named "Adobe".&lt;br /&gt;
&lt;br /&gt;
I'm currently running OS X 10.7.5 and the version of &lt;b&gt;Adobe Reader&lt;/b&gt; I uninstalled was 10.1.4.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/ytncZwkVQQk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/3708690972145253851/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2012/10/uninstall-adobe-reader-x-10-on-mac-os-x.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3708690972145253851?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3708690972145253851?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/ytncZwkVQQk/uninstall-adobe-reader-x-10-on-mac-os-x.html" title="Uninstall Adobe Reader X (10) on Mac OS X" /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2012/10/uninstall-adobe-reader-x-10-on-mac-os-x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cMQHczeip7ImA9WhJbFk0.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-3624864077964615036</id><published>2012-09-25T16:38:00.001-05:00</published><updated>2012-09-25T16:38:01.982-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-09-25T16:38:01.982-05:00</app:edited><title>OS X keyboard shortcuts.</title><content type="html">Note to self: bookmark this page:&amp;nbsp;&lt;a href="http://www.danrodney.com/mac/"&gt;http://www.danrodney.com/mac/&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/o4RYFHPywEE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/3624864077964615036/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2012/09/os-x-keyboard-shortcuts.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3624864077964615036?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3624864077964615036?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/o4RYFHPywEE/os-x-keyboard-shortcuts.html" title="OS X keyboard shortcuts." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2012/09/os-x-keyboard-shortcuts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMGQXc_eSp7ImA9WhJSEE0.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-862413520201946027</id><published>2012-06-29T15:52:00.004-05:00</published><updated>2012-06-29T15:57:00.941-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-06-29T15:57:00.941-05:00</app:edited><title>My default Windows rsync pull command.</title><content type="html">I use this DOS batch file to save a copy of my Unix work onto my work-issued Windows 7 laptop.
&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;pre&gt;set mytime=%TIME::=%
set mytime=%mytime:~0,6%
"c:\program files\cwrsync\bin\rsync.exe" -r -l -t^
 --progress^
 --exclude="src/BUILD/"^
 --exclude="src/logs/"^
 --backup^
 --suffix=%DATE%T%mytime%^
 --rsh="c:\'program files'\cwrsync\bin\ssh.exe"^
 somehost:/home/myid .&lt;/pre&gt;
&lt;br /&gt;
I have a "system backups" folder. In that folder, I have folders for each hostname. In each hostname subfolder, I have this DOS batch file.&lt;br /&gt;
&lt;br /&gt;
That variable&amp;nbsp;&lt;i&gt;mytime &lt;/i&gt;is used to pull the colons from the value of &lt;i&gt;TIME &lt;/i&gt;so I can use it in a Windows file name.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/ntfTL3T2nLo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/862413520201946027/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2012/06/my-default-windows-rsync-pull-command.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/862413520201946027?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/862413520201946027?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/ntfTL3T2nLo/my-default-windows-rsync-pull-command.html" title="My default Windows rsync pull command." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/14948861488878036693</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2012/06/my-default-windows-rsync-pull-command.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUIMRXk6fCp7ImA9WhVRGEo.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-6815869731712107481</id><published>2012-03-27T14:45:00.001-05:00</published><updated>2012-03-27T14:46:24.714-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-27T14:46:24.714-05:00</app:edited><title>Perl: IPC semaphores to process table listing.</title><content type="html">While looking into Apache problems with IPC semaphores, I needed a decent report of what processes were associated with which semaphore ids. This script is the result.&lt;br /&gt;
&lt;br /&gt;
I've only tested this on Linux. It certainly won't work on HP-UX or AIX because of different &lt;b&gt;ipcs &lt;/b&gt;output and options.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;use warnings;
use strict;

my @out = qx{ ipcs -s };
my @filtered_out = grep { /^0/ } @out;

# Example output of: ipcs -s
#
# ------ Semaphore Arrays --------
# key        semid      owner      perms      nsems
# 0x00000000 393216     root      600        1
# 0x01fe101f 819201     root      600        1

# Grab the 2nd column of ipcs -a output.
my @semids = map {(split(/\s+/, $_))[1]} @filtered_out;

# Key = semaphore id. Value = array of associated PIDs.
my %semid2pids;

# Example output of: ipcs -si 393216
#
# Semaphore Array semid=393216
# uid=0    gid=0   cuid=0  cgid=0
# mode=0600, access_perms=0600
# nsems = 1
# otime = Not set
# ctime = Sat Feb 25 19:12:34 2012
# semnum     value      ncount     zcount     pid
# 0          0          1          0          3869

# Find the list of PIDs associated with each semaphore id.
for my $semid (@semids) {
    my @out = qx{ ipcs -si $semid 2&amp;gt;&amp;amp;1 };

    if (grep { /Identifier removed/ } @out) {
        $semid2pids{$semid} = ['Identifier removed'];
    }
    else {
        # Grab all the lines that contain PIDs.
        my @lines = grep {/\d+(\s+\d+){4}/} @out;
        # Grab just the PIDs from the lines.
        my @pids = map {(split(/\s+/, $_))[4]} @lines;
        $semid2pids{$semid} = \@pids;
    }
}

# List the process table info for each PID associated with each semaphore id.
for my $semid (keys %semid2pids) {
    print "semid: $semid\n";
    for my $pid (@{$semid2pids{$semid}}) {
        my $out;
        if ($pid =~ /Identifier removed/) {
            $out = "Identifier removed.\n";
        }
        else {
            $out = qx{ ps --no-headers -o user,pid,args -p $pid};
        }
        print $out;
    }
}
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/M1sT3bS5AYs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/6815869731712107481/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2012/03/perl-ipc-semaphores-to-process-table.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6815869731712107481?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6815869731712107481?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/M1sT3bS5AYs/perl-ipc-semaphores-to-process-table.html" title="Perl: IPC semaphores to process table listing." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/14948861488878036693</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2012/03/perl-ipc-semaphores-to-process-table.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMGR3g7eip7ImA9WhVSFko.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-6301541112548939294</id><published>2012-03-13T16:58:00.002-05:00</published><updated>2012-03-13T17:07:06.602-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-03-13T17:07:06.602-05:00</app:edited><title>Interesting slice of Tcl history.</title><content type="html">I was forced to learn Jacl (a Tcl interpreter written in Java) in order to automate WebSphere Application Server administrative tasks a few years back. I hated the syntax. Today, I'm stuck having to use the&amp;nbsp;&lt;b&gt;expect&lt;/b&gt;&amp;nbsp;interpreter (a Tcl extension) instead of &lt;b&gt;Expect.pm&lt;/b&gt; in a Perl script. I find I still hate it. Thus, I enjoyed reading this article which I stumbled across:&amp;nbsp;&lt;a href="http://journal.dedasys.com/2010/03/30/where-tcl-and-tk-went-wrong"&gt;http://journal.dedasys.com/2010/03/30/where-tcl-and-tk-went-wrong&lt;/a&gt;.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/BEYNXlIKZc4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/6301541112548939294/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2012/03/interesting-slice-of-tcl-history.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6301541112548939294?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6301541112548939294?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/BEYNXlIKZc4/interesting-slice-of-tcl-history.html" title="Interesting slice of Tcl history." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/14948861488878036693</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2012/03/interesting-slice-of-tcl-history.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEcAQ3g_eip7ImA9WhRXFks.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-7094061222577574096</id><published>2011-12-16T16:44:00.000-06:00</published><updated>2011-12-23T11:40:42.642-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-23T11:40:42.642-06:00</app:edited><title>Perl: report total size of memory used by certain processes in Linux.</title><content type="html">Nothing fancy in this script. I merely have to write down my scripts somewhere, right?&lt;br /&gt;
&lt;br /&gt;
I originally wrote this to tell me how much memory a certain Apache instance was using. I made it slightly more general purpose. You pass it a regular expression that matches the processes which you want to see the total memory usage of. You can use a debug option to get more verbose output.&lt;br /&gt;
&lt;br /&gt;
I'm aware that the binary itself is not counted multiple times when totaling memory&amp;nbsp;consumption, but in Apache this always comes to less than 10% of the total, so I don't even bother anymore.&lt;br /&gt;
&lt;br /&gt;
Updated version after taking John's excellent suggestions below.

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;use strict;
use warnings;
use Getopt::Long;

my $debug;
GetOptions('debug|verbose|d|v' =&amp;gt; \$debug);

die "Missing regular expression.\n" if ! $ARGV[0];

my $regex = shift;

my @ps_out = qx{ ps -eo pid,vsz,args };

my @proc_lines = grep { m/$regex/ } @ps_out;

my %pids = map { (split)[0,1] } @proc_lines;

delete $pids{$$};

my $total;
my $len = length((sort { $b &amp;lt;=&amp;gt; $a } values %pids)[0]);

for my $pid (keys %pids) {
    $total += $pids{$pid};
    printf "%s = %${len}s\n", $pid, $pids{$pid} if $debug;
}

$len = length($total);
print "=" x ($len + 11);
print "\n";

print "total KB = $total\n" if $debug;

my $mb_total = int($total / 1024);
printf "total MB = %${len}s\n", $mb_total;
&lt;/pre&gt;
&lt;br /&gt;
My original and very inefficient and inelegant version.

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;&lt;span class="Apple-style-span" style="color: #f3f3f3;"&gt;use strict;
use warnings;
use Getopt::Long;

my $debug;
GetOptions('debug|verbose|d|v' =&amp;gt; \$debug);

die "Missing regular expression.\n" if ! $ARGV[0];

my $regex = shift;

my @ps_out = qx{ ps -ef };

my @proc_lines = grep { m/$regex/ } @ps_out;

my %pids;

for my $line (@proc_lines) {
    my $pid = (split /\s+/, $line)[1];
    my @out = qx{ ps -o vsz -p $pid };
    chomp @out;
    my $vsz = $out[-1];
    $vsz =~ s/\s+//;
    $pids{$pid} = $vsz;
}

my $total;
my $len = length((sort { $b &amp;lt;=&amp;gt; $a } values %pids)[0]);

for my $pid (keys %pids) {
    $total += $pids{$pid};
    printf "%s = %${len}s\n", $pid, $pids{$pid} if $debug;
}

$len = length($total);
print "=" x ($len + 11);
print "\n";

print "total KB = $total\n" if $debug;

my $mb_total = int($total / 1024);
printf "total MB = %${len}s\n", $mb_total;&lt;/span&gt;
&lt;/pre&gt;
&lt;br /&gt;
Here is me using it.

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;$ ./1.pl --debug '/httpd\.conf'
5293 =  10696
5298 = 290096
5294 =   7408
5296 = 289124
=================
total KB = 597324
total MB =    583
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/o5VNUQiboSA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/7094061222577574096/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/12/perl-report-total-size-of-memory-used.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/7094061222577574096?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/7094061222577574096?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/o5VNUQiboSA/perl-report-total-size-of-memory-used.html" title="Perl: report total size of memory used by certain processes in Linux." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/14948861488878036693</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/12/perl-report-total-size-of-memory-used.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkcGQ3w-fyp7ImA9WhRSFkg.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-6630396570646070450</id><published>2011-11-18T15:43:00.001-06:00</published><updated>2011-11-18T16:07:02.257-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-18T16:07:02.257-06:00</app:edited><title>AJP ping/pong: update to ajp_ping.pl.</title><content type="html">I wrote a terrible ping script for AJP a &lt;a href="http://it-nonwhizzos.blogspot.com/2009/05/ajp-ping-in-perl.html" target="_blank"&gt;while back&lt;/a&gt;.&amp;nbsp;Here is an updated version.&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;#!/usr/bin/perl -w

use warnings;
use strict;

use Socket;

my $host = 'localhost';
my $port = '8009';

# The host and port arguments can be specified by either space or colon
# separating the values.
if (scalar(@ARGV) &amp;gt;= 2) {
    $host = shift @ARGV;
    $port = shift @ARGV;
}
elsif (scalar(@ARGV) == 1) {
    if ($ARGV[0] =~ /:/) {
        ($host, $port) = split /:/, shift @ARGV, 2;
    }
    else {
        $host = shift @ARGV;
    }
}

# If the port has anything other than numbers, assume it is an /etc/services
# name.
if ($port =~ /\D/) {
    $port = getservbyname $port, 'tcp' ;
    die "Bad port: $port" unless $port;
}

my $iaddr = inet_aton($host) or die "No such host: $host";

# Get a printable IP address from the in_addr_t type returned by inet_aton().
my $ip = join('.', unpack('C4', $iaddr));

# Now that the port value is a number, and the host (if it was originally a
# name) has been resolved to an IP address, then print a status header like
# the real ping does.
print "AJP PING $host ($ip) port $port\n";

my $paddr = sockaddr_in($port, $iaddr) or die $!;

# Grab the number for TCP out of /etc/protocols.
my $proto = getprotobyname 'tcp' ;

my $sock;
# PF_INET and SOCK_STREAM are constants imported by the Socket module.  They
# are the same as what is defined in sys/socket.h.
socket $sock, PF_INET, SOCK_STREAM, $proto or die $!;

# This is the ping packet.  For detailed documentation, see
# http://tomcat.apache.org/connectors-doc/ajp/ajpv13a.html
# I stole the exact byte sequence from
# http://sourceforge.net/project/shownotes.php?group_id=128058&amp;amp;release_id=438456
# instead of fully understanding the packet structure.
my $ping = pack 'C5'    # Format template.
    , 0x12, 0x34        # Magic number for server-&amp;gt;container packets.
    , 0x00, 0x01        # 2 byte int length of payload.
    , 0x0A              # Type of packet. 10 = CPing.
;

# If the connection is closed, log a decent message.
$SIG{PIPE} = sub { die $!; };

connect $sock, $paddr or die $!;

syswrite $sock, $ping or die $!;

print 'Sent:     ';
for my $value (unpack 'C5', $ping) {
    printf '%02d ', $value;
}
print "\n";

my $pong;

$pong = 0;

sysread $sock, $pong, 5 or die $!;

print 'Received: ';
for my $value (unpack 'C5', $pong) {
    printf '%02d ', $value;
}
print "\n";

close $sock or warn $!;

# This is the expected pong packet.  That is, this is what Tomcat sends back
# to indicate that it is operating OK.
my $expected = pack 'C5'    # Format template.
    , 0x41, 0x42            # Magic number for container-&amp;gt;server packets.
    , 0x00, 0x01            # 2 byte int length of payload.
    , 0x09                  # Type of packet. 9 = CPong reply.
;

print 'Expected: ';
for my $value (unpack 'C5', $expected) {
    printf '%02d ', $value;
}
print "\n";

if ($pong eq $expected) {
    print "Server pong OK.\n";
    exit 0;
}

print "Server pong FAILED.\n";
exit 1;
&lt;/pre&gt;
&lt;br /&gt;
Here it is running against a good host.

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;me@mybox:~/ajp_ping
$ ./ajp_ping.pl xxx 12440 ; echo rc = $?
AJP PING xxx (10.1.1.16) port 12440
Sent:     18 52 00 01 10
Received: 65 66 00 01 09
Expected: 65 66 00 01 09
Server pong OK.
rc = 0
&lt;/pre&gt;
&lt;br /&gt;
Here is a bad response. I went to an HTTP port instead of an AJP one.

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;me@mybox:~/ajp_ping
$ ./ajp_ping.pl xxx 12040 ; echo rc = $?
AJP PING xxx (10.1.1.16) port 12040
Sent:     18 52 00 01 10
Received: 72 84 84 80 47
Expected: 65 66 00 01 09
Server pong FAILED.
rc = 1
&lt;/pre&gt;
&lt;br /&gt;
Here is a timeout (using system TCP timeout defaults).

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;me@mybox:~/ajp_ping
$ time ./ajp_ping.pl yyy 12040 ; echo rc = $?
AJP PING yyy (10.16.1.8) port 12040
Connection timed out at ./ajp_ping.pl line 67.

real    0m21.031s
user    0m0.010s
sys     0m0.018s
rc = 110
&lt;/pre&gt;
&lt;br /&gt;
Here is an attempt at a connection to a port where nothing is listening.

&lt;br /&gt;
&lt;br /&gt;
&lt;pre&gt;me@mybox:~/ajp_ping
$ ./ajp_ping.pl xxx 99 ; echo rc = $?
AJP PING xxx (10.1.1.16) port 99
Connection refused at ./ajp_ping.pl line 67.
rc = 111
&lt;/pre&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/S7lTcHRbY8M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/6630396570646070450/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/11/ajp-pingpong-update-to-ajppingpl.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6630396570646070450?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6630396570646070450?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/S7lTcHRbY8M/ajp-pingpong-update-to-ajppingpl.html" title="AJP ping/pong: update to ajp_ping.pl." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/14948861488878036693</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/11/ajp-pingpong-update-to-ajppingpl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEMSX4_eSp7ImA9WhRTFUQ.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-1209802492695089255</id><published>2011-11-06T09:50:00.001-06:00</published><updated>2011-11-06T09:51:28.041-06:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-06T09:51:28.041-06:00</app:edited><title>Viewing hard drive in Finder on OS X Lion.</title><content type="html">Apple has cleaned up the left column in Finder windows on Lion. It no longer lists the hard drive or the whole computer itself.&lt;br /&gt;
&lt;br /&gt;
So now the way I navigate to top of the hierarchy in a Finder window is my CTRL-clicking on the folder name at the top of the window. This brings up a mini pull down menu of the hierarchy. Like this:&lt;br /&gt;
&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-iGncg4pITeI/Trashfs6lqI/AAAAAAAAAl8/EMntBP2dfIY/s1600/Screen+Shot+2011-11-06+at+9.14.13+AM.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="364" src="http://1.bp.blogspot.com/-iGncg4pITeI/Trashfs6lqI/AAAAAAAAAl8/EMntBP2dfIY/s640/Screen+Shot+2011-11-06+at+9.14.13+AM.png" width="640" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/J7nY7oh7zwA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/1209802492695089255/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/11/viewing-hard-drive-in-finder-on-os-x.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/1209802492695089255?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/1209802492695089255?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/J7nY7oh7zwA/viewing-hard-drive-in-finder-on-os-x.html" title="Viewing hard drive in Finder on OS X Lion." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-iGncg4pITeI/Trashfs6lqI/AAAAAAAAAl8/EMntBP2dfIY/s72-c/Screen+Shot+2011-11-06+at+9.14.13+AM.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/11/viewing-hard-drive-in-finder-on-os-x.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MHRHY5cCp7ImA9WhRTFEQ.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-3494026893712318076</id><published>2011-11-05T07:17:00.000-05:00</published><updated>2011-11-05T07:17:15.828-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-05T07:17:15.828-05:00</app:edited><title>Xcode "Save All" is still Opt+Cmd+S</title><content type="html">Not sure why this was taken from the File pull down menu in the last several versions of Xcode, but the hotkey for it still works:&amp;nbsp;&lt;span class="Apple-style-span" style="color: #333333; font-family: 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif; font-size: 12px; line-height: 18px;"&gt;&lt;img alt="Option or Alt key icon" height="9" src="http://km.support.apple.com/library/APPLE/APPLECARE_ALLGEOS/HT1343/ks_option.gif" style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; border-width: initial;" width="9" /&gt;&amp;nbsp;&lt;img alt="Command key icon" height="9" src="http://km.support.apple.com/library/APPLE/APPLECARE_ALLGEOS/HT1343/ks_command.gif" style="border-bottom-style: none; border-bottom-width: 0px; border-color: initial; border-color: initial; border-left-style: none; border-left-width: 0px; border-right-style: none; border-right-width: 0px; border-style: initial; border-top-style: none; border-top-width: 0px; border-width: initial;" width="9" /&gt;&amp;nbsp;S.&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/hyIztt2PSts" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/3494026893712318076/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/11/xcode-save-all-is-still-optcmds.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3494026893712318076?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3494026893712318076?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/hyIztt2PSts/xcode-save-all-is-still-optcmds.html" title="Xcode &quot;Save All&quot; is still Opt+Cmd+S" /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/11/xcode-save-all-is-still-optcmds.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk4ESH44fCp7ImA9WhdaGU4.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-5079832694453517460</id><published>2011-10-29T19:32:00.001-05:00</published><updated>2011-10-29T19:35:09.034-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-29T19:35:09.034-05:00</app:edited><title>How does UIApplicationMain figure out its delegate?</title><content type="html">I didn't mean to turn this blog into a list of bookmarks, but&amp;nbsp;I was curious how my iOS app got from &lt;b&gt;main.m&lt;/b&gt; to &lt;b&gt;MyAppDeletegate.m&lt;/b&gt;, and this is just too good an explanation to not document:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://oleb.net/blog/2011/06/app-launch-sequence-ios/"&gt;http://oleb.net/blog/2011/06/app-launch-sequence-ios/&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
I found this when I was wondering, "How the hell does the &lt;b&gt;UIApplicationMain&lt;/b&gt; figure out its delegate?" Hence, the title of this post. The answer is so simple and straightforward that it is stunning. Thanks in no small part to Ole Begemann, of course.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/5y5zoOSfxso" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/5079832694453517460/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/10/how-does-uiapplicationmain-figure-out.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/5079832694453517460?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/5079832694453517460?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/5y5zoOSfxso/how-does-uiapplicationmain-figure-out.html" title="How does UIApplicationMain figure out its delegate?" /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/10/how-does-uiapplicationmain-figure-out.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQESX08eCp7ImA9WhdaGU8.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-6039257127504644548</id><published>2011-10-29T17:28:00.000-05:00</published><updated>2011-10-29T17:28:28.370-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-29T17:28:28.370-05:00</app:edited><title>Add Framework to Project in Xcode 4.1</title><content type="html">Not sure why this got so hard in Xcode 4.1, but this guy covered it great:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://www.thinketg.com/Company/Blogs/11-03-20/Xcode_4_Tips_Adding_frameworks_to_your_project.aspx"&gt;http://www.thinketg.com/Company/Blogs/11-03-20/Xcode_4_Tips_Adding_frameworks_to_your_project.aspx&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
Thank you, David!&lt;br /&gt;
&lt;br /&gt;
&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;Recorded for posterity.&lt;/span&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/lb_LzUvTFbk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/6039257127504644548/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/10/add-framework-to-project-in-xcode-41.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6039257127504644548?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/6039257127504644548?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/lb_LzUvTFbk/add-framework-to-project-in-xcode-41.html" title="Add Framework to Project in Xcode 4.1" /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/00233184554785130203</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="33" height="29" src="http://2.bp.blogspot.com/_sPq5Jgvkr7E/S4Mk1NesCzI/AAAAAAAAAis/oGAZVKHWjTQ/S220/me_hat.jpg" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/10/add-framework-to-project-in-xcode-41.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE8DQ306eCp7ImA9WhdbEks.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-3563108095571479696</id><published>2011-10-10T12:13:00.004-05:00</published><updated>2011-10-10T12:14:32.310-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-10T12:14:32.310-05:00</app:edited><title>List Windows 7 shares and Twig's Tech Tips</title><content type="html">Thank you Windows guy:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://twigstechtips.blogspot.com/2009/08/list-and-unshare-folders-in-windows-7.html"&gt;http://twigstechtips.blogspot.com/2009/08/list-and-unshare-folders-in-windows-7.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
You should be the #1 hit for a search of "windows 7 list all shares" instead of #2.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/3opXuoHe3aM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/3563108095571479696/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/10/list-windows-7-shares-and-twigs-tech.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3563108095571479696?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/3563108095571479696?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/3opXuoHe3aM/list-windows-7-shares-and-twigs-tech.html" title="List Windows 7 shares and Twig's Tech Tips" /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/14948861488878036693</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/10/list-windows-7-shares-and-twigs-tech.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUcCQnc6eip7ImA9WhdTFE0.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-8347677112548951160</id><published>2011-07-11T11:48:00.002-05:00</published><updated>2011-07-11T11:51:03.912-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-11T11:51:03.912-05:00</app:edited><title>Don't forget this.</title><content type="html">&lt;a href="http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect"&gt;http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;I may be stupid, but if I constantly look for this in myself, then I have a better chance of reducing the impact of my stupidity.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/t9cKgKGbG8M" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/8347677112548951160/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/07/dont-forget-this.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/8347677112548951160?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/8347677112548951160?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/t9cKgKGbG8M/dont-forget-this.html" title="Don't forget this." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/14948861488878036693</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/07/dont-forget-this.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QER346eSp7ImA9WhZaFUk.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-5856229746660986274</id><published>2011-07-01T12:23:00.002-05:00</published><updated>2011-07-01T12:28:26.011-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-01T12:28:26.011-05:00</app:edited><title>Most important NFS link of all time.</title><content type="html">I might be a tad nonobjective about this right now, but everyone should know this:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://nfsworld.blogspot.com/2005/03/whats-deal-on-16-group-id-limitation.html"&gt;http://nfsworld.blogspot.com/2005/03/whats-deal-on-16-group-id-limitation.html&lt;/a&gt;&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/lu1X3untFp8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/5856229746660986274/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/07/most-important-nfs-link-of-all-time.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/5856229746660986274?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/5856229746660986274?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/lu1X3untFp8/most-important-nfs-link-of-all-time.html" title="Most important NFS link of all time." /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/14948861488878036693</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/07/most-important-nfs-link-of-all-time.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcESXwzfip7ImA9WhVUFU8.&quot;"><id>tag:blogger.com,1999:blog-6938084522763168330.post-227695365788977218</id><published>2011-03-16T20:39:00.006-05:00</published><updated>2012-05-20T10:00:08.286-05:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-05-20T10:00:08.286-05:00</app:edited><title>Perl throw-away: finding mtime of cron jobs commands from cron log (AIX)</title><content type="html">We had two AIX boxes use all of their memory (real + paging) today. Looking back over performance logs this happened suddenly and exactly on the hour.&lt;br /&gt;
&lt;br /&gt;
The precise time at the top of the hour points to a possible cron job problem. You know how humans are: always scheduling things at nice round numbers.&lt;br /&gt;
&lt;br /&gt;
I wanted to parse the cron logs for all the commands there were run. The first thing I wanted to do was to check the mtime and see if anything changed recently.&lt;br /&gt;
&lt;br /&gt;
Here is a sample of the cron logs AIX spits out.&lt;br /&gt;
&lt;pre&gt;
bob1    : CMD ( [[ -f /opt/bin/Logging.ksh ]] &amp;amp;&amp;amp; /opt/bin/Logging.ksh start &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 &amp;amp; ) : PID ( 512208 ) : Wed Mar 16 20:15:00 2011
bob1    : CMD ( /home/bob1/scripts/check.pl ) : PID ( 843892 ) : Wed Mar 16 20:15:00 2011
root      : CMD ( /etc/init.d/agent status &amp;gt; /dev/null 2&amp;gt;&amp;amp;1 || /etc/init.d/agent start &amp;gt; /dev/null 2&amp;gt;&amp;amp;1
) : PID ( 258288 ) : Wed Mar 16 20:15:00 2011
root      : CMD ( /opt/bin/get_down &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ) : PID ( 548972 ) : Wed Mar 16 20:15:00 2011
Cron Job with pid: 512208 Successful
Cron Job with pid: 548972 Successful
Cron Job with pid: 258288 Successful
Cron Job with pid: 843892 Successful
bob1    : CMD ( [[ -f /etc/init.d/xyz_3.6 ]] &amp;amp;&amp;amp; /etc/init.d/xyz_3.6 restart &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ) : PID ( 950448 ) :
 Wed Mar 16 20:16:00 2011
root      : CMD ( /opt/bin/get_down &amp;gt;/dev/null 2&amp;gt;&amp;amp;1 ) : PID ( 258052 ) : Wed Mar 16 20:16:00 2011
Cron Job with pid: 258052 Successful&lt;/pre&gt;
&lt;br /&gt;
Here is my perl script to grab the command and report on their mtimes.&lt;br /&gt;
&lt;pre&gt;
#!/usr/bin/perl -wan

use strict;
use warnings;
use POSIX qw(strftime);

# Hash key = command, value = mtime.
our %cmds;

if ( /CMD \(/ ) {
    if ($F[4] =~ /^\//) {
        $cmds{$F[4]} = strftime('%Y-%m-%dT%H:%M:%S', localtime((stat($F[4]))[9]));
    }
}

END {
    for my $cmd (sort(keys %cmds)) {
        print "$cmds{$cmd}\t$cmd\n";
    }
}&lt;/pre&gt;
&lt;br /&gt;
Here is the example output.&lt;br /&gt;
&lt;pre&gt;
# ./1.pl log
2009-11-25T16:03:42     /etc/init.d/agent
2008-04-04T14:33:25     /home/archie/bin/clearWebLogs.sh
2010-09-24T16:49:29     /home/bob1/scripts/check.pl
2003-09-10T13:32:04     /opt/bin/get_webdat
2004-01-06T16:28:08     /opt/bin/nim_prep
2004-01-06T16:28:08     /opt/bin/clr_tmp
2003-09-11T08:12:17     /opt/bin/get_down
2004-04-12T14:36:29     /opt/bin/xy_clr_tmp
2010-03-01T19:18:20     /usr/bin/errclear
2006-10-24T23:34:02     /usr/lib/ras/dumpcheck
2010-10-04T01:55:44     /var/perf/pm/bin/pmcfg&lt;/pre&gt;
&lt;br /&gt;
If you're thinking, "Hey, stupid, just look in the crontab files for that info," ummm, yeah, I had a reason for doing it this way, I'm sure of it. I just can't think of it right now.&lt;br /&gt;
&lt;br /&gt;
You'll also see that my script does not actually get all the commands. I guess I need to fix that.&lt;img src="http://feeds.feedburner.com/~r/ItNon-whizzos/~4/mc8n4VGKuo4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://it-nonwhizzos.blogspot.com/feeds/227695365788977218/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://it-nonwhizzos.blogspot.com/2011/03/perl-throw-away-finding-mtime-of-cron.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/227695365788977218?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/6938084522763168330/posts/default/227695365788977218?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/ItNon-whizzos/~3/mc8n4VGKuo4/perl-throw-away-finding-mtime-of-cron.html" title="Perl throw-away: finding mtime of cron jobs commands from cron log (AIX)" /><author><name>Jeffery</name><uri>http://www.blogger.com/profile/14948861488878036693</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://it-nonwhizzos.blogspot.com/2011/03/perl-throw-away-finding-mtime-of-cron.html</feedburner:origLink></entry></feed>
