{"id":1454,"date":"2011-05-16T06:58:46","date_gmt":"2011-05-16T14:58:46","guid":{"rendered":"http:\/\/owenmundy.com\/blog\/?p=1454"},"modified":"2011-12-21T14:16:57","modified_gmt":"2011-12-21T22:16:57","slug":"freedom-for-our-files-code-and-slides","status":"publish","type":"post","link":"https:\/\/owenmundy.com\/blog\/2011\/05\/freedom-for-our-files-code-and-slides\/","title":{"rendered":"Freedom for Our Files: Code and Slides"},"content":{"rendered":"<p><em>A two-day workshop, with both technical hands-on and idea-driven components. Learn to scrape data and reuse public and private information by writing custom code and using the Facebook API. Additionally, we\u2019ll converse and conceptualize ideas to reclaim our data literally and also imagine what is possible with our data once it is ours!<\/em><\/p>\n<p>Here are the slides and some of the code samples from the Freedom for Our Files (FFOF) workshop I just did in Linz at Art Meets Radical Openness (LiWoLi 2011). <\/p>\n<p><iframe src=\"http:\/\/docs.google.com\/gview?url=http:\/\/owenmundy.com\/docs\/workshops\/ffof\/ffof.pdf&#038;embedded=true\" style=\"width:600px; height:500px;\" frameborder=\"0\"><\/iframe><\/p>\n<p>The first one is a basic scraping demo that uses &#8220;find-replace&#8221; parsing to change specific words (I&#8217;m including examples below the code)<br \/>\n<script src=\"https:\/\/gist.github.com\/974261.js\"><\/script><noscript><pre><code class=\"language-php php\">&lt;?php\n\n\/*\tBasic scraping demo with &quot;find-replace&quot; parsing\n *\tOwen Mundy Copyright 2011 GNU\/GPL *\/\n\n$url = &quot;http:\/\/www.bbc.co.uk\/news\/&quot;;\t\/\/ 0. url to start with\n\n$contents = file_get_contents($url);\t\/\/ 1. get contents of page in a string\n\n\t\t\t\t\t\/\/ 2. search and replace contents\n$contents = str_replace(\t\t\/\/ str_replace(search, replace, string)\n\t\t\t&quot;News&quot;,\t\t\t\t\t\n\t\t\t&quot;&lt;b style=&#039;background:yellow; color:#000; padding:2px&#039;&gt;LIES&lt;\/b&gt;&quot;,\n\t\t\t$contents);\n\nprint $contents;\t\t\t\/\/ 3. print result\n\n?&gt;<\/code><\/pre><\/noscript><\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_find-replace1.png\"><img decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_find-replace1-1024x786.png\" alt=\"\" width=\"600\"  \/><\/a><\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_find-replace.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_find-replace-600x373.png\" alt=\"\" title=\"scraper_bbc_find-replace\" width=\"600\" height=\"373\" class=\"alignnone size-medium wp-image-1465\" srcset=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_find-replace-600x373.png 600w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_find-replace.png 648w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Basic scraping demo with &#8220;foreach&#8221; parsing<br \/>\n<script src=\"https:\/\/gist.github.com\/974299.js\"><\/script><noscript><pre><code class=\"language-php php\">&lt;?php\n\n\/*\tBasic scraping demo with &quot;foreach&quot; parsing\n *\tOwen Mundy Copyright 2011 GNU\/GPL *\/\n \n$url = &quot;http:\/\/www.bbc.co.uk\/news\/&quot;;\t\/\/ 0. url to start with\n\n$lines = file($url);\t\t\t\/\/ 1. get contents of url in an array\n\nforeach ($lines as $line_num =&gt; $line) \t\/\/ 2. loop through each line in page\n{\t\t\n\t\t\t\t\t\/\/ 3. if opening string is found\n\tif(strpos($line, &#039;&lt;h2 class=&quot;top-story-header &quot;&gt;&#039;)) \t\n\t{\n\t\t$get_content = true;\t\/\/ 4. we can start getting content\n\t}\n\t\n\tif($get_content == true)\n\t{\n\t\t$data .= $line . &quot;\\n&quot;;\t\/\/ 5. then store content until closing string appears\n\t}\n\n\tif(strpos($line, &quot;&lt;\/h2&gt;&quot;)) \t\/\/ 6. if closing HTML element found\n\t{\n\t\t$get_content = false;\t\/\/ 7. stop getting content\n\t}\n}\n\nprint $data;\t\t\t\t\/\/ 8. print result\n\n?&gt;<\/code><\/pre><\/noscript><\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_foreach2.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_foreach2-520x400.png\" alt=\"\" title=\"scraper_bbc_foreach2\" width=\"520\" height=\"400\" class=\"alignnone size-medium wp-image-1468\" srcset=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_foreach2-520x400.png 520w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_foreach2-1024x786.png 1024w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_foreach2.png 1104w\" sizes=\"auto, (max-width: 520px) 100vw, 520px\" \/><\/a><\/p>\n<p>Basic scraping demo with &#8220;regex&#8221; parsing<br \/>\n<script src=\"https:\/\/gist.github.com\/974304.js\"><\/script><noscript><pre><code class=\"language-php php\">&lt;?php\n\n\/*\tBasic scraping demo with &quot;regex&quot; parsing\n *\tOwen Mundy Copyright 2011 GNU\/GPL *\/\n \n$url = &quot;http:\/\/www.bbc.co.uk\/news\/&quot;;\t\t\/\/ 0. url to start with\n\n$contents = file_get_contents($url);\t\t\/\/ 1. get contents of url in a string\n\t\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\/\/ 2. match title\npreg_match(&#039;\/&lt;title&gt;(.*)&lt;\\\/title&gt;\/i&#039;, $contents, $title);\n\nprint $title[1];\t\t\t\t\/\/ 3. print result\n\n?&gt;<\/code><\/pre><\/noscript><\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_regex_title.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_regex_title.png\" alt=\"\" title=\"scraper_bbc_regex_title\" width=\"245\" height=\"201\" class=\"alignnone size-full wp-image-1470\" \/><\/a><\/p>\n<p>Basic scraping demo with &#8220;foreach&#8221; and &#8220;regex&#8221; parsing<br \/>\n<script src=\"https:\/\/gist.github.com\/974315.js\"><\/script><noscript><pre><code class=\"language-php php\">&lt;?php\n\n\/*\tBasic scraping demo with &quot;foreach&quot; and &quot;regex&quot; parsing\n *\tOwen Mundy Copyright 2011 GNU\/GPL *\/\n\n\/\/ url to start\n$url = &quot;http:\/\/www.bbc.co.uk\/news\/&quot;;\n\n\/\/ get contents of url in an array\n$lines = file($url);\n\n\/\/ look for the string\nforeach ($lines as $line_num =&gt; $line) \n{\t\n\t\/\/ find opening string\n\tif(strpos($line, &#039;&lt;h2 class=&quot;top-story-header &quot;&gt;&#039;)) \n\t{\n\t\t$get_content = true;\n\t}\n\t\n\t\/\/ if opening string is found \n\t\/\/ then print content until closing string appears\n\tif($get_content == true) \n\t{\n\t\t$data .= $line . &quot;\\n&quot;;\n\t}\n\n\t\/\/ closing string\n\tif(strpos($line, &quot;&lt;\/h2&gt;&quot;)) \n\t{\n\t\t$get_content = false;\n\t}\n}\n\n\/\/ use regular expressions to extract only what we need...\n\n\/\/ png, jpg, or gif inside a src=&quot;...&quot; or src=&#039;...&#039; \n$pattern = &quot;\/src=[\\&quot;&#039;]?([^\\&quot;&#039;]?.*(png|jpg|gif))[\\&quot;&#039;]?\/i&quot;;\npreg_match_all($pattern, $data, $images);\n\n\/\/ text from link\n$pattern = &quot;\/(&lt;a.*&gt;)(\\w.*)(&lt;.*&gt;)\/ismU&quot;;\npreg_match_all($pattern, $data, $text);\n\n\/\/ link\n$pattern = &quot;\/(href=[\\&quot;&#039;])(.*?)([\\&quot;&#039;])\/i&quot;;\npreg_match_all($pattern, $data, $link);\n\n\/* \n\/\/ test if you like\nprint &quot;&lt;pre&gt;&quot;;\nprint_r($images);\nprint_r($text);\nprint_r($link);\nprint &quot;&lt;\/pre&gt;&quot;;\n*\/\n\n?&gt;\n\n&lt;html&gt;\n&lt;head&gt;\n&lt;style&gt; \nbody { margin:0; } \n.textblock { position:absolute; top:600px; left:0px; }\nspan { font:5.0em\/1.0em Arial, Helvetica, sans-serif; line-height:normal; \nbackground:url(trans.png); color:#fff; font-weight:bold; padding:5px } \na { text-decoration:none; color:#900 }\n&lt;\/style&gt;\n&lt;\/head&gt;\n&lt;body&gt;\n&lt;img src=&quot;&lt;?php print $images[1][0] ?&gt;&quot; height=&quot;100%&quot;&gt; &lt;\/div&gt;\n&lt;div class=&quot;textblock&quot;&gt;&lt;span&gt;&lt;a href=&quot;&lt;?php print &quot;http:\/\/www.bbc.co.uk&quot;.$link[2][0] ?&gt;&quot;&gt;&lt;?php print $text[2][0] ?&gt;&lt;\/a&gt;&lt;\/span&gt;&lt;br&gt;\n&lt;\/div&gt;\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre><\/noscript><\/p>\n<p>And the example, which presents the same information in a new way&#8230;<\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_regex.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_regex-564x400.png\" alt=\"\" title=\"scraper_bbc_regex\" width=\"564\" height=\"400\" class=\"alignnone size-medium wp-image-1469\" srcset=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_regex-564x400.png 564w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_regex-1024x725.png 1024w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_bbc_regex.png 1355w\" sizes=\"auto, (max-width: 564px) 100vw, 564px\" \/><\/a><\/p>\n<p>Advanced scraping demo with &#8220;regex&#8221; parsing. Retrieves current weather in any city and colors the background accordingly. The math below for normalization could use some work.<br \/>\n<script src=\"https:\/\/gist.github.com\/974324.js\"><\/script><noscript><pre><code class=\"language-php php\">&lt;?php\n\n\/*\tAdvanced scraping demo with &quot;regex&quot; parsing. Retrieves current \n * \tweather in any city and colors the background accordingly. \n *\tThe math below for normalization could use some work.\n *\tOwen Mundy Copyright 2011 GNU\/GPL *\/\n\n?&gt;\n\n&lt;html&gt;\n&lt;head&gt;\n&lt;style&gt; \nbody { margin:20; font:1.0em\/1.4em Arial, Helvetica, sans-serif; } \n.text { font:10.0em\/1.0em Arial, Helvetica, sans-serif; color:#000; font-weight:bold; } \n.navlist { list-style:none; margin:0; position:absolute; top:20px; left:200px }\n.navlist li { float:left; margin-right:10px; }\n&lt;\/style&gt;\n&lt;\/head&gt;\n\n&lt;body onLoad=&quot;document.f.q.focus();&quot;&gt;\n\n&lt;form method=&quot;GET&quot; action=&quot;&lt;?php print $_SERVER[&#039;PHP_SELF&#039;]; ?&gt;&quot; name=&quot;f&quot;&gt;\n\n\t&lt;input type=&quot;text&quot; name=&quot;q&quot; value=&quot;&lt;?php print $_GET[&#039;q&#039;] ?&gt;&quot; \/&gt;\n\t&lt;input type=&quot;submit&quot; \/&gt;\n\n&lt;\/form&gt;\n\n&lt;ul class=&quot;navlist&quot;&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=anchorage+alaska&quot;&gt;anchorage&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=toronto+canada&quot;&gt;toronto&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=new+york+ny&quot;&gt;nyc&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=london+uk&quot;&gt;london&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=houston+texas&quot;&gt;houston&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=linz+austria&quot;&gt;linz&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=rome+italy&quot;&gt;rome&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=cairo+egypt&quot;&gt;cairo&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=new+delhi+india&quot;&gt;new delhi&lt;\/a&gt;&lt;\/li&gt;\n\t&lt;li&gt;&lt;a href=&quot;?q=mars&quot;&gt;mars&lt;\/a&gt;&lt;\/li&gt;\n&lt;\/ul&gt;\n\n&lt;?php\n\n\/\/ make sure the form has been sent\nif (isset($_GET[&#039;q&#039;]))\n{\n\t\/\/ get contents of url in an array\n\tif ($str = file_get_contents(&#039;http:\/\/www.google.com\/search?q=weather+in+&#039;\n\t\t\t\t\t\t. str_replace(&quot; &quot;,&quot;+&quot;,$_GET[&#039;q&#039;])))\n\t{\n\t\t\n\t\t\/\/ use regular expressions to extract only what we need...\n\t\t\n\t\t\/\/ 1, 2, or 3 digits followed by any version of the degree symbol \n\t\t$pattern = &quot;\/[0-9]{1,3}[&ordm;&deg;]C\/&quot;;\n\t\t\/\/ match the pattern with a C or with an F\n\t\tif (preg_match_all($pattern, $str, $data) &gt; 0)\n\t\t{\n\t\t\t$scale = &quot;C&quot;;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t$pattern = &quot;\/[0-9]{1,3}[&ordm;&deg;]F\/&quot;;\n\t\t\tif (preg_match_all($pattern, $str, $data) &gt; 0)\n\t\t\t{\n\t\t\t\t$scale = &quot;F&quot;;\n\t\t\t}\n\t\t}\n\t\t\n\t\t\/\/ remove html\n\t\t$temp_str = strip_tags($data[0][0]);\n\t\t\/\/ remove everything except numbers and points\n\t\t$temp = ereg_replace(&quot;[^0-9..]&quot;, &quot;&quot;, $temp_str);\n\t\t\n\t\tif ($temp)\n\t\t{\n\t\t\t\n\t\t\t\/\/ what is the scale?\n\t\t\tif ($scale == &quot;C&quot;){\n\t\t\t\t\/\/ convert &ordm;C to &ordm;F\n\t\t\t\t$tempc = $temp;\n\t\t\t\t$tempf = ($temp*1.8)+32;\n\t\t\t}\n\t\t\telse if ($scale == &quot;F&quot;)\n\t\t\t{\n\t\t\t\t\/\/ convert &ordm;F to &ordm;C\n\t\t\t\t$tempc = ($temp-32)\/1.8;\n\t\t\t\t$tempf = $temp;\n\t\t\t}\n\t\t\t\/\/ normalize the number\n\t\t\t$color = round($tempf\/140,1)*10;\n\t\t\t\/\/ cool -&gt; warm\n\t\t\t\/\/ scale -20 to: 120\n\t\t\t$color_scale = array(\n\t\t\t\t\t&#039;0,  0,255&#039;,\n\t\t\t\t\t&#039;0,128,255&#039;,\n\t\t\t\t\t&#039;0,255,255&#039;,\n\t\t\t\t\t&#039;0,255,128&#039;,\n\t\t\t\t\t&#039;0,255,0&#039;,\n\t\t\t\t\t&#039;128,255,0&#039;,\n\t\t\t\t\t&#039;255,255,0&#039;,\n\t\t\t\t\t&#039;255,128,0&#039;,\n\t\t\t\t\t&#039;255,  0,0&#039;\n\t\t\t\t\t);\t\n\t\t\n?&gt;\n\n&lt;style&gt; body { background:rgb(&lt;?php print $color_scale[$color] ?&gt;) }&lt;\/style&gt;\n&lt;div class=&quot;text&quot;&gt;&lt;?php print round($tempc,1) .&quot;&amp;deg;C &quot; ?&gt;&lt;\/div&gt;\n&lt;?php print round($tempf,1) ?&gt;&amp;deg;F\n\n&lt;?php\n\t\t\n\t\t}\n\t\telse \n\t\t{\n\t\t\tprint &quot;city not found&quot;;\t\n\t\t}\n\t}\n}\n?&gt;\n\n&lt;\/body&gt;\n&lt;\/html&gt;<\/code><\/pre><\/noscript><\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_weather_regex_toronto.png\"><img decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_weather_regex_toronto-1024x786.png\" alt=\"\" width=\"600\"  \/><\/a><br \/>\n<a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_weather_regex_houston.png\"><img decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_weather_regex_houston-1024x786.png\" alt=\"\" width=\"600\"  \/><\/a><br \/>\n<a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_weather_regex_cairo.png\"><img decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_weather_regex_cairo-1024x786.png\" alt=\"\" width=\"600\"  \/><\/a><br \/>\n<a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_weather_regex_india.png\"><img decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/scraper_weather_regex_india-1024x786.png\" alt=\"\" width=\"600\" \/><\/a><\/p>\n<p>For an xpath tutorial check <a href=\"http:\/\/www.developertutorials.com\/tutorials\/php\/scraping-links-with-php-8-01-05-958\/\" target=\"_blank\">this page<\/a>.<\/p>\n<p>For the next part of the workshop we used <a href=\"http:\/\/givememydata.com\">Give Me My Data<\/a> to export our information from Facebook in order to revisualize it with <a href=\"http:\/\/nodebox.net\/\" target=\"_blank\">Nodebox 1.0<\/a>, a Python IDE similar to Processing.org. Here&#8217;s an example:<\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/nodebox.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/nodebox-600x376.png\" alt=\"\" title=\"nodebox\" width=\"600\" height=\"376\" class=\"alignnone size-medium wp-image-1464\" srcset=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/nodebox-600x376.png 600w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/nodebox-1024x642.png 1024w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/nodebox.png 1760w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Update: Some user images from the workshop. Thanks all who joined!<\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/canning_mutual_cropped.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/canning_mutual_cropped-600x375.png\" alt=\"\" title=\"canning_mutual_cropped\" width=\"600\" height=\"375\" class=\"alignleft size-medium wp-image-1524\" srcset=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/canning_mutual_cropped-600x375.png 600w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/canning_mutual_cropped-1024x640.png 1024w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/canning_mutual.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/canning_mutual-600x89.png\" alt=\"\" title=\"canning_mutual\" width=\"600\" height=\"89\" class=\"alignleft size-medium wp-image-1523\" srcset=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/canning_mutual-600x89.png 600w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/canning_mutual-1024x153.png 1024w\" sizes=\"auto, (max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n<p>Mutual friends (using Give Me My Data and Graphviz) by <a href=\"http:\/\/rob.goto10.org\/blog\" target=\"_blank\">Rob Canning<\/a><\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/2011-05-15_identica_sfdp_med.png\"><img decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/2011-05-15_identica_sfdp_med-982x1024.png\" alt=\"\" title=\"2011-05-15_identica_sfdp_med\" width=\"600\" class=\"alignleft size-large wp-image-1525\" srcset=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/2011-05-15_identica_sfdp_med-982x1024.png 982w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/2011-05-15_identica_sfdp_med-383x400.png 383w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/2011-05-15_identica_sfdp_med.png 2000w\" sizes=\"(max-width: 982px) 100vw, 982px\" \/><\/a><\/p>\n<p>identi.ca network output (starting from my username (claude) with depth 5, rendered to svg with &#8216;sfdp&#8217; from graphviz) by <a href=\"http:\/\/claudiusmaximus.goto10.org\/cm\/\" target=\"_blank\">Claude Heiland-Allen<\/a><\/p>\n<p><a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/Freedom-for-Our-Files_01.jpg\"><img decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/Freedom-for-Our-Files_01.jpg\" alt=\"\" title=\"Freedom-for-Our-Files_01\" width=\"290\" class=\"alignnone size-full wp-image-1497\" srcset=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/Freedom-for-Our-Files_01.jpg 600w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/Freedom-for-Our-Files_01-533x400.jpg 533w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a> <a href=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/Freedom-for-Our-Files_02.jpg\"><img decoding=\"async\" src=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/Freedom-for-Our-Files_02.jpg\" alt=\"\" title=\"Freedom-for-Our-Files_02\" width=\"290\" class=\"alignnone size-full wp-image-1498\" srcset=\"https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/Freedom-for-Our-Files_02.jpg 600w, https:\/\/owenmundy.com\/blog\/wp-content\/uploads\/2011\/05\/Freedom-for-Our-Files_02-533x400.jpg 533w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A two-day workshop, with both technical hands-on and idea-driven components. Learn to scrape data and reuse public and private information by writing custom code and using the Facebook API. Additionally, we\u2019ll converse and conceptualize ideas to reclaim our data literally and also imagine what is possible with our data once it is ours! Here are [&#8230;]<\/p>\n<p><a class=\"btn btn-secondary understrap-read-more-link\" href=\"https:\/\/owenmundy.com\/blog\/2011\/05\/freedom-for-our-files-code-and-slides\/\">Read More&#8230;<span class=\"screen-reader-text\"> from Freedom for Our Files: Code and Slides<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[42,11,103,121],"tags":[110,10,44,108],"class_list":["post-1454","post","type-post","status-publish","format-standard","hentry","category-code","category-conferences","category-lectures","category-teaching","tag-give-me-my-data","tag-networks","tag-php","tag-social-networking"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2ovQg-ns","_links":{"self":[{"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/posts\/1454","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/comments?post=1454"}],"version-history":[{"count":39,"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/posts\/1454\/revisions"}],"predecessor-version":[{"id":1925,"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/posts\/1454\/revisions\/1925"}],"wp:attachment":[{"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/media?parent=1454"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/categories?post=1454"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/owenmundy.com\/blog\/wp-json\/wp\/v2\/tags?post=1454"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}