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

<channel>
	<title>Bryce Boe &#187; General</title>
	<atom:link href="http://www.bryceboe.com/category/general/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bryceboe.com</link>
	<description>The Adventures of a UCSB Computer Science Ph.D. Student</description>
	<lastBuildDate>Fri, 02 Jul 2010 21:38:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Amazon S3: Convert Objects to Reduced Redundancy Storage</title>
		<link>http://www.bryceboe.com/2010/07/02/amazon-s3-convert-objects-to-reduced-redundancy-storage/</link>
		<comments>http://www.bryceboe.com/2010/07/02/amazon-s3-convert-objects-to-reduced-redundancy-storage/#comments</comments>
		<pubDate>Fri, 02 Jul 2010 21:37:16 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[s3]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=389</guid>
		<description><![CDATA[If you are like me, you are pleased by the fact that amazon made it even cheaper to store information in Amazon S3 through their reduced redundancy storage model. Unfortunately until just recently there wasn&#8217;t a simple way to convert your old objects to use the reduced redundancy storage model. Using a new revision of [...]]]></description>
			<content:encoded><![CDATA[<p>If you are like me, you are pleased by the fact that amazon made it even cheaper to store information in Amazon S3 through their <a href="http://aws.amazon.com/about-aws/whats-new/2010/05/19/announcing-amazon-s3-reduced-redundancy-storage/">reduced redundancy storage model</a>. Unfortunately until just <a href="http://code.google.com/p/boto/source/detail?r=1595">recently</a> there wasn&#8217;t a simple way to convert your old objects to use the reduced redundancy storage model. Using a new revision of <a href="http://code.google.com/p/boto/">boto</a>, the python amazon aws package, I wrote a script (derived from <a href="http://www.elastician.com/2010/06/using-reduced-redundancy-storage-rrs-in.html">one by the boto author</a>) that will automatically convert all your old objects in a bucket to use the reduced redundancy storage model. </p>
<p>The script, shown at the bottom, currently requires a svn version of boto with revision of at least 1595. Assuming you have python and subversion installed, the following will get you up and running with the script, which can be downloaded <a href='http://www.bryceboe.com/wordpress/wp-content/uploads/2010/07/convert_to_rrs.py'>here</a>. Running the script concurrent times will take significantly much less time, therefore stopping the script midway through is of minor consequence.</p>
<p><code>svn checkout http://boto.googlecode.com/svn/trunk/ boto-read-only<br />
cd boto-read-only<br />
<em>(as root)</em> python setup.py install<br />
cd ..<br />
rm -rf boto-read-only<br />
./convert_to_rss.py <strong>your_bucket_name</strong> <strong>[aws_access_key_id aws_secret_access_key]</strong><br />
</code></p>
<p>Note that you may alternatively put your aws_access_key_id and aws_secret_access_key into the environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY respectively.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>, <span style="color: #dc143c;">sys</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">try</span>:
    <span style="color: #ff7700;font-weight:bold;">import</span> boto.<span style="color: black;">s3</span>
    boto.<span style="color: black;">s3</span>.<span style="color: black;">key</span>.<span style="color: black;">Key</span>.<span style="color: black;">change_storage_class</span>
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">ImportError</span>, e:
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Package boto (svn rev. &gt;= 1595) must be installed.<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: black;">&#41;</span>
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
<span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">AttributeError</span>, e:
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Invalid version of boto. Required svn rev. &gt;= 1595.<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: black;">&#41;</span>
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> convert<span style="color: black;">&#40;</span>bucket_name, aws_id, aws_key<span style="color: black;">&#41;</span>:
    s3 = boto.<span style="color: black;">connect_s3</span><span style="color: black;">&#40;</span>aws_id, aws_key<span style="color: black;">&#41;</span>
    bucket = s3.<span style="color: black;">lookup</span><span style="color: black;">&#40;</span>bucket_name<span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #ff7700;font-weight:bold;">not</span> bucket:
        <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Invalid authentication, or bucketname. Try again.<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Found bucket: %s'</span> <span style="color: #66cc66;">%</span> bucket_name
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'Converting: '</span><span style="color: black;">&#41;</span>
    <span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    found = converted = <span style="color: #ff4500;">0</span>
    <span style="color: #ff7700;font-weight:bold;">try</span>:
        <span style="color: #ff7700;font-weight:bold;">for</span> key <span style="color: #ff7700;font-weight:bold;">in</span> bucket.<span style="color: #008000;">list</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
            found += <span style="color: #ff4500;">1</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> key.<span style="color: black;">storage_class</span> <span style="color: #66cc66;">!</span>= <span style="color: #483d8b;">'REDUCED_REDUNDANCY'</span>:
                key.<span style="color: black;">change_storage_class</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'REDUCED_REDUNDANCY'</span><span style="color: black;">&#41;</span>
                converted += <span style="color: #ff4500;">1</span>
            <span style="color: #ff7700;font-weight:bold;">if</span> found <span style="color: #66cc66;">%</span> <span style="color: #ff4500;">100</span> == <span style="color: #ff4500;">0</span>:
                <span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'.'</span><span style="color: black;">&#41;</span>
                <span style="color: #dc143c;">sys</span>.<span style="color: black;">stdout</span>.<span style="color: black;">flush</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">KeyboardInterrupt</span>: <span style="color: #ff7700;font-weight:bold;">pass</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'<span style="color: #000099; font-weight: bold;">\n</span>Converted %d items out of %d to reduced redundancy storage.'</span> <span style="color: #66cc66;">%</span> \
        <span style="color: black;">&#40;</span>converted, found<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #ff7700;font-weight:bold;">def</span> usage<span style="color: black;">&#40;</span>msg=<span style="color: #008000;">None</span><span style="color: black;">&#41;</span>:
        <span style="color: #ff7700;font-weight:bold;">if</span> msg:
            <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'&lt;Error&gt;<span style="color: #000099; font-weight: bold;">\n</span>%s<span style="color: #000099; font-weight: bold;">\n</span>&lt;/Error&gt;<span style="color: #000099; font-weight: bold;">\n</span>'</span> <span style="color: #66cc66;">%</span> msg<span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">sys</span>.<span style="color: black;">stderr</span>.<span style="color: black;">write</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">''</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'Usage: %s bucket [aws_access_key_id '</span>,
                                  <span style="color: #483d8b;">'aws_secret_access_key]<span style="color: #000099; font-weight: bold;">\n</span>'</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span> <span style="color: #66cc66;">%</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
        <span style="color: #dc143c;">sys</span>.<span style="color: black;">exit</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#41;</span>
&nbsp;
    <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span> == <span style="color: #ff4500;">2</span>:
        bucket = <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
        msg = <span style="color: #483d8b;">''</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #483d8b;">'AWS_ACCESS_KEY_ID'</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span>:
            aws_id = <span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'AWS_ACCESS_KEY_ID'</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            msg += <span style="color: #483d8b;">'Environment does not contain AWS_ACCESS_KEY_ID.<span style="color: #000099; font-weight: bold;">\n</span>'</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #483d8b;">'AWS_SECRET_ACCESS_KEY'</span> <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span>:
            aws_key = <span style="color: #dc143c;">os</span>.<span style="color: black;">environ</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'AWS_SECRET_ACCESS_KEY'</span><span style="color: black;">&#93;</span>
        <span style="color: #ff7700;font-weight:bold;">else</span>:
            msg += <span style="color: #483d8b;">'Environment does not contain AWS_SECRET_ACCESS_KEY.<span style="color: #000099; font-weight: bold;">\n</span>'</span>
        <span style="color: #ff7700;font-weight:bold;">if</span> msg:
            usage<span style="color: black;">&#40;</span>msg + <span style="color: #483d8b;">'Please set values in environment or pass them in.'</span><span style="color: black;">&#41;</span>
    <span style="color: #ff7700;font-weight:bold;">elif</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#41;</span> == <span style="color: #ff4500;">4</span>:
        bucket = <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
        aws_id = <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span>
        aws_key = <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span>
    <span style="color: #ff7700;font-weight:bold;">else</span>:
        usage<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
    convert<span style="color: black;">&#40;</span>bucket, aws_id, aws_key<span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2010/07/02/amazon-s3-convert-objects-to-reduced-redundancy-storage/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Facebook Photograbber Updates</title>
		<link>http://www.bryceboe.com/2010/05/27/facebook-photograbber-updates/</link>
		<comments>http://www.bryceboe.com/2010/05/27/facebook-photograbber-updates/#comments</comments>
		<pubDate>Thu, 27 May 2010 19:28:19 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=364</guid>
		<description><![CDATA[I previously wrote about my preparation for leaving Facebook. This morning I have finally completed the last few things I wanted to do. Those last few things were to store the photo captions, photo comments, and photo tags for each photo downloaded. Yesterday, in order to extract this information from Facebook, I spent some time [...]]]></description>
			<content:encoded><![CDATA[<p>I <a href="http://www.bryceboe.com/2010/05/13/bye-bye-facebook-a-guide-to-leaving-facebook/">previously wrote</a> about my preparation for leaving Facebook. This morning I have finally completed the last few things I wanted to do. Those last few things were to store the photo captions, photo comments, and photo tags for each photo downloaded.</p>
<p>Yesterday, in order to extract this information from Facebook, I spent some time and made some significant modifications to <a href="http://code.google.com/p/photograbber/">photograbber</a>. You can download the patch <a href="http://cs.ucsb.edu/~bboe/public/patches/photograbber-r38+bboe.patch">here</a>. The changes are as follows:</p>
<ul>
<li>GUI checkbox option to download entire album if tagged</li>
<li>Saves photo caption and comments in <em>{pid}</em>_comments.txt</li>
<li>Saves photo tags in <em>{pid}</em>_tags.txt</li>
<li>Photos modify time is set to the upload time of the photo</li>
<li>Comment file modify time is set to the time of the last comment</li>
<li>Tag file modify time is set to the time of the photo upload</li>
<li>Improved error and thread exit handling (not perfect though :-/)</li>
</ul>
<p>Features specific to the complete album download feature</p>
<ul>
<li>Stores pictures and metadata for an album within a folder named <em>{username}</em>-<em>{album_name}</em></li>
<li>Replaces invalid characters and spaces with underscore</li>
<li>Saves album comments in ALBUM_COMMENTS.txt</li>
<li>Album folder modify time is set to the modify time of the the album</li>
</ul>
<p>Photo captions and comments are stored in the following form:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Photo Caption
The only men running in bikini bottoms.
&nbsp;
Sun Sep  6 18:20:52 2009 John Smith
high five.  a million high hives.
&nbsp;
Sun Sep  6 20:05:40 2009 Sally Thomson
OH my gosh ... I love it!</pre></div></div>

<p>Album descriptions, locations, and comments are stored in the following form:</p>

<div class="wp_syntax"><div class="code"><pre class="text" style="font-family:monospace;">Album Description
The best vacation ever!
&nbsp;
Album Location
Aruba
&nbsp;
Tue Jul 21 15:33:46 2009 Sally Thomson
whatever u do don't get abducted! jk ;)
&nbsp;
Tue Jul 21 15:35:44 2009 Bryce Boe
I don't even know how that's possible there as everyone was so nice.</pre></div></div>

<p>I have yet to make a Windows and OS X build, but if you&#8217;re not afraid of a terminal and have <em>svn</em>, <em>wget</em>, <em>patch</em>, and <em>python</em> you can get and run my modified version of photograbber via:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">svn</span> checkout http:<span style="color: #000000; font-weight: bold;">//</span>photograbber.googlecode.com<span style="color: #000000; font-weight: bold;">/</span>svn<span style="color: #000000; font-weight: bold;">/</span>trunk<span style="color: #000000; font-weight: bold;">/</span> photograbber-read-only <span style="color: #660033;">-r38</span>
<span style="color: #7a0874; font-weight: bold;">cd</span> photograbber-read-only<span style="color: #000000; font-weight: bold;">/</span>
<span style="color: #c20cb9; font-weight: bold;">wget</span> <span style="color: #660033;">-qO</span> - http:<span style="color: #000000; font-weight: bold;">//</span>cs.ucsb.edu<span style="color: #000000; font-weight: bold;">/</span>~bboe<span style="color: #000000; font-weight: bold;">/</span>public<span style="color: #000000; font-weight: bold;">/</span>patches<span style="color: #000000; font-weight: bold;">/</span>photograbber-r38+bboe.patch <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">patch</span> <span style="color: #660033;">-p0</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #ff0000;">&quot;Run via: python pg.py&quot;</span>
python pg.py</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2010/05/27/facebook-photograbber-updates/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Defcon 18 Quals Forensics 200 Write up</title>
		<link>http://www.bryceboe.com/2010/05/25/defcon-18-quals-forensics-200-write-up/</link>
		<comments>http://www.bryceboe.com/2010/05/25/defcon-18-quals-forensics-200-write-up/#comments</comments>
		<pubDate>Tue, 25 May 2010 22:43:57 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=346</guid>
		<description><![CDATA[Edit: A bunch more DEFCON 18 write ups can be found at the vnSecurity site. This weekend I competed in the Defcon 18 Qualifiers with team Shellphish. We unfortunately only placed 15th, nonetheless, it was an exciting and challenging weekend. Below is my write up for the Forensics 200 challenge. I don&#8217;t recall the phrasing [...]]]></description>
			<content:encoded><![CDATA[<p style="color:blue">Edit: A bunch more DEFCON 18 write ups can be found at the <a href="http://www.vnsecurity.net/2010/05/defcon-18-quals-writeups-collection/">vnSecurity site</a>.</p>
<p>This weekend I competed in the Defcon 18 Qualifiers with team Shellphish. We unfortunately only placed 15th, nonetheless, it was an exciting and challenging weekend. Below is my write up for the Forensics 200 challenge.</p>
<p><del datetime="2010-05-26T03:34:43+00:00">I don&#8217;t recall the phrasing they gave (if you remember it please let me know), however this was the file they provided:</del> <ins datetime="2010-05-26T03:34:43+00:00">The caption read, &#8220;find the key&#8221; and linked to this file:</ins> <a href="http://cs.ucsb.edu/~bboe/public/bin/f200_02b7b50f575759cff7.tar">f200_02b7b50f575759cff7.tar.lzma</a></p>
<p>Running <em>file</em> on f200_02b7b50f575759cff7.tar.lzma simply returned <strong>data</strong> however fortunately the lzma extension was useful to identify that this possibly be uncompressed with 7zip (<a href="http://lmgtfy.com/?q=lzma+file&#038;l=1">lmgtfy lzma file</a>). On ubuntu there is a package called p7zip thus:</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">bryce<span style="color: #000000; font-weight: bold;">@</span>sarek:f200$ <span style="color: #c20cb9; font-weight: bold;">mv</span> f200_02b7b50f575759cff7.tar.lzma f200_02b7b50f575759cff7.tar.7z
bryce<span style="color: #000000; font-weight: bold;">@</span>sarek:f200$ p7zip <span style="color: #660033;">-d</span> f200_02b7b50f575759cff7.tar.7z
&nbsp;
<span style="color: #000000;">7</span>-Zip <span style="color: #7a0874; font-weight: bold;">&#40;</span>A<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">9.04</span> beta  Copyright <span style="color: #7a0874; font-weight: bold;">&#40;</span>c<span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #000000;">1999</span>-<span style="color: #000000;">2009</span> Igor Pavlov  <span style="color: #000000;">2009</span>-05-<span style="color: #000000;">30</span>
p7zip Version <span style="color: #000000;">9.04</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #007800;">locale</span>=en_US.UTF-<span style="color: #000000;">8</span>,<span style="color: #007800;">Utf16</span>=on,<span style="color: #007800;">HugeFiles</span>=on,<span style="color: #000000;">8</span> CPUs<span style="color: #7a0874; font-weight: bold;">&#41;</span>
&nbsp;
Processing archive: f200_02b7b50f575759cff7.tar.7z
&nbsp;
Extracting  f200_02b7b50f575759cff7.tar
&nbsp;
Everything is Ok
&nbsp;
Size:       <span style="color: #000000;">1730560</span>
Compressed: <span style="color: #000000;">487746</span>
bryce<span style="color: #000000; font-weight: bold;">@</span>sarek:f200$ <span style="color: #c20cb9; font-weight: bold;">tar</span> <span style="color: #660033;">-xf</span> f200_02b7b50f575759cff7.tar</pre></div></div>

<p>This extracts 1121 png image files.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">bryce<span style="color: #000000; font-weight: bold;">@</span>sarek:f200$ <span style="color: #c20cb9; font-weight: bold;">ls</span> <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">head</span>
f200_02b7b50f575759cff7.tar
IMG_0001.png
IMG_0002.png
IMG_0003.png
IMG_0004.png
IMG_0005.png
IMG_0006.png
IMG_0007.png
IMG_0008.png
IMG_0009.png</pre></div></div>

<p>Using <em>pnginfo</em> one can verify that each image is similar with respect to its attributes (width, height, bitdepth, channels, etc.). Using manual image inspection we see a mostly transparent image with some white and black pixels. Thus using <a href="http://www.pythonware.com/products/pil/">python&#8217;s imaging library</a> (PIL) we simply write a quick program that will combine all the images into one:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #ff7700;font-weight:bold;">import</span> Image
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
    <span style="color: #dc143c;">new</span> = Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'IMG_0001.png'</span><span style="color: black;">&#41;</span>
    w, h = <span style="color: #dc143c;">new</span>.<span style="color: black;">size</span>
    <span style="color: #ff7700;font-weight:bold;">for</span> i <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">2</span>, <span style="color: #ff4500;">1122</span><span style="color: black;">&#41;</span>:
        im = Image.<span style="color: #008000;">open</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'IMG_%04d.png'</span> <span style="color: #66cc66;">%</span> i<span style="color: black;">&#41;</span>
        data = im.<span style="color: black;">split</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
        <span style="color: #ff7700;font-weight:bold;">for</span> pixel, value <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">enumerate</span><span style="color: black;">&#40;</span>im.<span style="color: black;">getdata</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
            <span style="color: #ff7700;font-weight:bold;">if</span> value<span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span> <span style="color: #66cc66;">!</span>= <span style="color: #ff4500;">0</span>: <span style="color: #808080; font-style: italic;"># not transparent</span>
                x, y = <span style="color: black;">&#40;</span>pixel <span style="color: #66cc66;">%</span> w, pixel <span style="color: #66cc66;">*</span> 1. / w<span style="color: black;">&#41;</span>
                <span style="color: #dc143c;">new</span>.<span style="color: black;">putpixel</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span>x, y<span style="color: black;">&#41;</span>, value<span style="color: black;">&#41;</span>
    <span style="color: #dc143c;">new</span>.<span style="color: black;">save</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'f200_result.png'</span><span style="color: black;">&#41;</span>
    <span style="color: #dc143c;">new</span>.<span style="color: black;">show</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">if</span> __name__ == <span style="color: #483d8b;">'__main__'</span>:
    main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>Running this eventually produces the following image, from which the is.gd url <a href="http://is.gd/ced7F">http://is.gd/ced7F</a> is the key. Yeah Sexy CPR.</p>
<p><a href="http://www.bryceboe.com/wordpress/wp-content/uploads/2010/05/f200_result.png"><img src="http://www.bryceboe.com/wordpress/wp-content/uploads/2010/05/f200_result-43x300.png" alt="Defcon 18 Forensics 200 Result" title="Defcon 18 Forensics 200 Result" width="43" height="300" class="size-medium wp-image-357" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2010/05/25/defcon-18-quals-forensics-200-write-up/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bye Bye Facebook: A Guide to Leaving Facebook</title>
		<link>http://www.bryceboe.com/2010/05/13/bye-bye-facebook-a-guide-to-leaving-facebook/</link>
		<comments>http://www.bryceboe.com/2010/05/13/bye-bye-facebook-a-guide-to-leaving-facebook/#comments</comments>
		<pubDate>Thu, 13 May 2010 09:34:44 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[google]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[mac]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=326</guid>
		<description><![CDATA[Update 2010/05/27: I&#8217;ve made further updates to photograbber. Read about them in my post titled, &#8220;Facebook Photograbber Updates&#8220;. The patch file linked to from this page has been updated to include those changes. I started using Facebook in October of 2004, during my freshmen year of college, just a few months after it became available [...]]]></description>
			<content:encoded><![CDATA[<p style="color:blue">Update 2010/05/27: I&#8217;ve made further updates to photograbber. Read about them in my post titled, &#8220;<a href="http://www.bryceboe.com/2010/05/27/facebook-photograbber-updates/">Facebook Photograbber Updates</a>&#8220;. The patch file linked to from this page has been updated to include those changes.</p>
<p>I started using <a href="http://www.facebook.com/">Facebook</a> in October of 2004, during my freshmen year of college, just a few months after it became available at UCSB (<a href="http://web.archive.org/web/20040624152328/http://thefacebook.com/">June 24</a>). To sign up I was required to have an email ending in @ucsb.edu and once signed up I could easily communicate with people at UCSB, and more specifically people in my courses; a useful feature they <a href="http://blog.facebook.com/blog.php?post=4314497130">later removed</a>. Eventually I had the ability to post and tag photos and well as create events to which I could easily invite all my friends. Life was simple and so was Facebook.</p>
<p>Over time, Facebook expanded to allow anyone with an email address to sign up. While I initially didn&#8217;t like that just anyone could join our exclusive college website, I gained the ability to easily keep in contact with a few more people thus I was happy with that feature. However, when Facebook released their <a href="http://developers.facebook.com/">developer API</a>, I was initially happy, though soon later I was sorely disappointed with the way Facebook provided third-parties with my information. Primarily I had always wanted a way to make myself appear non-existent to third-party applications, except for those I explicitly allowed. This is a feature that now appears utterly unobtainable. </p>
<p>These last few weeks Facebook has been hot news with respect to their dishing out of users&#8217; information to <a href="http://www.microsoft.com">Microsoft</a>, <a href="http://www.pandora.com/">Pandora</a>, and <a href="http://www.yelp.com/">yelp</a>. Their information whoring has prompted Minnesota&#8217;s Senator, <a href="http://en.wikipedia.org/wiki/Al_Franken">Al Franken</a>, to <a href="http://franken.senate.gov/press/?page=news_single&#038;news_item=Facebook_Privacy_Instructions">include instructions on his website</a> detailing how to restrict the information flow. Wired&#8217;s article, &#8220;<a href="http://www.wired.com/epicenter/2010/05/facebook-rogue/">Facebook&#8217;s Gone Rogue; It&#8217;s Time for an Open Alternative</a>&#8221; pretty much covers many of the recent issues.</p>
<p>Thus, like many other Facebook users, the recent changes included <a href="http://en.wikipedia.org/wiki/The_last_straw">the straw that broke the camel&#8217;s back</a> and therefore I am prepared to leave Facebook behind for good. However, before doing so there are a few tasks that I wanted to accomplish prior to leaving.  These tasks are as follows:</p>
<ol>
<li>Obtain a copy of all the albums I am tagged in</li>
<li>Import my Facebook contacts&#8217; emails into my Google contacts</li>
<li>Import my Facebook contacts&#8217; profile pictures into my Google contacts</li>
<li>Import my Facebook contacts&#8217; birthdays into my Google contacts</li>
</ol>
<p>At this point I have accomplished all these tasks, thus while I now can leave Facebook, there are a few precautionary things I&#8217;d like to do before finally clicking that <a href="http://www.facebook.com/help/contact.php?show_form=delete_account">delete button</a> such as removing image tags and posting a <a href="http://www.bryceboe.com/2010/05/13/bye-bye-facebook-a-guide-to-leaving-facebook/">link to this blog posting</a>. Below I will detail the steps to accomplish the tasks I have outlined.</p>
<h3>Obtain a copy of all the albums I am tagged in</h3>
<p>Quite plainly there are two primary routes, which I think are good. The first involves a Firefox extension, <a href="https://addons.mozilla.org/en-US/firefox/addon/8442/">facePAD</a>, and the second involves a desktop application, <a href="http://code.google.com/p/photograbber/">photograbber</a>.</p>
<p>FacePAD simply will allow you to right click on an album link and download all of its images to your download directory. The two drawbacks to this approach are that it&#8217;s not automated, and if you want to group pictures into folders by albums, you&#8217;ll have to first manually create the folders, and second move all the downloaded pictures into that folder. On the upside, this is a great way to quickly download a few albums, and it&#8217;ll download any picture that is viewable by you.</p>
<p><img src="http://www.bryceboe.com/wordpress/wp-content/uploads/2010/05/facepad.jpg" alt="facePAD Usage" title="facePAD Usage" width="598" height="397" class="alignnone size-full wp-image-331" /></p>
<p>The other approach is using the opensource desktop application Photograbber. Photograbber is written in python thus allowing it to run on Windows, OS X, and Linux. As of today, photograbber is at <a href="http://code.google.com/p/photograbber/source/detail?r=38">revision 38</a>, which only allows you to download the pictures that you are tagged in, or the pictures that a particular friend is in. These pictures are all downloaded into the same directory and thus to me is somewhat worthless. </p>
<p>Fortunately, because photograbber is open source, and it was written in python I fairly quickly was able to hack together modifications to photograbber that allow it to accomplish precisely what I want. Which is, downloading albums that I am tagged in where photos in each album are grouped into their own folder. I have made available my <a href="http://cs.ucsb.edu/~bboe/public/patches/photograbber-r38+bboe.patch">patch</a> to photograbber which you can use to patch the source and run yourself. Alternatively, I have also repackaged photograbber for Mac so you don&#8217;t have to mess with patching the application (<a href="http://cs.ucsb.edu/~bboe/public/bin/PhotoGrabber-OSX-r38+bboe.zip">download</a>). <del datetime="2010-05-14T07:22:29+00:00">A window&#8217;s repackage will follow shortly.</del> Running the application is pretty simple, but if you need any assistance please post a comment. <ins datetime="2010-05-14T07:22:29+00:00">I have now made a <a href="http://cs.ucsb.edu/~bboe/public/bin/PhotoGrabber-WIN-r38+bboe.zip">zip file</a> available which should work on windows. Unzip, and run pg.exe. </ins></p>
<p>While photograbber is fully automated once started, it does have a few drawbacks. The first drawback is that it has a more restricted view of pictures than what you see when you browse Facebook manually. This is because your both you and your friends can restrict applications from having access to your photo albums, thus to get 100% coverage of all the albums you are tagged in, you&#8217;ll unfortunately have to manually check to see what albums were downloaded and compare that to all the albums you appear in. Additionally pictures cannot be organized by date (I haven&#8217;t checked the EXIF data), which I think is an important feature. I&#8217;ll probably add in this feature sometime before I actually delete my account, so check back for updates.</p>
<h3>Import my Facebook contacts&#8217; emails into my Google contacts</h3>
<p>I didn&#8217;t find a direct way to solve this problem, though I&#8217;ll admit I didn&#8217;t look very hard as I stopped with the <a href="http://www.google.com/support/forum/p/gmail/thread?tid=058dc912c433f1b8&#038;hl=en">first result</a> I found for &#8220;export facebook emails to gmail&#8221;. The method suggested involves using a Yahoo email account. From Yahoo&#8217;s contact page you can select &#8220;Tools&#8221; followed by &#8220;Import…&#8221; and finally you have the option to import from Facebook. This uses Facebook Connect, so you will have to authorize Yahoo to access your information. Following the import you can select &#8220;Export…&#8221; from the &#8220;Tools&#8221; menu and export to a &#8220;Yahoo! CSV&#8221; file, which you download to your computer. Finally, on the Gmail contact page you can select &#8220;Import&#8221; from the upper right and provide it with the downloaded CSV file.</p>
<h3>Import my Facebook contacts&#8217; profile pictures into my Google contacts</h3>
<p>This may not be essential for many people. I wanted to accomplish this so that all of my contacts on my Android Device have pictures next to them. For this step I used <a href="http://phaceboogle.bisounours.net/">phaceboogle</a>. At first I thought this web service was a little sketchy, however it uses both <a href="http://developers.facebook.com/blog/post/108">Facebook Connect</a>, and <a href="http://code.google.com/apis/accounts/docs/OAuth.html">Google&#8217;s OAuth</a> thus I was cool with using it. Phaceboggle did almost exactly what I wanted, though rather than copying the thumbnail picture, phaceboogle copied the un-cropped profile picture, which in some cases appears with the wrong aspect ratio. Nevertheless, I was satisfied and thus completing another step.</p>
<h3>Import my Facebook contacts&#8217; birthdays into my Google contacts</h3>
<p>In order to accomplish this task as I describe, you will need an Android Device as it utilizes the Android application, ebobirthday. This app connects to Facebook via the Facebook API and copies over all the birthdates for your contacts. The next time your phone syncs to your Google account, many of your contacts will have their birthdate field completed. Now you can add a birthday calendar to your Google Calendar (<a href="http://www.google.com/support/calendar/bin/answer.py?hl=en&#038;answer=37098">See section &#8216;More&#8217;</a>). Task completed!</p>
<p>Well that&#8217;s all. Feel free to post alternative methods to accomplish these tasks, or other tasks, in the comments. Bye bye Facebook!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2010/05/13/bye-bye-facebook-a-guide-to-leaving-facebook/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>He is Two for Two</title>
		<link>http://www.bryceboe.com/2010/03/27/he-is-two-for-two/</link>
		<comments>http://www.bryceboe.com/2010/03/27/he-is-two-for-two/#comments</comments>
		<pubDate>Sun, 28 Mar 2010 00:01:45 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=322</guid>
		<description><![CDATA[Last week I wrote about the awesome message my brother left me regarding what he wanted for his birthday. Naturally I felt compelled to splurge a little for his birthday so my other younger brother and I purchased him an orange iPod nano. He happened to be with my mom when she checked the mail [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.bryceboe.com/2010/03/20/the-best-phone-message-ive-ever-received/">Last week</a> I wrote about the awesome message my brother left me regarding what he wanted for his birthday. Naturally I felt compelled to splurge a little for his birthday so my other younger brother and I purchased him an orange iPod nano. He happened to be with my mom when she checked the mail today thus receiving his present a little early. Naturally he felt compelled to call me up, and leave yet another awesome message.</p>
<p>Connor, you are welcome and happy birthday buddy!</p>
<p><object type="application/x-shockwave-flash" data="https://clients4.google.com/voice/embed/embedPlayer" width="100%" height="64"><param name="movie" value="https://clients4.google.com/voice/embed/embedPlayer" /><param name="wmode" value="transparent" /><param name="FlashVars" value="u=12003091102054585858&#038;k=AHwOX_AlU7YJGg8rnnHeMTpLoxasz6-5zSgj1hWIiY4YS5gEJnAdE3S47yCuZoSS3NaGZTREt6_HKbPQKYLRioXC299qnLhtsMmGIYek9xxBv8S8L1mFh9qv-fdz1j_MYdAxARLqdd81Pl5tjxnqATGxy7lzht7ByntA8D67BHs0ml1RVbMgLxA&#038;baseurl=https://clients4.google.com/voice&#038;autoPlay=false&#038;cap=Connor%27s%20Thank%20You" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2010/03/27/he-is-two-for-two/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>The Best Phone Message I&#8217;ve Ever Received</title>
		<link>http://www.bryceboe.com/2010/03/20/the-best-phone-message-ive-ever-received/</link>
		<comments>http://www.bryceboe.com/2010/03/20/the-best-phone-message-ive-ever-received/#comments</comments>
		<pubDate>Sat, 20 Mar 2010 19:43:38 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=317</guid>
		<description><![CDATA[I was working away one day and I missed a phone call. Just mom&#8217;s cell, so not usually worth investigating but this call was different. I am notified via email when I have a voice mail as I use Google Voice for voice mail and when I finally played back the message, as you can [...]]]></description>
			<content:encoded><![CDATA[<p>I was working away one day and I missed a phone call. Just mom&#8217;s cell, so not usually worth investigating but this call was different. I am notified via email when I have a voice mail as I use <a href="https://www.google.com/voice">Google Voice</a> for voice mail and when I finally played back the message, as you can below, I felt like this kid should have an iPod. This call is the first time, as I recall, that my little brother has called me directly, and definitely the first time that he&#8217;s left me a message so it&#8217;s super special to me.</p>
<p><object type="application/x-shockwave-flash" data="https://clients4.google.com/voice/embed/embedPlayer" width="100%" height="64"><param name="movie" value="https://clients4.google.com/voice/embed/embedPlayer" /><param name="wmode" value="transparent" /><param name="FlashVars" value="u=12003091102054585858&#038;k=AHwOX_CoMwIPcDJaPow4edFGizQcJcZ_msvUgrV2pItIED7Uo7V5d0jvQWEsZS0XgHxmHeiAiBcKh1XZPKUd9Nr-07q__gnuLvyymRfdZmZFjM0hV5CCYEM0eXpJ14zYqPMQ1gypxYSsCenfPEc3Dg8li2qrsY-ofw1qxC6GnVOQUwrBR9AC1H0&#038;baseurl=https://clients4.google.com/voice&#038;autoPlay=false&#038;cap=Connor%27s%20Message" /></object></p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2010/03/20/the-best-phone-message-ive-ever-received/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>WYFIO an Acronym for &#8220;When you figure it out&#8221;</title>
		<link>http://www.bryceboe.com/2010/02/09/wyfio-an-acronym-for-when-you-figure-it-out/</link>
		<comments>http://www.bryceboe.com/2010/02/09/wyfio-an-acronym-for-when-you-figure-it-out/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 08:47:06 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=307</guid>
		<description><![CDATA[This is a ridiculously silly post however I predict it will work out in my favor and if not at least it only required a minuscule amount of my time. Besides I needed something to post on my blog anyway. I was just texting with a friend who happens to be learning C++ in which [...]]]></description>
			<content:encoded><![CDATA[<p>This is a ridiculously silly post however I predict it will work out in my favor and if not at least it only required a minuscule amount of my time. Besides I needed something to post on my blog anyway.</p>
<p>I was just texting with a friend who happens to be learning C++ in which I wanted to text her, &#8220;the STL is your friend when you figure it out&#8221;, however at that point in the message I was over the dreaded 160 character limit thus I shortened that to &#8220;the STL is your friend WYFIO&#8221;. I immediately sent a second message defining WYFIO and laying claim to defining the acronym. You&#8217;ll note I&#8217;m not laying claim to the first use of the acronym; that&#8217;d just be ridiculous. <img src='http://www.bryceboe.com/wordpress/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>My next thought process was that someone else had to have already defined this particular acronym. However a <a href="http://www.google.com/search?source=ig&#038;hl=en&#038;rlz=&#038;q=WYFIO+figure">Google</a>, <a href="http://www.bing.com/search?q=WYFIO+figure">bing</a>, and <a href="http://search.yahoo.com/search?p=WYFIO+figure">YAHOO!</a> search turned up no results save for <a href="http://www.rcgroups.com/forums/showthread.php?t=45408">this one</a> (post #2) which uses the acronym in the same way I am, but fails to define it.</p>
<p>Let it be known that here on this 9th day of February, 2010 I, Bryce Boe, first defined the acronym WYFIO as being short for &#8220;when you figure it out&#8221;.</p>
<p>I even previously <a href="http://twitter.com/bboe/status/8846941794">tweeted</a> this announcement just to lay my claim a tad quicker.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2010/02/09/wyfio-an-acronym-for-when-you-figure-it-out/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Hash House Harriers and My New Love of Running</title>
		<link>http://www.bryceboe.com/2009/12/08/hash-house-harriers-and-my-new-love-of-running/</link>
		<comments>http://www.bryceboe.com/2009/12/08/hash-house-harriers-and-my-new-love-of-running/#comments</comments>
		<pubDate>Tue, 08 Dec 2009 10:21:30 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[recreation]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=290</guid>
		<description><![CDATA[Warning: This post contains pictures most people would never want to see of me, and a few vulgarities. If you asked me just six months ago if I liked to run, I would have said &#8220;Hell no!&#8221; I have hated running for as long as I can remember, aside from the bit of running required [...]]]></description>
			<content:encoded><![CDATA[<p style="color:red">Warning: This post contains pictures most people would never want to see of me, and a few vulgarities.</p>
<p>If you asked me just six months ago if I liked to run, I would have said &#8220;Hell no!&#8221; I have hated running for as long as I can remember, aside from the bit of running required in the sports I played. Running in PE up until tenth grade was a requirement to receive an &#8216;A&#8217; in the class, and running was occasionally required training for volleyball. Running was never something I would have chose to do, thus as I drank more and exercised less throughout college I became terrifically out of shape.</p>
<p>Now if you ask me if I like to run, I would say, &#8220;Why yes I do&#8221;. Furthermore, if you ask if I liked to run for beer, I would respond, &#8220;Hell yes! I love running for beer!&#8221; Not only has my opinion of running changed, but also I am in the best shape of my life; well at least since starting College. So what changed?</p>
<p>Well, on June 27, 2009 I was introduced to a running club by the name of the <a href="http://en.wikipedia.org/wiki/Hash_House_Harriers">Hash House Harriers</a>, or more specifically the Santa Barbara kennel, <a href="http://h3sob.com/">H3SoB</a>, which is short for the Hash House Harriers of Sant&#8217;o Barbara. A quick read through the Wikipedia entry on the Hash House Harriers will inform you the club started in 1938, Kuala Lumpur by a guy named &#8216;G&#8217; in which the runners would celebrate completing the run with beer. Thankfully that tradition continued on, and I am now part of it.</p>
<p>Let me tell you, I was initially skeptical about the idea of running and drinking. After all, it sounds kind of counterintuitive. However, after just one run, I knew this was something exactly for me. Before I started running with the Hash House Harriers I drink quite a bit on a weekly basis and I could hardly run. After just a few weeks running with the Hash House Harriers I drank about the same however could noticeably run much further distances without tiring. Now, after nearly 6 months of running I not only can run even further distances, but believe it or not, I actually drink less on a weekly basis. I&#8217;ve become more health conscious, and further more I gained the desire to wake up on a Saturday to simply go for a run, sans beer. Running with the Hash House Harriers has changed my life.</p>
<p>I want to give you a little more insight on this club I am now part of as aside from the beer aspect, we are not a run-of-the-mill running club. Those that have been to what we refer to as a <strong>hash run</strong>, or simply a <strong>hash</strong>, know we don&#8217;t usually stay on well-defined trails. Rather, we often run off trail through storm drains, or through what we like to call the &#8220;shiggy stuff&#8221; which usually means low brush, weeds, or for those who are not careful, poison oak.  The three things nearly every run calls for are flashlights, vessels (cups), and virgins (first time <strong>hashers</strong>).</p>
<p>Additionally, despite having never been part of a <em>normal</em> running group I would wager we are much more vulgar and thus much more fun. For instance, when the virgin&#8217;s are initiated in the club, they are informed, &#8220;After consuming your drink, you must place your vessel over your <em>head</em>&#8220;, at which point everyone joins in for our &#8220;<em>Head</em>! Who said <em>head</em>? I&#8217;ll take some of that, and I did&#8221; chant which goes on to talk about uprooting trees and shrubs and flowers with viking horns on our <em>head</em>. Wait, who said <em>head</em>?</p>
<p>Furthermore, after a runner has been with us for a decent period of time they are awarded with a sufficiently vulgar and maybe not so relevant name. Those that brought me to the hash were named <strong>Pre Med Head</strong>, who is now in medical school, and <strong>Try This Tip</strong> who cuts meat. Some other names in our group are <strong>PokeHer</strong>, <strong>Spread Eagle</strong>, <strong>Maxlode</strong>, and <strong>Picassol</strong>. After my 8th, or so, run I was given the name <strong>Cunt Cockulust</strong> because I was slightly mistaken for liking calculus. Many people in the hash just call me <strong>The Count</strong> so I go around doing my impressions of <a href="http://www.youtube.com/watch?v=5l7KbMVdN7E ">The Count from Sesame Street</a> which usually is, &#8220;I love to count, things. Ah ah ah ah.&#8221;</p>
<p>Finally, we fairly often run in themes such as the bikini run, the toga run and the miniskirt run. Of those, I&#8217;ve only taken place in the bikini run as pictured below. Additionally everyone dressed up for the Halloween run, which happened to be my <strong>Virgin Lay</strong> also known as the first time I hared, or led the run; I dressed up as <strong>Super Hare</strong> which is also pictured below. The <strong>hare</strong>(s) are those that leave the pack about fifteen minutes early and using chalk and flour mark the trail everyone else runs. Hares often leave what are called <strong>checks</strong> to deceive the runners into following a false trail if they don&#8217;t pick up the real trail.</p>
<p><a href="http://www.bryceboe.com/wordpress/wp-content/uploads/2009/12/bikini.jpg"><img src="http://www.bryceboe.com/wordpress/wp-content/uploads/2009/12/bikini-300x225.jpg" alt="bikini" title="bikini" width="300" height="225" class="alignnone size-medium wp-image-291" /></a><br />
<a href="http://www.bryceboe.com/wordpress/wp-content/uploads/2009/12/super_hare.jpg"><img src="http://www.bryceboe.com/wordpress/wp-content/uploads/2009/12/super_hare-225x300.jpg" alt="Super Hare!" title="Super Hare!" width="225" height="300" class="alignnone size-medium wp-image-292" /></a></p>
<p>I encourage you all to seek out your local Hash House Harrier kennel and get a first hand experience. If you need more convincing check out the Washington Post article titled, &#8220;<a href="http://www.washingtonpost.com/wp-dyn/content/article/2009/09/18/AR2009091801357.html">Making a Hash of Exercise</a>&#8220;. On-On!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2009/12/08/hash-house-harriers-and-my-new-love-of-running/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>iCTF09 – UCSB&#8217;s International Capture the Flag Competition</title>
		<link>http://www.bryceboe.com/2009/12/06/ictf09-%e2%80%93-ucsbs-international-capture-the-flag-competition/</link>
		<comments>http://www.bryceboe.com/2009/12/06/ictf09-%e2%80%93-ucsbs-international-capture-the-flag-competition/#comments</comments>
		<pubDate>Sun, 06 Dec 2009 08:45:35 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=273</guid>
		<description><![CDATA[As a member of the Security Lab at UCSB I had the privilege to help create and run this year&#8217;s iCTF Hacking Competition. The six-year-old competition was very unique this year. Unlike CTFs seen before in which teams try to protect their services whilst attacking other teams&#8217; services, our competition had teams deliver drive-by downloads [...]]]></description>
			<content:encoded><![CDATA[<p>As a member of the Security Lab at UCSB I had the privilege to help create and run this year&#8217;s <a href="http://ictf.cs.ucsb.edu/">iCTF</a> Hacking Competition. The six-year-old competition was very unique this year. Unlike CTFs seen before in which teams try to protect their services whilst attacking other teams&#8217; services, our competition had teams deliver <a href="http://en.wikipedia.org/wiki/Drive-by_download">drive-by downloads</a> to users for the purpose of stealing money from the users&#8217; bank accounts.</p>
<p>In order to deliver drive-by downloads, the teams had to bring users to their webpage by boosting their search result on the search server for desired search terms. The users&#8217; browsing pattern was they would search for a random word from a news site and then visit one of the resulting pages chosen according a <a href="http://en.wikipedia.org/wiki/Pareto_distribution">Pareto distribution</a>, meaning the top search result would have the highest probability of being picked with the last result the lowest.</p>
<p>The challenge there was to figure out how to boost the search results for particular keywords, unfortunately most of the teams simply duplicated the news site; this definitely was the safest strategy though slightly disappointing to me as I wrote the search engine code. I can claim that neither the search engine, nor the index server broke during the competition. The crawler had a few issues with some team&#8217;s pages, which I quickly fixed. I have made the <a href="http://cs.ucsb.edu/~bboe/public/ictf09/search_engine.tar.gz">search engine code</a> available that was used in iCTF09.</p>
<p>In addition to writing the search engine, I wrote three challenges for the competition. The first challenge I wrote was called &#8220;The Difference&#8221;, or Forensics 4. The only information people were given was the title and the following image. The first step to solve this challenge is recognizing the image is the <a href="http://xkcd.com/">xkcd</a> comic &#8220;<a href="http://xkcd.com/242/">The Difference</a>&#8220;.</p>
<p><a href="http://www.bryceboe.com/wordpress/wp-content/uploads/2009/12/the_difference.png"><img src="http://www.bryceboe.com/wordpress/wp-content/uploads/2009/12/the_difference-159x300.png" alt="The Difference" title="The Difference" width="159" height="300" class="alignleft size-medium wp-image-274" /></a>After downloading the original image one should notice the two files are different sizes with the original being 32KB and my image 46K. At this point a pixel-by-pixel comparison is required which reveals that 60 of the pixels differ and the values of the differing pixels are always larger in my image. This is where &#8220;The Difference&#8221; first comes into play by subtracting the value in my image from that of the original.</p>
<p>Doing so produces the results shown in <a href="http://cs.ucsb.edu/~bboe/public/ictf09/the_difference_values.txt">the_difference_values.txt</a>. Each line contains the difference value and the index of the pixel. The values in this list range from 33 to 41 with exceptions 10, 12 and 15. Additionally the numbers appear in groups of three where last number in the group is sometimes larger. After a bit of pondering the realization sets in that <a href="http://en.wikipedia.org/wiki/ASCII">ASCII</a> lowercase values range from 97 to 122 with space being 32 and hyphen 45. It should hit you like a ton of bricks that you need to sum the groups of three together and then convert the number to its ASCII value.</p>
<p>The string &#8220;sixty-four seventeen&#8221; now appears and you think you&#8217;ve solved the challenge, but no, it&#8217;s not quite done. This is where &#8220;The Difference&#8221; comes back into play in that you have to subtract these two numbers to get forty-seven. There were 596 submissions for this challenge of which 2 were correct. I&#8217;ve made the source to both <a href="http://cs.ucsb.edu/~bboe/public/ictf09/the_difference_maker.py">generate</a> and <a href="http://cs.ucsb.edu/~bboe/public/ictf09/the_difference_checker.py">verify</a> this challenge available.</p>
<p>The second challenge I wrote had 75 submissions and 0 correct solutions. This challenge was one of the Trivia 3 problems that had a <a href="http://cs.ucsb.edu/~bboe/public/ictf09/theparagraphs.txt">text file</a> and the following blurb associated with it:</p>
<blockquote><p>Rummaging through the attic one afternoon Sally found a notebook which on the cover read &#8216;What happened in 95?&#8217;. On one of the pages she found the following two paragraphs of text which appeared as gibberish to her. She copied the two paragraphs down as best she could, however there were forty-five characters which she couldn&#8217;t make out from the first paragraph, which she simply neglected. What are those 45 characters?</p></blockquote>
<p>The concept behind this problem is a <a href="http://en.wikipedia.org/wiki/One-time_pad">one-time pad</a>, where a completely random sequence of characters the same length as the original text is generated and then <a href="http://en.wikipedia.org/wiki/Exclusive_or">XOR</a>ed with the original text to create the cipher text. At this point the original text can be discarded and recovered by XORing the cipher text with the one-time pad.</p>
<p>The challenge to this problem is finding where the 45 missing characters go, and what they are. One additional difficulty is figuring out that the ASCII values need to be subtracted by 95 prior to XORing so the numbers being XORed fit within 32 bits. This can be discovered by taking the min value that appears in the paragraphs which is 95 corresponding to &#8216;_&#8217; and additionally the max value that appears which is 126 corresponding to &#8216;~&#8217;. The &#8217;95&#8242; that appears in the blurb was to hint at this.</p>
<p>Finding the places where the characters should go requires XORing the current one-time pad with the cipher text. Plain text English with no punctuation or spaces will result at the beginning of the output until nonsense text is output. This is the point in which a character needs to be added to the one-time pad. This process needs to be repeated for all 45 characters.</p>
<p>At this point, XORing the one-time pad character with the desired character will result in the missing character. The solution is the concatenation of all the missing characters. This is &#8220;sdnalsilennahcehtdnuoradnuofebnacsehcnarbidun&#8221; which is &#8220;nudibranchescanbefoundaroundthechannelislands&#8221; reversed.</p>
<p>I&#8217;ve made the <a href="http://cs.ucsb.edu/~bboe/public/ictf09/otp_creator.py">code to generate</a> this challenge available. You&#8217;ll notice it loops until the one-time pad contains the characters of the solution. The <a href="http://cs.ucsb.edu/~bboe/public/ictf09/otp_text.txt">original text</a> is a passage from <a href="http://en.wikipedia.org/wiki/James_Joyce">Joyce&#8217;s</a> <a href="http://en.wikipedia.org/wiki/Dubliners">Dubliners</a> that contains the oldest reference I know of to the phrase, &#8220;<a href="http://www.urbandictionary.com/define.php?term=how+goes+it">how goes it</a>&#8220;. I did not write a solution for this problem.</p>
<p>The third and final problem I wrote was called 0xDEAFBABE or Trivia 2. A <a href="http://cs.ucsb.edu/~bboe/public/ictf09/0xDEAFBABE.mid">binary file</a> (renamed to include .mid to resolve content type issues) was provided which the program file correctly informs that it is a midi audio file. By playing the file one hears about one note a second. Many teams tried to figure out what the notes were as they would be on a musical scale, such as c sharp or b flat, however that was a bit over thinking it. The solution was simply to print the ASCII character that corresponds to each <a href="http://www.midi.org/techspecs/midimessages.php">midi note number</a>. These numbers range from 0 to 127, thus they&#8217;re perfect for text. The solution to this was &#8220;does this not sound super cool?&#8221; There were 207 submissions of which 21 were correct. I have made my source to <a href="http://cs.ucsb.edu/~bboe/public/ictf09/midi_generation.py">generate</a> and <a href="http://cs.ucsb.edu/~bboe/public/ictf09/midi_checker.py">verify</a> this challenge available.</p>
<p>If you competed in the iCTF and attempted or completed any of these challenges let me know what you thought and how long you spent on them. I recall someone in the chat yesterday saying they were losing their sanity trying to solve &#8220;The Difference&#8221;; that gave me a good laugh <img src='http://www.bryceboe.com/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2009/12/06/ictf09-%e2%80%93-ucsbs-international-capture-the-flag-competition/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
<enclosure url="http://cs.ucsb.edu/~bboe/public/ictf09/0xDEAFBABE.mid" length="305" type="audio/midi" />
		</item>
		<item>
		<title>Teacher Training in Computer Science: What&#8217;s That?</title>
		<link>http://www.bryceboe.com/2009/11/09/teacher-training-in-computer-science-whats-that/</link>
		<comments>http://www.bryceboe.com/2009/11/09/teacher-training-in-computer-science-whats-that/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 08:36:50 +0000</pubDate>
		<dc:creator>Bryce Boe</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[teaching]]></category>

		<guid isPermaLink="false">http://www.bryceboe.com/?p=261</guid>
		<description><![CDATA[Last year I was a teaching assistant for two quarters giving me two opportunities to see how well I could share my knowledge with students. Aside from my knowledge of the material, and my ability to relate to many of the undergrads at UCSB (having previously been one myself) I had almost no preparation of [...]]]></description>
			<content:encoded><![CDATA[<p>Last year I was a teaching assistant for two quarters giving me two opportunities to see how well I could share my knowledge with students. Aside from my knowledge of the material, and my ability to relate to many of the undergrads at UCSB (having previously been one myself) I had almost no preparation of how to be a TA. Our CS department requires that all TAs do three things: attend a department TA orientation, attend the campus TA orientation, and take a seminar specifically for training TAs in the CS department.</p>
<p>Both orientations occur the week before school starts, and cover topics such as what UCSB students are like, sexual harassment, time management, and whom to contact if […]. Our department&#8217;s required TA training seminar takes place in fall quarter, thus not prior to when TAs might have to teach, and was strictly presentation based. In none of these three requirements was there any discussion of <a href="http://en.wikipedia.org/wiki/Pedagogy">pedagogy</a>, the study of being a teacher. </p>
<p>I went into my first discussion section with no idea on how to lead an effective discussion section, other than what I personally saw in my undergraduate Computer Science discussion sections, most of which I did not attend. Those that I had attended were not discussion sections, but rather mini-lectures with a question and answer session, thus this was the model I followed. Rather than trying to help students make real world connections with what they were learning, I simply presented material and answered questions they had about assigned projects.</p>
<p>Despite how I now believe I could had a much bigger impact, I was given Outstanding Teaching Assistant awards both quarters I TAed based on my end of quarter reviews by the students, and professor recommendations. I am not attempting to brag here, but rather show that my instruction as a TA is representative of our department&#8217;s best TA instruction and that&#8217;s sad. It can be so much better.</p>
<p>Undergraduates coming to UCSB for Computer Science, benefit from being taught by some of the brightest minds in the country. However, if you think these professors are much different when it comes to pedagogy than our TAs, you are sadly mistaken. Our professors are not hired based on their teaching ability, but rather their ability to bring in research money through grants.</p>
<p>I&#8217;ve confirmed this through discussion with faculty involved in the hiring of new faculty. I asked one of our faculty members, &#8220;Suppose two candidates were identical in research experience, but one had more teaching experience. Would that give the candidate an edge?&#8221; The response I received was that no two candidates are ever identical in research experience, and that any teaching experience is completely neglected. </p>
<p>In my opinion this is unacceptable. At UCSB undergraduates are paying more than they should to receive a college education. At the very least they should be taught by professors who not only know what they&#8217;re teaching, but know how to teach it as effectively as possible. Teaching shouldn&#8217;t be a requirement, as many faculty members see it, but rather an opportunity to share knowledge.</p>
<p>Before I conclude, I want to mention that we have some incredible faculty in UCSB&#8217;s Computer Science department, many of who are not only excellent researchers, but also excellent instructors. Of those I&#8217;ve discussed this with, none of them had any formal teacher training, therefore are solely relying on past experience and observer feedback. Those that are excellent instructors have done incredibly well, but they could do so much better. As can I.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.bryceboe.com/2009/11/09/teacher-training-in-computer-science-whats-that/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

<!-- Dynamic Page Served (once) in 1.061 seconds -->
