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

<channel>
	<title>Say Goodnight Software</title>
	<atom:link href="http://www.saygoodnight.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.saygoodnight.com</link>
	<description>iOS &#38; More</description>
	<lastBuildDate>Wed, 13 Mar 2013 21:08:05 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Command Line Philips Hue</title>
		<link>http://www.saygoodnight.com/2013/03/command-line-philips-hue/</link>
		<comments>http://www.saygoodnight.com/2013/03/command-line-philips-hue/#comments</comments>
		<pubDate>Wed, 13 Mar 2013 21:08:05 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[Techniques]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[hue]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[philips]]></category>
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=370</guid>
		<description><![CDATA[The official Philips Hue API was recently released. This pushed me over the edge to finally go out and try this lighting. Very expensive, but really awesome too. The API is sweeeeet &#38; very simple to use. I had a &#8230; <a href="http://www.saygoodnight.com/2013/03/command-line-philips-hue/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>The official Philips Hue API was recently released. This pushed me over the edge to finally go out and try this lighting. Very expensive, but really awesome too.</p>
<p>The API is sweeeeet &amp; very simple to use. I had a few zsh aliases up and running in minutes.<br />
<span id="more-370"></span><br />
First thing I did was find out where the bridge was:</p>
<pre class="brush: plain; title: ; notranslate">curl &quot;http://www.meethue.com/api/nupnp&quot;</pre>
<p>This sends you back JSON with the IP address and what not.</p>
<p>Then just create a user, which involves pressing the button on the bridge and issuing this command:</p>
<pre class="brush: plain; title: ; notranslate">curl -X POST -d &quot;{\&quot;devicetype\&quot;: \&quot;commandline\&quot;, \&quot;username\&quot;: \&quot;philipshue\&quot;}&quot; &quot;http://10.0.1.25/api&quot;</pre>
<p>When that works, you can issue simple commands the same way by using the username.  For example, here is my &#8216;dim&#8217; command:</p>
<pre class="brush: plain; title: ; notranslate">curl -X PUT -d &quot;{\&quot;bri\&quot;:5}&quot; &quot;http://10.0.1.25/api/philipshue/groups/0/action&quot;</pre>
<p>I put a file of all the commands I use in my <a href="https://github.com/pj4533/setupfiles/blob/master/zsh/hue" target="_blank">setupfiles</a> repo on github.   </p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2013/03/command-line-philips-hue/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>curlme: Debugging with TTTURLRequestFormatter</title>
		<link>http://www.saygoodnight.com/2013/03/curlme-debugging-with-ttturlrequestformatter/</link>
		<comments>http://www.saygoodnight.com/2013/03/curlme-debugging-with-ttturlrequestformatter/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 13:58:35 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[Techniques]]></category>
		<category><![CDATA[afnetworking]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[debugging]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=363</guid>
		<description><![CDATA[Quick post on how to use Xcode aliases in the debugger to give you an easy command for getting a cURL from a NSURLRequest. I&#8217;ll be using AFNetworking and FormatterKit (FormattTerKit?) A typical bit of code for a AFHTTPClient based &#8230; <a href="http://www.saygoodnight.com/2013/03/curlme-debugging-with-ttturlrequestformatter/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Quick post on how to use Xcode aliases in the debugger to give you an easy command for getting a cURL from a NSURLRequest. I&#8217;ll be using <a title="AFNetworking" href="https://github.com/AFNetworking/AFNetworking">AFNetworking</a> and <a title="FormatterKit" href="https://github.com/mattt/FormatterKit">FormatterKit</a> (FormattTerKit?)<br />
<span id="more-363"></span><br />
A typical bit of code for a AFHTTPClient based request would be something like this:</p>
<script src="https://gist.github.com/5108112.js"></script><noscript><pre><code class="language-objective-c objective-c">[client getPath:path parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
    
    // put a breakpoint for curlme here
    NSLog(&quot;awesome stuff: %@&quot;, responseObject);

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {

    NSLog(&quot;fail bro&quot;);

}];</code></pre></noscript>
<p>If you include FormatterKit and import TTTURLRequestFormatter.h in your file, you&#8217;ll be able to call a line of code like this:</p>
<p>[TTTURLRequestFormatter cURLCommandFromURLRequest:operation.request];</p>
<p>But that gets kind of noisy to do every request, even if you limit it to debug only. I usually only need that curl line when I am debugging, so it&#8217;d be great to have a debugger command to get the curl line for me, by calling the above function.</p>
<h2>Enter .lldbinit setupfile!</h2>
<p>Here is my .lldbinit file, which just goes in my home directory like any other setup file:</p>
<script src="https://gist.github.com/5108156.js"></script><noscript><pre><code class="language- ">command regex curlme 's/(.+)/po [TTTURLRequestFormatter cURLCommandFromURLRequest:%1]/'</code></pre></noscript>
<p>Then if you restart Xcode and set a breakpoint inside the success block of the request, you can issue a command in the debugger like this:</p>
<p>curlme operation.request</p>
<p>This will spit out the full cURL command which you can use in the terminal for debugging!  Sweet!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2013/03/curlme-debugging-with-ttturlrequestformatter/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Deploy To Server With Git Remotes</title>
		<link>http://www.saygoodnight.com/2012/10/deploy-to-server-with-git-remotes/</link>
		<comments>http://www.saygoodnight.com/2012/10/deploy-to-server-with-git-remotes/#comments</comments>
		<pubDate>Fri, 12 Oct 2012 21:33:57 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[Techniques]]></category>
		<category><![CDATA[deployment]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[utility]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=320</guid>
		<description><![CDATA[I first learned about this deployment method from Ben Hoskings&#8217; excellent Peepcode screencast on Advanced Git. It is simple, and makes it very clear where all your servers are in your source tree. This can be very important for workflows &#8230; <a href="http://www.saygoodnight.com/2012/10/deploy-to-server-with-git-remotes/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_setup.png"><img src="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_setup.png" alt="" title="appwebsites_setup" width="856" height="84" class="alignleft size-full wp-image-331" /></a><br/><br />
<br/><br />
I first learned about this deployment method from <a href="http://benhoskin.gs" target="_blank">Ben Hoskings&#8217;</a> excellent Peepcode screencast on <a href="https://peepcode.com/products/advanced-git" target="_blank">Advanced Git</a>.  It is simple, and makes it very clear where all your servers are in your source tree.   This can be very important for workflows that have production, staging, and possibly multiple dev servers.  But, even for simple cases, I find it so easy to use that it is worth it to setup.<br />
<span id="more-320"></span></p>
<h1>Remote Server Setup</h1>
<h3>Copy SSH key</h3>
<p>(on local machine) cd .ssh<br />
(on local machine) scp id_rsa.pub name@servername:~/     (will need password)<br />
(on local machine) ssh name@servername   (will need password)<br />
(on remote server) cat id_rsa.pub >> .ssh/authorized_keys<br />
(on remote server) exit<br />
(on local machine) ssh name@servername   (shouldn&#8217;t need password)</p>
<h3>Create bare remote repo</h3>
<p>(On remote server) A &#8216;bare&#8217; repo is a repo that is only the .git folder. Useful for this case where we are going to copy the files elsewhere.</p>
<p>cd to /home/username<br />
mkdir mywebsite.git<br />
cd mywebsite.git<br />
git init &#8211;bare</p>
<h3>Create post receive</h3>
<p>(On remote server) A &#8216;post-receive&#8217; is a script run whenever the repo receives content (i.e.: when someone pushes)</p>
<p>Create a file named &#8216;post-receive&#8217; inside  /home/someuser/mywebsite.git/hooks   containing: </p>
<p>#!/bin/sh<br />
GIT_WORK_TREE=/path/to/webroot/of/mywebsite git checkout -f</p>
<p>This file is just a script file, so it can contain any other script commands needed (schema updates etc).  The above command will checkout the repo to the path given.</p>
<h3>Add remote to server we just configured</h3>
<p>(On local machine) This adds the remote into an existing repo on our local machine. It is not saved in everyones repo, it is local to the person adding it.</p>
<p>git remote add production username@servername.com:mywebsite.git</p>
<h3>Push To Server!</h3>
<p>(On local machine) This sets up the initial push to the &#8216;production&#8217; remote, and pushes to production, executing the script in post-receive.   In the future, you will only need &#8216;git push production&#8217;</p>
<p>git push production +master:refs/heads/master</p>
<h2>Update Process w/ Examples</h2>
<p>Because of the setup above, all the following can be done on our local machine.</p>
<p>Here is the initial setup for my appwebsites git repo:<br />
<a href="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_setup.png"><img src="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_setup.png" alt="" title="appwebsites_setup" width="856" height="84" class="alignleft size-full wp-image-331" /></a><br/><br />
<br/></p>
<p>Now, I&#8217;ll make and commit a local change to my repo:<br />
<a href="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_commit.png"><img src="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_commit.png" alt="" title="appwebsites_commit" width="844" height="96" class="alignleft size-full wp-image-330" /></a><br/><br />
<br/></p>
<p>Now I will push to github:    git push<br />
<a href="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_githubpush.png"><img src="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_githubpush.png" alt="" title="appwebsites_githubpush" width="845" height="94" class="alignleft size-full wp-image-329" /></a><br/><br/><br/></p>
<p>Whenever I am ready, I&#8217;ll push to production with the command:   git push production<br />
(This will execute the script in post-receive), leaving my repo looking like this:<br />
<a href="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_prod.png"><img src="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_prod.png" alt="" title="appwebsites_prod" width="844" height="93" class="alignleft size-full wp-image-328" /></a><br />
<br/><br/></p>
<h3>Other Tricks</h3>
<p>With this method, you can reset your local master to wherever you want, and push that to production.  For example, I will reset my local master to the second commit in the repo by doing a:   git reset &#8211;hard ae72d0e<br />
<a href="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_reset.png"><img src="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_reset.png" alt="" title="appwebsites_reset" width="843" height="95" class="alignleft size-full wp-image-327" /></a><br/><br />
<br/></p>
<p>Then to make production reset I do a:   git push -f production master     This forces the production remote to be where master is.<br />
<a href="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_resetremote-1.png"><img src="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/10/appwebsites_resetremote-1.png" alt="" title="appwebsites_resetremote-1" width="850" height="99" class="alignleft size-full wp-image-326" /></a><br/></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2012/10/deploy-to-server-with-git-remotes/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Respond to iOS button events with blocks!</title>
		<link>http://www.saygoodnight.com/2012/09/respond-to-ios-button-events-with-blocks/</link>
		<comments>http://www.saygoodnight.com/2012/09/respond-to-ios-button-events-with-blocks/#comments</comments>
		<pubDate>Thu, 20 Sep 2012 14:29:23 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[Techniques]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=310</guid>
		<description><![CDATA[I have often needed/wanted to respond to both UIBarButtonItems and UIControls with blocks, rather than selectors. With a little class_addMethod() runtime awesomeness, this is simple! Check it out&#8230; UPDATE NOTE: While this technique is cool, if you need more than &#8230; <a href="http://www.saygoodnight.com/2012/09/respond-to-ios-button-events-with-blocks/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>I have often needed/wanted to respond to both UIBarButtonItems and UIControls with blocks, rather than selectors.  With a little class_addMethod() runtime awesomeness, this is simple!  Check it out&#8230;<br />
<span id="more-310"></span><br />
<strong>UPDATE NOTE</strong>: While this technique is cool, if you need more than one button of the same class (UIButton or whatever), you need to make the handler name unique.  This isn&#8217;t difficult, but then you are adding potentially multiple unique handlers to the class.  Very quickly it gets out of hand.  So this technique should be used&#8230;umm&#8230;..delicately.<br />
<script src="https://gist.github.com/3756210.js"></script><noscript><pre><code class="language-objective-c objective-c">#import &lt;UIKit/UIKit.h&gt;

@interface UIBarButtonItem (ETBlockActions)

- (id) initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style eventHandler:(void(^)(void))handler;

@end
</code></pre><pre><code class="language-objective-c objective-c">#import &quot;UIBarButtonItem+ETBlockActions.h&quot;
#import &lt;objc/runtime.h&gt;

@implementation UIBarButtonItem (ETBlockActions)

- (id) initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style eventHandler:(void(^)(void))handler {
    class_addMethod([self class], @selector(eventHandler), imp_implementationWithBlock((__bridge void *)(handler)), &quot;v@:&quot;);
    
    return [self initWithTitle:title style:style target:self action:@selector(eventHandler)];
}

@end
</code></pre><pre><code class="language-objective-c objective-c">#import &lt;UIKit/UIKit.h&gt;

@interface UIBarButtonItem (ETBlockActions)

- (id) initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style eventHandler:(void(^)(void))handler;

@end
</code></pre><pre><code class="language-objective-c objective-c">#import &quot;UIBarButtonItem+ETBlockActions.h&quot;
#import &lt;objc/runtime.h&gt;

@implementation UIBarButtonItem (ETBlockActions)

- (id) initWithTitle:(NSString *)title style:(UIBarButtonItemStyle)style eventHandler:(void(^)(void))handler {
    class_addMethod([self class], @selector(eventHandler), imp_implementationWithBlock(handler), &quot;v@:&quot;);
    
    return [self initWithTitle:title style:style target:self action:@selector(eventHandler)];
}

@end
</code></pre><pre><code class="language-objective-c objective-c">#import &lt;UIKit/UIKit.h&gt;

@interface UIControl (ETBlockActions)

- (void) addEventHandler:(void(^)(void))handler forControlEvents:(UIControlEvents)controlEvents;

@end
</code></pre><pre><code class="language-objective-c objective-c">#import &quot;UIControl+ETBlockActions.h&quot;
#import &lt;objc/runtime.h&gt;

@implementation UIControl (ETBlockActions)

- (void) addEventHandler:(void(^)(void))handler forControlEvents:(UIControlEvents)controlEvents {
    class_addMethod([self class], @selector(eventHandler), imp_implementationWithBlock((__bridge void *)(handler)), &quot;v@:&quot;);
    
    [self addTarget:self action:@selector(eventHandler) forControlEvents:controlEvents];
}

@end
</code></pre><pre><code class="language-objective-c objective-c">#import &lt;UIKit/UIKit.h&gt;

@interface UIControl (ETBlockActions)

- (void) addEventHandler:(void(^)(void))handler forControlEvents:(UIControlEvents)controlEvents;

@end
</code></pre><pre><code class="language-objective-c objective-c">#import &quot;UIControl+ETBlockActions.h&quot;
#import &lt;objc/runtime.h&gt;

@implementation UIControl (ETBlockActions)

- (void) addEventHandler:(void(^)(void))handler forControlEvents:(UIControlEvents)controlEvents {
    class_addMethod([self class], @selector(eventHandler), imp_implementationWithBlock(handler), &quot;v@:&quot;);
    
    [self addTarget:self action:@selector(eventHandler) forControlEvents:controlEvents];
}

@end
</code></pre></noscript></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2012/09/respond-to-ios-button-events-with-blocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Generic message sheet for iOS</title>
		<link>http://www.saygoodnight.com/2012/08/generic-message-sheet-for-ios/</link>
		<comments>http://www.saygoodnight.com/2012/08/generic-message-sheet-for-ios/#comments</comments>
		<pubDate>Thu, 02 Aug 2012 18:12:27 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[Techniques]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[opensource]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=299</guid>
		<description><![CDATA[DEComposeViewController is a generic message entry view controller using the style of iOS compose view controllers (like tweet sheets). Based on the excellent tweet sheet based control DETweetComposeViewController from DoubleEncore. Example Usage Get code here: GitHub]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/08/DEComposeViewController.png"><img src="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/08/DEComposeViewController.png" alt="" title="DEComposeViewController" width="400" height="244" class="alignnone size-full wp-image-300" /></a></p>
<p><a href="https://github.com/pj4533/DEComposeViewController" title="DEComposeViewController" target="_blank">DEComposeViewController</a> is a generic message entry view controller using the style of iOS compose view controllers (like tweet sheets).<br />
<span id="more-299"></span><br />
Based on the excellent tweet sheet based control <a href="https://github.com/doubleencore/DETweetComposeViewController" title="DETweetComposeViewController" target="_blank">DETweetComposeViewController</a> from DoubleEncore.</p>
<p>Example Usage</p>
<script src="https://gist.github.com/aa92e2cc003885cd2f80.js"></script><noscript><pre><code class="language-objective-c objective-c">DEComposeViewControllerCompletionHandler completionHandler = ^(DEComposeViewControllerResult result, NSString* message, UIImage* image) {
  switch (result) {
    case DEComposeViewControllerResultCancelled:
      NSLog(@&quot;Note Result: Cancelled&quot;);
      break;
    case DEComposeViewControllerResultDone:
      NSLog(@&quot;Note Result: Done&quot;);
      break;
  }
  [self dismissModalViewControllerAnimated:YES];
};
 
DEComposeViewController *composeVC = [[DEComposeViewController alloc] init];
self.modalPresentationStyle = UIModalPresentationCurrentContext;
 
// add an image to the sheet
[composeVC addImage:image];
 
composeVC.completionHandler = completionHandler;
[self presentModalViewController:composeVC animated:YES];
</code></pre></noscript>
<p>Get code here: <a href="https://github.com/pj4533/DEComposeViewController" title="GitHub" target="_blank">GitHub</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2012/08/generic-message-sheet-for-ios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>A Developer Pre-WWDC</title>
		<link>http://www.saygoodnight.com/2012/06/a-developers-pre-wwdc/</link>
		<comments>http://www.saygoodnight.com/2012/06/a-developers-pre-wwdc/#comments</comments>
		<pubDate>Sat, 09 Jun 2012 02:24:40 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=289</guid>
		<description><![CDATA[I leave for WWDC in a couple days. While this is my first time in person, usually I am huddled around my monitor watching the live blogging, with a day of extremely low productivity. This is also the first year &#8230; <a href="http://www.saygoodnight.com/2012/06/a-developers-pre-wwdc/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/06/wwdc2012.jpg"><img src="http://www.saygoodnight.com/wordpress/wp-content/uploads/2012/06/wwdc2012.jpg" alt="" title="wwdc2012" width="350" height="390" class="alignnone size-full wp-image-290" /></a></p>
<p>I leave for WWDC in a couple days. While this is my first time in person, usually I am huddled around my monitor watching the live blogging, with a day of extremely low productivity. This is also the first year I am a iOS developer professionally, previous years iOS was a merely hobby. (Kind of like TVs to Apple, zing!)</p>
<p>There are plenty of blog posts on what to expect, filled with rumors. I thought I would write up what a regular, every day iOS developer would LOVE to see. After the conference, I will write a follow up.</p>
<p>1) Ability to combine Apple IDs</p>
<p>Since the very beginning, I have had a &#8216;developer&#8217; Apple ID, and my regular iTunes Apple ID.  So while I buy all my books,music &#038; apps with my &#8216;regular&#8217; Apple ID, I had to buy my WWDC ticket with my &#8216;developer&#8217; Apple ID.  Annoying, but thats all.  However, with the ever expanding world of iCloud, everything is controlled by your Apple ID.  Having such little control over them is unacceptable.  My simple #1 request is the ability to combine &#038; better control Apple IDs.</p>
<p>2) More Developer Center Upgrades</p>
<p>One word:  analytics.   It is insane that I don&#8217;t know anything about when someone is driven to the app store to my app.  I want to be able to make a funnel from my app landing page to the app store.  There are rumors about improvements surrounding privacy and a UDID replacement, so it will be interesting to see if this indicates a larger improvement to the developer center (or iTunes Connect).</p>
<p>3) Clarification on how to create an iOS framework</p>
<p>Apple doesn&#8217;t seem to want developers to create frameworks on iOS, even though there are several out there.   If this is an acceptable thing, there should be an Xcode template for it.  Make it easy.</p>
<p>4) &#8216;Reader&#8217; view for UIWebView</p>
<p>The awesome &#8216;reader&#8217; functionality of Safari needs to be exposed via APIs thru UIWebView.  That would make showing content SOOO much easier.</p>
<p>5) Better git integration with Xcode</p>
<p>It seems like Xcode gets confused whenever I switch branches.  Xcode ends up &#8216;indexing&#8217; over and over.  Something is wrong here.  I think it has to do with Xcode preprocessing files that git changes?   If it is a setup issue, maybe Xcode should include a built in .gitignore file for Xcode projects?</p>
<p>6) Typical Things</p>
<p>I am a full on Apple fanboy, so I do want all the things that other websites mention as well:  Facebook integration, 3d Maps, a new iPhone &#038; a new Apple TV.</p>
<p>Stay tuned for a follow up post after the conference!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2012/06/a-developers-pre-wwdc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>EasyCSV2SQLite Open Sourced!</title>
		<link>http://www.saygoodnight.com/2012/05/easycsv2sqlite-open-sourced/</link>
		<comments>http://www.saygoodnight.com/2012/05/easycsv2sqlite-open-sourced/#comments</comments>
		<pubDate>Thu, 31 May 2012 03:44:46 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[cocoa]]></category>
		<category><![CDATA[csv]]></category>
		<category><![CDATA[database]]></category>
		<category><![CDATA[opensource]]></category>
		<category><![CDATA[osx]]></category>
		<category><![CDATA[sqlite]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=267</guid>
		<description><![CDATA[Wrote EasyCSV2SQLite last year as a utility to help with some other projects. Unfortunately, I never really continued developing it, howver I think it could be useful to people. So I figured I&#8217;d open source it! It is still available &#8230; <a href="http://www.saygoodnight.com/2012/05/easycsv2sqlite-open-sourced/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://107.20.152.248/wordpress/wp-content/uploads/2012/05/heartocat.png"><img class="size-full wp-image-269" title="heartocat" src="http://107.20.152.248/wordpress/wp-content/uploads/2012/05/heartocat.png" alt="" width="230" height="230" /></a></p>
<p>Wrote EasyCSV2SQLite <a href="http://www.saygoodnight.com/convert-csv-to-sqlite/">last year</a> as a utility to help with some other projects. Unfortunately, I never really continued developing it, howver I think it could be useful to people. So I figured I&#8217;d <a href="https://github.com/pj4533/EasyCSV2SQLite">open source</a> it!</p>
<p>It is still available on the app store if you want to download the binary. Here is the description:</p>
<p>EasyCSV2SQLite makes it easy to convert comma delimited text files to sqlite databases. The primary use would be to include datasets inside development projects. To further enable this, EasyCSV2SQLite will generate objective-c code necessary to read the created SQLite database.</p>
<p>EasyCSV2SQLite is a very simple application, but does its job well!</p>
<p><span id="more-267"></span></p>
<p>- each column is a VARCHAR(255)<br />
- line endings for the CSV file can be LF/CR/CRLF<br />
- first line used as column headers<br />
- objective-c code generated for reading database<br />
- uses NSScanner rather than componentsSeparatedByString so it properly parses commas in quotation marks</p>
<p>The code generation was initially based on code from a blog post at dBlog.com.au. Thanks to them for showing how easy it is to read SQLite from objective-c!</p>
<p><a href="https://github.com/pj4533/EasyCSV2SQLite">https://github.com/pj4533/EasyCSV2SQLite</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2012/05/easycsv2sqlite-open-sourced/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another LOCPix Video</title>
		<link>http://www.saygoodnight.com/2012/05/more-locpix-videos/</link>
		<comments>http://www.saygoodnight.com/2012/05/more-locpix-videos/#comments</comments>
		<pubDate>Thu, 31 May 2012 03:08:24 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[say goodnight software]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=263</guid>
		<description><![CDATA[]]></description>
				<content:encoded><![CDATA[<p><iframe width="420" height="315" src="http://www.youtube.com/embed/ajQn_vp8m0A" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2012/05/more-locpix-videos/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>LOCPix!</title>
		<link>http://www.saygoodnight.com/2012/01/locpix/</link>
		<comments>http://www.saygoodnight.com/2012/01/locpix/#comments</comments>
		<pubDate>Thu, 26 Jan 2012 03:56:08 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[News]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=258</guid>
		<description><![CDATA[LOCPix allows anyone to quickly search and browse the vast image collections from the Library of Congress. The Library of Congress contains nearly a million photographs and posters to explore with LOCPix simple and friendly user interface. View On AppStore!]]></description>
				<content:encoded><![CDATA[<p><iframe width="480" height="360" src="http://www.youtube.com/embed/NF2old-DLLE" frameborder="0" allowfullscreen></iframe></p>
<p>LOCPix allows anyone to quickly search and browse the vast image collections from the Library of Congress.  The Library of Congress contains nearly a million photographs and posters to explore with LOCPix simple and friendly user interface.</p>
<p><a href="http://itunes.apple.com/us/app/locpix/id493888167?ls=1&#038;mt=8" title="View On AppStore!" target="_blank">View On AppStore!</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2012/01/locpix/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>GovConTrack 2.0 &#8211; Coming Soon!</title>
		<link>http://www.saygoodnight.com/2011/08/govcontrack-2-0-coming-soon/</link>
		<comments>http://www.saygoodnight.com/2011/08/govcontrack-2-0-coming-soon/#comments</comments>
		<pubDate>Thu, 11 Aug 2011 14:12:44 +0000</pubDate>
		<dc:creator>pj4533</dc:creator>
				<category><![CDATA[Applications]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[gov20]]></category>
		<category><![CDATA[govcontrack]]></category>
		<category><![CDATA[government]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[opengov]]></category>
		<category><![CDATA[say goodnight software]]></category>

		<guid isPermaLink="false">http://www.saygoodnight.com/?p=251</guid>
		<description><![CDATA[Here is a quick demo of the new version of GovConTrack, which adds the ability to query USASpending.gov. Will be released soon.]]></description>
				<content:encoded><![CDATA[<p><iframe width="620" height="465" src="http://www.youtube.com/embed/qk7Kbj-1e8M?feature=oembed" frameborder="0" allowfullscreen></iframe></p>
<p>Here is a quick demo of the new version of GovConTrack, which adds the ability to query USASpending.gov.  Will be released soon.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.saygoodnight.com/2011/08/govcontrack-2-0-coming-soon/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Page Caching using apc
Database Caching using apc
Object Caching 628/698 objects using apc

 Served from: www.saygoodnight.com @ 2013-05-19 17:21:47 by W3 Total Cache -->