<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-539234326216397179</id><updated>2012-02-16T07:40:29.965-08:00</updated><category term='Assistments API'/><category term='Assistments'/><category term='fb_graph'/><category term='LcAlg'/><category term='Ruby on Rails'/><category term='javascript'/><category term='php'/><category term='Facebook'/><title type='text'>voidfraction</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>18</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-581567944803277973</id><published>2011-12-08T12:34:00.000-08:00</published><updated>2011-12-08T12:34:01.764-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Facebook Graph API cookbook page</title><content type='html'>&lt;div style="background-color: transparent;"&gt;&lt;span id="internal-source-marker_0.264045518822968" style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Working with the Graph API&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Overview&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The graph API is a collection of RESTful web services facebook provides. Using the graph api, you can publish, interact with or create almost anything in facebook. Developers make GET, POST and DELETE requests to different parts of https://graph.facebook.com. These requests can require an access token, which grants read/write privileges. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Facebook provides a tool at &lt;/span&gt;&lt;a href="https://developers.facebook.com/tools/explorer"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;https://developers.facebook.com/tools/explorer&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; that lets users generate access tokens for their account with any combination of permissions and make graph api calls. Try using this tool to interact with your facebook accounts. You can read facebook’s graph api documentation here: &lt;/span&gt;&lt;a href="https://developers.facebook.com/docs/reference/api/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;https://developers.facebook.com/docs/reference/api/&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Body&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;GETing &lt;/span&gt;&lt;a href="https://graph.facebook.com/1206427506"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;https://graph.facebook.com/1206427506&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; (my facebook user id) with no access token returns this JSON:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"id": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;a href="https://graph.facebook.com/1206427506"&gt;&lt;span style="background-color: #f2f2f2; color: #3b5998; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;1206427506&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"name": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Paul Kinsky"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"first_name": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Paul"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"last_name": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Kinsky"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"link": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;a href="https://www.facebook.com/people/Paul-Kinsky/1206427506"&gt;&lt;span style="background-color: #f2f2f2; color: #3b5998; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;https://www.facebook.com/people/Paul-Kinsky/1206427506&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"gender": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"male"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"locale": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"en_US"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"type": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"user"&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The same call with an access token granting the user_about_me privilege to my account returns this JSON:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"id": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;a href="https://graph.facebook.com/1206427506"&gt;&lt;span style="background-color: #f2f2f2; color: #3b5998; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;1206427506&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"name": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Paul Kinsky"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"first_name": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Paul"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"last_name": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Kinsky"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"link": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;a href="https://www.facebook.com/profile.php?id=1206427506"&gt;&lt;span style="background-color: #f2f2f2; color: #3b5998; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;https://www.facebook.com/profile.php?id=1206427506&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"hometown": {&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;"id": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;a href="https://graph.facebook.com/113001432047882"&gt;&lt;span style="background-color: #f2f2f2; color: #3b5998; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;113001432047882&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;"name": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Wareham, Massachusetts"&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;},&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"location": {&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;"id": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;a href="https://graph.facebook.com/105596609473837"&gt;&lt;span style="background-color: #f2f2f2; color: #3b5998; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;105596609473837&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;"name": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"Worcester, Massachusetts"&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;},&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"gender": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"male"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"timezone": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;-5&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"locale": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"en_US"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"languages": [&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"id": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;a href="https://graph.facebook.com/113301478683221"&gt;&lt;span style="background-color: #f2f2f2; color: #3b5998; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;113301478683221&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"name": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"American English"&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;],&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"verified": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: blue; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;true&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"updated_time": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"2011-11-02T16:50:18+0000"&lt;/span&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &amp;nbsp;"type": &lt;/span&gt;&lt;span style="background-color: #f2f2f2; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;"user"&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: #f2f2f2; color: #333333; font-family: Verdana; font-size: 11px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;}&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The facebook php sdk handles graph api calls with the Facebook::api() method. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-indent: 36pt;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;$facebook-&amp;gt;api('/me/feed', 'POST',&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array(&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'link' =&amp;gt; 'www.example.com',&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'message' =&amp;gt; 'Posting with the PHP SDK!'&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;));&lt;/span&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Graph API reference:&lt;/span&gt;&lt;br /&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-top: 0pt; text-indent: 36pt;"&gt;&lt;a href="https://developers.facebook.com/docs/reference/api/user/#posts"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;https://developers.facebook.com/docs/reference/api/user/#posts&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Components:&lt;/span&gt;&lt;ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;$facebook&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;a Facebook object initialized with your application’s APP_ID and APP_SECRET&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;'/me/feed'&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;the part of the facebook graph api to contact&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;in this case, the feed of the current user&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;‘POST’&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;the type of request&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;in this case, we’re POSTing to the current user’s feed&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;array(...)&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;parameters specific to the graph api call&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 15px; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;in this case, we’re posting a link to 'www.example.com' and the message that we’re 'Posting with the PHP SDK!' to the currently logged in user’s feed, or news feed.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Here’s an example using this code from facebook’s documentation:&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Example code&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;lt;?&lt;br class="kix-line-break" /&gt; &amp;nbsp;// Remember to copy files from the SDK's src/ directory to a&lt;br class="kix-line-break" /&gt; &amp;nbsp;// directory in your application on the server, such as php-sdk/&lt;br class="kix-line-break" /&gt; &amp;nbsp;require_once('php-sdk/facebook.php');&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;//These parameters can be viewed when you create your test app here: //&lt;/span&gt;&lt;a href="https://developers.facebook.com/apps"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;https://developers.facebook.com/apps&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;$config = array(&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;'appId' =&amp;gt; 'YOUR_APP_ID',&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;'secret' =&amp;gt; 'YOUR_APP_SECRET',&lt;br class="kix-line-break" /&gt; &amp;nbsp;);&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;$facebook = new Facebook($config);&lt;br class="kix-line-break" /&gt; &amp;nbsp;$user_id = $facebook-&amp;gt;getUser();&lt;br class="kix-line-break" /&gt;?&amp;gt;&lt;br class="kix-line-break" /&gt;&amp;lt;html&amp;gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;lt;body&amp;gt;&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;lt;?&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if($user_id) {&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// We have a user ID, so probably a logged in user.&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// If not, we'll get an exception, which we handle below.&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$ret_obj = $facebook-&amp;gt;api('/me/feed', 'POST',&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;array(&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'link' =&amp;gt; 'www.example.com',&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'message' =&amp;gt; 'Posting with the PHP SDK!'&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;));&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo '&amp;lt;pre&amp;gt;Post ID: ' . $ret_obj['id'] . '&amp;lt;/pre&amp;gt;';&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch(FacebookApiException $e) {&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// If the user is logged out, you can have a &lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// user ID even though the access token is invalid.&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// In this case, we'll get an exception, so we'll&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// just ask the user to login again here.&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$login_url = $facebook-&amp;gt;getLoginUrl( array(&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;'scope' =&amp;gt; 'publish_stream'&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;)); &lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo 'Please &amp;lt;a href="' . $login_url . '"&amp;gt;login.&amp;lt;/a&amp;gt;';&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error_log($e-&amp;gt;getType());&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error_log($e-&amp;gt;getMessage());&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Give the user a logout link &lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo '&amp;lt;br /&amp;gt;&amp;lt;a href="' . $facebook-&amp;gt;getLogoutUrl() . '"&amp;gt;logout&amp;lt;/a&amp;gt;';&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// No user, so print a link for the user to login&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// To post to a user's wall, we need publish_stream permission&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// We'll use the current URL as the redirect_uri, so we don't&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// need to specify it here.&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$login_url = $facebook-&amp;gt;getLoginUrl( array( 'scope' =&amp;gt; 'publish_stream' ) );&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo 'Please &amp;lt;a href="' . $login_url . '"&amp;gt;login.&amp;lt;/a&amp;gt;';&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;?&amp;gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;lt;/body&amp;gt; &lt;br class="kix-line-break" /&gt;&amp;lt;/html&amp;gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-581567944803277973?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/581567944803277973/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/12/facebook-graph-api-cookbook-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/581567944803277973'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/581567944803277973'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/12/facebook-graph-api-cookbook-page.html' title='Facebook Graph API cookbook page'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-88535281961210741</id><published>2011-12-08T11:17:00.001-08:00</published><updated>2011-12-08T11:17:02.343-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Facebook Auth cookbook page</title><content type='html'>&lt;div style="background-color: transparent;"&gt;&lt;span id="internal-source-marker_0.813427105313167" style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Facebook Authentication&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Overview&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Most actions on Facebook require some sort of authentication token. For example, sending a request for information about a user without the relevant auth token returns only their public information: name, user id, and a few other fields. However, a request with the proper token can GET several pages of JSON describing a user who’s authorized the requesting app.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Body&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;There are several ways to acquire such a token, but we will be focusing on a simple method using the PHP SDK. Complete documentation can be found &lt;/span&gt;&lt;a href="https://developers.facebook.com/docs/authentication/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;here&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;First, working with the PHP SDK requires initializing an instance of the Facebook object with your App_ID and App_Secret. These values are unique to each app, and can be thought of as you username and password.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The Facebook::getLoginUrl(params) method generates a url that takes the user to a facebook dialouge where the user is asked if they would like to grant your application the permissions specified in params, after which the user is redirected to either a url specified in params or the originating page&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;From the &lt;/span&gt;&lt;a href="https://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;documentation&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;:&lt;/span&gt;&lt;br /&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 36pt; margin-top: 0pt;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;$params = array(&lt;br class="kix-line-break" /&gt; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;scope =&amp;gt; 'read_stream, friends_likes',&lt;br class="kix-line-break" /&gt; &amp;nbsp;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;redirect_uri =&amp;gt; 'https://www.myapp.com/post_login_page'&lt;br class="kix-line-break" /&gt;);&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt;$loginUrl = $facebook-&amp;gt;getLoginUrl($params);&lt;/span&gt;&lt;/div&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;the scope parameter can be any of these &lt;/span&gt;&lt;a href="https://developers.facebook.com/docs/reference/api/permissions/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;permissions&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;. Remember that requesting unnecessary permissions will make users suspicious.&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The auth token obtained is temporary, meaning that this method can only be used when the user is online or shortly after. &lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;There is also a Facebook::getLogoutUrl() method, see the example below for a full example (&lt;/span&gt;&lt;a href="https://developers.facebook.com/docs/reference/php/facebook-api/"&gt;&lt;span style="background-color: transparent; color: #000099; font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"&gt;source&lt;/span&gt;&lt;/a&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; font-weight: bold; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Example Code&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div dir="ltr" style="margin-bottom: 0pt; margin-left: 14pt; margin-right: 14pt; margin-top: 0pt;"&gt;&lt;span style="background-color: white; font-family: Arial; font-size: 15px; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&amp;lt;?&lt;br class="kix-line-break" /&gt; &amp;nbsp;// Remember to copy files from the SDK's src/ directory to a&lt;br class="kix-line-break" /&gt; &amp;nbsp;// directory in your application on the server, such as php-sdk/&lt;br class="kix-line-break" /&gt; &amp;nbsp;require_once('php-sdk/facebook.php');&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;$config = array(&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;'appId' =&amp;gt; 'YOUR_APP_ID',&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;'secret' =&amp;gt; 'YOUR_APP_SECRET',&lt;br class="kix-line-break" /&gt; &amp;nbsp;);&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;$facebook = new Facebook($config);&lt;br class="kix-line-break" /&gt; &amp;nbsp;$user_id = $facebook-&amp;gt;getUser();&lt;br class="kix-line-break" /&gt;?&amp;gt;&lt;br class="kix-line-break" /&gt;&amp;lt;html&amp;gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;lt;body&amp;gt;&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;lt;?&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;if($user_id) {&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// We have a user ID, so probably a logged in user.&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// If not, we'll get an exception, which we handle below.&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try {&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$user_profile = $facebook-&amp;gt;api('/me','GET');&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo "Name: " . $user_profile['name'];&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} catch(FacebookApiException $e) {&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// If the user is logged out, you can have a &lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// user ID even though the access token is invalid.&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// In this case, we'll get an exception, so we'll&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// just ask the user to login again here.&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$login_url = $facebook-&amp;gt;getLoginUrl(); &lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo 'Please &amp;lt;a href="' . $login_url . '"&amp;gt;login.&amp;lt;/a&amp;gt;';&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error_log($e-&amp;gt;getType());&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;error_log($e-&amp;gt;getMessage());&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &amp;nbsp;&amp;nbsp;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;} else {&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// No user, print a link for the user to login&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;$login_url = $facebook-&amp;gt;getLoginUrl();&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo 'Please &amp;lt;a href="' . $login_url . '"&amp;gt;login.&amp;lt;/a&amp;gt;';&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;?&amp;gt;&lt;br class="kix-line-break" /&gt;&lt;br class="kix-line-break" /&gt; &amp;nbsp;&amp;lt;/body&amp;gt;&lt;br class="kix-line-break" /&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-88535281961210741?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/88535281961210741/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/12/facebook-auth-cookbook-page.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/88535281961210741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/88535281961210741'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/12/facebook-auth-cookbook-page.html' title='Facebook Auth cookbook page'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-2581148828547377129</id><published>2011-11-03T14:47:00.000-07:00</published><updated>2011-11-06T10:43:14.937-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><title type='text'>Associating facebook and ASM accounts</title><content type='html'>Here's how it's done:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://developers.facebook.com/docs/plugins/registration/"&gt;http://developers.facebook.com/docs/plugins/registration/&lt;/a&gt;&lt;br /&gt;This pops up an iframe that has in it a form prefilled with your facebook data. It also supports custom fields. You can fill out or change any fields you want to and then submit the form as a signed request to the server.&lt;br /&gt;&lt;br /&gt;If a user only has a Facebook account, they can just register with this to create an associated ASM account.&lt;br /&gt;&lt;br /&gt;When an ASM account is already logged in, we should be able to use the same form with different parameters to associate the two accounts.&lt;br /&gt;&lt;br /&gt;Edit: Code is here: http://pkinsky.com/register.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-2581148828547377129?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/2581148828547377129/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/11/associating-facebook-and-asm-accounts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/2581148828547377129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/2581148828547377129'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/11/associating-facebook-and-asm-accounts.html' title='Associating facebook and ASM accounts'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-7018475262348182107</id><published>2011-11-03T13:24:00.000-07:00</published><updated>2011-11-03T13:24:06.992-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><title type='text'>Share pages with friends</title><content type='html'>&amp;nbsp;Like shares with all, send allows you to choose recipients from among your friends. &lt;br /&gt;&lt;br /&gt;http://www.pkinsky.com/askhelp.html&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-7018475262348182107?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/7018475262348182107/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/11/share-pages-with-friends.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/7018475262348182107'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/7018475262348182107'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/11/share-pages-with-friends.html' title='Share pages with friends'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-8475847782833860591</id><published>2011-10-30T16:22:00.000-07:00</published><updated>2011-10-31T07:41:31.561-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments API'/><title type='text'>API progress</title><content type='html'>As of now, I've made a test api call that gets a database object, saves data to it, and then reads other data from it. I've also managed to create 'watcher' database objects via API and retrieve data from them (a callback url) elsewhere.&lt;br /&gt;&lt;br /&gt;The next step is to send a POST request to that callback_url when the relevant event happens. This can be expanded to cover assignments being added, achievements, etc.&lt;br /&gt;&lt;br /&gt;EDIT: and then I uploaded the code - my api call is test_call in lib/gwt/ajax.rb&lt;br /&gt;&lt;br /&gt;EDIT2: now featuring working post/response of JSON data to and from an external php script! Proof of concept finished, time to start on the actual product.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-8475847782833860591?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/8475847782833860591/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/10/api-progress.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/8475847782833860591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/8475847782833860591'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/10/api-progress.html' title='API progress'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-8323461390082595697</id><published>2011-10-26T16:52:00.000-07:00</published><updated>2011-10-26T16:52:15.827-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments API'/><title type='text'>Assistments API finally working</title><content type='html'>I just got my hello world assistments api call working. Awesome.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-8323461390082595697?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/8323461390082595697/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/10/assistments-api-finally-working.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/8323461390082595697'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/8323461390082595697'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/10/assistments-api-finally-working.html' title='Assistments API finally working'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-3548835776141053566</id><published>2011-10-23T16:42:00.000-07:00</published><updated>2011-10-23T16:48:16.453-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LcAlg'/><title type='text'>Source Code and Documentation</title><content type='html'>&lt;div style="background-color: black; color: white;"&gt;&lt;span id="internal-source-marker_0.49535691978396246" style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;First,  I want to say that I’ve open-sourced LcAlg, my program for generating  laser-cut polygonal sculptures from 3d models. There’s a link a little  bit farther down on the page if that’s what you came here for.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Second,  the majority of this post will be about an interesting method of  connecting coroplast sheets using acrylic connectors that I’ve  developed.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;"&gt;Source Code&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; vertical-align: baseline;"&gt;svn co https://lcalg.svn.sourceforge.net/svnroot/lcalg lcalg &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: underline; vertical-align: baseline;"&gt;https://sourceforge.net/projects/lcalg/files/&lt;/span&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol style="background-color: black; color: white;"&gt;&lt;li style="font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Check out the code. Download either of the two obj files and put them in the input folder. &lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol start="2" style="background-color: black; color: white;"&gt;&lt;li style="font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Adjust  constants in util.constants.py to change most values in the program.  Currently it’s set to use 2.5mm acrylic and ~3.5mm coroplast.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol start="3" style="background-color: black; color: white;"&gt;&lt;li style="font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Run LcAlg by running LcAlg.py. You’ll need python 2.7.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;ol start="4" style="background-color: black; color: white;"&gt;&lt;li style="font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: decimal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Watch for updates. This is an early beta that I’ll be updating regularly.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;"&gt;Connectors&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Coroplast  is essentially plastic cardboard. It is lightweight and flexible, and  bends rather than breaking. I now use it for the triangles, or faces, in  my models.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;I  used to use acrylic plates for both the faces and the connectors. It  was shatter-prone, heavy and expensive. I secured the faces to the  connectors with first solvent glue and then cotter pins. This worked,  but was labor intensive and in some cases fragile.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;The  solution is to use acrylic connectors and coroplast sheets. This  leverages the strength of both materials. Because the coroplast is  flexible, I use retaining tabs - the coroplast deforms around the rigid  acrylic tabs and is locked into place&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;This  forms a very strong connection. I have to pull very hard to force the  pieces apart. However, I can easily remove a connector by slipping the  retaining tabs over the coroplast retainer. Think zip ties - all it  takes is a small piece of metal to jimmy one open but brute force will  get you nowhere.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="395px;" src="https://lh6.googleusercontent.com/Ouk4qmCMtygV8SR1Uv3qma8bUWuWO2lV_ELrbyCd3fNLeD5bpkVRDcC9eb5ksfJEFMoBp5ggXaEoV91gVTBObZpCQ3lxTLIfO9giTBy4VVqNSSNX2yU" width="459px;" /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;(By vector-cut I mean vector-etched)&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Unfortunately,  sharp angles lead to an issue that can be seen in this diagram: if  angle A increases much more, distance B will decrease until there is not  enough material there to hold the connector together&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Large  angle A’s can also lead to intersecting faces: In the diagram below,  imagine if angle A were to increase. The two coroplast panels would  quickly be intersecting. LcAlg solves this issue by calculating an  offset and then removing that much material from the relevant edge.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: bold; text-decoration: none; vertical-align: baseline;"&gt;Faces&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="293px;" src="https://lh3.googleusercontent.com/JYLWnlIZqVxIDKtqGTy20i3maNlWzJkcUab8QgRcIjQN5s6lzUes-n-3TfD_TLvSgIrloizLnVuMfcvYmCtbytZr2zagtB1Ia5UAP3UYS9FVygp-fr0" width="409px;" /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;A face is a flat coroplast triangle with 3 pairs of two mounting points for the acrylic connectors.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: black; color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;They’re cut out as below, to save laser time and material. &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-3548835776141053566?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/3548835776141053566/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/10/source-code-and-documentation.html#comment-form' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/3548835776141053566'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/3548835776141053566'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/10/source-code-and-documentation.html' title='Source Code and Documentation'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-3482311976115395084</id><published>2011-10-23T15:31:00.000-07:00</published><updated>2011-10-23T15:31:51.028-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='LcAlg'/><title type='text'>LcAlg</title><content type='html'>I've made an algorithm that transforms a 3d model (a mesh of triangles) into the autoCAD files neccesary to laser-cut a set of triangles and angled connectors that, when assembled, form a real life version of that 3d model.&lt;br /&gt;&lt;br /&gt;You can see an example &lt;a href="http://blog.makezine.com/archive/2011/10/polygonal-rhino-head.html"&gt;here&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This is an intro post. In later posts I'll go over how it works and how to use it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Source code can be found here: https://sourceforge.net/projects/lcalg/&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-3482311976115395084?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/3482311976115395084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/10/lcalg.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/3482311976115395084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/3482311976115395084'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/10/lcalg.html' title='LcAlg'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-4511815072201474609</id><published>2011-10-05T20:03:00.000-07:00</published><updated>2011-10-05T20:03:14.619-07:00</updated><title type='text'>Assistments API</title><content type='html'>We've decided that the best way to go forwards is to work with Assistments as a service. We'll be extending the existing API to do what we need, instead of trying to add new functionality directly to Assistments.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Fortunately, Assistments already has at least the beginnings of an API.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-4511815072201474609?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/4511815072201474609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/10/assistments-api.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/4511815072201474609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/4511815072201474609'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/10/assistments-api.html' title='Assistments API'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-2752176101252003959</id><published>2011-10-03T06:22:00.000-07:00</published><updated>2011-10-03T06:22:52.408-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>PHP and JS Guidlines for FB: Acronyms!</title><content type='html'>I've put together a guide on the php and javascript sdks for facebook. It mostly consists of links to facebook's own documentation, which is amazing. This needs to be cleaned up, but these links show examples on pretty much every part of facebook's api.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;php: &lt;br /&gt;login/out and requesting permissions, posting to a user’s wall, getting a user’s information all with graph api, newest api &lt;a class="external" href="http://developers.facebook.com/docs/reference/php/facebook-api/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/php/facebook-api/&lt;/a&gt; &lt;br /&gt;methods for login/logout &lt;a class="external" href="http://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/php/facebook-getLoginUrl/&lt;/a&gt; &lt;a class="external" href="http://developers.facebook.com/docs/reference/php/facebook-getLogoutUrl/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/php/facebook-getLogoutUrl/&lt;/a&gt; &lt;br /&gt;what to show depends on result of &lt;a class="external" href="http://developers.facebook.com/docs/reference/php/facebook-getUser/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/php/facebook-getUser/&lt;/a&gt; &lt;br /&gt;You should also authorize your app using the values from you facebook developer app page &lt;a class="external" href="http://developers.facebook.com/docs/reference/php/facebook-setAppId/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/php/facebook-setAppId/&lt;/a&gt; &lt;a class="external" href="http://developers.facebook.com/docs/reference/php/facebook-setAppSecret/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/php/facebook-setAppSecret/&lt;/a&gt; &lt;br /&gt;i dont see it in the docs explicitly but in the examples this method is used to init facebook object: &lt;br /&gt;$config = array(    'appId' =&amp;gt; 'YOUR_APP_ID',    'secret' =&amp;gt; 'YOUR_APP_SECRET',  ); &lt;br /&gt;$facebook = new Facebook($config); &lt;br /&gt;javascript &lt;br /&gt;info, how to load sdk &lt;a class="external" href="http://developers.facebook.com/docs/reference/javascript/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/javascript/&lt;/a&gt; &lt;br /&gt;FB.login() -- login and/or request extended permissions     FB.logout() -- logout (only if the user is connected with your  application)     FB.getLoginStatus() -- get current login status from facebook.com     FB.getSession() -- synchronous accessor for the current session.  Note that in OAuth 2.0, this function will no longer function and you  should use FB.getAuthResponse().     FB.getAuthResponse() -- accessor for the current authorization  response record, which for connected users includes an access token, a  signed request, and a user ID. &lt;br /&gt;api calls: &lt;a class="external" href="http://developers.facebook.com/docs/reference/javascript/FB.api/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/javascript/FB.api/&lt;/a&gt; &lt;br /&gt;can trigger dialogs with ui methods &lt;a class="external" href="http://developers.facebook.com/docs/reference/javascript/FB.ui/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/javascript/FB.ui/&lt;/a&gt; &lt;br /&gt;lots of useful methods - can control position, size, etc for canvas page, login/out, etc &lt;br /&gt;you can make calls in facebook query language to get info &lt;a class="external" href="http://developers.facebook.com/docs/reference/fql/" target="wikiext"&gt;http://developers.facebook.com/docs/reference/fql/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-2752176101252003959?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/2752176101252003959/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/10/php-and-js-guidlines-for-fb-acronyms.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/2752176101252003959'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/2752176101252003959'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/10/php-and-js-guidlines-for-fb-acronyms.html' title='PHP and JS Guidlines for FB: Acronyms!'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-4641768397150598849</id><published>2011-09-28T20:20:00.000-07:00</published><updated>2011-09-28T20:20:10.647-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='fb_graph'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on Rails'/><title type='text'>AppRequest functionality added to fb_graph gem</title><content type='html'>The developer of the fb_graph facebook graph api gem helped me out by adding the ability to post app-generated requests! Thanks, Nov Matake!&lt;br /&gt;&lt;br /&gt;(https://github.com/nov/fb_graph/wiki/App-Request)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-4641768397150598849?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/4641768397150598849/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/09/apprequest-functionality-added-to.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/4641768397150598849'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/4641768397150598849'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/09/apprequest-functionality-added-to.html' title='AppRequest functionality added to fb_graph gem'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-2584806688258307839</id><published>2011-09-28T04:14:00.000-07:00</published><updated>2011-09-28T04:15:07.206-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><title type='text'>Everything I need to do in Ruby, but in PHP</title><content type='html'>I've had 9/10ths of this working for about a week, I've just been stuck getting it into ruby. I'm just going to post some code for sending notifications, getting a user's notifications, and deleting them. It also handles login. &lt;br /&gt;&lt;br /&gt;&amp;lt;?php&lt;br /&gt;&lt;br /&gt;require 'facebook-php-sdk/src/facebook.php';&lt;br /&gt;&lt;br /&gt;// Create our Application instance (replace this with your appId and secret).&lt;br /&gt;$facebook = new Facebook(array(&lt;br /&gt;&amp;nbsp; 'appId'&amp;nbsp; =&amp;gt; '168953989848835',&lt;br /&gt;&amp;nbsp; 'secret' =&amp;gt; '60359e93359d47a9d349c3dd263a479a',&lt;br /&gt;));&lt;br /&gt;&lt;br /&gt;// Get User ID&lt;br /&gt;$user = $facebook-&amp;gt;getUser();&lt;br /&gt;&lt;br /&gt;// We may or may not have this data based on whether the user is logged in.&lt;br /&gt;//&lt;br /&gt;// If we have a $user id here, it means we know the user is logged into&lt;br /&gt;// Facebook, but we don't know if the access token is valid. An access&lt;br /&gt;// token is invalid if the user logged out of Facebook.&lt;br /&gt;&lt;br /&gt;if ($user) {&lt;br /&gt;&amp;nbsp; try {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Proceed knowing you have a logged in user who's authenticated.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $user_profile = $facebook-&amp;gt;api('/me');&lt;br /&gt;&amp;nbsp; } catch (FacebookApiException $e) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; error_log($e);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $user = null;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Login or logout url will be needed depending on current user state.&lt;br /&gt;if ($user) {&lt;br /&gt;&amp;nbsp; $logoutUrl = $facebook-&amp;gt;getLogoutUrl();&lt;br /&gt;} else {&lt;br /&gt;&amp;nbsp; $loginUrl = $facebook-&amp;gt;getLoginUrl();&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;?&amp;gt;&lt;br /&gt;&amp;lt;!doctype html&amp;gt;&lt;br /&gt;&amp;lt;html xmlns:fb="http://www.facebook.com/2008/fbml"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;head&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;title&amp;gt;php-sdk&amp;lt;/title&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;style&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; body {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; font-family: 'Lucida Grande', Verdana, Arial, sans-serif;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h1 a {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text-decoration: none;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; color: #3b5998;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; h1 a:hover {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; text-decoration: underline;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/style&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;/head&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h1&amp;gt;php-sdk&amp;lt;/h1&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;?php if ($user): ?&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;a href="&amp;lt;?php echo $logoutUrl; ?&amp;gt;"&amp;gt;Logout&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;?php else: ?&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Login using OAuth 2.0 handled by the PHP SDK:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;a href="&amp;lt;?php echo $loginUrl; ?&amp;gt;"&amp;gt;Login with Facebook&amp;lt;/a&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/div&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;?php endif ?&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;h3&amp;gt;PHP Session&amp;lt;/h3&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;pre&amp;gt;&amp;lt;?php print_r($_SESSION); ?&amp;gt;&amp;lt;/pre&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;?php &lt;br /&gt;&lt;br /&gt;&amp;nbsp; $app_id = '168953989848835';&lt;br /&gt;&amp;nbsp; $app_secret = '60359e93359d47a9d349c3dd263a479a';&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $token_url = "https://graph.facebook.com/oauth/access_token?" .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "client_id=" . $app_id .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;client_secret=" . $app_secret .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;grant_type=client_credentials";&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $app_access_token = file_get_contents($token_url);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $user_id = substr($user.id, 0, -2);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $apprequest_url ="https://graph.facebook.com/" .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $user_id .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "/apprequests?message='INSERT_UT8_STRING_MSG'" . &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "&amp;amp;data='INSERT_STRING_DATA'&amp;amp;"&amp;nbsp; .&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $app_access_token . "&amp;amp;method=post";&lt;br /&gt;&lt;br /&gt;&amp;nbsp; $result = file_get_contents($apprequest_url);&lt;br /&gt;&amp;nbsp; #echo $user_id;&lt;br /&gt;&amp;nbsp; echo "App Request sent?";&lt;br /&gt;&amp;nbsp; echo "request id = " . $result;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; #$pieces = explode("=", $app_access_token);&lt;br /&gt;&amp;nbsp; #echo $pieces[1];&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Get all app requests for user&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; $request_url ="https://graph.facebook.com/" .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $user_id . "/apprequests?" .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $app_access_token;&lt;br /&gt;&amp;nbsp; $requests = file_get_contents($request_url);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; //Print all outstanding app requests&lt;br /&gt;&amp;nbsp; echo '&amp;lt;pre&amp;gt;';&lt;br /&gt;&amp;nbsp; print_r($requests);&lt;br /&gt;&amp;nbsp; echo '&amp;lt;/pre&amp;gt;';&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&amp;nbsp; //Process and delete app requests&lt;br /&gt;&amp;nbsp; $data = json_decode($requests);&lt;br /&gt;&amp;nbsp; foreach($data-&amp;gt;data as $item) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $id = $item-&amp;gt;id;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $delete_url = "https://graph.facebook.com/" .&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; $id . "?" . $app_access_token . "&amp;amp;method=delete";&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; $result = file_get_contents($delete_url);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; echo("Requests deleted is " . $result. ", message = " . $item-&amp;gt;message);&lt;br /&gt;&amp;nbsp; }&amp;nbsp; &lt;br /&gt;&amp;nbsp; &lt;br /&gt;?&amp;gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-2584806688258307839?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/2584806688258307839/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/09/everything-i-need-to-do-in-php.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/2584806688258307839'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/2584806688258307839'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/09/everything-i-need-to-do-in-php.html' title='Everything I need to do in Ruby, but in PHP'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-6933897353864183105</id><published>2011-09-27T19:06:00.000-07:00</published><updated>2011-09-27T19:06:35.917-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on Rails'/><title type='text'>Welp</title><content type='html'>I was talking with the author of the fbgraph gem about how to do something, at least I ended up getting him to add it to his TODO list:&lt;br /&gt;&lt;br /&gt;https://github.com/nov/fb_graph/issues/126&lt;br /&gt;&lt;br /&gt;Go go gadget unsupported language!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-6933897353864183105?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/6933897353864183105/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/09/welp.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/6933897353864183105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/6933897353864183105'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/09/welp.html' title='Welp'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-6823879438242756816</id><published>2011-09-27T12:34:00.001-07:00</published><updated>2011-09-27T12:35:34.667-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><title type='text'>Project Outline</title><content type='html'>&lt;div style="color: white;"&gt;&lt;span id="internal-source-marker_0.39923615846844474" style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;In  the past few years there has been an industry-wide trend towards  Facebook integration. It can even be seen on WPI’s JobFinder website.  Essentially, the goal is to let users of your website engage with it  through facebook. Apps can deliver alerts and news stories to users.  Facebook also provides access to many other core features via API. Some  examples are sending requests, awarding achievements, and creating  events. It also gives apps their own page on Facebook’s site, where they  can fill a ‘canvas’ which covers most of the page with anything they  want.&lt;/span&gt;&lt;/div&gt;&lt;div style="color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;We plan to build a facebook application that will accomplish these functions:&lt;/span&gt;&lt;/div&gt;&lt;ol style="color: white;"&gt;&lt;ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;handle authentication: &lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: lower-roman; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;Our  application will allow users to associate their Facebook account with  their Assistments account using the OAUTH 2.0 protocol. &lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: lower-roman; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;It will also request any necessary permissions from the user.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;manage notifications&lt;/span&gt;&lt;/li&gt;&lt;ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: lower-roman; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;When an event, such as a problem set being assigned, occurs, the application will generate a notification of some type.&lt;/span&gt;&lt;/li&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: lower-roman; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;When a user arrives at our app via a notification, we can redirect the user to the relevant page.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: lower-alpha; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;It  will also provide the infrastructure necessary to integrate Assistments  further with facebook. For example, awarding achievements to users will  be as simple as a single post request.&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div style="color: white;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: white;"&gt;&lt;span style="background-color: transparent; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;This  will be beneficial to students using Assistments because many younger  children use facebook. With our application, assistments will be  immediately visible to students in a place they already go. We hope that  if we increase the convenience of using assistments, students will be  more likely to do their assignments.&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-6823879438242756816?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/6823879438242756816/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/09/project-outline.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/6823879438242756816'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/6823879438242756816'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/09/project-outline.html' title='Project Outline'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-8695736772568651768</id><published>2011-09-26T09:28:00.000-07:00</published><updated>2011-09-26T09:28:10.929-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby on Rails'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><title type='text'>Issues with ROR and FB</title><content type='html'>I've been having a lot of trouble getting rails to work with facebook. They only support PHP and javascript SDKs, so I'm going to try using a ruby gem I found that integrates javascript and rails. &lt;br /&gt;&lt;br /&gt;&lt;a href="https://github.com/cowboyd/therubyracer"&gt;https://github.com/cowboyd/therubyracer&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-8695736772568651768?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/8695736772568651768/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/09/issues-with-ror-and-fb.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/8695736772568651768'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/8695736772568651768'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/09/issues-with-ror-and-fb.html' title='Issues with ROR and FB'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-1212562517283056545</id><published>2011-09-18T12:26:00.000-07:00</published><updated>2011-09-18T12:26:26.074-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><title type='text'>Progress with Facebook API</title><content type='html'>I've been tinkering with the facebook API. So far, I have working versions of: &lt;br /&gt;&lt;ol&gt;&lt;li&gt;Users can&amp;nbsp;login and logout through my page.&lt;/li&gt;&lt;li&gt;Send &lt;a href="http://developers.facebook.com/docs/channels/#requests"&gt;requests&lt;/a&gt; from my app to registered users. Once issued they can be:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;updated with new info ("DUE IN 2 HOURS!" or "3 out of 5 questions completed")&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;read ("A good common practice for Apps on Facebook.com is to detect if a user has any requests pending when your application loads and then prompt the user to complete the actions associated with the requests before continuing.")&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;deleted (clear request when associated problem set is completed)&lt;/li&gt;&lt;/ol&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Register &lt;a href="https://developers.facebook.com/docs/achievements/"&gt;achievements&lt;/a&gt; that can then be awarded to users. They can then be:&lt;/li&gt;&lt;ol&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;read&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;deleted&lt;/li&gt;&lt;/ol&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Award users &lt;a href="https://developers.facebook.com/docs/score/"&gt;scores&lt;/a&gt; for the app. They can then be:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;read&lt;/li&gt;&lt;li style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;deleted&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;This is all PHP implementations of html POST requests. It will be easy to transfer to ROR once we get our version of ASSISTments running&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Also, Screenshots!&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Achievements and scores. It also autogenerates notifications about how you have x of y achievements for an app, or the highest score.&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&lt;a href="http://2.bp.blogspot.com/-DYy4yHQETfs/TnZARpNtovI/AAAAAAAAAAs/w8-T_o3WcVw/s1600/achievement+screenshot.png" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="193" rba="true" src="http://2.bp.blogspot.com/-DYy4yHQETfs/TnZARpNtovI/AAAAAAAAAAs/w8-T_o3WcVw/s200/achievement+screenshot.png" width="200" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;&amp;nbsp;&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;Requests from an app to a user: These show up in a few different places, including the main page.&lt;/div&gt;&lt;div style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none;"&gt;(I left the default text in)&lt;/div&gt;&lt;div class="separator" style="border-bottom: medium none; border-left: medium none; border-right: medium none; border-top: medium none; clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-JaJnFTc6G2M/TnZAeAEXI1I/AAAAAAAAAAw/hdR6OX5pYHA/s1600/request+screenshot.png" imageanchor="1" style="clear: left; cssfloat: left; float: left; margin-bottom: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" rba="true" src="http://4.bp.blogspot.com/-JaJnFTc6G2M/TnZAeAEXI1I/AAAAAAAAAAw/hdR6OX5pYHA/s200/request+screenshot.png" width="168" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-1212562517283056545?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/1212562517283056545/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/09/progress-with-facebook-api.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/1212562517283056545'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/1212562517283056545'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/09/progress-with-facebook-api.html' title='Progress with Facebook API'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-DYy4yHQETfs/TnZARpNtovI/AAAAAAAAAAs/w8-T_o3WcVw/s72-c/achievement+screenshot.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-6163237848186694038</id><published>2011-09-13T14:57:00.000-07:00</published><updated>2011-09-13T14:57:35.498-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><title type='text'>Assisments Facebook App Users</title><content type='html'>The potential users for our&amp;nbsp;Facebook&amp;nbsp;app fall into three groups:.&amp;nbsp;Here's some examples of how each group could use our app.&lt;br /&gt;&lt;ol&gt;&lt;li&gt;students:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;The student logs onto facebook and sees a private&amp;nbsp;notification through one or more of&amp;nbsp;Facebook's&amp;nbsp;notification systems. Notification examples:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;New assignment&lt;/li&gt;&lt;li&gt;Assignment grade&amp;nbsp;available&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;The student logs onto&amp;nbsp;Facebook&amp;nbsp;and completes a problem set through the Assistments app&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;teachers&lt;/li&gt;&lt;ol&gt;&lt;li&gt;unknown&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;parents&lt;/li&gt;&lt;ol&gt;&lt;li&gt;get notifications about their students grades and assignments&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt;We recently got the results from a survey given to the parents of children using Assistments. We haven't been able to go through all of them, but there is some interest in getting notifications through Facebook.&lt;br /&gt;&lt;ol&gt;&lt;ol&gt;&lt;ol&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;/ol&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-6163237848186694038?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/6163237848186694038/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/09/assisments-facebook-app-users.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/6163237848186694038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/6163237848186694038'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/09/assisments-facebook-app-users.html' title='Assisments Facebook App Users'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry><entry><id>tag:blogger.com,1999:blog-539234326216397179.post-1413799895819731633</id><published>2011-09-13T13:16:00.000-07:00</published><updated>2011-09-13T13:16:48.076-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Assistments'/><title type='text'>Assistments ISP First Post</title><content type='html'>Hi! My name is Paul Kinsky. I'm a Computer Science major at Worcester Polytechnic Institute, WPI.&lt;br /&gt;&lt;br /&gt;I'm working on a project for several professors at integrate a to extend a piece of educational software called Assistments with social media. Right now we're working on a facebook app that would allow students to complete problem sets within facebook.&lt;br /&gt;&lt;br /&gt;We've been granted access to the source code today, by the end of the week we hope to have a working prototype. I'll be posting details as we go.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/539234326216397179-1413799895819731633?l=voidfraction.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://voidfraction.blogspot.com/feeds/1413799895819731633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://voidfraction.blogspot.com/2011/09/assistments-isp-first-post.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/1413799895819731633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/539234326216397179/posts/default/1413799895819731633'/><link rel='alternate' type='text/html' href='http://voidfraction.blogspot.com/2011/09/assistments-isp-first-post.html' title='Assistments ISP First Post'/><author><name>VoidFraction</name><uri>http://www.blogger.com/profile/13144143241277271386</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></entry></feed>
