<?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>The Two Alexs</title>
	<atom:link href="http://blog.twoalex.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.twoalex.com</link>
	<description>Alexes?  Alex&#039;s?  Alexi?  Alexim?  Alexen?</description>
	<lastBuildDate>Sun, 13 May 2012 14:27:35 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Railsberry</title>
		<link>http://blog.twoalex.com/2012/05/13/railsberry/</link>
		<comments>http://blog.twoalex.com/2012/05/13/railsberry/#comments</comments>
		<pubDate>Sun, 13 May 2012 14:27:35 +0000</pubDate>
		<dc:creator>k</dc:creator>
				<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1412</guid>
		<description><![CDATA[Last month I had the fortune to go to Railsberry,  a Ruby conference in Kraków. The experience The event was amazing &#8212;  I&#8217;d expected (and found) talented speakers giving great talks to cool fellow attendees;  what surprised and impressed me was the enthusiasm of the conference organizers, expressed through the incredibly detailed theme of the conference.  The [...]]]></description>
			<content:encoded><![CDATA[<p>Last month I had the fortune to go to Railsberry,  a Ruby conference in Kraków.</p>
<p><strong>The experience</strong></p>
<p><strong></strong>The event was amazing &#8212;  I&#8217;d expected (and found) talented speakers giving great talks to cool fellow attendees;  what surprised and impressed me was the enthusiasm of the conference organizers, expressed through the incredibly detailed theme of the conference.  The  berries on the tables, the flying pink unicorn on stage, animations at the breaks, the T-shirts, yard decorations, conference booklets: the Railsberry spirit was organic, genuine, and infectious, and quickly spread to the audience. (Did I mention the delicious raspberry vodka?)</p>
<p>It&#8217;s hard to describe in text the cumulative effect of all this effort.  It was magical, in a way I didn&#8217;t expect a conference (even a Rails conf) could be.</p>
<div id="attachment_1432" class="wp-caption alignright" style="width: 189px"><a href="http://www.flickr.com/photos/17473659@N00/sets/72157629669368422/"><img class="wp-image-1432 " title="A dump of unlabeled photos of Krakow" src="http://blog.twoalex.com/wp-content/uploads/2012/05/7172402544_8b059431bb.jpg" alt="A dump of unlabeled photos of Krakow" width="179" height="300" /></a><p class="wp-caption-text">A dump of unlabeled photos of Krakow</p></div>
<p>The setting matched the conference: Kraków is beautiful.  I&#8217;d never been to Poland before, and I was impressed.  The streets are lined with Altbaus; the people are friendly; the old town absolutely gorgeous and  scenic; the castle  huge and satisfied towering above the city; the food delicious.  (If you go there you must go to <a href="http://www.miodmalina.pl/">Miod Malina</a>.  Don&#8217;t argue, just do it.  You won&#8217;t regret it.)  That everything was significantly cheaper  than even Berlin was a nice bonus, too.</p>
<p>Honestly,  Kraków felt much more like my vision of &#8220;central European city&#8221;  than almost everywhere I&#8217;ve been.  I&#8217;m excited to go back someday to see the salt mines and explore the the surprisingly alive Jewish sector, which we barely got to.</p>
<p><strong>The Conference</strong></p>
<p><strong></strong>Among all the meeting of cool new people, eating of delicious food, drinking of tasty beverages, and exploring of scenic streets, I did manage to learn a few things.</p>
<p>Tom Stuart gave the talk that most impacted my thinking, on &#8220;developing from the outside in&#8221;.  He spoke about the value of building systems not from the inside (database schema as, models) but from the outside (the external libraries that use it with mock responses etc. then controllers and routing).  It&#8217;s a logical and effective way to approach certain design, and I&#8217;m excited to try it on some suitable problems in the near future.</p>
<p>A number of other talks also stuck with me:</p>
<ul>
<li>Yehuda Katz on why Rails is hard, a reminder of the difficult challenges the framework handles under the hood (for instance, string encoding and CSRF) and why the extra size and complexity of Rails is often justified.</li>
<li>Konstantin Haase and Josh Kalderimis on Travis&#8217; new pull request testing and on their funding model &#8212; such an amazing project.  I&#8217;ve been using it for Koala for nearly a year, and it&#8217;s made such a huge difference.  (I&#8217;m slightly ashamed to say, I still need to contribute.)</li>
<li>Tammer Saleh on service oriented architecture antipatterns,  a very timely talk  given our recent work at 6Wunderkinder.</li>
</ul>
<p>It looks like slides and video aren&#8217;t up yet, but when they are I&#8217;ll link them.</p>
<p><strong>Lightning</strong></p>
<p>At the conference I had the opportunity to give a lightning talk, which as always was fun.  I spoke about some experimentation I&#8217;d done with Rails&#8217; render method to inject certain options into your API on a consistent and universal level.  Check it out:</p>
<p><a href="http://blog.twoalex.com/2012/05/13/railsberry/"><em>Click here to view the embedded video.</em></a></p>
<p>Slides <a href="http://www.slideshare.net/koppel/railsberry-lightning-talk-playing-with-render-12718291">here</a>.</p>
<p>The coolest part came afterward: I mentioned in my 5 minutes that I wasn&#8217;t sure about the approach, and Yehuda (yes, wycats) came up to me afterward.  His first reaction, he told me, was the same as mine: wrapping render seemed like a bad idea.</p>
<p>After thinking about it for a moment, though, he realized it was fine: Rails Metal overrides render, and if the framework does that, it&#8217;s okay for app developers as well.  Moreover, the signature of render is stable, so this approach won&#8217;t make your code brittle.</p>
<p>This was awesome: clearly I done something interteresting and my approach was right (a big relief since I&#8217;ll be talking in more detail on API uniformity in Barcelona in September).</p>
<p><strong>In conclusion</strong></p>
<p>Conferences are great.  I&#8217;ll be going to three(!) more this year, and will post more about that  and over the next few months.</p>
<p>Cheers,</p>
<p>Alex</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2012/05/13/railsberry/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Spätkaufs</title>
		<link>http://blog.twoalex.com/2012/04/11/spatkaufs/</link>
		<comments>http://blog.twoalex.com/2012/04/11/spatkaufs/#comments</comments>
		<pubDate>Wed, 11 Apr 2012 22:05:09 +0000</pubDate>
		<dc:creator>k</dc:creator>
				<category><![CDATA[Germany]]></category>
		<category><![CDATA[shorts]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1404</guid>
		<description><![CDATA[The first(ish) in an occasional series about the details, large and small, of life abroad. For an American in Europe, stores close early and often.  In some cities this is so pronounced it can be difficult for a working stiff to shop: in Amsterdam (hardly a backwoods) most grocery stores pack in in around 5. [...]]]></description>
			<content:encoded><![CDATA[<p><em>The first(ish) in an occasional series about the details, large and small, of life abroad.</em></p>
<p>For an American in Europe, stores close early and often.  In some cities this is so pronounced it can be difficult for a working stiff to shop: in Amsterdam (hardly a backwoods) most grocery stores pack in in around 5.  Here in Germany, fortunately, hours are reasonable, and loosen up as you go further north &#8212; grocery stores in conservative Munich often close at 8, while the same chain may close at 10 PM in Köln (aka Cologne), and in freewheeling Berlin are sometimes open till 11 PM or even midnight.  (All this is a gross simplification, of course.)  At some point at night, though, everything does close, and pity the newcomer who forgot to buy Sunday&#8217;s groceries on Saturday.  There&#8217;s nothing here akin to the 24-7-365 American hypermarkets like Walmart or that fantastic CVS (nee Longs) on Pleasant Valley Road in Oakland.</p>
<p>Overall, I&#8217;ve always liked these restrictions; having where shopping is off the table forces me to focus on the things I have and on what I can do with friends.  (Yeah, it&#8217;s cheesy, but it&#8217;s all about attitude.)  Unfotunately, such philosophical benefits don&#8217;t help when you run out of beer at midnight on a Friday night.  Enter, in Berlin, the Spätis.</p>
<p>Meaning &#8220;late selling&#8221;, Spätverkaufs &#8212; never referred to as such, always Spätkaufs or simply Spätis &#8212; were a feature of East Berlin, which after reunification spread into the West (a rare case, like the Ampelmann) of a good feature being picked up from life under communism.  There&#8217;s not a lot of history online, but apparently they were originally established in industrial and farm towns for shift workers who would otherwise come home too late to shop (<a href="http://www.n24.de/news/newsitem_7811918.html" target="_blank">link</a>).</p>
<p>Open late, often all night, Spätkaufs serve a selection of alcohol, food staples and snacks, household necessities.  They also sometimes offer coffee or Internet access and printers, which can be insanely handy if (to take a totally hypothetical example that probably didn&#8217;t just happen to me tonight) you have a train to catch the next morning and forgot to print your ticket.  Prices are, of course, higher and selection smaller than regular stores, so you don&#8217;t got to a Späti when there are other easy options, but the neighborhood Spätkauf hugely beats finding a gas station (24/7, terrible selection) or trekking down to the train station (Sundays, better selection).</p>
<p>tl; dr: after living in Europe for a while, I really appreciate being able to walk three blocks to a Spätkauf at 11 PM to buy eggs and beer.</p>
<div id="attachment_1407" class="wp-caption alignleft" style="width: 624px"><a href="http://blog.twoalex.com/wp-content/uploads/2012/04/spaetkauf.jpg"><img class=" wp-image-1407 " title="A Spätkauf in Prenzlauer Berg, Berlin" src="http://blog.twoalex.com/wp-content/uploads/2012/04/spaetkauf-1024x612.jpg" alt="" width="614" height="367" /></a><p class="wp-caption-text">A Spätkauf in Prenzlauer Berg, Berlin</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2012/04/11/spatkaufs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Koala 1.4 released!</title>
		<link>http://blog.twoalex.com/2012/03/18/koala-1-4-released/</link>
		<comments>http://blog.twoalex.com/2012/03/18/koala-1-4-released/#comments</comments>
		<pubDate>Sun, 18 Mar 2012 10:50:08 +0000</pubDate>
		<dc:creator>k</dc:creator>
				<category><![CDATA[facebook]]></category>
		<category><![CDATA[releases]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[websites]]></category>
		<category><![CDATA[koala]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1400</guid>
		<description><![CDATA[Hey everyone, Happy spring!  I&#8217;m excited to announce the release of Koala 1.4.0. What&#8217;s New The big update in 1.4 is OAuth#exchange_access_token(_info), which allows you to extend access tokens you receive.  (Thanks to etiennebarrie for the pull request.)  If you haven&#8217;t heard about the new exchange mechanism, which replaces offline access, read more about it here. [...]]]></description>
			<content:encoded><![CDATA[<p>Hey everyone,</p>
<p>Happy spring!  I&#8217;m excited to announce the release of Koala 1.4.0.</p>
<h2>What&#8217;s New</h2>
<p>The big update in 1.4 is OAuth#exchange_access_token(_info), which allows you to extend access tokens you receive.  (Thanks to etiennebarrie for the pull request.)  If you haven&#8217;t heard about the new exchange mechanism, which replaces offline access, read more about it <a title="here" href="https://developers.facebook.com/docs/offline-access-deprecation/">here</a>.</p>
<p>Other updates:</p>
<ul>
<li>HTTPServices#encode_params sorts parameters to aid in URL comparison (thanks, sholden!)</li>
<li>get_connections is now aliased as get_connection (use whichever makes sense to you)</li>
<li>Fixed typos (thanks, brycethornton and jpemberthy!)</li>
<li>RealtimeUpdates will no longer execute challenge block unnecessarily (thanks, iainbeeston!)</li>
<li>Added parallel_tests to development gem file</li>
<li>Fixed failing live tests</li>
<li>Koala now tests against JRuby and Rubinius in 1.9 mode on Travis-CI</li>
</ul>
<p>Speaking of thanks, I&#8217;d also like to thank banane, who&#8217;s been very active here in the Koala user&#8217;s group.  It&#8217;s awesome to see an active community, and it&#8217;s been a huge help to me over a rather busy last few months.  I really appreciate everyone who&#8217;s taken the time to share their knowledge here in the user&#8217;s group!</p>
<p>The changelog is <a href="https://github.com/arsduo/koala/blob/master/CHANGELOG" target="_blank">here</a>, and the complete diff since 1.3.0 is <a href="https://github.com/arsduo/koala/compare/v1.3.0...v1.4.0" target="_blank">here</a>.</p>
<h2>Have you seen this bug?</h2>
<p>alecnmk recently reported <a href="https://github.com/arsduo/koala/issues/165">an issue</a> where Koala will stop returning results when paging through a GraphCollection &#8212; the first page or two will give a full set of results, then you&#8217;ll get a small result set, then nothing. I&#8217;d run into this myself but thought it was Facebook until I saw the bug report, where he shows that other Facebook libraries return more paging information in these instances.  Unfortunately, I now can&#8217;t reproduce the issue myself.</p>
<p>If any of you see this issue on a publicly accessible Facebook object, please let me know!  (You can just add it to the issue.)  If we can reproduce it, we can fix it.</p>
<h2>Are you parsing Facebook&#8217;s cookies?</h2>
<p>Some of you may have seen a recent Facebook <a href="http://developers.facebook.com/blog/post/624/">blog post</a> stating that from now on, the cookie format used by their Javascript SDK should be considered an implementation detail, and that third party SDKs like Koala, in effect, shouldn&#8217;t provide support.  (Instead, we should all be using the OAuth redirect flow.)  It&#8217;s a complicated topic (fit for a later blog post), though in my opinion there are real benefits to the cookie-based authentication flow that the book blog post and subsequent replies to comments don&#8217;t adequately discuss.</p>
<p>I&#8217;ve been in touch with a few people at Facebook about this, and would be very glad to add your voices and your thoughts.  Are you using the Javascript SDK to log users in and set cookies, and then reading those on the server?  What do you think of the proposed alternatives (either using redirects or implementing your own secure cookie format)?</p>
<p>It goes without saying that Koala will support cookie parsing now and in the future, regardless of Facebook&#8217;s position.  Facebook has no immediate plans to change their cookie format, so we should be in good shape, and if any changes are made, we&#8217;ll be able to port them from the PHP library easily.</p>
<h2>What&#8217;s next</h2>
<p>Bug fixes, answering questions, and keeping up with API changes.  Nothing big planned.</p>
<p>Happy coding!</p>
<p>Alex<br />
<a href="http://github.com/arsduo/koala">http://github.com/arsduo/koala<br />
</a></p>
<div id="attachment_1046" class="wp-caption alignleft" style="width: 141px"><a href="http://blog.twoalex.com/wp-content/uploads/2011/04/koala-party.png"><img class="wp-image-1046 " title="Koala Party" src="http://blog.twoalex.com/wp-content/uploads/2011/04/koala-party-219x300.png" alt="" width="131" height="180" /></a><p class="wp-caption-text">wooo</p></div>
<p><a href="http://github.com/arsduo/koala"><br />
</a></p>
<div>
<dl id="attachment_1046">
<dt></dt>
</dl>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2012/03/18/koala-1-4-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Koala 1.4rc1 released!</title>
		<link>http://blog.twoalex.com/2012/02/08/koala-1-4rc1-released/</link>
		<comments>http://blog.twoalex.com/2012/02/08/koala-1-4rc1-released/#comments</comments>
		<pubDate>Wed, 08 Feb 2012 18:58:19 +0000</pubDate>
		<dc:creator>k</dc:creator>
				<category><![CDATA[facebook]]></category>
		<category><![CDATA[releases]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[koala]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1380</guid>
		<description><![CDATA[Hey everyone, Happy February!  I&#8217;m excited to announce the release of Koala 1.4.0rc1. What&#8217;s New The big update in 1.4 is OAuth#exchange_access_token(_info), which allows you to extend access tokens you receive.  (Thanks to etiennebarrie for the pull request.)  If you haven&#8217;t heard about the new exchange mechanism, which replaces offline access, read more about it [...]]]></description>
			<content:encoded><![CDATA[<p>Hey everyone,</p>
<p>Happy February!  I&#8217;m excited to announce the release of Koala 1.4.0rc1.</p>
<h2>What&#8217;s New</h2>
<p>The big update in 1.4 is OAuth#exchange_access_token(_info), which allows you to extend access tokens you receive.  (Thanks to etiennebarrie for the pull request.)  If you haven&#8217;t heard about the new exchange mechanism, which replaces offline access, read more about it <a title="here" href="https://developers.facebook.com/docs/offline-access-deprecation/">here</a>.</p>
<p>Other updates:</p>
<ul>
<li>HTTPServices#encode_params sorts parameters to aid in URL comparison (thanks, sholden!)</li>
<li>get_connections is now aliased as get_connection (use whichever makes sense to you)</li>
<li>Fixed a readme typo (thanks, brycethornton!)</li>
<li>Added parallel_tests to development gem file</li>
<li>Fixed failing live tests</li>
<li>Koala now tests against JRuby and Rubinius in 1.9 mode on Travis-CI</li>
</ul>
<p>The changelog is <a href="https://github.com/arsduo/koala/blob/master/CHANGELOG">here</a>, and the complete diff since 1.3.0 is <a href="https://github.com/arsduo/koala/compare/v1.3.0...v1.4.0.rc1">here</a>.</p>
<h2>Have you seen this bug?</h2>
<p>alecnmk recently reported <a href="https://github.com/arsduo/koala/issues/165">an issue</a> where Koala will stop returning results when paging through a GraphCollection &#8212; the first page or two will give a full set of results, then you&#8217;ll get a small result set, then nothing. I&#8217;d run into this myself but thought it was Facebook until I saw the bug report, where he shows that other Facebook libraries return more paging information in these instances.  Unfortunately, I now can&#8217;t reproduce the issue myself.</p>
<p>If any of you see this issue on a publicly accessible Facebook object, please let me know!  (You can just add it to the issue.)  If we can reproduce it, we can fix it.</p>
<h2>Are you parsing Facebook&#8217;s cookies?</h2>
<p>Some of you may have seen a recent Facebook <a href="http://developers.facebook.com/blog/post/624/">blog post</a> stating that from now on, the cookie format used by their Javascript SDK should be considered an implementation detail, and that third party SDKs like Koala, in effect, shouldn&#8217;t provide support.  (Instead, we should all be using the OAuth redirect flow.)  It&#8217;s a complicated topic (fit for a later blog post), though in my opinion there are real benefits to the cookie-based authentication flow that the book blog post and subsequent replies to comments don&#8217;t adequately discuss.</p>
<p>I&#8217;ve been in touch with a few people at Facebook about this, and would be very glad to add your voices and your thoughts.  Are you using the Javascript SDK to log users in and set cookies, and then reading those on the server?  What do you think of the proposed alternatives (either using redirects or implementing your own secure cookie format)?</p>
<p>It goes without saying that Koala will support cookie parsing now and in the future, regardless of Facebook&#8217;s position.  Facebook has no immediate plans to change their cookie format, so we should be in good shape, and if any changes are made, we&#8217;ll be able to port them from the PHP library easily.</p>
<h2>What&#8217;s next</h2>
<p>If everything looks good with this rc, I&#8217;ll bump it up to a final release in a week or two.</p>
<p>Going forward, we&#8217;ll go for quicker, more frequent updates whenever new Facebook features come out or as bug fixes come in, rather than the huge multi-month projects of the last several releases.</p>
<p>Happy coding!</p>
<p>Alex<br />
<a href="http://github.com/arsduo/koala">http://github.com/arsduo/koala</a></p>
<div id="attachment_1046" class="wp-caption alignnone" style="width: 160px"><a href="http://blog.twoalex.com/wp-content/uploads/2011/04/koala-party.png"><img class="size-thumbnail wp-image-1046 " title="our old friend party koala" src="http://blog.twoalex.com/wp-content/uploads/2011/04/koala-party-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">wooo</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2012/02/08/koala-1-4rc1-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Koala 1.3 is out!</title>
		<link>http://blog.twoalex.com/2012/01/12/koala-1-3-is-out/</link>
		<comments>http://blog.twoalex.com/2012/01/12/koala-1-3-is-out/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 08:06:47 +0000</pubDate>
		<dc:creator>k</dc:creator>
				<category><![CDATA[facebook]]></category>
		<category><![CDATA[releases]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1365</guid>
		<description><![CDATA[Hey everyone, Happy new year!  I hope you&#8217;ve all had a great start to 2012 &#8212; and what better way to kick the year off than with a new version of Koala? Goodbye, REST API, someday Facebook has finally ported over the last of the REST API functions to the Graph API, meaning that anything [...]]]></description>
			<content:encoded><![CDATA[<p>Hey everyone,</p>
<p>Happy new year!  I hope you&#8217;ve all had a great start to 2012 &#8212; and what better way to kick the year off than with a new version of Koala?</p>
<h2>Goodbye, REST API, someday</h2>
<p>Facebook has finally ported over the last of the REST API functions to the Graph API, meaning that anything you can do with Facebook you can do through the newer interface&#8230;and that it&#8217;s <a href="https://developers.facebook.com/blog/post/616/">time for them to deprecate the REST API</a>.  No need to rush &#8212; the older interface will still be around for a while and Koala of course will support it till the end &#8212; but you should start migrating over if you&#8217;re still using any REST API calls.</p>
<h2>Documentation!</h2>
<p>Koala is now completely documented; information on every public method and class is available on rubydoc.info.  I know everyone <em>loves</em> rummaging around in source code, but if ever you feel like you just want a concise, useful writeup of the methods available to you, check it out <a href="http://rubydoc.info/github/arsduo/koala/master/Koala">here</a>.</p>
<h2>Other improvements</h2>
<p>Here are the biggest changes since the last release:</p>
<ul>
<li>New OAuth#url_for_dialog method creates URLs for Facebook dialog pages</li>
<li>New API#set_app_restrictions handles JSON-encoding app restrictions</li>
<li>New GraphCollection.parse_page_url now exposes useful functionality for non-Rails apps (see <a href="https://github.com/arsduo/koala/issues/128">this issue</a>)</li>
<li>Utils.deprecate only prints each message once (no more spamming!)</li>
<li>OAuth#url_for_access_token and #url_for_oauth_code now include any provided options as URL parameters</li>
<li>OAuth#get_user_info_from_cookies returns nil rather than an error if the cookies are expired (thanks, herzio!)</li>
<li>TestUsers#delete_all now uses the Batch API and is much faster</li>
<li>Fixed bugs, reorganized file and class structure non-destructively, expanded/improved test coverage</li>
</ul>
<p>The complete changelog is <a href="https://github.com/arsduo/koala/blob/master/CHANGELOG">here</a>, and the diff since 1.2.1 is <a href="https://github.com/arsduo/koala/compare/v1.2.1...v1.3.0">here</a>.</p>
<h2>What&#8217;s next</h2>
<p>Nothing much, actually.  Koala is stable and recent Facebook changes haven&#8217;t required any new code on our end (which we&#8217;re very excited about).  We&#8217;ll keep an eye on the FB developer blog and update Koala as the API changes; in the meanwhile, feel free to submit any pull requests if there&#8217;s code you want to add or improve.</p>
<p>Have a great 2012!</p>
<p>Alex<br/><a href="http://github.com/arsduo/koala">http://github.com/arsduo/koala</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2012/01/12/koala-1-3-is-out/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Koala 1.3rc2 released!</title>
		<link>http://blog.twoalex.com/2011/12/05/koala-1-3rc2-released/</link>
		<comments>http://blog.twoalex.com/2011/12/05/koala-1-3rc2-released/#comments</comments>
		<pubDate>Mon, 05 Dec 2011 21:12:53 +0000</pubDate>
		<dc:creator>k</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1351</guid>
		<description><![CDATA[Hey everyone, Fresh like a crepe off the pan comes Koala 1.3rc2 to fill your stomach and brighten your day. (The holidays really seem to bring out the food imagery, don&#8217;t they?) Documentation! Koala has always had a thorough wiki, but until now you&#8217;ve had to look at the source code to see what methods [...]]]></description>
			<content:encoded><![CDATA[<p>Hey everyone,</p>
<p>Fresh like a crepe off the pan comes Koala 1.3rc2 to fill your stomach and brighten your day. (The holidays really seem to bring out the food imagery, don&#8217;t they?)</p>
<h2>Documentation!</h2>
<p>Koala has always had a thorough wiki, but until now you&#8217;ve had to look at the source code to see what methods are available and what they do.  No more!  The library is now completely documented; information on every public method and class is available on <a href="http://rubydoc.info/github/arsduo/koala/master/Koala">rubydoc.info</a>.  If you don&#8217;t feel like rummaging through the source code for the method signature of a particular method, you no longer have to.  (Not that there&#8217;s anyone here who doesn&#8217;t like digging through the code of their libraries, I&#8217;m sure.)</p>
<p><span class="Apple-style-span" style="font-size: 20px; font-weight: bold;">Winter cleaning</span></p>
<p>With the holidays approaching and the relatives coming over, it was to give Koala a long overdue housecleaning.  The <a href="https://github.com/arsduo/koala/tree/master/lib/koala">lib/koala/</a> directory was getting a bit crowded, so I&#8217;ve reorganized, moving a number of files into the new the api/ and http_service/ subdirectories.  I&#8217;ve also updated the class structure largely to match, putting classes and modules in more logical places.</p>
<p>Don&#8217;t worry, though &#8212; for each move there&#8217;s an alias to ensure your existing code doesn&#8217;t break, and there&#8217;s even a legacy spec to really ensure all the old references work.  (If you&#8217;re directly referencing any of Koala&#8217;s more internal classes in your code &#8212; MultipartRequest,  Response, UploadableIO, BatchOperation, or GraphCollection &#8212; check out the <a href="https://github.com/arsduo/koala/blob/master/spec/cases/legacy_spec.rb#L86">legacy spec</a> for more details.)</p>
<h2>Other updates since 1.3rc1</h2>
<ul>
<li>RealtimeUpdates#subscription_path and TestUsers#test_user_accounts_path are now public methods</li>
<li>TestUsers and RealtimeUpdates methods now take http_options arguments</li>
<li>All methods with http_options can now take :http_component =&gt; :response for the complete response object</li>
<li>Fixed bugs in RealtimeUpdates and TestUsers</li>
</ul>
<h2>Installation</h2>
<p>As always:</p>
<pre title="">[sudo|rvm] gem install koala --pre</pre>
<p>Or with Bundler:</p>
<pre title="">gem "koala", "~&gt; 1.3.0rc2"</pre>
<h2>What&#8217;s next</h2>
<p>Assuming I don&#8217;t come up with any other projects like documentation and cleanup, I&#8217;ll release 1.3 soon.  After that, we&#8217;ll just kick back, enjoy the holidays, and update as needed to stay current with the Facebook API.</p>
<p>Have a great week,</p>
<p>Alex<br />
<a href="http://github.com/arsduo/koala"> http://github.com/arsduo/koala</a></p>
<div id="attachment_1046" class="wp-caption alignleft" style="width: 160px"><a href="http://blog.twoalex.com/wp-content/uploads/2011/04/koala-party.png"><img class="size-thumbnail wp-image-1046 " title="Koala Party" src="http://blog.twoalex.com/wp-content/uploads/2011/04/koala-party-150x150.png" alt="" width="150" height="150" /></a><p class="wp-caption-text">wooo</p></div>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2011/12/05/koala-1-3rc2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Koala 1.3.0rc1 released!</title>
		<link>http://blog.twoalex.com/2011/11/14/koala-1-3-0rc1-released/</link>
		<comments>http://blog.twoalex.com/2011/11/14/koala-1-3-0rc1-released/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 14:19:08 +0000</pubDate>
		<dc:creator>k</dc:creator>
				<category><![CDATA[facebook]]></category>
		<category><![CDATA[releases]]></category>
		<category><![CDATA[tech]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1338</guid>
		<description><![CDATA[Hey all, I&#8217;m happy to announce the release of Koala 1.3.0rc1! New Features 1.3.0rc1 provides support for several new Facebook features, a number of bug fixes, and other improvements: API#set_app_restrictions uses the new Graph API to set Facebook app restrictions OAuth#url_for_dialog builds the URLs for the various Facebook dialogs GraphCollection.parse_page_url now exposes useful functionality for [...]]]></description>
			<content:encoded><![CDATA[<p>Hey all,</p>
<p>I&#8217;m happy to announce the release of Koala 1.3.0rc1!</p>
<h2>New Features</h2>
<p>1.3.0rc1 provides support for several new Facebook features, a number of bug fixes, and other improvements:</p>
<ul>
<li>API#set_app_restrictions uses the new Graph API to set Facebook app restrictions</li>
<li>OAuth#url_for_dialog builds the URLs for the <a href="http://developers.facebook.com/docs/reference/dialogs/">various Facebook dialogs</a></li>
<li>GraphCollection.parse_page_url now exposes <a href="https://github.com/arsduo/koala/issues/128#issuecomment-2515762">useful functionality for non-Rails apps</a></li>
<li>OAuth#url_for_access_token and #url_for_oauth_code now include any provided options as URL parameters, allowing you to specify display and other options</li>
<li>API#fql now uses the Graph API FQL endpoint internally</li>
<li>Utils.deprecate only prints each message once (no more spamming)</li>
<li>Expanded/improved test coverage</li>
</ul>
<p>The changelog is <a href="https://github.com/arsduo/koala/blob/master/CHANGELOG">here</a>, and the complete diff since 1.2.1 is <a href="https://github.com/arsduo/koala/compare/v1.2.1...v1.3.0rc1">here</a>.</p>
<h2>Mockfacebook</h2>
<p>If you haven&#8217;t seen Ryan Barrett&#8217;s <a href="http://code.google.com/p/mockfacebook/">mockfacebook</a>,  a standalone HTTP server that implements Facebook&#8217;s FQL and Graph API, check it out.  It&#8217;s a great tool for testing your application against a realistically-mocked subset of the Facebook API, and it&#8217;s <a href="https://github.com/arsduo/koala/wiki/Using-Koala-with-mockfacebook">really easy to use with Koala</a>.</p>
<h2>Koala&#8217;s on Facebook and Twitter!</h2>
<p>Follow Koala on <a href="http://www.facebook.com/pages/Koala/315368291823667">Facebook</a> and <a href="https://twitter.com/#!/koala_fb">Twitter</a> for SDK updates and occasional news about Facebook API changes.</p>
<h2>Installation</h2>
<p>As always:</p>
<pre class="brush: bash; title: ; notranslate">[sudo|rvm] gem install koala --pre</pre>
<p>Or with Bundler:</p>
<pre class="brush: ruby; title: ; notranslate">gem &quot;koala&quot;, &quot;~&gt; 1.3.0rc1&quot;</pre>
<h2>What&#8217;s Next</h2>
<p>We&#8217;ll be releasing 1.3 later this month, assuming no big bugs are discovered.  After that, we&#8217;ll continue updating Koala as the Facebook API continues to change and evolve.</p>
<p>As always, if you have any ideas, issues, or suggestions, feel free to let me know on Github!</p>
<p>Have a great week and happy coding!</p>
<p>Best,</p>
<p>Alex<br />
<a href="http://github.com/arsduo/koala" target="_blank">http://github.com/arsduo/koala</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2011/11/14/koala-1-3-0rc1-released/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Koala 1.2 released!</title>
		<link>http://blog.twoalex.com/2011/09/27/koala-1-2-released/</link>
		<comments>http://blog.twoalex.com/2011/09/27/koala-1-2-released/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 14:01:11 +0000</pubDate>
		<dc:creator>k</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1311</guid>
		<description><![CDATA[Hey everyone, I&#8217;m excited to announce the release of Koala 1.2!  This is a big update with a lot of cool features, plus support for Facebook&#8217;s upcoming authentication changes. Read through this rather long announcement at your leisure and enjoy the new version October 1st Koala 1.2 supports all of Facebook&#8217;s new authentication schemes, which [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1046" class="wp-caption alignright" style="width: 117px"><a href="http://blog.twoalex.com/wp-content/uploads/2011/04/koala-party.png"><img class="size-medium wp-image-1046  " title="Koala Party" src="http://blog.twoalex.com/wp-content/uploads/2011/04/koala-party-219x300.png" alt="" width="107" height="147" /></a><p class="wp-caption-text">wooo</p></div>
<p>Hey everyone,</p>
<p>I&#8217;m excited to announce the release of Koala 1.2!  This is a big update with a lot of cool features, plus support for Facebook&#8217;s upcoming authentication changes.</p>
<p>Read through this rather long announcement at your leisure and enjoy the new version <img src='http://blog.twoalex.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2>October 1st</h2>
<p><strong>Koala 1.2 supports all of Facebook&#8217;s new authentication schemes</strong>, which will be introduced on October 1, 2011; the old Javascript library and older authentication schemes will be deprecated at the same time.  If you have the appropriate calls to get_user_info_from_cookies (apps using the Javascript SDK) and/or parse_signed_params (for Canvas and tab apps), your application should work without a hitch.</p>
<p>To test your application ahead of time, upgrade to Koala 1.2 (see below) and configure your application according to Facebook&#8217;s <a href="https://developers.facebook.com/docs/oauth2-https-migration/" target="_blank">OAuth 2.0 and HTTPS Migration</a> guide.</p>
<p><em>Note</em>: in their new secure cookie format, Facebook provides an OAuth code, which Koala automatically exchanges for an access token. Because this involves a call to Facebook&#8217;s servers, you should consider storing the user&#8217;s access token in their session and only calling get_user_info_from_cookies when necessary (access_token not present, you discover it&#8217;s expired, every 30 minutes, etc.). Otherwise, you&#8217;ll be calling out to Facebook each time the user loads a page, slowing down your site.</p>
<h2>Faraday</h2>
<p>With 1.2, Koala uses the Faraday library to make HTTP requests, replacing our homebrew Typhoeus and Net::HTTP adapters. This is a big change, so let&#8217;s go over it in detail.</p>
<p><em>What&#8217;s this about?</em></p>
<p>Faraday is a modular framework, patterned on Rack, which makes it easy to control how your app makes HTTP requests.  By switching to Faraday, we get Koala out of the business of choosing which libraries and features to support, giving you more choices and letting us focus on building the best Facebook library we can.</p>
<p><em>How does this affect me?</em></p>
<p>Good news! Based on the 1.2 betas, this change should be non-breaking for almost everyone. All the old settings are still supported, though you&#8217;ll see deprecation warnings. There&#8217;s now only a single Koala::HTTPService module, which handles all communication.</p>
<p><em>Almost everyone?</em></p>
<p><em></em>Since Faraday settings are global (affecting other gems that use it, like Twitter), Koala no longer uses Typhoeus by default.  To use that or <a href="https://github.com/technoweenie/faraday/tree/master/lib/faraday/adapter" target="_blank">any other supported library</a> instead of Net::HTTP (the default), just set the default Faraday adapter:</p>
<pre class="brush: ruby; title: ; notranslate"># this could go in an initializer
Faraday.default_adapter = :typhoeus</pre>
<p>Also, if you&#8217;re hooking directly into Koala&#8217;s HTTPService framework, you&#8217;ll probably have to make some changes; check out the <a href="https://github.com/arsduo/koala/wiki/Extensions" target="_blank">Extensions wiki page</a> to learn more about the new internals.</p>
<p><em>People like options, right?</em></p>
<p><em></em>Faraday gives you a huge range of options, which you can provide either per-request or globally by setting the new Koala::HTTPService.http_options hash. The format for the hash maps directly to what Faraday expects, so if you haven&#8217;t used Faraday, check out the <a href="https://github.com/arsduo/koala/wiki/HTTP-Services" target="_blank">Koala wiki</a> for some examples.</p>
<p>We still support all the old individual options on Koala.http_service (proxy, timeout, etc.), which read from and write to the new hash.</p>
<p>Even more sweetly, with Faraday you can write your own middleware to really fine-tune how your requests are made.  (To take just one example, I recently wrote a module to log and analyze Facebook requests made through Koala &#8212; easy as pie.)  Koala provides a default middleware stack with everything you need, but you can specify your own using Koala::HTTPService.faraday_middleware.</p>
<p><em>Learn more</em></p>
<p><em></em>For more information and a complete list of how to migrate old settings, check out the <a href="https://github.com/arsduo/koala/wiki/HTTP-Services" target="_blank">HTTPService wiki page</a>. If you have any questions, feel free to write to the <a href="groups.google.com/group/koala-users" target="_blank">Koala user&#8217;s group</a>.</p>
<h2>API</h2>
<p>Koala::Facebook::API class is now the main API class, containing both Graph and REST API methods. Since the GraphAndRestAPI class showed it&#8217;s possible to offer all methods from one object, there&#8217;s no reason to force you to keep track of and instantiate three different classes to use the Facebook API. All three old classes are now aliased to API, and will remain available for the foreseeable future.</p>
<pre class="brush: ruby; title: ; notranslate">api = Koala::Facebook::API.new(my_token)
api.get_object(&quot;me&quot;)
api.fql_query(&quot;select first_name where uid = me()&quot;)
# you can even use the new Timeline API
# see https://developers.facebook.com/docs/beta/opengraph/tutorial/
@graph.put_connections(&quot;me&quot;, &quot;namespace:action&quot;, <img src='http://blog.twoalex.com/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> bject =&gt; object_url)</pre>
<h2>Other changes</h2>
<ul>
<li>Koala is now on Travis, passing all tests under JRuby, Rubinius, and REE, as well as Ruby 1.8.7, 1.9.2, and 1.9.3!<br />
<img class="alignnone" title="Build status" src="https://secure.travis-ci.org/arsduo/koala.png" alt="" width="95" height="13" /></li>
<li>(My favorite update:) The live test suite now runs by default against test users, so you can run it as frequently as you want without having to update facebook_data.yml.</li>
<ul>
<li>To run it against a real user, add your OAuth token/session key/OAuth code to the YAML file.</li>
</ul>
<li>TestUsers#update lets you update the name or password of an existing test user</li>
<li>API.get_page_access_token lets you easily fetch the access token for a page you manage</li>
<li>API.put_picture now accepts URLs to images in addition to files</li>
<li>GraphCollection use is smarter, fixing a problem with the Ads API</li>
</ul>
<p>Check out the <a href="https://github.com/arsduo/koala/blob/v1.2.0/CHANGELOG" target="_blank">changelog</a> for a complete list of changes. The diff since 1.1 is available <a href="https://github.com/arsduo/koala/compare/v1.1.0...v1.2.0" target="_blank">here</a>.</p>
<h2>Thanks to&#8230;</h2>
<p>Thanks to marcgg, johnbhall, and Will S. for their help with bugs and in keeping up with Facebook changes, and to Chris and everyone at Context Optional for their support, help, and feedback.</p>
<h2>Installation</h2>
<p>As always:</p>
<pre class="brush: bash; title: ; notranslate">[sudo|rvm] gem install koala</pre>
<p>Or with Bundler:</p>
<pre class="brush: ruby; title: ; notranslate">gem &quot;koala&quot;, &quot;~&gt; 1.2&quot; </pre>
<h2>What&#8217;s Next</h2>
<p>With 1.2 out we&#8217;ve completed most of the work we had planned for Koala; in the immediate future we&#8217;ll be working on a few remaining features, bug reports, and keeping up with Facebook (did we mention Koala already supports publishing to the Timeline?).</p>
<p>If you have any ideas, issues, or suggestions, feel free to let us know on Github.</p>
<p>Have a great week and happy coding!</p>
<p>Best,</p>
<p>Alex and the Koala team<br />
<a href="http://github.com/arsduo/koala" target="_blank">http://github.com/arsduo/koala</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2011/09/27/koala-1-2-released/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My CSS Wishlist #2</title>
		<link>http://blog.twoalex.com/2011/08/23/my-css-wishlist-2/</link>
		<comments>http://blog.twoalex.com/2011/08/23/my-css-wishlist-2/#comments</comments>
		<pubDate>Tue, 23 Aug 2011 13:29:44 +0000</pubDate>
		<dc:creator>miley</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[My CSS Wishlist]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1309</guid>
		<description><![CDATA[Extreme Specificity So, another project that I am working on has some specificity issues. Take a look at this selector: .col-left div.topic-unit ol li div div.topic-unit-ol-image div The stylesheet uses these types of selectors everywhere. The problem is that if someone comes in and tries to add a &#8220;div&#8221; as a child to the last [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1306" title="css_wishlist_banner" src="http://blog.twoalex.com/wp-content/uploads/2011/08/css_wishlist_banner2.png" alt="" width="417" height="126" /></p>
<p><strong>Extreme Specificity</strong></p>
<p>So, another project that I am working on has some specificity issues. Take a look at this selector:</p>
<p><code>.col-left div.topic-unit ol li div div.topic-unit-ol-image div</code></p>
<p>The stylesheet uses these types of selectors everywhere. The problem is that if someone comes in and tries to add a &#8220;div&#8221; as a child to the last &#8220;div&#8221;, they need to reuse the entire selector and add another bit to the end or there is a chance that their styles will be overriden by one of the previous &#8220;div&#8221; selectors. </p>
<p>Using element level selectors are good for certain situations but mainly for adding just a bit more specificity. A solution would to be to just use the classes from above to specify where you are at.</p>
<p>In my humble opinion, I find this to be a little excessive. This tells me that the page has some pretty specific and complicated CSS going on. More to the point, I feel pages that contain such selectors need some massive refactoring to simplify selectors. </p>
<p><strong>Today&#8217;s wisdom: Keep it simple</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2011/08/23/my-css-wishlist-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My CSS Wishlist #1</title>
		<link>http://blog.twoalex.com/2011/08/22/my-css-wishlist-1/</link>
		<comments>http://blog.twoalex.com/2011/08/22/my-css-wishlist-1/#comments</comments>
		<pubDate>Mon, 22 Aug 2011 09:49:31 +0000</pubDate>
		<dc:creator>miley</dc:creator>
				<category><![CDATA[My CSS Wishlist]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://blog.twoalex.com/?p=1305</guid>
		<description><![CDATA[Font-size and Inheritance I&#8217;ve been working on this project recently and have had some problems with font-size inheriting. After a few minutes of investigation, it turns out that the following rule was being declared (unfortunately in a place where I can not touch it): html, body, div, p, h2, h3, h4, ul, ol, span, a, [...]]]></description>
			<content:encoded><![CDATA[<p><img class="aligncenter size-full wp-image-1306" title="css_wishlist_banner" src="http://blog.twoalex.com/wp-content/uploads/2011/08/css_wishlist_banner2.png" alt="" width="417" height="126" /></p>
<p><strong>Font-size and Inheritance</strong></p>
<p>I&#8217;ve been working on this project recently and have had some problems with font-size inheriting. After a few minutes of investigation, it turns out that the following rule was being declared (unfortunately in a place where I can not touch it):</p>
<p><code>html, body, div, p, h2, h3, h4, ul, ol, span, a, form, img, li { font-size: 12px; }</code></p>
<p>I believe this was a desire for a <a title="CSS Reset" href="http://meyerweb.com/eric/tools/css/reset/">CSS Reset</a>. Unfortunately, this declaration forces all those elements to have a font-size of 12px. It is easily possible to override this style with more specificity. The overall problem, however, is the amount of overrides needed to change an entire area&#8217;s font-size.</p>
<p>For example,<br />
Say you had that CSS and this HTML.<br />
<code><br />
&lt;div id="navigation_area"&gt;<br />
&lt;span class="title"&gt;Nav Title&lt;/span&gt;<br />
&lt;p class="witty_title_description"&gt;I am witty&lt;/p&gt;<br />
&lt;div id="navigation_area"&gt;<br />
&lt;a href="somepage.html" class="navigation_link"&gt;Some Nav Link&lt;/a&gt;<br />
&lt;/div&gt;</code><br />
<span class="Apple-style-span" style="font-family: monospace;">&lt;/div&gt;</span></p>
<p>My desire is to set the entire Navigation Area to have a font-size of 14px. When I apply the following style nothing happens</p>
<p><code>#navigation_area { font-size: 14px; }</code></p>
<p>Because each element has been assigned a value of 12px in that reset style, I would have to reapply a font-size specifically to each of them to override it. Like so:</p>
<p><code> #navigation_area div { font-size: 14px; }<br />
#navigation_area span { font-size: 14px; }<br />
#navigation_area p { font-size: 14px; }<br />
#navigation_area a { font-size: 14px; }<br />
</code></p>
<p>Our <a title="canon" href="http://www.w3.org/TR/CSS1/#font-size">canon </a>decrees, for good reason, that font-size should inherit.</p>
<p><strong>Today&#8217;s wisdom: Keep inheritance functioning in your stylesheet!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.twoalex.com/2011/08/22/my-css-wishlist-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

