<?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>Mental Masturbation, Musings, and Methods &#187; Chromium</title>
	<atom:link href="http://blog.alexbeutel.com/category/chromium/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.alexbeutel.com</link>
	<description>The Mind of Alex Beutel</description>
	<lastBuildDate>Mon, 02 Aug 2010 06:20:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Following Chromium Progress</title>
		<link>http://blog.alexbeutel.com/65/following-chromium-progress/</link>
		<comments>http://blog.alexbeutel.com/65/following-chromium-progress/#comments</comments>
		<pubDate>Thu, 04 Jun 2009 20:52:13 +0000</pubDate>
		<dc:creator>Alex</dc:creator>
				<category><![CDATA[Chromium]]></category>
		<category><![CDATA[Programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Twitter]]></category>

		<guid isPermaLink="false">http://blog.ambmediadesign.com/?p=65</guid>
		<description><![CDATA[For the past few months I have been following the progress of Chromium for Mac and watching it develop and it has definitely made a lot of progress in that time. In the past few month it has received increasing press, with people asking why it is taking so long. One of the lead developers [...]]]></description>
			<content:encoded><![CDATA[<p>For the past few months I have been following the progress of Chromium for Mac and watching it develop and it has definitely made a lot of progress in that time.  In the past few month it has received increasing press, with people asking why it is taking so long.  One of the lead developers on the project <a href="http://weblogs.mozillazine.org/pinkerton/archives/020035.html" target="_blank">responded </a>that people need to chill out and that building a browser takes time.  So, in part to show myself and others the progress, I decided to make a little application to show this progress.  Throughout the day builds and updates of Chromium are posted to <a href="http://build.chromium.org/buildbot/snapshots/sub-rel-mac/" target="_blank">http://build.chromium.org/buildbot/snapshots/sub-rel-mac/</a> but to read each changelog was a pain.  So, to give myself more exposure to new Python libraries and give the Twitter API a swing, I created a script to check for changes to the builds, pull log entries on the changes and post them all to a <a href="http://twitter.com/chromiumUpdates" target="_blank">Twitter stream</a> so there is a single source you can view updates.  The script is far from perfect, as it has to be running to catch the updates and doesn&#8217;t go back and look for ones it missed.  And currently I just have it running on one of Duke&#8217;s servers so it goes down occasionally.  But it generally works and provides plenty of updates so you can see what is actually be worked on and updated.  Check out the <a href="http://ambmediadesign.com/chromium.py">source code</a> below (twitter username and password cut out).</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://blog.alexbeutel.com/wp-content/plugins/wp-codebox/wp-codebox.php?p=65&amp;download=chromium.py">chromium.py</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p652"><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
</pre></td><td class="code" id="p65code2"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #808080; font-style: italic;"># encoding: utf-8</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">os</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">urllib2</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">base64</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">time</span>
<span style="color: #ff7700;font-weight:bold;">from</span> <span style="color: #dc143c;">xml</span>.<span style="color: black;">dom</span> <span style="color: #ff7700;font-weight:bold;">import</span> minidom
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> twitter<span style="color: black;">&#40;</span>twitter_username, twitter_password, message<span style="color: black;">&#41;</span>:
	request = <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">Request</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">'http://twitter.com/statuses/update.json'</span><span style="color: black;">&#41;</span>
	request.<span style="color: black;">headers</span><span style="color: black;">&#91;</span><span style="color: #483d8b;">'Authorization'</span><span style="color: black;">&#93;</span> = <span style="color: #483d8b;">'Basic %s'</span> <span style="color: #66cc66;">%</span> <span style="color: black;">&#40;</span> <span style="color: #dc143c;">base64</span>.<span style="color: black;">b64encode</span><span style="color: black;">&#40;</span>twitter_username + <span style="color: #483d8b;">':'</span> + twitter_password<span style="color: black;">&#41;</span>,<span style="color: black;">&#41;</span>
	request.<span style="color: black;">data</span> = <span style="color: #dc143c;">urllib</span>.<span style="color: black;">urlencode</span><span style="color: black;">&#40;</span><span style="color: black;">&#123;</span><span style="color: #483d8b;">'status'</span>: message<span style="color: black;">&#125;</span><span style="color: black;">&#41;</span>
	<span style="color: #ff7700;font-weight:bold;">try</span>:
		response = <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span>request<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># The Response</span>
	<span style="color: #ff7700;font-weight:bold;">except</span> HTTPError, e:
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Error posting to twitter&quot;</span>
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;HTTP Error code: &quot;</span>, e.<span style="color: #dc143c;">code</span>
	<span style="color: #ff7700;font-weight:bold;">except</span> URLError, e:
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Error posting to twitter&quot;</span>
		<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;URLError reason: &quot;</span>, e.<span style="color: black;">reason</span>
&nbsp;
<span style="color: #ff7700;font-weight:bold;">def</span> main<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>:
	message = <span style="color: #483d8b;">&quot;&quot;</span>
	last_update = <span style="color: #483d8b;">&quot;17514&quot;</span><span style="color: #66cc66;">;</span>
	chromium_url = <span style="color: #483d8b;">&quot;http://build.chromium.org/buildbot/snapshots/sub-rel-mac/&quot;</span>
	<span style="color: #ff7700;font-weight:bold;">while</span><span style="color: black;">&#40;</span><span style="color: #008000;">True</span><span style="color: black;">&#41;</span>:
		<span style="color: #ff7700;font-weight:bold;">try</span>:
			response = <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span>chromium_url + <span style="color: #483d8b;">&quot;LATEST&quot;</span><span style="color: black;">&#41;</span>
		<span style="color: #ff7700;font-weight:bold;">except</span> HTTPError, e:
			<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;HTTP Error code: &quot;</span>, e.<span style="color: #dc143c;">code</span>
		<span style="color: #ff7700;font-weight:bold;">except</span> URLError, e:
			<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;URLError reason: &quot;</span>, e.<span style="color: black;">reason</span>
		<span style="color: #ff7700;font-weight:bold;">else</span>:
			latest = response.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
			<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;latest: &quot;</span>, latest
			<span style="color: #ff7700;font-weight:bold;">if</span><span style="color: black;">&#40;</span>latest <span style="color: #66cc66;">!</span>= last_update<span style="color: black;">&#41;</span>:
				<span style="color: #ff7700;font-weight:bold;">try</span>:
					response2 = <span style="color: #dc143c;">urllib2</span>.<span style="color: black;">urlopen</span><span style="color: black;">&#40;</span>chromium_url + latest + <span style="color: #483d8b;">&quot;/changelog.xml&quot;</span><span style="color: black;">&#41;</span>
				<span style="color: #ff7700;font-weight:bold;">except</span> HTTPError, e:
					<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;HTTP Error code: &quot;</span>, e.<span style="color: #dc143c;">code</span>
				<span style="color: #ff7700;font-weight:bold;">except</span> URLError, e:
					<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;URLError reason: &quot;</span>, e.<span style="color: black;">reason</span>
				<span style="color: #ff7700;font-weight:bold;">else</span>:
					html = response2.<span style="color: black;">read</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
					<span style="color: #808080; font-style: italic;"># print html</span>
					dom = minidom.<span style="color: black;">parseString</span><span style="color: black;">&#40;</span>html<span style="color: black;">&#41;</span>
					entries = dom.<span style="color: black;">getElementsByTagName</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;logentry&quot;</span><span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;">#[0].childNodes</span>
					<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;entries: &quot;</span>, <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>entries<span style="color: black;">&#41;</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;">0</span>, <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>entries<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>:
						link = chromium_url + latest + <span style="color: #483d8b;">&quot;/ &quot;</span>
						msg = entries<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span>.<span style="color: black;">getElementsByTagName</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;msg&quot;</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>.<span style="color: black;">firstChild</span>.<span style="color: black;">nodeValue</span>
						num = entries<span style="color: black;">&#91;</span>i<span style="color: black;">&#93;</span>.<span style="color: black;">getAttribute</span><span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;revision&quot;</span><span style="color: black;">&#41;</span>
						<span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">&quot;Revision: &quot;</span>, num
						twitter<span style="color: black;">&#40;</span><span style="color: #483d8b;">&quot;USERNAME&quot;</span>, <span style="color: #483d8b;">&quot;PASSWORD&quot;</span>, <span style="color: #483d8b;">&quot;Chromium Revision &quot;</span> + num + <span style="color: #483d8b;">&quot;: &quot;</span> + msg<span style="color: black;">&#41;</span>
					last_update = latest
			<span style="color: #dc143c;">time</span>.<span style="color: black;">sleep</span><span style="color: black;">&#40;</span><span style="color: black;">&#40;</span><span style="color: #ff4500;">60</span><span style="color: #66cc66;">*</span><span style="color: #ff4500;">2</span><span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
&nbsp;
&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>Play with the code or follow the twitter.  Also, I decided to try a new WordPress plugin for code so let me know what you think.  Thanks.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.alexbeutel.com/65/following-chromium-progress/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
