<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns="http://purl.org/rss/1.0/" xmlns:tb="http://madskills.com/public/xml/rss/module/trackback/" xmlns:pb="http://madskills.com/public/xml/rss/module/pingback/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  <channel rdf:about="http://www.pocketsoap.com/weblog/rss.xml">
    <title>Simon Fell</title>
    <link>http://www.pocketsoap.com/weblog/</link>
    <description>Its just code</description>
    <dc:language>en</dc:language>
    <dc:publisher>Simon Fell</dc:publisher>
    <dc:creator>Simon Fell</dc:creator>
    <dc:rights>Copyright (c) 2012 Simon Fell</dc:rights>
    <items>
      <rdf:Seq>
        <rdf:li rdf:resource="http://www.pocketsoap.com/weblog/2012/03/1850.html" />
        <rdf:li rdf:resource="http://www.pocketsoap.com/weblog/2011/02/1849.html" />
        <rdf:li rdf:resource="http://www.pocketsoap.com/weblog/2010/06/1848.html" />
        <rdf:li rdf:resource="http://www.pocketsoap.com/weblog/2010/06/1847.html" />
        <rdf:li rdf:resource="http://www.pocketsoap.com/weblog/2010/05/1846.html" />
      </rdf:Seq>
    </items>
  </channel>
  <item rdf:about="http://www.pocketsoap.com/weblog/2012/03/1850.html">
    <title>Handling binary http response in apex.</title>
    <link>http://www.pocketsoap.com/weblog/2012/03/1850.html</link>
    <description>&lt;p&gt;For quite a while now you've been able to make HTTP requests from Apex to other services, this was aimed at integrations for structured data, xml or json, and so would deal with strings. This made life easier if you were actually doing xml or json, but makes life difficult to impossible if you were trying to deal with binary data. In the recent Spring release this is fixed, and you can now work with binary data (blobs in apex) directly in the http request or response. Here's an example of making a HTTP GET request for an image PNG file, and saving it to the document object in salesforce&lt;/p&gt;

&lt;pre class='example'&gt;&lt;code&gt;HttpRequest r = new HttpRequest();
r.setMethod('GET');
r.setEndpoint('http://www.pocketsoap.com/osx/soqlx/soqlxicon.png');
Http http = new Http();
HttpResponse res = http.send(r);
blob image = res.getBodyAsBlob();

Document d = new Document();
d.name = 'logo.png';
d.body = image;
d.folderId = UserInfo.getUserId();
insert d;
system.debug(d.id);&lt;/code&gt;&lt;/pre&gt;

&lt;p&gt;(Yes, this may well be my one blog post for this year)&lt;/p&gt;</description>
    <category>Salesforce.com</category>
    <dc:date>2012-03-03T04:07:37Z</dc:date>
    <wfw:comment>http://www.pocketsoap.com/weblog/comments.html?pid=1850</wfw:comment>
    <wfw:commentRss>http://www.pocketsoap.com/weblog/2012/03/1850.html?flav=rss</wfw:commentRss>
    <tb:ping rdf:resource="http://www.pocketsoap.com/weblog/trackback.html?pid=1850" />
    <pb:server rdf:resource="http://www.pocketsoap.com/weblog/pingback.html" />
    <pb:target rdf:resource="http://www.pocketsoap.com/weblog/2012/03/1850.html" />
  </item>
  <item rdf:about="http://www.pocketsoap.com/weblog/2011/02/1849.html">
    <title>Hudson/Jenkins plugin for Chatter notifications</title>
    <link>http://www.pocketsoap.com/weblog/2011/02/1849.html</link>
    <description>&lt;p&gt;Hudson is a popular continuous integration build server, I've been working on a plugin for it that will post build notifications to chatter. The plugin is configurable, so that it can post updates to its own wall, to a specific group (perhaps the project team that owns the build), or to a specific data record (perhaps you have a custom object that represents a build).&lt;/p&gt;
&lt;p&gt;&lt;img src="http://www.pocketsoap.com/weblog/hc.png"/&gt;&lt;/p&gt;
&lt;p&gt;You can grab the source and a prebuilt plugin binary from the &lt;a href='https://github.com/superfell/HudsonChatterPlugin'&gt;projects home page on github&lt;/a&gt;.&lt;/p&gt;</description>
    <category>Salesforce.com</category>
    <dc:date>2011-02-18T17:08:57Z</dc:date>
    <wfw:comment>http://www.pocketsoap.com/weblog/comments.html?pid=1849</wfw:comment>
    <wfw:commentRss>http://www.pocketsoap.com/weblog/2011/02/1849.html?flav=rss</wfw:commentRss>
    <tb:ping rdf:resource="http://www.pocketsoap.com/weblog/trackback.html?pid=1849" />
    <pb:server rdf:resource="http://www.pocketsoap.com/weblog/pingback.html" />
    <pb:target rdf:resource="http://www.pocketsoap.com/weblog/2011/02/1849.html" />
  </item>
  <item rdf:about="http://www.pocketsoap.com/weblog/2010/06/1848.html">
    <title>ZKSforce now with iPhone OS support.</title>
    <link>http://www.pocketsoap.com/weblog/2010/06/1848.html</link>
    <description>&lt;p&gt;&lt;a href="http://www.pocketsoap.com/osx/zksforce/"&gt;ZKSforce&lt;/a&gt; is the Cocoa library i wrote to make it easier to access the Salesforce.com API from Cocoa / Objective-C. I just posted a new version that uses the Salesforce.com v19 API, and has switched out its use of NSXML &amp; NSCalendarDate with libxml &amp;amp; NSDate and so is now compatible with both OSX and iPhone based projects. (iPhone OS 3.2 and up should be good).&lt;/p&gt;</description>
    <category>OSX</category>
    <category>Salesforce.com</category>
    <dc:date>2010-06-08T03:40:12Z</dc:date>
    <wfw:comment>http://www.pocketsoap.com/weblog/comments.html?pid=1848</wfw:comment>
    <wfw:commentRss>http://www.pocketsoap.com/weblog/2010/06/1848.html?flav=rss</wfw:commentRss>
    <tb:ping rdf:resource="http://www.pocketsoap.com/weblog/trackback.html?pid=1848" />
    <pb:server rdf:resource="http://www.pocketsoap.com/weblog/pingback.html" />
    <pb:target rdf:resource="http://www.pocketsoap.com/weblog/2010/06/1848.html" />
  </item>
  <item rdf:about="http://www.pocketsoap.com/weblog/2010/06/1847.html">
    <title>AppleScript connector</title>
    <link>http://www.pocketsoap.com/weblog/2010/06/1847.html</link>
    <description>&lt;p&gt;The &lt;a href="http://www.pocketsoap.com/osx/applescript/"&gt;Applescript Connector for Salesforce.com&lt;/a&gt; allows you to write applescript that can interact with the salesforce.com API, login, create, update &amp;amp; delete data, run queries, retrieve your scherma's metadata all from Applescript. Now you can more easily integrate Salesforce.com with your OSX desktop and applications.&lt;/p&gt;</description>
    <category>OSX</category>
    <category>Salesforce.com</category>
    <dc:date>2010-06-08T03:37:13Z</dc:date>
    <wfw:comment>http://www.pocketsoap.com/weblog/comments.html?pid=1847</wfw:comment>
    <wfw:commentRss>http://www.pocketsoap.com/weblog/2010/06/1847.html?flav=rss</wfw:commentRss>
    <tb:ping rdf:resource="http://www.pocketsoap.com/weblog/trackback.html?pid=1847" />
    <pb:server rdf:resource="http://www.pocketsoap.com/weblog/pingback.html" />
    <pb:target rdf:resource="http://www.pocketsoap.com/weblog/2010/06/1847.html" />
  </item>
  <item rdf:about="http://www.pocketsoap.com/weblog/2010/05/1846.html">
    <title>Schema visualization with GraphViz</title>
    <link>http://www.pocketsoap.com/weblog/2010/05/1846.html</link>
    <description>&lt;p&gt;A friend recently turned me onto &lt;a href='http://instaviz.com/'&gt;Instaviz&lt;/a&gt;, a great iPhone / iPad diagraming tool based on &lt;a href='http://www.graphviz.org/'&gt;graphviz&lt;/a&gt;. Graphviz lets you define your diagram as a set of nodes and connections, and it will perform the layout for you. I have &lt;a href='http://www.pocketsoap.com/osx/soqlx/'&gt;something of an interest&lt;/a&gt; in being able to visualize your salesforce.com schema, and some lines of python code later, i had something that would generate a graphviz description of your schema, starting from a primary object, and with the option to go 1 or more levels deep from there. Here's an example for Opportunity, just 1 level deep. (click for full size version)&lt;/p&gt;

&lt;p&gt;
&lt;a href='http://www.pocketsoap.com/weblog/2010/05/oppty.png'&gt;&lt;img border='0' src='http://www.pocketsoap.com/weblog/2010/05/oppty_t.png' style='padding:3pt'&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;And here's the generated &lt;a href='http://www.pocketsoap.com/weblog/2010/05/oppty.gv'&gt;oppty.gv&lt;/a&gt; file that produces that graph. If you have Instaviz or one of the desktop viewers for graphviz, you can open the .gv file directly in those apps. (and/or you can use the commandline tools to generate a png or other formats).&lt;/p&gt;

&lt;p&gt;Here's &lt;a href='http://www.pocketsoap.com/weblog/2010/05/gv.py.txt'&gt;the actual python code&lt;/a&gt;, it uses &lt;a href='http://www.pocketsoap.com/beatbox/'&gt;beatbox&lt;/a&gt; to call the describeSObject API to discover the schema for your login. You run it as &lt;pre&gt;python gv.py someuser@sample.org mypassword Opportunity &gt; oppty.gv&lt;/pre&gt;&lt;/p&gt;

&lt;p&gt;Here's an even larger model that's 5 levels deep from Account - &lt;a href='http://www.pocketsoap.com/weblog/2010/05/acct.png'&gt;png rendering&lt;/a&gt; (ouch its 6MB), &lt;a href='http://www.pocketsoap.com/weblog/2010/05/acct.gv'&gt;gv&lt;/a&gt; (33k)&lt;/p&gt;
&lt;p&gt;[Also available &lt;a href="http://webhostingrating.com/libs/with-GraphViz-be"&gt;Belorussian translation&lt;/a&gt; provided by Patricia]&lt;/p&gt; 
</description>
    <category>Salesforce.com</category>
    <dc:date>2010-05-14T18:35:18Z</dc:date>
    <wfw:comment>http://www.pocketsoap.com/weblog/comments.html?pid=1846</wfw:comment>
    <wfw:commentRss>http://www.pocketsoap.com/weblog/2010/05/1846.html?flav=rss</wfw:commentRss>
    <tb:ping rdf:resource="http://www.pocketsoap.com/weblog/trackback.html?pid=1846" />
    <pb:server rdf:resource="http://www.pocketsoap.com/weblog/pingback.html" />
    <pb:target rdf:resource="http://www.pocketsoap.com/weblog/2010/05/1846.html" />
  </item>
</rdf:RDF>
