tag:blogger.com,1999:blog-68275278235403103162024-02-06T20:25:29.639-08:00.sonybrandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.comBlogger70125tag:blogger.com,1999:blog-6827527823540310316.post-24223837587535558892011-06-10T11:14:00.000-07:002011-06-10T11:14:39.561-07:00Calendar Update Part II - After The Release<div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Following up on my promise to detail some of my future plans. But first, a word about that nasty memory leak.<br />
<br />
<b>Memory leak in pycairo or pango/cairo.</b><br />
<b><br />
</b><br />
I am 80% confident that there's a bug in the python bindings shipped on ubuntu 10.10. I developed a minimal example, (<a href="http://pastebin.com/5ZDp8QKS">full source here</a>), which just draws some text repeatedly in a window. The relevant bit of this example is the following function:<br />
<br />
<pre>def draw_text(self, cr, text, x, y, width):
pcr = pangocairo.CairoContext(cr)
lyt = pcr.create_layout()
lyt.set_text(text)
lyt.set_width(pango.units_from_double(width))
lyt.set_wrap(pango.WRAP_WORD_CHAR)
cr.move_to(x, y)
pcr.show_layout(lyt)
return lyt.get_pixel_size()[1]
</pre><br />
This little script will om nom nom your memory -- over 100 mb of memory after just a few minutes, and I think we can all agree that even if this it's not the most efficient example, its memory usage should be nearly constant. I haven't yet opened a bug, because I still don't know which component(s) contain the actual leak. At least feel better that it's probably not something I'm doing wrong, which gives me the confidence to move forward with the release.<br />
<br />
To mitigate against the leak, I threw in an optimization that ensures only one pangocairo context and one text layout is created, per expose event, per widget. This seems like a reasonable thing to do in general, so I will probably leave this optimization in even after the bug is fixed. Unfortunately, all this does is slow down the leak. The leak is still there, which means you still wouldn't want to leave the calendar application running indefinitely.<br />
<br />
In passing I'd like to say that the idea that a pango layout needs to be associated to a particular context bothers me a lot. I wonder if I can get away with re-using layouts with different pangocairo contexts.<br />
<b><br class="Apple-interchange-newline" />A better grammar</b></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><b><br />
</b></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">The current parser for recurrence expressions could use some serious help. The parser for the existing grammar is in the "proof-of-concept" stage of development. It's intuitive for simple things, but you will notice that parenthesis are needed to get correct parsing of more complicated examples. This is due to unresolved ambiguities in the grammar.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Most of the ambiguity could likely be resolved with associativity and precedence declarations, but when you're developing a new notation it's difficult to know in advance what the intiutive associativity is. Basically I didn't bother trying to get it right at all, and rely on parenthesis as a crutch. <i>I recognize that this neither intuitive nor natural.</i> Even I am surprised at how wrong the unparenthesized parse can be.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">I am also aware that this approach is horribly anglo-centric. You would have to write separate parsers for every language you wanted to support, and it's a good bet that language constructs don't always map onto each other so neatly.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">I am also playing around with graphical approaches to the same problem, but to be perfectly honest they've all sucked so far. I might do a separate posting on one of them just to show you how god-awful it is.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><b><br />
</b></div></div><div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><b>A mouse-driven way to add <i>recurrence exceptions</i>.</b></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">When dragging a recurring event, the current behaviour is to shift the entire recurrence pattern. This is a deliberate choice on my part: it's a novel feature that I want to highlight it. Unfortunately, many times time what you actually want to do is shift<i> just the occurrence you've selected</i>, and occasionally you want to move <i>all the events </i>after<i> the selected occurrence</i>.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Note, you can do this now: however, you have to go through the text interface. Even I find this quite tedious. The solution most obvious to me is to introduce control and meta modifier keys, but I have found that other users do not share my enthusiasm for mouse modifiers. In usability parlance, we say that modifiers are less discoverable than more explicit features.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Another idea would be to add some tool bar buttons that silently add modify the recurrence rules of the selected event. This would be fairly easy to do, but I have a couple of misgivings. The first is that the toolbar is getting crowded already. The second is that it won't be obvious what those buttons do at first. Clicking on the "except this occurrence" button will not produce an immediately visible change, only modify the behavior of future interaction. This would be especially be confusing if you hit the button by accident.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">A more radical idea would be to place special "handles" on the clip itself. That way dragging from a handle could have a different meaning from dragging the clip itself. I am leaning towards this approach, but it is not without drawbacks of its own. For example, the handles compete for space with the event text. They will necessarily be small, which could hurt usability in a tablet.</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><b>Integration with other calendars</b></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">Syncing with Google Calendar and / or EDS</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">importing from, and exporting to, .ics.<br />
<br />
This work ought to be pretty straight-forward given how the code is organized, but I haven't really looked in detail at the APIs / File formats I'd be working with. If you're interested in helping out with that, you know where to find me ;)</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><b>Event alarms</b></div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><br />
</div><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><i></i>This might not be necessary if I can use something like EDS as the default back-end. But we'll see. Depending on how hard it is to map the concepts in my application onto the APIs exposed by EDS, it might be easier to roll my own implementation.</div></div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0tag:blogger.com,1999:blog-6827527823540310316.post-83358545034037441172011-06-08T22:58:00.000-07:002011-06-08T23:13:46.383-07:00Calendar Update<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNaSRRwEAi6MlVWxPuB_2SowPU609FQRH1yK5lr0fO28uf2SCrxbmn-mtouDRlA7Aop15VLcPFoepWGgMK-T392iX809R1WozKzeLoyVhvMbBPOSdP-k1cOXVQyYuUNrr6RXbaC_4G7Yo/s1600/IMG_20110607_193736.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNaSRRwEAi6MlVWxPuB_2SowPU609FQRH1yK5lr0fO28uf2SCrxbmn-mtouDRlA7Aop15VLcPFoepWGgMK-T392iX809R1WozKzeLoyVhvMbBPOSdP-k1cOXVQyYuUNrr6RXbaC_4G7Yo/s320/IMG_20110607_193736.jpg" width="320" /></a></div><br />
<br />
What a crazy couple of months it's been. I have been back in San Francisco since late February, but not found the motivation or time to post until now. Among other things, I've been to racing school, and I've taken up drumming as a new hobby. I also attended the meego conference here, where I was showing off my QML GES demo (another post about this is still in progress).<br />
<br />
I thought I'd take some time to write about the work I've done on my desktop calendar application over the past several months. This will stop me from pestering my friends about it, which will make them a lot happier.<br />
<br />
<ul><li>Major cosmetic face-lift.</li>
<li>Added an infinite-scrolling month view.</li>
<li>Added support for all-day events, which are displayed in a pane along the top row.</li>
<li>Added support for recurring events via a natural-ish language parser which supports english-like recurrence expressions such as "every two days from now until october", or "the 3rd wednesday of every month except this wednesday"</li>
<li>You can easily shift the entire recurrence pattern by dragging a single occurrence with the mouse</li>
<li>Possible to select the same block of time across multiple days.</li>
<li>Added support for editable event text.</li>
<li>Removed dependency on goocanvas. Since all the drawing code is custom, and the entire widget is re-painted on every expose, there really is no point in using goocanvas.</li>
</ul><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-xzy0EXyshf_99rMKkAKgYMXq4meIo7M7UaMxzNZrXjp_jjCk1rkeuInlNuWpAceYnEq_5WSALSn0WoRvFD_FEJ09Sp96cEU67umrF539HI16l7xgDqS9KbwDW_sZ0FnQw5WTj6XMGk8/s1600/calendar-6-2011.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-xzy0EXyshf_99rMKkAKgYMXq4meIo7M7UaMxzNZrXjp_jjCk1rkeuInlNuWpAceYnEq_5WSALSn0WoRvFD_FEJ09Sp96cEU67umrF539HI16l7xgDqS9KbwDW_sZ0FnQw5WTj6XMGk8/s320/calendar-6-2011.png" width="306" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC43hpKqTIlQiIowxJiw130GS9zGPcWuOd2aD6toBxaDFSaNoYx6zVbbWJ4MnHFrO-ARPKq3jO6G449e-LMDneujK4j0_LjIbO0JndzxYX6qVTQt7bH4QzrNz_MGzl6RiAkyJJ6GyZRRU/s1600/calendar-6-2011-detail.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="41" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhC43hpKqTIlQiIowxJiw130GS9zGPcWuOd2aD6toBxaDFSaNoYx6zVbbWJ4MnHFrO-ARPKq3jO6G449e-LMDneujK4j0_LjIbO0JndzxYX6qVTQt7bH4QzrNz_MGzl6RiAkyJJ6GyZRRU/s320/calendar-6-2011-detail.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div>I am considering making an initial release, but would like to address the following issues:<br />
<ul><li>I need to come up with a name. As my music teacher once told me, "Name your children." Anything is better than <i>cal.py</i>.</li>
<li>Adopt some system for installation, most likely distutils.</li>
<li>Currently the calendar widget leaks about 100kb of memory for every expose event. After a few minutes of scrolling and dragging it's pushing 100mb. It's obviously a bug, and I've narrowed it down to the functions I wrote to simplify drawing text. Disabling these functions reduces the memory consumption to a much more reasonable 15-ish mb, Either I am doing something memory inefficient in python, or I've found a leak in pango / cairo. I would very much like to understand that better.</li>
<li>I recently added all-day events. You can create an event as an all-day event, or you can drag an existing event to the all-day area. But you can't drag an all-day event back into the timed area.</li>
</ul><div>I did some "usability testing" on a hapless friend of mine, and the results were encouraging but showed there was a great deal of room for improvement. Unfortunately, my select-then-add paradigm of creating new events is confusing for those used to applications like google calendar and evolution. In evolution I find the click-to-create behaviour frustrating. Google calendar, on the other hand, seems to get it right.</div><div><br />
</div><div><span class="Apple-style-span" style="font-size: large;"><b>After the release</b></span><br />
This post is getting long enough already. I've also got some ideas for subsequent improvements, which I will summarize here. TTFN<br />
<br />
<ul><li>A better grammar</li>
<li>A mouse-driven way to add <i>recurrence exceptions</i>.</li>
<li>Integration with other calendars</li>
<li>Event alarms</li>
</ul></div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0tag:blogger.com,1999:blog-6827527823540310316.post-12652112903777403782010-11-26T17:35:00.000-08:002010-11-27T01:36:54.901-08:00Testing Interactive CodeThe preceding work on the Render and Project Settings dialogs in PiTiVi has led to some fairly complicated UI logic, and we haven't really got a good way to test it. <br />
<br />
Imagine that we want to test the following trivial python UI<br />
<pre>import gtk
import gobject
import random
def b_clicked_cb(button):
clicked = True
button.props.label = "Ouch!"
w = gtk.Window()
v = gtk.VBox()
b = gtk.Button("Click me")
b.connect("clicked", b_clicked_cb)
v.pack_start(b)
w.add(v)
w.show_all()
gtk.main()
</pre>We want to check that the button label is correctly changed after being clicked. Because of control inversion, we obviously can't code in a direct, sequential style. At the very least we must install a timeout or idle function into the main loop.<br />
<br />
This is a naive approach:<br />
<pre>def test_case():
b.activate()
assert b.props.label == "Ouch!"
return False
gobject.timeout_add(1000, test_case)
gtk.main()
</pre><br />
It doesn't work because of timing issues. The button's label won't change immedately after activate() is called, so you get the following error -- despite the fact that the the label clearly changed.<br />
<br />
<pre>Traceback (most recent call last):
File "figure_1.py", line 19, in test_case
assert b.props.label == "Ouch!"
AssertionError
</pre><br />
The obvious solution is to split the callback in twain:<br />
<br />
<pre>def test_case():
b.activate()
gobject.timeout_add(1000, finish_test)
return False
def finish_test():
assert b.props.label == "Ouch!"
gtk.main_quit()
return False
gobject.timeout_add(1000, test_case)
gtk.main()
</pre><br />
It's good enough for this trivial example, but it should be clear that as the complexity of the UI increases you'll end up with yet another maze of callbacks. <br />
<br />
Last night I experimented with applying python generator functions to this problem. The idea is to (ab)use the yield keyword as a way of passing control between the test and the mainloop. It's similar to concepts presented in <a href="http://www.google.co.uk/url?sa=t&source=web&cd=3&ved=0CCwQFjAC&url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.75.2753%26rep%3Drep1%26type%3Dpdf&rct=j&q=uninverting%20the%20inversion%20continuations%20in%20web%20programming&ei=LDrwTNKpPM2WhQejio2lDA&usg=AFQjCNG323tprwbzbZwEUJRxzGsZtxN7pQ&sig2=UD95-vRFfc-x-Vig_UbACQ">this paper</a>, which describes how continuations can be used to solve the problem of control inversion in web programming.<br />
<br />
Quick summary of python generator functions: the yield keyword in python is a limited form of either lazy evaluation or continuations, depending on your point of view. Usually we think of generators as sequences. For example this generator can be thought of as the sequence of positive integers from 1 to 10<br />
<pre>def ints():
i = 1
while i <= 10:
yield i
i += 1
</pre>
I can treat it as sequence and take its sum, or iterate over it:
<pre>print sum(ints())
squares = [x ** 2 for x in ints()]
</pre>What actually happens when squares is called is that an iterator is created and returned to the caller. Yield indicates to the interpreter that squares() is a generator, and that the state should be saved so it can be re-entered later.
The fact that the state of the function is saved inside iterator allows us to think of the iterator as a continuation (generators are not as powerful as continuations). With this in mind, we re-write our test function:
<pre>def test_case():
b.activate()
yield
assert b.props.label == "Ouch!"
</pre>Here the yield keyword is going to provide the same control flow boundary that splitting our code into separate functions did earlier.
Now all we need is a bit of code to consume values from this iterator until it is exhausted. We do this using timeouts -- as we did in earlier examples -- which allows the mainloop to continue running in between the two halves of our test case.
<pre>def run_test_case(iterator):
print "Tick"
try:
iterator.next()
except StopIteration:
print "Test Case Finished Successfully"
gtk.main_quit()
return False
except Exception, e:
print "An error occured"
gtk.main_quit()
return False
return True
gobject.timeout_add(1000, run_test_case, test_case())
gtk.main()
</pre>This is already an improvement, but not yet flexible enough. Suppose we add a new widget:
<pre>def c_clicked_cb(button):
def set_label_async():
c.props.label = "Ouch!"
gobject.timeout_add(random.randint(500, 5000),
set_label_async)
c = gtk.Button("Async Operation")
c.connect("clicked", c_clicked_cb)
c.show()
v.pack_start(c)
</pre>Now we have a problem: we have no idea when the action triggered by clicking the second button will complete. Simply waiting for one second will not always work. At the very least we should be able to override the default sleep value. But it would be better still if we could wait until the label value itself is changed. That way if the action takes only a short time, we don't have to wait, while if the action takes longer than expected, the test can still finish successfully.
In other words, we shouldn't just assume that after each step in the test we straight on to the next one. Let's factor out portion of the loop that does the scheduling:
<pre>class Sleep(object):
def __init__(self, timeout=1000):
self.timeout = timeout
def schedule(self, iterator):
gobject.timeout_add(self.timeout, run_test_case, iterator)
def run_test_case(iterator):
print "Tick"
try:
scheduler = iterator.next()
except StopIteration:
print "Test Case Finished Successfully"
gtk.main_quit()
return False
except Exception, e:
print "An error occured"
gtk.main_quit()
return False
scheduler.schedule(iterator)
return False
</pre>Now we can easily customize the timeout for the second button specifying a Sleep scheduler with a different timeout.
<pre>def test_case():
b.activate()
yield Sleep()
assert b.props.label == "Ouch!"
c.activate()
yield Sleep(6000)
assert c.props.label == "Ouch!"
</pre>Actually we can go one better. We don't have to rely on timeouts for scheduling at all. For example, we can easily define a scheduler that will wait for a signal to fire:
<pre>class WaitForSignal(object):
def __init__(self, obj, signame):
self.obj = obj
self.signame = signame
self.iterator = None
self.sigid = None
def schedule(self, iterator):
self.sigid = self.obj.connect(self.signame, self._handler)
self.iterator = iterator
def _handler(self, *args):
run_test_case(self.iterator)
self.obj.disconnect(self.sigid)
</pre>Adopting this is just a one line change to test_case():
<pre>def test_case():
b.activate()
yield Sleep()
assert b.props.label == "Ouch!"
c.activate()
yield WaitForSignal(c, "notify::label")
assert c.props.label == "Ouch!"
</pre>And we don't have to touch run_test_case() at all.
I think this idea could be expanded into a framework for testing event-driven code. True, I would want much better error reporting. But with just that, it would be pretty straight-forward to cover every part of PiTiVi's interface except the timeline (for the Timeline, I need is the ability to synthesize raw input).
If necessary, I can include other types of scheduling scenarios, such as waiting for a file or socket access. And, because I can work with the widgets directly, it's possible to verify conditions that would be impossible to check for under Dogtail or LDTP (which are both limited to what AT-SPI exposes, and run the test from a separate process).
<a href="http://pastebin.ca/2003409">Full Source</a>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com8tag:blogger.com,1999:blog-6827527823540310316.post-72266761078774673492010-11-26T14:31:00.000-08:002010-11-26T14:32:22.350-08:00And the winner is...The overwhelming majority went for version B. I changed the layout a bit, and a cleaned up version is what's in my branch now. Thanks, everyone.<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2MiLy9SUIZfQIG524gLU0LW2h-MIjgVynzJSkDE6cv2KPSTGIaO52K9DcVQbLF7YbhQChq9Gr26nP3L0V9C16melqWr9Ig7G8Nmrru9E_Z43na-m-e8C7xgFIvZ36yUbkwYZVBJ8GVes/s1600/project_settings.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="175" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2MiLy9SUIZfQIG524gLU0LW2h-MIjgVynzJSkDE6cv2KPSTGIaO52K9DcVQbLF7YbhQChq9Gr26nP3L0V9C16melqWr9Ig7G8Nmrru9E_Z43na-m-e8C7xgFIvZ36yUbkwYZVBJ8GVes/s320/project_settings.png" width="320" /></a></div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com4tag:blogger.com,1999:blog-6827527823540310316.post-19832661340933332512010-11-18T09:36:00.000-08:002010-11-18T09:37:42.146-08:00Round 4So it's down to two competing ideas. At this point my brain is shot and I can't really decide between them. So I've decided to put them up here and see what people think. The best way to compare the two is right-click the images into separate tabs and switch between them a few times. Take a good hard look at each one.<br />
<br />
<b>What I'm looking for here is clarity of ideas, not cosmetic considerations like alignment and balance</b>. That is, <i>which of these dialogs is easier to understand?</i><br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-FPSKhFUJEkP4I5yVg_pPy-_BsSbN-v7FwfxgRBUByFhhWsc6XsRE_wSBYkO4V49-URyIK_HHUQ8DyDPj5Lv1cu4ryQnfukYFD23dJDoGW7hN7A_Xxa7KvTixfN9_Xc1m-WlCnpFVeaA/s1600/pitivi-project-settings-video-4th-draft.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="214" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-FPSKhFUJEkP4I5yVg_pPy-_BsSbN-v7FwfxgRBUByFhhWsc6XsRE_wSBYkO4V49-URyIK_HHUQ8DyDPj5Lv1cu4ryQnfukYFD23dJDoGW7hN7A_Xxa7KvTixfN9_Xc1m-WlCnpFVeaA/s320/pitivi-project-settings-video-4th-draft.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">A</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"><br />
</div><br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left; margin-right: 1em; text-align: left;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLqQSMQIIXTpV0fFUDUbhNLnWEj3DdtlbsJnpo6u27Rzft-VsJJe-HHglGhS4OBCmI4G7vCJhEGJltEqCJ_rTTrf58M_uBSWE1Ogfjr-hrgBBG9xAjRcf5q7lfc_Fh1CniI4DrhWFBVS0/s1600/pitivi-project-settings-video-5th-draft.png" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLqQSMQIIXTpV0fFUDUbhNLnWEj3DdtlbsJnpo6u27Rzft-VsJJe-HHglGhS4OBCmI4G7vCJhEGJltEqCJ_rTTrf58M_uBSWE1Ogfjr-hrgBBG9xAjRcf5q7lfc_Fh1CniI4DrhWFBVS0/s320/pitivi-project-settings-video-5th-draft.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">B</td></tr>
</tbody></table><br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
Now that you've done that, does anything seem to be missing from either one that would make it an improvement over the other?brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com11tag:blogger.com,1999:blog-6827527823540310316.post-49976469324655319132010-11-17T12:13:00.000-08:002010-11-17T12:13:46.354-08:00Round 309:38 < bemasc> emdash: So, the true parameters here are the storage height, <br />
storage width, PAR, and DAR.<br />
09:39 < bemasc> that's 4 values in total, but only 3 degrees of freedom.<br />
09:40 < bemasc> Personally, I would expose all 4, and update PAR after each change to DAR (and vice versa)<br />
<br />
How about this, then?<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPtHTeCuAJ33Q7AAOyz0KGjGLkZbYhPraizghyphenhyphenwrgUwLAPP2xdh3qQYhyrHaz8SzcVv5LPqjrAgDnmZwDpN4CsmMOWH23mhzRgKW5MvPOz5-JlWSVaeZfHvUBxL7Vh9Io5c8i_rGl1rU/s1600/pitivi-project-settings-video-3rd-draft.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="216" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXPtHTeCuAJ33Q7AAOyz0KGjGLkZbYhPraizghyphenhyphenwrgUwLAPP2xdh3qQYhyrHaz8SzcVv5LPqjrAgDnmZwDpN4CsmMOWH23mhzRgKW5MvPOz5-JlWSVaeZfHvUBxL7Vh9Io5c8i_rGl1rU/s320/pitivi-project-settings-video-3rd-draft.png" width="320" /></a></div>Starting to look a bit better? I kept the notion of 'Display resolution' mainly as a source of feedback, but it occurs to me now that perhaps little rectangle that represents the display aspect ratio would be a better idea. Unfortunately that would mean increasing the size of the dialog again.<br />
<br />
I'm actually not so sure that DAR and PAR should update each other, as I played around with it and it's somewhat frustrating. I think most of the time you're either targeting a specific format (for example, 480i) in which case you'd just choose a preset, or you'll be working with square pixels.<br />
<br />
I think i need to add a 'constrain aspect ratio' check-button to make scaling a bit easier.brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com3tag:blogger.com,1999:blog-6827527823540310316.post-52273505895133153562010-11-17T08:09:00.000-08:002010-11-17T08:09:48.545-08:00Project Settings ProgressRe-worked it a bit this afternoon. But i'm still not happy with it. I think it might be too confusing to expose pixel-aspect-ratio to the user (hell, it's confusing enough for the programmer).<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgON8P_WIZrVnhOpdHH_X7EVGqOY_14UgtCLwsNByKjXy9v5_nBIMcyR2Fhkcbo4te3jyi5ArtmHv2soSSdFNMeBo7VggpNcoMVfMDCrVWIxFK7JPRYJyL3wTZNPm4yTmXiYrkdoNJum9U/s1600/pitivi-project-settings-video-2nd-draft.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="228" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgON8P_WIZrVnhOpdHH_X7EVGqOY_14UgtCLwsNByKjXy9v5_nBIMcyR2Fhkcbo4te3jyi5ArtmHv2soSSdFNMeBo7VggpNcoMVfMDCrVWIxFK7JPRYJyL3wTZNPm4yTmXiYrkdoNJum9U/s320/pitivi-project-settings-video-2nd-draft.png" width="320" /></a></div><br />
<br />
Another idea: present display width / height, optionally allowing the user to constrain to an aspect ratio. Separately present content (storage) width / height, and finally show the pixel-aspect-ratio as a read-only label, as a form of feedback. In other words, PAR would be computed working backward from display and content resolutions.<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzCcghem-8Jnng7oDbVnPQD0pmh9Iyl3CaBm4Uu55p3ZEQsvxY0V0t0lkNE3Z8fSC0yxoIK1NV6dKiCFvymzl6BSIPavtCEIuJpFBxMT9iiy1oFc2mnu80FXDCw78Ri9ArFb8gWljmYYo/s1600/20101117_001.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzCcghem-8Jnng7oDbVnPQD0pmh9Iyl3CaBm4Uu55p3ZEQsvxY0V0t0lkNE3Z8fSC0yxoIK1NV6dKiCFvymzl6BSIPavtCEIuJpFBxMT9iiy1oFc2mnu80FXDCw78Ri9ArFb8gWljmYYo/s320/20101117_001.jpg" width="180" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Mockup: The diagram on the bottom shows how updates<br />
would propagate between widgets</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"><br />
</div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com4tag:blogger.com,1999:blog-6827527823540310316.post-14442904923357785342010-11-16T13:13:00.000-08:002010-11-17T02:25:05.976-08:00PiTiVi DialogsI am (finally) making progress on the two main dialogs in pitivi: "Project Settings" and "Render". I'll just get right to the point: Screenshots!<br />
<br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg7Wm6zZJLgGOx7Q2nH_HLPh4uSpcEK58ADQtqj8DdfV7tp7vxADBmnbB9OX1xxGlyoIN7gY-RzfaqW-WNZ5pkcL2T82DjERnPCkfqXDcIbwr67kFro6ii5k7wPRjKUZ3PKq7fbpP_W18/s1600/pitivi-render-video.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgg7Wm6zZJLgGOx7Q2nH_HLPh4uSpcEK58ADQtqj8DdfV7tp7vxADBmnbB9OX1xxGlyoIN7gY-RzfaqW-WNZ5pkcL2T82DjERnPCkfqXDcIbwr67kFro6ii5k7wPRjKUZ3PKq7fbpP_W18/s320/pitivi-render-video.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Render dialog showing video tab</td></tr>
</tbody></table><br />
<table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjfzQlYh5Bxat_O-8oIPIshnY-XwUxqQ4DhkT2oGHiu4PKhYEj3ZMpNvEOzpyU-V3jheC0yllST_cvkHbu2k_3FeJnSaUQkUN0Ykxam3xj7GHnm9StWvmuLnrPA9n7FgIRxX9wTpXCK-4/s1600/pitivi-render-general.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="241" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjfzQlYh5Bxat_O-8oIPIshnY-XwUxqQ4DhkT2oGHiu4PKhYEj3ZMpNvEOzpyU-V3jheC0yllST_cvkHbu2k_3FeJnSaUQkUN0Ykxam3xj7GHnm9StWvmuLnrPA9n7FgIRxX9wTpXCK-4/s320/pitivi-render-general.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Render dialog showing general tab</td></tr>
</tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitnSq531wB7Vi9_PlI8odr8TFsPKQ-kgZyv2xOMc5qUgLD8Ow4AJyq1caYQG9NiAa8Mcn4LC8mxZAm4uTlrhPzcCLdZ5Ui0hsrG5KZuEXF1WQXNL4b1YJwUGm5QwBqF91We2K9g_SUAk4/s1600/pitivi-project-settings-video.png" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="225" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEitnSq531wB7Vi9_PlI8odr8TFsPKQ-kgZyv2xOMc5qUgLD8Ow4AJyq1caYQG9NiAa8Mcn4LC8mxZAm4uTlrhPzcCLdZ5Ui0hsrG5KZuEXF1WQXNL4b1YJwUGm5QwBqF91We2K9g_SUAk4/s320/pitivi-project-settings-video.png" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Project settings showing video tab</td></tr>
</tbody></table><br />
<div class="separator" style="clear: both; text-align: center;"></div>I spent most of my time today on project settings. I'm still not quite happy with it, as the current design is, well, huge. I think I could make it a little narrower and shorter. But that's more-or-less what I'm after.<br />
<br />
The properties in the video tab are inter-dependent. One feature I wanted was for the widgets to ripple-update like a spreadsheet. To make this easier I wrote a class that manages a graph of widgets that you give it. Each widget can have an update function, and when the user changes one of the widgets, the the update functions are called starting from that widget in breadth-first order. During the traversal, updates are ignored to prevent infinite loops of signal emissions. This means I get my ripple updating behavior, but I only have to write a single, naive update function for each widget without worrying about keeping other widget values in sync.<br />
<br />
Tomorrow I will implement presets, make sure the dialogs remember their state, and then test the hell out of them.brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com4tag:blogger.com,1999:blog-6827527823540310316.post-28226049039130806162010-11-01T14:37:00.000-07:002010-11-01T14:41:44.039-07:00Side ProjectI started working in a calendar app. Right now you can think of it mainly as a prototype, but it's already got some interesting features. It's implemented in python, and while it relies on goocanvas at the moment, the calendar view is actually one big canvas item and could easily be ported to a stand-alone widget.<br />
<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieeJMcahfqTCUn6B5ZbMnfpmerjH_bSTvTyWmzk703vlu2ehQ_VbGLFFpjosFvpVvoqYI0uexoqE5EPTWHZ54BwpI01pIugrZ6c-eFIswo7Wmsgyg1Fq-o9BNyu3r_7TjcZ6dHGZhZnaI/s1600/calendar2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="227" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEieeJMcahfqTCUn6B5ZbMnfpmerjH_bSTvTyWmzk703vlu2ehQ_VbGLFFpjosFvpVvoqYI0uexoqE5EPTWHZ54BwpI01pIugrZ6c-eFIswo7Wmsgyg1Fq-o9BNyu3r_7TjcZ6dHGZhZnaI/s320/calendar2.png" width="320" /></a></div><br />
<b>Interface</b><br />
<br />
At first glance it looks like the week view used in most timelines. However, the view <i>is an infinite scrolling area.</i> There is no horizontal scroll bar, as this is a ranged widget. You move in time by clicking and dragging on the day heading. If you flick the heading, the calendar will continute to 'coast', slowing down gradually until it stops (or immediately if click on it).<br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Dm1TT0bFYWXxgA6sghLhhWx2ymN25xp87NWlTCmEdWoCkOX6uABsTHb8dODeV5s7SBZCrpY3eH0cREFb7Bb3J5QaLB-JkhhWkviI-as2KqbadWFAw-tlDfFTLTJo1_jvXOohrhSH25k/s1600/calendar_expanded.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0Dm1TT0bFYWXxgA6sghLhhWx2ymN25xp87NWlTCmEdWoCkOX6uABsTHb8dODeV5s7SBZCrpY3eH0cREFb7Bb3J5QaLB-JkhhWkviI-as2KqbadWFAw-tlDfFTLTJo1_jvXOohrhSH25k/s320/calendar_expanded.png" width="320" /></a></div><br />
I've found that I rarely look at the month view in a calendar application, so I sought to eliminate it. My calendars tend to have a lot of daily repeating events, making the month view seem cluttered. I mainly use it for skipping forward or backward to a specific week without loosing context, or to see a group of days that span a weekend.<br />
<br />
With infinite scrolling I found I really don't need the month view. I don't loose context skipping around because of the smoothness of the animation. Moreover, it's no trouble to position the calendar so that Friday is in the middle of the window (the coloration on the heading serves as a reference). Expanding the window will reveal more days, not make the days larger. If you want to look two weeks ahead, you can -- even on an eee 901. I do plan to add a zoom feature, however.<br />
<br />
<b>Selections</b><br />
<br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFzommcx9e7vqxeN4atzxOl5_6TgFKkdtWiuuGFNdS7ptnwhjByjBO1FTHP377TkjPXc_ioSy9nOB70bJXLqrnWFGl6e4WW3iAo4PZ_hN2taxkZ_wTHIPL_u6OmvWPSvBkgp4a62hkGog/s1600/selection+marquee.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgFzommcx9e7vqxeN4atzxOl5_6TgFKkdtWiuuGFNdS7ptnwhjByjBO1FTHP377TkjPXc_ioSy9nOB70bJXLqrnWFGl6e4WW3iAo4PZ_hN2taxkZ_wTHIPL_u6OmvWPSvBkgp4a62hkGog/s1600/selection+marquee.png" /></a>Another feature I've added as a reaction against current calendars: When you click and drag on the calendar itself, it doesn't create a new event automatically. I've always found this to be annoying. When I make a selection, I am usually in some kind of tentative state of mind. Moreover, in thunderbird and evolution, it's possible to accidentally create events that are too small to be selected, forcing you to go into another view to delete them. Again, really annoying. I don't want the application taking some action based on my half-baked ideas. I much prefer it to wait until I'm sure of myself.<br />
<br />
<b>Undo / Redo</b><br />
<br />
This applet is the first time I've implemented the Command Pattern in a program, and I'm curious to see how it pans out. The idea is that rather than employing low-level tricks to capture state for undo, you explicitly code the do and undo procedure for each action that your application supports. So far, New, delete, move, resize, and select can all be undone.<br />
<br />
I think that selection is too often left out as an undo action. Doubly annoying because selections are ephemeral, disappearing the minute you focus on something else. Often I select things without thinking. I've put a lot of work into creating selections, only to have them evaporate due to an errant click.<br />
<br />
On the implementation side, I distinguish between MenuCommands, from which menu and toolbar items can be created automatically, and MouseCommands (invoked repeatedly with new mouse coordinates before being committed to the UndoStack in their final state). Both types support a class-methods indicating whether they are currently available. This allows toolbar state to be managed, and for the controller to distinguish between one of several commands it might support.<br />
<br />
One thing I found is that with this approach, the Controller becomes a general-purpose object which mostly creates and commits commands to an UndoStack in response to low-level events. The controller implements the logic for detecting drag, click, double-click detection. The commands implement more concrete actions, such as moving an event in the calendar based on given mouse coordinates. The Controller only needs to be specialized to add new input events. For example, flicking the calendar is currently implemented with a custom controller.<br />
<br />
In the future I plan to make navigation undoable. I'm debating whether navigation commands should be posted to the main UndoStack, or into a separate stack that would be exposed as "Forward / Back". I'll have to try and see.<br />
<br />
<b>Development Status</b><br />
<br />
If I follow this out to its conclusion, it would need at least the following features before I'd call it "Done".<br />
<br />
<ul><li>Ability to edit the names of events</li>
<ul><li>tricky because the whole thing is done in raw cairo</li>
</ul><li>Some system for handling repeating events</li>
<li><div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;">convenience navigation buttons, such as "Today", "Last {Week, Month, Year}", "Next {Week, Month, Year}" etc.</div></li>
<li>Alarm notification system, and ability to handle alarms</li>
<li>Integration with google calendar (probably using libgdata)</li>
<li>some cosmetic improvements</li>
</ul><div>The implementation of the alarm notification system worries me most. I have only a vague idea of how I would implement that, and it would need to be absolutely reliable before I'd consider using this program myself. I do have some interesting ideas for how to create alarms and repeating events in the UI, however.</div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com3tag:blogger.com,1999:blog-6827527823540310316.post-50631032628019010342010-10-30T14:51:00.000-07:002010-10-30T14:51:20.790-07:00Shopping<div class="separator" style="clear: both; text-align: center;"></div><div style="text-align: left;">Coming home Saturday night I was delighted to see that "The Co-Operative" grocery store nearest my house was still open. I went in to buy some things for next morning's breakfast.</div><br />
<br />
There were two choices for bacon: one claiming Britain as its origin, and another from "the family farms of the Netherlands". At this point I must confess that my first reaction was "Eek! Why would I want Dutch bacon? I'm in England! The British bacon is for me." It seems I have begun to adopt a British point of view after only a few short weeks. That is until I looked more closely at the package and read that it consisted of <i>"87% pork."</i><div><br />
</div><div>I was perplexed. How in he world can 13% of a slice of bacon consist of something other than pork? Some minutes passed, during which time I surveyed the contents of the package. Perhaps closer inspection would reveal a portion of the of the slice where some miscreant had inserted turkey or beef. At least that would be a reasonable explanation. Alas, I found no signs of obvious adulteration.</div><div><br />
</div><div>Unsettled, I chose the Dutch variety.<div><br />
</div><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDSp4iisaA0fwOyuUzaj_TmC1RqzljZJqSOOznOuVtP9EmWbZzLBJ8RwyED5C-jGNIHU1MLYRjEwiCBoLjdMy603SL3tLpjUS_KUyBLWfElT-DZfNj_NPJ7-YlrVdinAFIwnigHeY0sm4/s1600/20100926_003.jpg" imageanchor="1" style="margin-left: auto; margin-right: auto;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDSp4iisaA0fwOyuUzaj_TmC1RqzljZJqSOOznOuVtP9EmWbZzLBJ8RwyED5C-jGNIHU1MLYRjEwiCBoLjdMy603SL3tLpjUS_KUyBLWfElT-DZfNj_NPJ7-YlrVdinAFIwnigHeY0sm4/s320/20100926_003.jpg" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Scene from a small boat punting up the Cam (the river in <b>Cam</b>bridge).</td></tr>
</tbody></table></div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com2tag:blogger.com,1999:blog-6827527823540310316.post-51841975721158585632010-10-09T13:51:00.000-07:002010-10-09T13:52:34.724-07:00Some More Pics From Spain, Continued...<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiruwr7US1VdIwTY4JfnYVJbIO2w8scC5sw_8oXiS9Kv-UIUrIBF90m5Uhi4A9cF4NrFUQdK_5P4ZtDsxOmVWMNidHZnS0pclgEl9hUBm7oIUnWzSS9iyjX4jvxa_JwGxO0D6EZUJGZOeg/s1600/P8080365.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiruwr7US1VdIwTY4JfnYVJbIO2w8scC5sw_8oXiS9Kv-UIUrIBF90m5Uhi4A9cF4NrFUQdK_5P4ZtDsxOmVWMNidHZnS0pclgEl9hUBm7oIUnWzSS9iyjX4jvxa_JwGxO0D6EZUJGZOeg/s320/P8080365.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8VAt4jWENbQCNBATnkXCWYoKfiaU-tCNFdvP9fxG6rWVYZjqjApKAEkVa7i_-WbO_8qxerN5vSX5A3pmWQ1azkURzJp3yP41v6JNrUxj7oyI3kyYNh3km5RJ1f-jEq4xh6-JuLy_u-38/s1600/P8080364.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi8VAt4jWENbQCNBATnkXCWYoKfiaU-tCNFdvP9fxG6rWVYZjqjApKAEkVa7i_-WbO_8qxerN5vSX5A3pmWQ1azkURzJp3yP41v6JNrUxj7oyI3kyYNh3km5RJ1f-jEq4xh6-JuLy_u-38/s320/P8080364.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">I ate at this really neat cafe in Figueres. </div><div class="separator" style="clear: both; text-align: center;">The bathroom was entirely stainless steel, and used car door handles.</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyAZ22Mpq86iVrRxXLaIFhw8j616RId5fQkIAb6fLlKbXFJgT2yQYQY_SLAN411aVS87xiEacXaui459mpfL_lwmFv7IEGAirt3MjqTKzc1ip8I4-aRG-gdQWqxe11siaRcdf2Gf92I1Y/s1600/P8080363.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyAZ22Mpq86iVrRxXLaIFhw8j616RId5fQkIAb6fLlKbXFJgT2yQYQY_SLAN411aVS87xiEacXaui459mpfL_lwmFv7IEGAirt3MjqTKzc1ip8I4-aRG-gdQWqxe11siaRcdf2Gf92I1Y/s320/P8080363.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh79C3TeSR_5x17ED4CvgJYNGt70Ca0i147KCMV7poaIVB_brYdO1MThls7nOR2u7LNhUreIg15RxpWhVhdHUH9JdYq1Xi5QCyXo6v-ZeFK5_ARbYvOJmTke87ipVdusHyXExS0fdTSxWU/s1600/P8080362.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh79C3TeSR_5x17ED4CvgJYNGt70Ca0i147KCMV7poaIVB_brYdO1MThls7nOR2u7LNhUreIg15RxpWhVhdHUH9JdYq1Xi5QCyXo6v-ZeFK5_ARbYvOJmTke87ipVdusHyXExS0fdTSxWU/s320/P8080362.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">Here I am, trying to be artistic</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFKK3d7aYrqZFo_ahebLRUEm5w1GdyevDH6X5AF5WqtJTQQPYctAD_tF9yM8g1tRXSOdSbFbshBhNuY56f8UFDZNR6_9mmyKnkw_mkUOxQqF5lHLSLYU91BCXCLS4zYuTBHKCogsNPteA/s1600/P8080361.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhFKK3d7aYrqZFo_ahebLRUEm5w1GdyevDH6X5AF5WqtJTQQPYctAD_tF9yM8g1tRXSOdSbFbshBhNuY56f8UFDZNR6_9mmyKnkw_mkUOxQqF5lHLSLYU91BCXCLS4zYuTBHKCogsNPteA/s320/P8080361.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlvTwKzzvx_-EjvfEt51d1NEr1rIc1w0KXa_-SeL6Xt3KoFFQefSsukfKe015zI2fkGOCOnrfJvHJuegabAtmcSCRkK72F5U6KHxcfmc-rBallPUrgk99xZfznRw-pTBfmsYuhnWvHoXE/s1600/P8080360.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlvTwKzzvx_-EjvfEt51d1NEr1rIc1w0KXa_-SeL6Xt3KoFFQefSsukfKe015zI2fkGOCOnrfJvHJuegabAtmcSCRkK72F5U6KHxcfmc-rBallPUrgk99xZfznRw-pTBfmsYuhnWvHoXE/s320/P8080360.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi11ls3SY_QlCdQZGryDmawdJbppO5nIP1viLN4J3_5RB1mcXRVx6WSmWoPxSKV0bOGm-XcQXZvIGoaQgdBGCJR-Kq90qnWO0Vr1Pkam_e2FBUKfkBg1jNK90kaUzsLScIAnsbc_3cFSsM/s1600/P8080359.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi11ls3SY_QlCdQZGryDmawdJbppO5nIP1viLN4J3_5RB1mcXRVx6WSmWoPxSKV0bOGm-XcQXZvIGoaQgdBGCJR-Kq90qnWO0Vr1Pkam_e2FBUKfkBg1jNK90kaUzsLScIAnsbc_3cFSsM/s320/P8080359.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUx_oPckAxdM3UW2cG4u8IvBEmD9wYFLd4MLk_nrix4Vu4PhZyHtv4ggU0Z3W7_Ne1znjIbz_9ehKWOalrvqefskIMs38yU5L16ZUP4-TKfwbTMs5MNKJa6q6ammvAcnlkp3Rr3F0TTtI/s1600/P8080372.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUx_oPckAxdM3UW2cG4u8IvBEmD9wYFLd4MLk_nrix4Vu4PhZyHtv4ggU0Z3W7_Ne1znjIbz_9ehKWOalrvqefskIMs38yU5L16ZUP4-TKfwbTMs5MNKJa6q6ammvAcnlkp3Rr3F0TTtI/s320/P8080372.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">There's a lot of really good street art in Figueres...</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5DhwfeUfzrsHthduwAXh-nTcierk-ejn5LZj7nk8Xe_qGesGF0vQdiI6qFnQo0IlXv7UQtW3f5Ge5yUwEeeb1twhdQbD8_Svw_JL3dy8Up06POjstcgQ6u5Qp3Yhd3YYgzlUeEg_j8j8/s1600/P8070352.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg5DhwfeUfzrsHthduwAXh-nTcierk-ejn5LZj7nk8Xe_qGesGF0vQdiI6qFnQo0IlXv7UQtW3f5Ge5yUwEeeb1twhdQbD8_Svw_JL3dy8Up06POjstcgQ6u5Qp3Yhd3YYgzlUeEg_j8j8/s320/P8070352.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">...as well as the more typical variety.</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJXi9OwMyKCxXUYTK7iX-vIEA9Ehuuqo3eWo1833I2gxPd0KqTk8f5fA4Fg4ykrfwCdZpXw-edyYNi_V5S3hDwRA_KlL6t6pLPM0tgZsuIgJVO5CpA6Jdi2i7-0d6kk04FQJufUQqBG0s/s1600/P8080358.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjJXi9OwMyKCxXUYTK7iX-vIEA9Ehuuqo3eWo1833I2gxPd0KqTk8f5fA4Fg4ykrfwCdZpXw-edyYNi_V5S3hDwRA_KlL6t6pLPM0tgZsuIgJVO5CpA6Jdi2i7-0d6kk04FQJufUQqBG0s/s320/P8080358.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiymR1w_I1dJNUAWnHPf4l9icPzrjKQ6skIOKirlX-bqsKk3QF0awfwTEYAtU091TCGyT3f4MpiJXVowG8oagzIdBqoPC61GXsASlfTM91wmVWk0DBusWny1zJfwDaf2ZJr782rIonIkG4/s1600/P8080371.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiymR1w_I1dJNUAWnHPf4l9icPzrjKQ6skIOKirlX-bqsKk3QF0awfwTEYAtU091TCGyT3f4MpiJXVowG8oagzIdBqoPC61GXsASlfTM91wmVWk0DBusWny1zJfwDaf2ZJr782rIonIkG4/s320/P8080371.jpg" width="320" /></a><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="" style="clear: both; text-align: center;">More scenes from Figueres.</div><div class="" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-hiGX9Ze9_98zgSOXaUSMcRyJuaOGLNJOAt7r8G9-AQFDknPwnk3zuAzq7OAp9FxgcZ8fVmxvd18pfco05GDyAPOXbtDm-DrgEMpxKUr4Plr38NsF_mDbEVf2HSvENeRGOXZthK65ob0/s1600/P8080369.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-hiGX9Ze9_98zgSOXaUSMcRyJuaOGLNJOAt7r8G9-AQFDknPwnk3zuAzq7OAp9FxgcZ8fVmxvd18pfco05GDyAPOXbtDm-DrgEMpxKUr4Plr38NsF_mDbEVf2HSvENeRGOXZthK65ob0/s320/P8080369.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: auto;"><br />
</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqDfci3aii0PTUqe8897_DTEP-qSdm6DzUolvb5QXgfd3VKiMDQ6dY3mjvTZlOQHwbVGSpLA3gePqc8saEouGOgcqcLDZVWflAGvYYyeQKqOcnFQOYl623HyQpj73x2aZThpc8UBzc4E/s1600/P8080370.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgnqDfci3aii0PTUqe8897_DTEP-qSdm6DzUolvb5QXgfd3VKiMDQ6dY3mjvTZlOQHwbVGSpLA3gePqc8saEouGOgcqcLDZVWflAGvYYyeQKqOcnFQOYl623HyQpj73x2aZThpc8UBzc4E/s320/P8080370.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiymCoMAphgj9PJ_pQji0r5wzal89oQPMa-C_Lec2vELRPAXhTxLSjh20dI2xc6T5ehJJ1wvDmuTXVNDNhXCZ1VtTQELoaRzq0HvvWpVjpiMBX1SUJqLftU0qAOKqtSfGKLd4hqoXjuS-w/s1600/P8080373.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiymCoMAphgj9PJ_pQji0r5wzal89oQPMa-C_Lec2vELRPAXhTxLSjh20dI2xc6T5ehJJ1wvDmuTXVNDNhXCZ1VtTQELoaRzq0HvvWpVjpiMBX1SUJqLftU0qAOKqtSfGKLd4hqoXjuS-w/s320/P8080373.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmc8CDo_zC97ZC9R9oAJnW2d_Dexr1jrNs_O_i1iseDWLFFja6okSrGxCR8-GwsfDuvabLcv_lDFuhhkncIDMKdf0cfLOwiRR8YRDoxCBJVvHHEjMohcv47GnTiJSevNAVcSwcDHqZP0c/s1600/P8080374.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmc8CDo_zC97ZC9R9oAJnW2d_Dexr1jrNs_O_i1iseDWLFFja6okSrGxCR8-GwsfDuvabLcv_lDFuhhkncIDMKdf0cfLOwiRR8YRDoxCBJVvHHEjMohcv47GnTiJSevNAVcSwcDHqZP0c/s320/P8080374.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">Waiting for the train back to Barcelona.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3tCp1Go9vCIO11w786oJ8CR2ua7kJqUw9KlvFHt0j0QgryQfIkHE61c8g4ix10zBzZqcvc2uRfwD-l0qinfxX58VZ0VHDS7uRTMopO_WRsiK-XF2PkZ7oLqDbwpcr1Lelt_UZ-vq83o8/s1600/P8080353.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi3tCp1Go9vCIO11w786oJ8CR2ua7kJqUw9KlvFHt0j0QgryQfIkHE61c8g4ix10zBzZqcvc2uRfwD-l0qinfxX58VZ0VHDS7uRTMopO_WRsiK-XF2PkZ7oLqDbwpcr1Lelt_UZ-vq83o8/s320/P8080353.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">In front of the Dali museum, with a dopey grin.</div><div class="separator" style="clear: both; text-align: center;">It's worth the trip. Thanks for the tip, Kat!</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhb6ce6wwvlkv3jKZ6ECkKam8QE4kji_TDyK00BgCkCSa0Pco_gg_SFtl7Aq5vC2XWP4SENWuPwIJlJPhs_QeF7GglkCrHCPuJq1o52W1HZPJvWNWpbV7lpCrveJtA0ha8RAhOl9S3G38/s1600/P8080354.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhb6ce6wwvlkv3jKZ6ECkKam8QE4kji_TDyK00BgCkCSa0Pco_gg_SFtl7Aq5vC2XWP4SENWuPwIJlJPhs_QeF7GglkCrHCPuJq1o52W1HZPJvWNWpbV7lpCrveJtA0ha8RAhOl9S3G38/s320/P8080354.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">A closeup of the the dots on the exterior of the</div><div class="separator" style="clear: both; text-align: center;">building. Each one appears to be slightly</div><div class="separator" style="clear: both; text-align: center;">different.</div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0tag:blogger.com,1999:blog-6827527823540310316.post-52736649656102120992010-10-09T13:38:00.000-07:002010-10-09T13:38:37.882-07:00Some More Pics From Spain<div class="separator" style="clear: both; text-align: left;">I've been out of Spain for a couple of months, but I still have plenty of photos I never posted. Truth be told I found it a bit painful to manually upload them. I don't know why it never occurred to me to use Picasa until just now. Enjoy.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK4fDGz91ggErPEpw-D40_zOrU90W_xoMzeCTyRPybLBV7H9sddlNeYXU1SmVy8fEZdZFj9QUBdxx1u2DC2cm2sKHtVY5KwJUHzJvtk3CcL3CXdI_NloC4IDTv3IEv4awuRsgbhbvMwT0/s1600/P8070347.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK4fDGz91ggErPEpw-D40_zOrU90W_xoMzeCTyRPybLBV7H9sddlNeYXU1SmVy8fEZdZFj9QUBdxx1u2DC2cm2sKHtVY5KwJUHzJvtk3CcL3CXdI_NloC4IDTv3IEv4awuRsgbhbvMwT0/s320/P8070347.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrRbfCHFBUNYcftQXWZ9aZ0oyleHpDogQbxp_nEFDtO3LokBL-jki0qOEsacPBEN1DUlvFQXwcUC-ZdLCsS2NNwnAx9R9EDnZR4jzJug1c-76bxIZ_qq_kMmlRe3xVMg9ndOBleirFU7w/s1600/P8070344.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrRbfCHFBUNYcftQXWZ9aZ0oyleHpDogQbxp_nEFDtO3LokBL-jki0qOEsacPBEN1DUlvFQXwcUC-ZdLCsS2NNwnAx9R9EDnZR4jzJug1c-76bxIZ_qq_kMmlRe3xVMg9ndOBleirFU7w/s320/P8070344.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiXZfe2tUVOsOa6ujcPpVr0MDsWvgIMtpTqprh_2GtZ-i_baebzBbyWip3_gYesPtj3veD8UFq4pAQQj_Rh7efhxNgFFwfszew8p0uzKqcNalynE9kJ8L-l8SvxXsY8zb2gXTJP8Cdh9A/s1600/P8070345.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiXZfe2tUVOsOa6ujcPpVr0MDsWvgIMtpTqprh_2GtZ-i_baebzBbyWip3_gYesPtj3veD8UFq4pAQQj_Rh7efhxNgFFwfszew8p0uzKqcNalynE9kJ8L-l8SvxXsY8zb2gXTJP8Cdh9A/s320/P8070345.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu8mJI30YyN0VDIiudLYNUBOk6R6rR68H94-tcYhDfZSaXfGKw7PaBQpCtv3Smd4b0Ctv_RyzLx04RoytpAkD_SJxER_2jz3TW0M3V3i0qfgLh8XNqCNP9I6Khw22VzapXHxKI0D2mMEA/s1600/P8070346.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgu8mJI30YyN0VDIiudLYNUBOk6R6rR68H94-tcYhDfZSaXfGKw7PaBQpCtv3Smd4b0Ctv_RyzLx04RoytpAkD_SJxER_2jz3TW0M3V3i0qfgLh8XNqCNP9I6Khw22VzapXHxKI0D2mMEA/s320/P8070346.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK4fDGz91ggErPEpw-D40_zOrU90W_xoMzeCTyRPybLBV7H9sddlNeYXU1SmVy8fEZdZFj9QUBdxx1u2DC2cm2sKHtVY5KwJUHzJvtk3CcL3CXdI_NloC4IDTv3IEv4awuRsgbhbvMwT0/s1600/P8070347.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgK4fDGz91ggErPEpw-D40_zOrU90W_xoMzeCTyRPybLBV7H9sddlNeYXU1SmVy8fEZdZFj9QUBdxx1u2DC2cm2sKHtVY5KwJUHzJvtk3CcL3CXdI_NloC4IDTv3IEv4awuRsgbhbvMwT0/s320/P8070347.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">Tarragona</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4OH40lXE033TbCukcSDizqOuxWnI9rPqc6Azk5VJllXcUTB0YZJvtYCzzKW3FUPmvN2TXTVGoa2NokBBJUe77nzfeEKT_VyhKwYo5q85M8lrdo0raxUeAB9KK5kH3Vjz5yO-4fHJQKAA/s1600/P7030271.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4OH40lXE033TbCukcSDizqOuxWnI9rPqc6Azk5VJllXcUTB0YZJvtYCzzKW3FUPmvN2TXTVGoa2NokBBJUe77nzfeEKT_VyhKwYo5q85M8lrdo0raxUeAB9KK5kH3Vjz5yO-4fHJQKAA/s320/P7030271.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="http://1.bp.blogspot.com/_0j8m-AnSlU8/TLDRIQeeFbI/AAAAAAAAAWQ/ri0Fj4hEA84/s1600/P7030263.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="http://1.bp.blogspot.com/_0j8m-AnSlU8/TLDRIQeeFbI/AAAAAAAAAWQ/ri0Fj4hEA84/s320/P7030263.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKuiGlmKnLFLXTEIFmjkWQ9iD20ui0xIQCXcXiWZf1Tp99EqieL9PNpdZOOltj58IjXABPQDjz_fqa7GwZa5qFJ1FQI9GYaQJQ4BhTZp_6460NDhEsSIPIG0sQ0WRaaGfl-I0DJ2K0w6g/s1600/P7030270.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjKuiGlmKnLFLXTEIFmjkWQ9iD20ui0xIQCXcXiWZf1Tp99EqieL9PNpdZOOltj58IjXABPQDjz_fqa7GwZa5qFJ1FQI9GYaQJQ4BhTZp_6460NDhEsSIPIG0sQ0WRaaGfl-I0DJ2K0w6g/s320/P7030270.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLbb9a5s3u3Qg5J9RaGnObaMwFIZiZfHv0JMAQjFMnb2WASrREzR_9c7wb7Qb-dN-vQhfTpm8OHRNDkItptrqpX8hftOHc5o-sALE3SRYrz65RxqqKoiTX7MTnbtMvalAp8UsYXKcR8bg/s1600/P7030276.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjLbb9a5s3u3Qg5J9RaGnObaMwFIZiZfHv0JMAQjFMnb2WASrREzR_9c7wb7Qb-dN-vQhfTpm8OHRNDkItptrqpX8hftOHc5o-sALE3SRYrz65RxqqKoiTX7MTnbtMvalAp8UsYXKcR8bg/s320/P7030276.jpg" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"><br />
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ9G_0IwXgbdYY-0CKTKn8_XnHufo-0jwCtpAq0nO5_bRYwMIx7o_autBv3PBjD271hKxLRzX3zofzwl7eq2i0fH7gbzxzpo7bKIVdF4XJLG_TSldc2MkPG7zh-lmVS9AZMS5xMuAdYtw/s1600/P7030283.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJ9G_0IwXgbdYY-0CKTKn8_XnHufo-0jwCtpAq0nO5_bRYwMIx7o_autBv3PBjD271hKxLRzX3zofzwl7eq2i0fH7gbzxzpo7bKIVdF4XJLG_TSldc2MkPG7zh-lmVS9AZMS5xMuAdYtw/s320/P7030283.jpg" width="320" /></a></div><div class="" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_l2bsd1g9UoI-2uGWwbAa0vK0qWYhSzYMsBlwrzr41EcB3BlQxvCkic4NZ0rnCvpMq3mcJCjM8cCR8yY3vYZrQMw0EyHreCoAlP43urZKGIil_ohWkEsZpzk6L-aIhj2WA-d5oYVYgEU/s1600/P6280229.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_l2bsd1g9UoI-2uGWwbAa0vK0qWYhSzYMsBlwrzr41EcB3BlQxvCkic4NZ0rnCvpMq3mcJCjM8cCR8yY3vYZrQMw0EyHreCoAlP43urZKGIil_ohWkEsZpzk6L-aIhj2WA-d5oYVYgEU/s320/P6280229.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPdMWoi1hKTclWOMR3zrtrpqAOUYeKwH6WJBwpqe2J2YAJYD2Dpk3lN0s1smWZM1YFaL7skx0GyYB80MthoCjEqFFAk4y16Y9P7RWJb-vQCL6T-igHkYLHBysDEau1Pwxu9TIdc9ShaFU/s1600/P7030242.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPdMWoi1hKTclWOMR3zrtrpqAOUYeKwH6WJBwpqe2J2YAJYD2Dpk3lN0s1smWZM1YFaL7skx0GyYB80MthoCjEqFFAk4y16Y9P7RWJb-vQCL6T-igHkYLHBysDEau1Pwxu9TIdc9ShaFU/s320/P7030242.jpg" width="320" /></a></div><div class="" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;">Scenes from a public concert in Montjuic</div><div class="" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_l2bsd1g9UoI-2uGWwbAa0vK0qWYhSzYMsBlwrzr41EcB3BlQxvCkic4NZ0rnCvpMq3mcJCjM8cCR8yY3vYZrQMw0EyHreCoAlP43urZKGIil_ohWkEsZpzk6L-aIhj2WA-d5oYVYgEU/s1600/P6280229.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_l2bsd1g9UoI-2uGWwbAa0vK0qWYhSzYMsBlwrzr41EcB3BlQxvCkic4NZ0rnCvpMq3mcJCjM8cCR8yY3vYZrQMw0EyHreCoAlP43urZKGIil_ohWkEsZpzk6L-aIhj2WA-d5oYVYgEU/s320/P6280229.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimt0ZfcKWcFul1STf5pT-CO3uCqiQFE2kg-fa5pjnHokET3oO99fc8vCoc_qVu0-uWKrQH027AxQqtSAeXFwJSIC3rlZ5KYufo9hh-MpFY4Br6BROX-Wf1pggy33GGL4LCAmsnkj0eKsQ/s1600/P6280230.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimt0ZfcKWcFul1STf5pT-CO3uCqiQFE2kg-fa5pjnHokET3oO99fc8vCoc_qVu0-uWKrQH027AxQqtSAeXFwJSIC3rlZ5KYufo9hh-MpFY4Br6BROX-Wf1pggy33GGL4LCAmsnkj0eKsQ/s320/P6280230.jpg" width="320" /></a></div><div class="" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"><br />
</div><div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;">A warm waffle, covered in chocolate sauce and sweetened condensed milk. Purchased from the above stand.</div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0tag:blogger.com,1999:blog-6827527823540310316.post-59698647328829647282010-10-04T13:43:00.000-07:002010-10-04T13:46:42.118-07:00So, I'm in Cambridge, UK now. I've been meaning to post up for days but haven't quite found the time. I'm going to try to get some longer posts out in the next couple of weeks, but for now I'll settle for something short and simple.<br />
<br />
<b>Quote of the Week</b><br />
<br />
The other day I was walking through Midsummer Common, which is a big green field near the center of town that normally contains quite a few cows. Instead there was some kind of bicycle race event and the place was packed with people and cycles. I smelled the smell of good, greasy food -- like the kind you get at a county fair or a race track -- so I sauntered on in. As I was munching on a tasty roast pork sandwich (with stuffing and apple sauce) I overheard the following snippet of conversation:<br />
<br />
<i>Boy (in a whiny English kid voice): </i>So, can I mum, can I?<br />
<i>Parent: </i>No Roger, you've been an absolute <i>muppet</i> today!<br />
<br />
That's the first time I have ever heard the word "muppet" used this way. I wasn't sure whether it was a fluke or not, but while house-hunting today, my would-be roomate used the term in the exact same way to describe someone who forgets to lock up the house when they're the last to leave.<br />
<br />
<b>Nerd Section</b><br />
<b><br />
</b><br />
Some time ago I got distracted by a silly idea that just wouldn't leave me alone. It kept gnawing at me to follow it up, so eventually I gave in and started hacking on it. Have a look at the following code. I'll give you three guesses to tell me what language it's written in.<br />
<br />
<br />
<div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span id="internal-source-marker_0.19124090624973178" style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> DEF (id(outer) FUNCTION(id(x)</span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> FUNCTION(id(ignored) VAL(x))))</span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> DEF (id(one_ret) APPLY(VAL(outer) _(</span><span style="background-color: transparent; color: #009999; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1</span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)))</span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> DEF (id(two_ret) APPLY(VAL(outer) _(</span><span style="background-color: transparent; color: #009999; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">2</span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">)))</span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"></span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> PRINT (APPLY (VAL(one_ret) _()))</span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> PRINT (APPLY (VAL(two_ret) _()))</span></div><br />
<span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; white-space: pre-wrap;"> DEF (id(count_backward) FUNCTION(id(x)</span><br />
<div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> IF(NOT(VAL(x))</span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> PRINT (_(done))</span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> BLOCK(</span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> PRINT (VAL(x))</span><br />
<span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"> APPLY(VAL(count_backward) MINUS(VAL(x) I(</span><span style="background-color: transparent; color: #009999; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">1</span><span style="background-color: transparent; color: black; font-family: 'Courier New'; font-size: 10pt; font-style: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;">))</span><br />
<span class="Apple-style-span" style="font-family: 'Courier New'; font-size: 13px; white-space: pre-wrap;"> )))))</span></div><br />
<b><br />
</b><br />
No, it's not LISP. The parenthesis go on the outside of the expression.<br />
<br />
No, it's not python. Notice how there's no commas separating arguments.<br />
<br />
Did I hear someone say haskell? Now you're just being silly.<br />
<br />
It's actually C. Through abuse of variadic functions and preprocessor macros, I implemented a functional, dynamic language directly in C. For the curious, you can see the full example at my git repository, <a href="http://github.com/emdash/goof/blob/no_commas/simple.c">http://github.com/emdash/goof/blob/no_commas/simple.c</a>:<br />
<br />
I did it for fun, but it does work. Bonus points for explaining how it works in a comment.brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com2tag:blogger.com,1999:blog-6827527823540310316.post-86038117084110148052010-08-16T03:59:00.000-07:002010-08-16T03:59:54.365-07:00Returning HomeI'm a bad blogger, I know. I didn't even post before leaving spain :( In the last couple of weeks I managed to do some traveling around Catalonia, seeing Taragona and Figueres. Dali Museum is really quite awesome in Figueres. Taragona has roman ruins and a good beach. Have pictures, but not on this computer. Will try and post them soon.<br />
<br />
I'm currently in Boston visiting some friends on my way back home. My friends live between Harvard and MIT. Walked around the campus and then my friend took me down town to see boston common, and the harbor. We also passed by the grave yard where Paul Revere, John Hancock, and the victims of the Boston Massacre are buried. John Hancock's tomb stone is the largest of the bunch. While walking through downtown Boston we ran into Richard Stallman. That's all I've got for the moment.<br />
<br />
Today I am thinking about busing to New York city and back for a bagel, a hot dog, and a pizza. But we'll see. Jet lag and my friend's cat have combined to give me a bit of a jumpstart on the day. I'm looking at the schedules right now.brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0tag:blogger.com,1999:blog-6827527823540310316.post-25481376903713857712010-07-23T15:20:00.000-07:002010-07-23T15:20:27.138-07:00Getting Ready for GUADECThe last few days have been a welcome reprieve from the oppressive summer heat. Thank god for that. Of course it cools down just before my departure to the Netherlands for GUADEC.<br />
<br />
Going to GUADEC next week. There's going to be a big PiTiVi hackfest involving the majority of the current PiTiVi contributors. I'm really looking forward to some serious progress.<br />
<br />
Also hoping to give a lightning talk about some hair-brained ideas I have for UI development.<br />
Last week, my friend Aaron came to visit and we rented scooters and rode around the city. It was hot, but fun. Enjoy the photos.<br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-bottom: 0.5em; margin-left: auto; margin-right: auto; padding-bottom: 6px; padding-left: 6px; padding-right: 6px; padding-top: 6px; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVptQK8yBjKDO6K0EeydgZMQFECkNrwg04oAGpTudBFNJgpuCQX9MRWOyQOzLOdk34UmqBbiKnQuBcsOJrAevnhXF343uaqsf6J8DcBFUH6R0C79XwDEyw0TG5qPclkVHre4fjzDWr-ac/s1600/P7170336.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiVptQK8yBjKDO6K0EeydgZMQFECkNrwg04oAGpTudBFNJgpuCQX9MRWOyQOzLOdk34UmqBbiKnQuBcsOJrAevnhXF343uaqsf6J8DcBFUH6R0C79XwDEyw0TG5qPclkVHre4fjzDWr-ac/s320/P7170336.JPG" width="320" /></a></td></tr>
<tr><td class="tr-caption" style="font-size: 15px; padding-top: 4px; text-align: center;">This is us up at Parc Guell.<span class="Apple-style-span" style="font-size: medium;"><span class="Apple-style-span" style="font-size: large;"><span class="Apple-style-span" style="font-size: 18px;"><br />
</span></span></span></td></tr>
</tbody></table><table align="center" cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNLWp78hnnrGqdSLRVoCZZcCAkXyxvgmlidZaLEBivpk-l10HQHVFJAL2jIQ6J_SQ88-FQomyVLFfYBTsQ8YJ27bNJ7lyGHUhpyTEU0dcKbwu4kC_EEXozqFmUlC0rcBpa4ILO2IOEhF0/s1600/P7170335.JPG" imageanchor="1" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhNLWp78hnnrGqdSLRVoCZZcCAkXyxvgmlidZaLEBivpk-l10HQHVFJAL2jIQ6J_SQ88-FQomyVLFfYBTsQ8YJ27bNJ7lyGHUhpyTEU0dcKbwu4kC_EEXozqFmUlC0rcBpa4ILO2IOEhF0/s200/P7170335.JPG" width="200" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;"><br />
</td></tr>
</tbody></table><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx0G0FRTwCgyn3aeVpxGEFkKDpEn2VuSAcOyJ0yvZMQ7GEQEI68F7TrwI9SN_wAaZYNNRhCqrHmg4W80BxASzcAxYUbgsKc144I7A8Dw1o2zQ9wjOYMN-waeYmCI293it-2drP7aexqk0/s1600/P7170332.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhx0G0FRTwCgyn3aeVpxGEFkKDpEn2VuSAcOyJ0yvZMQ7GEQEI68F7TrwI9SN_wAaZYNNRhCqrHmg4W80BxASzcAxYUbgsKc144I7A8Dw1o2zQ9wjOYMN-waeYmCI293it-2drP7aexqk0/s200/P7170332.JPG" width="150" /></a></div><br />
<br />
<table cellpadding="0" cellspacing="0" class="tr-caption-container" style="margin-left: auto; margin-right: auto; text-align: center;"><tbody>
<tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMuShtSZc6L5ndrDofmxYfHMJNCCH8ZXIqnQksdGLkB0GnuhF1uQXOcJ1FmgwciDtbd9G3MXC9G9Wj968EES89Rj3ybpOpPdIuXkFGtWyeiy1BnioDLDo0rZ2zeN-O-gYc8Nf8vG5fKLg/s1600/P7170324.JPG" imageanchor="1" style="clear: left; display: inline !important; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMuShtSZc6L5ndrDofmxYfHMJNCCH8ZXIqnQksdGLkB0GnuhF1uQXOcJ1FmgwciDtbd9G3MXC9G9Wj968EES89Rj3ybpOpPdIuXkFGtWyeiy1BnioDLDo0rZ2zeN-O-gYc8Nf8vG5fKLg/s320/P7170324.JPG" width="240" /></a></td></tr>
<tr><td class="tr-caption" style="text-align: center;">Did you ever think you'd see Aaron on a scooter?</td></tr>
</tbody></table><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqPswaadSvHwxVFk1SJ-qbz1M0P7K3hA9B6oE2GFFJ7pDUj5YjthmdYHzM0LNsFLC2f4DeZF0k5niMlarURCMWB-4Wd3fFjTq9EPhUXV0FcnjfVnymdv63no-k0NkeseFanjv2YpS8FQI/s1600/P7170326.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiqPswaadSvHwxVFk1SJ-qbz1M0P7K3hA9B6oE2GFFJ7pDUj5YjthmdYHzM0LNsFLC2f4DeZF0k5niMlarURCMWB-4Wd3fFjTq9EPhUXV0FcnjfVnymdv63no-k0NkeseFanjv2YpS8FQI/s320/P7170326.JPG" width="240" /></a></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM4AePUO2T899_QLB-VmWkSLE79eSWB_K5DuSuLLKAYM5N16-SDdGwvp-q-sSkIGBYVGnlWpC_917EHJYa-IIC7nAdojoxJcfliyFBsQn2cPecdUTTJnUnvMXl2eq2_YVeRvGTeCvOdEE/s1600/Photo071.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhM4AePUO2T899_QLB-VmWkSLE79eSWB_K5DuSuLLKAYM5N16-SDdGwvp-q-sSkIGBYVGnlWpC_917EHJYa-IIC7nAdojoxJcfliyFBsQn2cPecdUTTJnUnvMXl2eq2_YVeRvGTeCvOdEE/s320/Photo071.jpg" width="320" /></a></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjac1j-Iuv2vOYmAcaThJs7xdQXSlLjO93BF5sXjuA3Nuw_57QMZMJXlNHhCofXIYw80qInivchQfC0p4DRpdP-qGNZ-kY4F0bUKaRwOQt6ffChQ0ent5BBETiLhJZ-hLlLWsiC068qgsc/s1600/Photo070.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjac1j-Iuv2vOYmAcaThJs7xdQXSlLjO93BF5sXjuA3Nuw_57QMZMJXlNHhCofXIYw80qInivchQfC0p4DRpdP-qGNZ-kY4F0bUKaRwOQt6ffChQ0ent5BBETiLhJZ-hLlLWsiC068qgsc/s320/Photo070.jpg" width="320" /></a></div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhu3hIAxOdKRH9_qMZxVCKuRq7a3-MumHQzN4hpY6aytrsQOYK1e-09h-sFVwSZI8N6GstTJAOpW6CfKPdVOpefcIM-NKW8t8tyc7sYTQYY7qoRCwjmnuSowgLAZmyl8DwKeRi8Rg4bks/s1600/Photo062.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhu3hIAxOdKRH9_qMZxVCKuRq7a3-MumHQzN4hpY6aytrsQOYK1e-09h-sFVwSZI8N6GstTJAOpW6CfKPdVOpefcIM-NKW8t8tyc7sYTQYY7qoRCwjmnuSowgLAZmyl8DwKeRi8Rg4bks/s320/Photo062.jpg" width="320" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPHNleVexhtrCatJZyAIysQDaTxpyGY6M8YkQPCKsuG-COuLCiCTvbF9xclvE5VeMNI-hqvubBoGIDhGehRi7-3w9FhjLFQ92tujroQM6Ag2NaddGWxPROWPwMN3jcHCGrWb19sUO1YAk/s1600/Photo069.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgPHNleVexhtrCatJZyAIysQDaTxpyGY6M8YkQPCKsuG-COuLCiCTvbF9xclvE5VeMNI-hqvubBoGIDhGehRi7-3w9FhjLFQ92tujroQM6Ag2NaddGWxPROWPwMN3jcHCGrWb19sUO1YAk/s320/Photo069.jpg" width="320" /> </a></div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com1tag:blogger.com,1999:blog-6827527823540310316.post-21842057009221635372010-07-22T06:02:00.000-07:002010-07-22T06:02:36.769-07:00Ear Worms<ol><li><a href="http://www.youtube.com/watch?v=pFGjKBW7cHQ">http://www.youtube.com/watch?v=pFGjKBW7cHQ</a></li>
<li><a href="http://www.youtube.com/watch?v=x7vI7kAjjpg">http://www.youtube.com/watch?v=x7vI7kAjjpg</a></li>
<li><a href="http://www.youtube.com/watch?v=26GlmgxR29c">http://www.youtube.com/watch?v=26GlmgxR29c</a></li>
</ol><div>Enjoy the rest of your day.</div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com4tag:blogger.com,1999:blog-6827527823540310316.post-26050589082936805282010-07-18T10:22:00.000-07:002010-07-18T11:36:47.608-07:00Moto Mania (part 2)<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhizX7O1Wm2T1NVMnMWjUQwGyYRvuW08-6ZczSLilBZrXN_m89OO1d3LX7zorQhRPDZx9GLv2goXurkexTGjW8zypPxIiB-sY1xBusYvfZR3uoGAEpyg2LDYYo9f1OLpl2i6EtVvMz04I/s1600/P6270210.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhizX7O1Wm2T1NVMnMWjUQwGyYRvuW08-6ZczSLilBZrXN_m89OO1d3LX7zorQhRPDZx9GLv2goXurkexTGjW8zypPxIiB-sY1xBusYvfZR3uoGAEpyg2LDYYo9f1OLpl2i6EtVvMz04I/s320/P6270210.JPG" /></a></div><div class="" style="clear: both; text-align: center;">Let's kick this off with the obligatory motorcycle-road-trip-poster-shot-of-the-bike-on-the-side-of-the-road picture.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhynqXGtqLf3sZkP8SeoQY6izx5ekVGFGByNJD4SURwf-EEjwueYkECBvn6rDushNfIljierphYUkZ4IyehrSFc-xpFdvviPIWiTtUPSiunKvabTREFuWbUGsdIo_GrBlDzQ-YQxWbNW6o/s1600/P6270212.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhynqXGtqLf3sZkP8SeoQY6izx5ekVGFGByNJD4SURwf-EEjwueYkECBvn6rDushNfIljierphYUkZ4IyehrSFc-xpFdvviPIWiTtUPSiunKvabTREFuWbUGsdIo_GrBlDzQ-YQxWbNW6o/s320/P6270212.JPG" /></a><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">Oh GOD! Helmet hair! Make it stop!!! Why? WHY?!?!</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"></div><div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;">Andorra is a beautiful country, and it's impossible to do it justice in photographs. All I can do is give you an impression. I rode into Andorra la Vella, the capital city of Andorra. It's a pretty compact city, having been built within a steep mountain gorge.</div><div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: left;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWpbGtcfWthRxnpoE2oflULICCvPHvWvZa_sZcmHtWzSojqkvQjH94Bf7JooZxtM32p7bZheiaAvtBPdwz4Z5k0Fm9TZtwxeYQmcQIgmGl0pLGhO8rlTXmMIBjjKioHxv1z3IHo6syxyY/s1600/20100531_005.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhWpbGtcfWthRxnpoE2oflULICCvPHvWvZa_sZcmHtWzSojqkvQjH94Bf7JooZxtM32p7bZheiaAvtBPdwz4Z5k0Fm9TZtwxeYQmcQIgmGl0pLGhO8rlTXmMIBjjKioHxv1z3IHo6syxyY/s320/20100531_005.jpg" /></a><br />
<div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji14RBL2u4q83rr1xk4zH0hwerp3xe_8A36HbDI9OpPub51x0QerY6cpgVQgYKMZad4_AF30PdhJp9Ogo7jvuwCtqvB0-gMgr2E16ho3dxY9wTUGM8UoFAB9DvU1f54u9IjojSY3tUqVo/s1600/20100530_004.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji14RBL2u4q83rr1xk4zH0hwerp3xe_8A36HbDI9OpPub51x0QerY6cpgVQgYKMZad4_AF30PdhJp9Ogo7jvuwCtqvB0-gMgr2E16ho3dxY9wTUGM8UoFAB9DvU1f54u9IjojSY3tUqVo/s320/20100530_004.jpg" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjpbS0eChuX5wsyPI8no_lhpuiz76-EveCNagN3y_ocEigPuMPK49X6MqfRHgxZ3TuArThWbYw5Fd3ZiVyhqPFTlRVzbPY6-uR6BuEQ3VKVDlVtt30cHoluLLjMIoWfOLIGeb13obWAMQ/s1600/20100531_002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjpbS0eChuX5wsyPI8no_lhpuiz76-EveCNagN3y_ocEigPuMPK49X6MqfRHgxZ3TuArThWbYw5Fd3ZiVyhqPFTlRVzbPY6-uR6BuEQ3VKVDlVtt30cHoluLLjMIoWfOLIGeb13obWAMQ/s320/20100531_002.jpg" /></a><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">The downtown area contains quite a few shops. As it was sunday, most of them were closed. At first I thought that I was impervious to shopping districts. After all, I have all the clothes I need, my computers are up-to-date, etc...</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4nMKBVtTD4lig2Y0P11wFRkVsJbyiGSBPxXKRibm96GfcVZfbYVHeAg97ltOTJbBeRFQEj9DYD8NOjQxkS_4UVqPUEeJeLOaf2gS73_w8HvErnR7gr8Fp_20GGgE9ZX46_jfVyoWd9rI/s1600/20100531_007.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg4nMKBVtTD4lig2Y0P11wFRkVsJbyiGSBPxXKRibm96GfcVZfbYVHeAg97ltOTJbBeRFQEj9DYD8NOjQxkS_4UVqPUEeJeLOaf2gS73_w8HvErnR7gr8Fp_20GGgE9ZX46_jfVyoWd9rI/s320/20100531_007.jpg" /></a></div><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Uh oh, I hadn't counted on this! Run! Run for your life!</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT744KcVX4AzqbOgzst-GTk68lYxA6tR3GzRsdlP0IkoQwi9psh2xKL7Wcg2DSnCztCtZpJBX1M57m9Px1u0_XFAwRh1trY3lUt7AOM_cgA8j3b7Ov8-IyKsVvOCXknLiDCoJf_LBp_Xs/s1600/20100530_002.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="180" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhT744KcVX4AzqbOgzst-GTk68lYxA6tR3GzRsdlP0IkoQwi9psh2xKL7Wcg2DSnCztCtZpJBX1M57m9Px1u0_XFAwRh1trY3lUt7AOM_cgA8j3b7Ov8-IyKsVvOCXknLiDCoJf_LBp_Xs/s320/20100530_002.jpg" width="320" /></a><br />
<div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: left;">These are the largest ball bearings I have ever seen. (Note: the author is aware of the comedic possibilities presented by the preceding statement and encourages you to submit your witty retorts as comments. For example, "that's what she said")</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRJzA3-qVCihhR9GsAPnnioK9OiDGAcolbG9RSGXQ6YhyVcoBto-JzoB4htuSnhFj41tgxIyryzzTg-dmYbVpxGTJjK2_IfI4W6lRju7qmh01ZCOxVTwGgLU_S2tHORPsekMqcbAR9ydg/s1600/P6270213.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRJzA3-qVCihhR9GsAPnnioK9OiDGAcolbG9RSGXQ6YhyVcoBto-JzoB4htuSnhFj41tgxIyryzzTg-dmYbVpxGTJjK2_IfI4W6lRju7qmh01ZCOxVTwGgLU_S2tHORPsekMqcbAR9ydg/s320/P6270213.JPG" /></a><br />
<div class="separator" style="clear: both; text-align: left;">On the way out of town I discovered the sweetest back-road ever. It was nothing but endless switchbacks climbing higher and higher into the mountains. Had I a week to travel I'd have followed this road to wherever it led.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLy1oG_vDbSLETpr8fgHaLDMveLmfA50q_o2NWPPkGSOfMbaAMU4GnLu5EnfY9eLG5Y6QaaGisALQz_O5igDJ6b_brxtZmf18oDe1R8YJs1WDu5QBW6YkoZGQbVbXczcEbLSj-tz0_AQE/s1600/20100531_009.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiLy1oG_vDbSLETpr8fgHaLDMveLmfA50q_o2NWPPkGSOfMbaAMU4GnLu5EnfY9eLG5Y6QaaGisALQz_O5igDJ6b_brxtZmf18oDe1R8YJs1WDu5QBW6YkoZGQbVbXczcEbLSj-tz0_AQE/s320/20100531_009.jpg" /></a></div><div style="text-align: left;">Just across the Spanish border is the city of Urgell. Above the town is a castle, which has been recently converted to a hotel. I think Americans suffer from castle-envy. To us, of course, anything built before the 1950s is considered old enough to be considered an historic land mark. Some media mogul builds a 'castle' on the coast of California and suddenly you have a major tourist attraction. I couldn't help but feel a little bit jealous noticing the multitude of ancient forts and castles dotting the Spanish country-side. As the time I had spent on the road was getting dangerously close to two hours, I finally decided to poke around one.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Isd9iF9PJi25ajeV7Q4IPtWJxM2ct7CxIyFOQG736UCERBeDomImnvKqW_DIVdIsXRcvTYseZ83ZnO38FmNIK69RqXg3gygJcBpieoN1QeMbl27NBkIWoRwap0HPD7uxx_aUPkUOIJY/s1600/20100531_010.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1Isd9iF9PJi25ajeV7Q4IPtWJxM2ct7CxIyFOQG736UCERBeDomImnvKqW_DIVdIsXRcvTYseZ83ZnO38FmNIK69RqXg3gygJcBpieoN1QeMbl27NBkIWoRwap0HPD7uxx_aUPkUOIJY/s320/20100531_010.jpg" /></a></div><div style="text-align: center;">Here I am all squinty-eyed trying to take a self-portrait with the castle in the background.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh26Bx9u1x8xlBGpqCbc4JqQbVkqX5iB69AvZSe0TFYtgw3Lbz8TiaaDEv26qkS8gHgPuKPBbsf_b-E20xOzTGvSUrEIzXfYQV_bfJne6o9B2i7dyk5b-WCBmK1jQnINKTMtyaF5j-N3Ac/s1600/20100531_011.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh26Bx9u1x8xlBGpqCbc4JqQbVkqX5iB69AvZSe0TFYtgw3Lbz8TiaaDEv26qkS8gHgPuKPBbsf_b-E20xOzTGvSUrEIzXfYQV_bfJne6o9B2i7dyk5b-WCBmK1jQnINKTMtyaF5j-N3Ac/s320/20100531_011.jpg" /></a></div><div style="text-align: center;">I'm sorry guys, this just isn't as easy as it looks.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSyOQ7TM2PC48dH6x4ck35f_wRaXrlPpR9D5aLxSBRT0XqXSNpM5aWNRhvje0AyIUGM0i-UBxhg5pX_6thNduEImHpPw7YBQlbqap29QvDYucvXJhBS6421XnjTafbYpyMyuphRKmS6-s/s1600/20100531_012.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgSyOQ7TM2PC48dH6x4ck35f_wRaXrlPpR9D5aLxSBRT0XqXSNpM5aWNRhvje0AyIUGM0i-UBxhg5pX_6thNduEImHpPw7YBQlbqap29QvDYucvXJhBS6421XnjTafbYpyMyuphRKmS6-s/s320/20100531_012.jpg" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqIOtTdC8-iOi__tO5OAIX6UiBs-1TJls8Ip6l9SGqTbLzvllrSCJnqmHa-_ZhN_eJW0mjDkZqt8FllhOSAqFSGQngnbXuwfG7fyoJbFZSnQ8LLXr9vNhj5C2rMCnuhwoJ34GWOX5Vyc4/s1600/20100531_013.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhqIOtTdC8-iOi__tO5OAIX6UiBs-1TJls8Ip6l9SGqTbLzvllrSCJnqmHa-_ZhN_eJW0mjDkZqt8FllhOSAqFSGQngnbXuwfG7fyoJbFZSnQ8LLXr9vNhj5C2rMCnuhwoJ34GWOX5Vyc4/s320/20100531_013.jpg" /></a><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHWDvkhG6mIT2I7vSG5NA1-7XDFsfe4giQ6WZpDzrkEd-KE_9GoQgZQ1a8ew5D2N_OFPESJOeP1LpUikWR51SURfgOnWEZsK3TnGX2EEucTHuHKwD6qYUPlq8YAnMy1x28noSVGI3RNMI/s1600/20100531_016.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjHWDvkhG6mIT2I7vSG5NA1-7XDFsfe4giQ6WZpDzrkEd-KE_9GoQgZQ1a8ew5D2N_OFPESJOeP1LpUikWR51SURfgOnWEZsK3TnGX2EEucTHuHKwD6qYUPlq8YAnMy1x28noSVGI3RNMI/s320/20100531_016.jpg" /></a></div><div style="text-align: center;"><br />
</div><div style="text-align: center;">I did my best to imagine pouring boiling oil on hoards of invaders from this wall.</div><div style="text-align: center;"><a name='more'></a></div><div style="text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAYxDn_zeuKowy2ZcK-4CO6jxc9-WhTikRWcbp1anKkwy87fBfGh408uXGvMjBAuSBpTkoSIu4ewmjxUhAu-xsEg2QpLfA9gBbI9f-Q8OXjtsy9Fc5cTcgpzD0dm01NIRR68yd1DJpTg0/s1600/P6270216.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjAYxDn_zeuKowy2ZcK-4CO6jxc9-WhTikRWcbp1anKkwy87fBfGh408uXGvMjBAuSBpTkoSIu4ewmjxUhAu-xsEg2QpLfA9gBbI9f-Q8OXjtsy9Fc5cTcgpzD0dm01NIRR68yd1DJpTg0/s320/P6270216.JPG" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4iRELWtaRAkIVIRaKY-bZy6-onG5ifQKiXTIpSHitg-B-i9dTNAsRKORvVQ00JNQnlimo0hNXghLl4gzUiOgFNgyS4aknEIqee0X9xHUm7EwYvEKRiXJMwDJ2U9m90cH_tro9gwvBW0/s1600/P6270217.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh4iRELWtaRAkIVIRaKY-bZy6-onG5ifQKiXTIpSHitg-B-i9dTNAsRKORvVQ00JNQnlimo0hNXghLl4gzUiOgFNgyS4aknEIqee0X9xHUm7EwYvEKRiXJMwDJ2U9m90cH_tro9gwvBW0/s320/P6270217.JPG" /></a><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">I took my sweet time coming back to Barcelona through the country-side. At one point I saw signs that read "Bar" and decided to follow them. When I reached the end of the road I discovered that "Bar" was, in fact, the name of a very small town and realized that I had been sadly mis-lead. But seriously, it's just freaking gorgeous out there. Coming down the hill from here I had to pause to wait for a shepherd to move his flock across the road. I really should have got a picture of that :(</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrAa3yVgA-TLhpnYD_wKIxts2rYLx2QINa8R-lSEtyquJnyO9evw7IBqBPbxZq70J0Ly966_0DckulfEzIh6KhgX6G2NTC_SfebHh4qfuOhtDJXBipQuxi91RKt0-Fbgxs78TacRJUfFM/s1600/P6270218.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrAa3yVgA-TLhpnYD_wKIxts2rYLx2QINa8R-lSEtyquJnyO9evw7IBqBPbxZq70J0Ly966_0DckulfEzIh6KhgX6G2NTC_SfebHh4qfuOhtDJXBipQuxi91RKt0-Fbgxs78TacRJUfFM/s320/P6270218.JPG" width="320" /></a><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">I passed by Montserrat on the way back, and decided to take a little detour. The road over the mountain was so good I decided to ride it twice! Also, Throughout my whole trip I had noticed graffiti like this, and finally had an opportunity to take get a picture of it.</div><div class="separator" style="clear: both; text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"> <a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsSk8JCDWZnm1qScjb6jDawWTWfslj5giISJHRWKddc_qDDYCzZkz-i7ECEsghSoPVqQkZ4GfM2-3QO3MrNG9-HE2lI5phC7g08OdDiA5-fGYvlVID6T5k1j4eG6Ea-_XlCuYAyWxMa0k/s1600/P6270219.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsSk8JCDWZnm1qScjb6jDawWTWfslj5giISJHRWKddc_qDDYCzZkz-i7ECEsghSoPVqQkZ4GfM2-3QO3MrNG9-HE2lI5phC7g08OdDiA5-fGYvlVID6T5k1j4eG6Ea-_XlCuYAyWxMa0k/s320/P6270219.JPG" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">Whoo! Self-timer! But...hmm... something's not quite right.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA_NeGEwNWjFsbLz9PeqMynlsWrr857tJHVEeecNyM4ov4-1J2Bl40yqH2NN-ieQTd7p56WQghajU_jiJF9KP0PJwpxSPwLvtO1aXXnvf9SMu3Po7VMK8IhDzeWpYWAXVwsM4DQDydE2o/s1600/P6270219_rotated.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgA_NeGEwNWjFsbLz9PeqMynlsWrr857tJHVEeecNyM4ov4-1J2Bl40yqH2NN-ieQTd7p56WQghajU_jiJF9KP0PJwpxSPwLvtO1aXXnvf9SMu3Po7VMK8IhDzeWpYWAXVwsM4DQDydE2o/s320/P6270219_rotated.JPG" width="257" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">There, I fixed it.</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCFwliadrqYwtDcGpMsdoJv3lCmqIUzfMM9JILGQHY0CjfmACoL4INZdFtgzlbrYqxWoNBzpR6clDD6PwGeHPQw9KP9IiY0dFGzFlAEK3utTeizX3UtG0tFjHyU85v6maEc8R1MwrwvVM/s1600/P6270220.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjCFwliadrqYwtDcGpMsdoJv3lCmqIUzfMM9JILGQHY0CjfmACoL4INZdFtgzlbrYqxWoNBzpR6clDD6PwGeHPQw9KP9IiY0dFGzFlAEK3utTeizX3UtG0tFjHyU85v6maEc8R1MwrwvVM/s320/P6270220.JPG" width="320" /></a></div><div style="text-align: center;">Brrrrrrrrrrr brrrrrrrrrrrr brrrrrrrrrrrrrrrrrrrr brrrrrrrrrrrrrrrrrrr</div><div style="text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMWYHF7vrjcyu7S15gGZTiqAJmj2QWqucUWp3osFqk5qGpSeYJvt9VvmrU-Rdq8c1FqvO2hKOyPgrEUmbMTHyH7WEOiy1omVOtOLOY1zPkeZV2DLTw9XJUp5HavPw9pn2cyL8T89PFYWk/s1600/P6270224.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMWYHF7vrjcyu7S15gGZTiqAJmj2QWqucUWp3osFqk5qGpSeYJvt9VvmrU-Rdq8c1FqvO2hKOyPgrEUmbMTHyH7WEOiy1omVOtOLOY1zPkeZV2DLTw9XJUp5HavPw9pn2cyL8T89PFYWk/s320/P6270224.JPG" width="320" /></a></div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;">Home sweet home. Time for a beer and a kebab!</div><div style="text-align: center;"><br />
</div><br />
<br />
<div class="separator" style="clear: both; text-align: center;"></div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com3tag:blogger.com,1999:blog-6827527823540310316.post-21775769012064965702010-07-18T08:32:00.000-07:002010-07-18T08:35:34.909-07:00Moto Mania (part 1)<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc_8xPBMzsNgkzfJI_AOJlbk93K5GS6TzOtMFdAsDwFHXeBGO2ePdYiI_yxkFEU5K2OqLkAErrfDs0QzQYDPaH5bXvBx0nevzy4xQf-4s-RRRQp4aBguoVAW-Ytm6Us58b0hIQizG-THo/s1600/P6280233.JPG" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjc_8xPBMzsNgkzfJI_AOJlbk93K5GS6TzOtMFdAsDwFHXeBGO2ePdYiI_yxkFEU5K2OqLkAErrfDs0QzQYDPaH5bXvBx0nevzy4xQf-4s-RRRQp4aBguoVAW-Ytm6Us58b0hIQizG-THo/s320/P6280233.JPG" /></a></div><div style="text-align: left;">As you probably know, I am mental about motorized, two-wheeled things. I used to own two motorcycles back home, but sold them both before coming here. It didn't take long for the withdrawal to set in, and after a couple of weeks I had made arrangements to rent one for the last weekend in July. I settled on Andorra as my destination, an independent country on the border between France and Spain.</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">At this time I would like to take the opportunity to share a few of observations about driving in Spain:</div><div style="text-align: left;"><ol><li>It isn't as difficult as I have been lead to believe.</li>
<li>Roundabouts are awesome!</li>
<li>The Spanish seem to have at least as much contempt for speed limits as Californians.</li>
</ol>This is not to say that driving in Spain just like driving at home -- Far from it -- But adaptation comes naturally if you only pay attention to what other people are doing. The reality is that the rules of the road that matter are the unwritten ones. The rules that govern the flow of vehicular traffic are as cultural and as those that govern fashion and diet. I think that the American perception that European drivers are particularly crazy arises from the failure to understand this. Other drivers will do things that seem unexpected with astonishing frequency; however, this is simply because (as a foreigner) you do not understand the normal flow of traffic. It is you, the foreigner, who are the unpredictable, crazy one.</div><div style="text-align: left;"><br />
Roundabouts are really quite marevlous because they allow you to choose between any of the available directions (there will be more than four) in an intersection -- including going back the way you came! And not only that, but you do not have to make your choice in a split-second. You can remain in the roundabout for as long as it takes to become confident in your decision. This is most appreciated by people, such as yours truly, who are never sure of:</div><div style="text-align: left;"><ol><li>Where the are,</li>
<li>where they've been,</li>
<li>or where they are going.</li>
</ol>(The exception to this is that within the city of Barcelona there are stoplights in the in the roundabouts themselves, so it can take quite a few minutes to complete a 180 degree arc). </div><div style="text-align: left;"><br />
</div><div style="text-align: left;">According to wiki-travel:</div><blockquote><span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: sans-serif; font-size: 13px; line-height: 19px;">Between cities, drivers are required to have some rest every 2 hours they drive--there's a fine if you don't follow. It's unclear how it's enforced, however.</span></blockquote><br />
<div style="text-align: left;">This might seem like a potential inconvenience, but it's actually quite useful for male motorists wishing to retain some shred of dignity: you are not lost, merely looking for a suitable place to take your mandatory two-hour break. I would like to assure the reader that during the entire weekend I remained within full compliance of this statute ;-) </div><br />
<div style="text-align: left;"><br />
</div><div style="text-align: left;">In the city it's pretty much impossible to get going very fast because of the congestion. In the country-side on the other hand, where the speed limit is typically a mere 90 kph, there was a 20-something driving a 118d hatch-back eager to go sailing past me at 140 on every long straight.</div><div style="text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZBKKb2A5SKAgsCNS-az8Vkdg3Bp0aFtUZnwLpJ80CUE7g4m3MiEctQfQe07XfiXdgTnWujd0Tu3PEGrwrl2ZVRmks4KWrRhjT4ljdHWuMslS9SG2KyFBokCdmZMggIOw8F3hJJwEInPc/s1600/P6250193.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZBKKb2A5SKAgsCNS-az8Vkdg3Bp0aFtUZnwLpJ80CUE7g4m3MiEctQfQe07XfiXdgTnWujd0Tu3PEGrwrl2ZVRmks4KWrRhjT4ljdHWuMslS9SG2KyFBokCdmZMggIOw8F3hJJwEInPc/s320/P6250193.JPG" /></a></div><div class="separator" style="clear: both; text-align: left;">Look at this seedy fellow trying to rent a motorcycle. Can you believe they just let people like that ride those things in public? I don't trust him one bit.</div><div style="text-align: left;"><br />
</div><div style="text-align: left;">I set off with a bit of a hang-over, having imprudently gone to the Belchica bar with friends to watch football the night before. I got a late start, and was not exactly in the best of spirits.</div><div style="text-align: left;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOtIz_t8sZA_288UWO42gs85G3kE2kPQ6lm3DJh5lnb2Swp4cNwyPaU9YXbvBkoB5sSwZ0uRsgu4yGzRVS02r5BGttBIwCcqfpGKbttYUMUZAqJk0FlwaNbNnEB5vi-MLdy-n2JbuWabw/s1600/P6260196.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOtIz_t8sZA_288UWO42gs85G3kE2kPQ6lm3DJh5lnb2Swp4cNwyPaU9YXbvBkoB5sSwZ0uRsgu4yGzRVS02r5BGttBIwCcqfpGKbttYUMUZAqJk0FlwaNbNnEB5vi-MLdy-n2JbuWabw/s320/P6260196.JPG" /></a></div><div class="separator" style="clear: both; text-align: left;">The desert a few miles north-west of Barcelona, taken while, *ahem*, looking for a suitable place for my mandatory rest period. Out in the desert in full leathers, it was (predictably) very hot. I decided, therefore, to take a few extra breaks.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq0iXf2CkPD2G3txgreKDNee4vYhtAnzRMoeULuwrLK2WwfW_ExRFvVpugzo3gEqBcLPgkLJvF7CNS8_4tJ67dRVbQ_N2mP6cE644N64h5s5Hta-hGyxxYfFPK3qV8_0EJvL_2KrrKqCA/s1600/P6260194.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiq0iXf2CkPD2G3txgreKDNee4vYhtAnzRMoeULuwrLK2WwfW_ExRFvVpugzo3gEqBcLPgkLJvF7CNS8_4tJ67dRVbQ_N2mP6cE644N64h5s5Hta-hGyxxYfFPK3qV8_0EJvL_2KrrKqCA/s320/P6260194.JPG" /></a><br />
<div class="separator" style="clear: both; text-align: center;">After a period of time not exceeding two hours, I pulled into a sleepy town wishing for some lunch and a bit of a nap myself....</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV4boHdKKjbKQogZ23p-zcAgYP4C_RX5KVoKqvxUNGaic03uFTre4OO9RpfZ8DIV3UVKMUDjGMEERIGlhFlIj1KqwJsewHYY9lYg5uADqimmpsIb_JArb_rWqus06Y9EqWsIfjJt4HQiE/s1600/P6260195.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjV4boHdKKjbKQogZ23p-zcAgYP4C_RX5KVoKqvxUNGaic03uFTre4OO9RpfZ8DIV3UVKMUDjGMEERIGlhFlIj1KqwJsewHYY9lYg5uADqimmpsIb_JArb_rWqus06Y9EqWsIfjJt4HQiE/s320/P6260195.JPG" /></a><br />
<div class="separator" style="clear: both; text-align: center;">...and the idea of cold tomato soup had never seemed more appealing.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie4HiiyQ-dtnzveK4XAQpp-3uB5iDpTI6Xq1JfX1BWHWDSW-feJkMtjeLEzrkb5eqDoVas-fmmbzL0Cyq235LuJV_jeLhsaxFjk09xiruVQmuExEGaGgd82Avo-bXvoQY81gBpssRA5P4/s1600/P6270215.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEie4HiiyQ-dtnzveK4XAQpp-3uB5iDpTI6Xq1JfX1BWHWDSW-feJkMtjeLEzrkb5eqDoVas-fmmbzL0Cyq235LuJV_jeLhsaxFjk09xiruVQmuExEGaGgd82Avo-bXvoQY81gBpssRA5P4/s320/P6270215.JPG" /></a><br />
<div class="separator" style="clear: both; text-align: center;">Octane in Europe seems to be a bit higher than at home, though perhaps they use a different scale.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGwv9WBQuWM11CToeurefRAYFRmMiPDX4SdrfcOjA_oZlx3SVdH-Hx5S74EpBfLgm2mQmlZ1fkstLppqLGk317xpgeueD1_OtmunCE7ddloDcXkjfR0AA9iaiXcdWCmrS5Tasgp3XXnFw/s1600/P6260209.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgGwv9WBQuWM11CToeurefRAYFRmMiPDX4SdrfcOjA_oZlx3SVdH-Hx5S74EpBfLgm2mQmlZ1fkstLppqLGk317xpgeueD1_OtmunCE7ddloDcXkjfR0AA9iaiXcdWCmrS5Tasgp3XXnFw/s320/P6260209.JPG" /></a><br />
<div class="separator" style="clear: both; text-align: left;">By chance I had stopped to fill up at a rather auspicious petrol station. I could not help but go inside. The museum contained quite a few rare examples of classic motorcycles, but I won't bore you all by rambling on about the history and evolution of two-wheeled transportation in cryptic, technical jargon</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh1bamEgF4ARK-ZooTGD9Ooj1hxuX9VrN4F1QoODtXmGw1BFcFO3gHjCE-KJhoUR_TZi9buTsyVl5dy-5TwYU2-m8pKJALB-Y1Rw1mB890sGLCt0rscEAqtQvz4q3CzYB4PwPL8x6JnRU/s1600/P6260204.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhh1bamEgF4ARK-ZooTGD9Ooj1hxuX9VrN4F1QoODtXmGw1BFcFO3gHjCE-KJhoUR_TZi9buTsyVl5dy-5TwYU2-m8pKJALB-Y1Rw1mB890sGLCt0rscEAqtQvz4q3CzYB4PwPL8x6JnRU/s320/P6260204.JPG" /></a><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmLdvp6eAfGh60qCJLN5OtnrCiY6V7D8f2Pc5FPC4GOLNoQQDTWtvRhzCNFu8bYJ7rM3zLHlICQTO6j0_1dbazJ58xB2Z2dVrqJNmhrn-xEcLD7zeJlfLwS6ttDK8hmYz3HqZ3M5JFFm8/s1600/P6260208.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhmLdvp6eAfGh60qCJLN5OtnrCiY6V7D8f2Pc5FPC4GOLNoQQDTWtvRhzCNFu8bYJ7rM3zLHlICQTO6j0_1dbazJ58xB2Z2dVrqJNmhrn-xEcLD7zeJlfLwS6ttDK8hmYz3HqZ3M5JFFm8/s320/P6260208.JPG" /></a><br />
<div class="separator" style="clear: both; text-align: left;">...much. For example, this horizontally-opposed twin (above) has a completely-exposed over-head valve train. Note the lack of foot shifter. Below is a motorcycle powered not by a jet turbine, as it might appear, but a wankel rotary engine. It is described as being a rare and "largely untested" configuration.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioSMZvziPh-1NKJ-bPydDloF0MBzut5OjbgxHLyBLT3cZf0YqD-ynR2xlNV_OF3kEmO_X1RZGfYm_z1iz2uUl9F82ZU-keza7qyJ-m6KLWwG6wiWLH1v4wvFfKEF9iwcEDWEBLiHpzuoQ/s1600/20100516_018.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioSMZvziPh-1NKJ-bPydDloF0MBzut5OjbgxHLyBLT3cZf0YqD-ynR2xlNV_OF3kEmO_X1RZGfYm_z1iz2uUl9F82ZU-keza7qyJ-m6KLWwG6wiWLH1v4wvFfKEF9iwcEDWEBLiHpzuoQ/s320/20100516_018.jpg" /></a></div><div class="separator" style="clear: both; text-align: center;">Some things never change.</div><div class="separator" style="clear: both; text-align: left;">As I approached the Pyrenees, the weather became much less hot and much more moist. So moist, in fact, that I'm pretty sure it was raining. I arrived in Andorra at last, soggy and tired.</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0rCoAvyt1dhlUaTFxM-x_0RrhyOdXSsOOMR72t1gTCMriLJeKcGJqWeNMOlyucCvKFkbc_NvPvx7eTBd0c7jpqlaroPi6ZTwJTKfi_KUU9iUYv26rRg4eEguHmufr9BpSOPdV_K9ZoFk/s1600/20100530_001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0rCoAvyt1dhlUaTFxM-x_0RrhyOdXSsOOMR72t1gTCMriLJeKcGJqWeNMOlyucCvKFkbc_NvPvx7eTBd0c7jpqlaroPi6ZTwJTKfi_KUU9iUYv26rRg4eEguHmufr9BpSOPdV_K9ZoFk/s320/20100530_001.jpg" /></a><br />
<div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: left;">Andorra, it is claimed, is the only country in the world with two heads of state: one being the president of of France, and the other is the Spanish bishop of Urguell. So, after checking into the Hotel Coprinceps ("co-prince hotel"), I went for a bit of walk to take in my surroundings.</div><div class="separator" style="clear: both; text-align: center;"></div><div><br />
</div><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR8I-ifqJs7c2C0Ml0JKQBlLn8K3MFC5PMn8XyQK3DRXKGZYiwY9XkTlGqXkR5_1Z3r5HzO5cNDWkOu2mZ9gfhYvlOKGv2WJ23_Emu-8tJtVpkajxwnyVwSibaPek4Jp-2pUmnnzVjkfc/s1600/20100530_008.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjR8I-ifqJs7c2C0Ml0JKQBlLn8K3MFC5PMn8XyQK3DRXKGZYiwY9XkTlGqXkR5_1Z3r5HzO5cNDWkOu2mZ9gfhYvlOKGv2WJ23_Emu-8tJtVpkajxwnyVwSibaPek4Jp-2pUmnnzVjkfc/s320/20100530_008.jpg" /></a><br />
<div class="separator" style="clear: both; text-align: center;">I look unhappy here because the US had just dropped out of the world cup :P Let's try this again...</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><div class="separator" style="clear: both; text-align: center;"><br />
</div><br />
<div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUt_xMz6ZyiqE-OvaOtm23Zia_qPXM-DgxwZgoA4U2pFO1qHUSixd586E0MBX8wUT5VB_S5EFlY2IzAHE5hAdEJ322zeZ7p6k7u7hrksA21XFV5XpJeMaCmh5ecw1hqtefo0QWQZdg770/s1600/20100531_001.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgUt_xMz6ZyiqE-OvaOtm23Zia_qPXM-DgxwZgoA4U2pFO1qHUSixd586E0MBX8wUT5VB_S5EFlY2IzAHE5hAdEJ322zeZ7p6k7u7hrksA21XFV5XpJeMaCmh5ecw1hqtefo0QWQZdg770/s320/20100531_001.jpg" /></a></div><div class="separator" style="clear: both; text-align: center;">I hate to end on a picture like that, so let's all take a look at the view from my hotel room. (To be continued..)</div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0tag:blogger.com,1999:blog-6827527823540310316.post-65586628624484128162010-07-11T15:12:00.001-07:002010-07-11T15:13:35.659-07:00Well, Spain's won the World Cup final. The fireworks here are pretty loud, but at least I don't live down town. I think I'm going to go wander around and bask in the chaos.brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0tag:blogger.com,1999:blog-6827527823540310316.post-50981930172997329392010-07-07T14:31:00.001-07:002010-07-07T14:34:08.661-07:00<div>...</div><div>Beep beep<div>Beep beep beep</div><div>Beep beep beep beep</div><div>BEEP BEEP!</div><div><span class="Apple-style-span" style="font-size: large;">¡España!</span></div></div><div><span class="Apple-style-span" style="font-size: large;">Beep beep</span></div><div><span class="Apple-style-span" style="font-size: large;"></span><span class="Apple-style-span" style="font-size: x-large; ">¡España!</span><div><span class="Apple-style-span" style="font-size: x-large; ">Beep beep</span><div><span class="Apple-style-span" style="font-size: x-large; ">Beep beep beep</span></div><div><span class="Apple-style-span" style="font-size: x-large; ">Beep beep beep beep</span></div><div><span class="Apple-style-span" style="font-size: x-large; ">BEEP BEEP!</span></div><div><span class="Apple-style-span" style="font-size: x-large; ">¡España!</span></div></div><div><span class="Apple-style-span" style="font-size: large;">Beep beep beep</span></div><div><span class="Apple-style-span" style="font-size: large;">Beep beep beep beep</span></div><div><span class="Apple-style-span" style="font-size: large;">BEEP BEEP!</span></div><div><span class="Apple-style-span" style="font-size: x-large;"><span class="Apple-style-span" style="font-size: 16px; "><div><span class="Apple-style-span" style="font-size: small;">Beep beep beep</span></div><div><span class="Apple-style-span" style="font-size: small;">Beep beep beep beep</span></div><div><span class="Apple-style-span" style="font-size: small;">BEEP BEEP!</span></div><div><span class="Apple-style-span" style="font-size: large; "><span class="Apple-style-span" style="font-size: 16px; "><div><span class="Apple-style-span" style="font-size: x-small;">Beep beep beep</span></div><div><span class="Apple-style-span" style="font-size: x-small;">Beep beep beep beep</span></div><div><span class="Apple-style-span" style="font-size: x-small;">BEEP BEEP!</span></div></span></span></div></span></span></div></div><div>...</div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com3tag:blogger.com,1999:blog-6827527823540310316.post-74462633609079009372010-07-06T13:42:00.000-07:002010-07-06T13:45:57.714-07:00<blockquote>Without the rigor of mathematics all science would collapse, but not all inhabitants of a building need to know all the spars and girders that keep it upright. Factoring off certain detailed knowledge to specialists reduces the intellectual complexity of a task, which is one of the things computer science is about. -- <i>Parsing Techinques: A practical Guide (http://www.cs.vu.nl/~dick/PTAPG.html)</i></blockquote>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0tag:blogger.com,1999:blog-6827527823540310316.post-37017886287916992852010-07-01T14:03:00.000-07:002010-07-06T14:15:12.673-07:00San JoanSan Joan is a major holiday in Barcelona. Actually it's the eve before where the major partying happens. So far as I could tell, it's a good excuse get together with friends and have a barbeque, then make lots of noise with incendiary devices.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnccf6pocaN41Xbbf6maa-WcGiclu8J7nwgF0nNmO3KysXDYlpO5AM48urmHmvIxLrUqxJl-PJmoDiurXsprxIzGBsuCWZhCe4gOQRK-g1Bk57uRuqv9NozzdTudzf4rIXgzisACBufDE/s1600/P6230116.JPG"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhnccf6pocaN41Xbbf6maa-WcGiclu8J7nwgF0nNmO3KysXDYlpO5AM48urmHmvIxLrUqxJl-PJmoDiurXsprxIzGBsuCWZhCe4gOQRK-g1Bk57uRuqv9NozzdTudzf4rIXgzisACBufDE/s400/P6230116.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5490900752244086258" /></a><br /><br />I heard you like meat, so I put some meat in your meat so you can eat meat while you eat met. Seriously, that is one massive steak.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivqMhyphenhyphen_RkhrMkSBl3kDO7491dBkLOXu07_jO1nkd0nRxfHhLbqN0gvEa2xlzDboglDoIfa0YonvgSWZkKgeRHrq95kCQBxNv863mp6pUk54Pphrxe0QNHjZ9i_6DNszS8lKPAH0lHXtqo/s1600/P6240164.JPG"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEivqMhyphenhyphen_RkhrMkSBl3kDO7491dBkLOXu07_jO1nkd0nRxfHhLbqN0gvEa2xlzDboglDoIfa0YonvgSWZkKgeRHrq95kCQBxNv863mp6pUk54Pphrxe0QNHjZ9i_6DNszS8lKPAH0lHXtqo/s400/P6240164.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5490899017649107698" /></a><br /><br />Life is like a bowl of cherries: hmmm... wait, how does that go? Come to think of it, why do I have a picture of a bowl of cherries??<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSXo5FfvhZNal4aENSnTqHHdoc39KUpbgkAAXWzYoCoJG1fPAMUrGJdHBGTN18hyphenhyphenOV9EFVjV6O06avJu2nkao79JLa4jV1DvPpqfdFvpUQiqHuqpBokEMlMQaUoECpt1fRRxCBAr-39C8/s1600/P6240165.JPG"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiSXo5FfvhZNal4aENSnTqHHdoc39KUpbgkAAXWzYoCoJG1fPAMUrGJdHBGTN18hyphenhyphenOV9EFVjV6O06avJu2nkao79JLa4jV1DvPpqfdFvpUQiqHuqpBokEMlMQaUoECpt1fRRxCBAr-39C8/s400/P6240165.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5490899000574398274" /></a><br /><br /><div>No, those aren't Candies, they're explosives :)<br /><br /><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdt_hEFSv1CYfmiTaVY33jxd2w4KK5j-6U41j5y9qMTFqdbf4rkHwyPsbBIK6cV0DA9s2rYOQg4VIISfpg5ZbRzSTZ46DcI4oN1BaAHE_1kdwwVh46lcRsLuGO0grkIbKmB4y6VgrTwVg/s400/P6240168.JPG" style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" border="0" alt="" id="BLOGGER_PHOTO_ID_5490898984309169426" /><br /><br />Hmm. Maybe it's time to lay off the pastis.</div><div><div><br /></div><div><br /></div></div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0tag:blogger.com,1999:blog-6827527823540310316.post-76067522327330270922010-06-28T15:02:00.000-07:002010-06-28T16:04:45.352-07:00Un día en la vida<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig9mFmNnPWVygIW6jTzzSdjn88T7J8Gwm-hWRQpaagayL-L1-kTeoUg-Xx66twk8aq12A9yXqDj8it7RrNPGSADXiXzkMAgqf-x9gVfNMYYuDLkckAwo34T9aAD_rupAsWKkX50DHTSMM/s1600/img-1.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig9mFmNnPWVygIW6jTzzSdjn88T7J8Gwm-hWRQpaagayL-L1-kTeoUg-Xx66twk8aq12A9yXqDj8it7RrNPGSADXiXzkMAgqf-x9gVfNMYYuDLkckAwo34T9aAD_rupAsWKkX50DHTSMM/s400/img-1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487948677406651346" /></a><br /><br />My Room<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR06UN7AEYkMgdvemw5JXsk818DmJxwkRzj3RpT6HG1qqUcEPd5jMYJXJiaVcSQqK0gQ5icv9sPnEQsAAy_T5IdDLZ_bRTp4CAGooOMfCapVcZlLE5gvspF0O78CaxKg1vqomYJAzIAww/s1600/img-5.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgR06UN7AEYkMgdvemw5JXsk818DmJxwkRzj3RpT6HG1qqUcEPd5jMYJXJiaVcSQqK0gQ5icv9sPnEQsAAy_T5IdDLZ_bRTp4CAGooOMfCapVcZlLE5gvspF0O78CaxKg1vqomYJAzIAww/s400/img-5.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487948678088581762" /></a><br /><br />The view from the balcony<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhM_3vHbIK4Qjm0u8xhO-LTcdbfWmDBHmsMVUb_Ij66WQwtnvuQFdkXH7hvT9Wn3K5b1fFgoMI8iEmuYiLzJIwE0YLn5sy5LrVhD385goUCwsx6ZJsfYk_NBL3nwSPuwjNnCgltwmUDOk/s1600/img-7.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjhM_3vHbIK4Qjm0u8xhO-LTcdbfWmDBHmsMVUb_Ij66WQwtnvuQFdkXH7hvT9Wn3K5b1fFgoMI8iEmuYiLzJIwE0YLn5sy5LrVhD385goUCwsx6ZJsfYk_NBL3nwSPuwjNnCgltwmUDOk/s400/img-7.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487948685818017042" /></a><br /><br />Un café cortado. Mmmm cafééééééééééééééé.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGSUQC8_6-dvKFlf89qHAcyVh5RQFtuXxw-qmEYastnmyRyGqtWpE_cNNr3XdzuuWXfix2KTETU3ZYS08uc0C3AAAKmp-oZQHnZtFyuAE8ovs80QbJAisjFkXloWfbG9SK6muNig7JEM0/s1600/img-12.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGSUQC8_6-dvKFlf89qHAcyVh5RQFtuXxw-qmEYastnmyRyGqtWpE_cNNr3XdzuuWXfix2KTETU3ZYS08uc0C3AAAKmp-oZQHnZtFyuAE8ovs80QbJAisjFkXloWfbG9SK6muNig7JEM0/s400/img-12.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487949258040604818" /></a><br /><br />El metro viene, el metro se va...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirSBOwRQV5YfZuk_ko9Es02uR8LfnwFj0-WHEJO5WpWHA15uH4rwZkVbapC_JlPmf-5zm5tOlVJwz8FdC5P2MytPch63qW4pu0zgM3p9rVYVgKuKwDF4qGBQYx_tbugbH6BvXNbtFPMkg/s1600/img-2.jpg"><img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirSBOwRQV5YfZuk_ko9Es02uR8LfnwFj0-WHEJO5WpWHA15uH4rwZkVbapC_JlPmf-5zm5tOlVJwz8FdC5P2MytPch63qW4pu0zgM3p9rVYVgKuKwDF4qGBQYx_tbugbH6BvXNbtFPMkg/s400/img-2.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487950223369817090" /></a><br /><br />Purple?<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMnOyuIDxfG2Z_y6rMSI9SjiBd9SsIvbt6eYnBVlfKVbvFn5vdzIu9iP8XFbTwCEONVXL-ghfSgJ1bwR7e6Bi-6zxrzzYmdfYUI0-sfS6b88ayk1OgzFI185vaXsUA3iC-gGfC41PqbaU/s1600/img-8.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgMnOyuIDxfG2Z_y6rMSI9SjiBd9SsIvbt6eYnBVlfKVbvFn5vdzIu9iP8XFbTwCEONVXL-ghfSgJ1bwR7e6Bi-6zxrzzYmdfYUI0-sfS6b88ayk1OgzFI185vaXsUA3iC-gGfC41PqbaU/s400/img-8.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487952536539736386" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeyEUqaLueqXs90E1f87hCyYaOMGvZMQm1Fw3Nihb1rA5ain1oGl2PfzcFAMWmY_pHS_pAq8S8K_h7qZUfLfb0UJHCPwtY_-SwRakPJWIxvXgQ600Oxqx728U_3EDVeB-ruSwZ-ZNyc_0/s1600/img-7.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeyEUqaLueqXs90E1f87hCyYaOMGvZMQm1Fw3Nihb1rA5ain1oGl2PfzcFAMWmY_pHS_pAq8S8K_h7qZUfLfb0UJHCPwtY_-SwRakPJWIxvXgQ600Oxqx728U_3EDVeB-ruSwZ-ZNyc_0/s400/img-7.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487952545454189554" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUeV3hiuYvMgcaxxND17dzNmZC7VJreCv4uyVJzYEzoYZ-MFZyR_iHaVGQbfv8hbnHZrcQQHXVUuw5KqCQGtIFPxZ-YqPcjFqpbhuwi_t1mQldhXnkti5Un-xyLFsqaIjDClPliMpKBJI/s1600/img-2.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUeV3hiuYvMgcaxxND17dzNmZC7VJreCv4uyVJzYEzoYZ-MFZyR_iHaVGQbfv8hbnHZrcQQHXVUuw5KqCQGtIFPxZ-YqPcjFqpbhuwi_t1mQldhXnkti5Un-xyLFsqaIjDClPliMpKBJI/s400/img-2.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487956245130756610" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjabKmR9gQuMGJqfqeWVsEmuQfMPlPhlKyHOnPkYsfGiOFJrMBD9ILp0x8aahGZRgc4tp1zhIl-8Un5nnmRjp-xLgkN3yxH68RDHfYwvLIW0OKAEBAhr-LmgqC7upS6YaNi_pd5_6OlQps/s1600/img-3.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjabKmR9gQuMGJqfqeWVsEmuQfMPlPhlKyHOnPkYsfGiOFJrMBD9ILp0x8aahGZRgc4tp1zhIl-8Un5nnmRjp-xLgkN3yxH68RDHfYwvLIW0OKAEBAhr-LmgqC7upS6YaNi_pd5_6OlQps/s400/img-3.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487952548144084770" /></a><br /><br />There's art everywhere you look...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUy0_JAlB-OUo8f9OO6Zyni9jLOOmk5RrSsoLX9R3Vf0YA-_XX908XuSjRXmr3dQVVIMaKjcQybuZBN0gIPv5igtIJinz8oSy2ZaCTSAYUF3AdtAJhqmqcvgVJMQgqG4p02emolIq2m_0/s1600/img-5.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjUy0_JAlB-OUo8f9OO6Zyni9jLOOmk5RrSsoLX9R3Vf0YA-_XX908XuSjRXmr3dQVVIMaKjcQybuZBN0gIPv5igtIJinz8oSy2ZaCTSAYUF3AdtAJhqmqcvgVJMQgqG4p02emolIq2m_0/s400/img-5.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487950651287227010" /></a><br /><br />...but at times it's all a bit surreal.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS8KgQp5FZc2wledyNZSBPX27_RjnzCMXsb0rzZAgEZDp_pYCpVxs55QDh5O8fxkkZXS2g9YS636mh-D0W0JAW18mXwVhx1oWGkyFj2ETba67tsCJtm1iqe7vpIbP3-6qfbJzibjzYOG8/s1600/img-9.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhS8KgQp5FZc2wledyNZSBPX27_RjnzCMXsb0rzZAgEZDp_pYCpVxs55QDh5O8fxkkZXS2g9YS636mh-D0W0JAW18mXwVhx1oWGkyFj2ETba67tsCJtm1iqe7vpIbP3-6qfbJzibjzYOG8/s400/img-9.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5487951047094809106" /></a><br /><br />Previously, on Star Trek: The Next Generation...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh63pZw5bgco2cY4l6ffI9OBQGXPtKzgYAMYN2mhK1m8aB0eVaJtbYi20V6QX68yZ0Fki7yR3V8pAUlWUrDHbU4Vf7tlF-Ck2w2XrLWrM4QIwRiAFE_TwVsr3J11ME7e_YCW_pMXR7pkIk/s1600/img-1.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh63pZw5bgco2cY4l6ffI9OBQGXPtKzgYAMYN2mhK1m8aB0eVaJtbYi20V6QX68yZ0Fki7yR3V8pAUlWUrDHbU4Vf7tlF-Ck2w2XrLWrM4QIwRiAFE_TwVsr3J11ME7e_YCW_pMXR7pkIk/s400/img-1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487958136519596834" /></a><br /><br />A little "self-timer" action...<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpcUlocjHSBkgGe33Zelp60Gh_KESExv-9jzv8guCzMJGGuNkrolg3D1CZ4EQKHrzrl9MAW_d5QTEgjbHzedbt2sf1tRqVTRGt97sdRHv-cuA-bzdZ08y7cMCKiwhG4k5Mox7_lnOEmF8/s1600/img-1.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjpcUlocjHSBkgGe33Zelp60Gh_KESExv-9jzv8guCzMJGGuNkrolg3D1CZ4EQKHrzrl9MAW_d5QTEgjbHzedbt2sf1tRqVTRGt97sdRHv-cuA-bzdZ08y7cMCKiwhG4k5Mox7_lnOEmF8/s400/img-1.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487955610610210290" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6o9YZ5J5UyaLyvqXmLvEf6UQ6RiyNhjgoqSF0hy4jv-CsuOv0BsIHzApxwmHjPxLL6gB-o3oLxVgs9xpkCJuNveFn3BhhlpfAoAXesp738jEe2KBxRFvBxTe3mGUB5rP30ixTLvS1hBA/s1600/img-3.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh6o9YZ5J5UyaLyvqXmLvEf6UQ6RiyNhjgoqSF0hy4jv-CsuOv0BsIHzApxwmHjPxLL6gB-o3oLxVgs9xpkCJuNveFn3BhhlpfAoAXesp738jEe2KBxRFvBxTe3mGUB5rP30ixTLvS1hBA/s400/img-3.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487955609799997730" /></a><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizoiFMD4vg77KVI-FEsCQ-EWdm4MBM3RZEmn7WoXI87qcyCJWCDtUvOJshtzReo3LpZymBQKeA7ZOBUeSeqyqCc4Q6CkF6FgehpusC8uPzZUAec9PP9H3DYRALOEkqFC3BDiooRh4AAHY/s1600/img-16.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizoiFMD4vg77KVI-FEsCQ-EWdm4MBM3RZEmn7WoXI87qcyCJWCDtUvOJshtzReo3LpZymBQKeA7ZOBUeSeqyqCc4Q6CkF6FgehpusC8uPzZUAec9PP9H3DYRALOEkqFC3BDiooRh4AAHY/s400/img-16.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487953511358006274" /></a><br /><br />Vanessa and Hubert, these are for you!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMYV3bZ3EB4Qvc_phlRJYrpy-2SNVA5y2mSutAdL_nIScUaLbfLCOnRJzKTa61scCiaO1OLnXkDFyN11hy0uCp6x0ZVvvWACtj23A_urFbxTi6-MHU2SR9XxMi9f4iD_QiY2Eowx-zSWY/s1600/img-4.jpg"><img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhMYV3bZ3EB4Qvc_phlRJYrpy-2SNVA5y2mSutAdL_nIScUaLbfLCOnRJzKTa61scCiaO1OLnXkDFyN11hy0uCp6x0ZVvvWACtj23A_urFbxTi6-MHU2SR9XxMi9f4iD_QiY2Eowx-zSWY/s400/img-4.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487959005779167362" /></a><br /><br />The sun sets on the plaza....<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHsoHZ6puwmxv_PuFmQkSel5AoR6MIgR2ARCSQ1Jbc7SdWqYKAZSgT0zoSrWcY0htV1TW3yVL7ZgUwkRl6s9bZKXjQM5YPX5gcz0u3JkgKyDoOqTVZxiprX3jJZI1ngvQ5aG6H-cSHDzw/s1600/img-12.jpg"><img style="cursor:pointer; cursor:hand;width: 300px; height: 400px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiHsoHZ6puwmxv_PuFmQkSel5AoR6MIgR2ARCSQ1Jbc7SdWqYKAZSgT0zoSrWcY0htV1TW3yVL7ZgUwkRl6s9bZKXjQM5YPX5gcz0u3JkgKyDoOqTVZxiprX3jJZI1ngvQ5aG6H-cSHDzw/s400/img-12.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487958998396270050" /></a><br /><br />...The sun sets on the cathedral<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy1DB9k1azcFU4Bt7ISWM7Zc1uZaeUTT1kFt1oma2aB3y_9rzkFTfuuCQyJRs_l4vi5tHs0e6GIjYGnyT0jAFr8y9qE8CFME1-rfrYw8Vz5INeLjfg30wEd61qNE9ZLFCpP5J-AKz_mBM/s1600/img-13.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy1DB9k1azcFU4Bt7ISWM7Zc1uZaeUTT1kFt1oma2aB3y_9rzkFTfuuCQyJRs_l4vi5tHs0e6GIjYGnyT0jAFr8y9qE8CFME1-rfrYw8Vz5INeLjfg30wEd61qNE9ZLFCpP5J-AKz_mBM/s400/img-13.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487960467670039202" /></a><br /><br />Tonight, pintxos for dinner!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirZSQFFjTNJNZXPfydsdV-7AJhaU5yBNN4CYPbDJ092Ph8K8o2iVUfvZtUKCRBal-zc2G3zJwAwjppLbFfGzrqt4BU1rJSbLifZoFPMWrZFjHFGoCkDCzN2VH9FLB5GB-ToMMcnl4aI_8/s1600/img-11.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirZSQFFjTNJNZXPfydsdV-7AJhaU5yBNN4CYPbDJ092Ph8K8o2iVUfvZtUKCRBal-zc2G3zJwAwjppLbFfGzrqt4BU1rJSbLifZoFPMWrZFjHFGoCkDCzN2VH9FLB5GB-ToMMcnl4aI_8/s400/img-11.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487958991064389378" /></a><br /><br />Oops!<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiENL7A6PwfEVF_mloftDSZocN3gAvTWNJcBJw33HnVeC_ZRo2z40f-IxqSCP4Y2ACxJ4zCvAlPI3wICQR1WCBK33WxZpCY9anOVCUCZ_YUsr9jYBsrH66A5UWlsfpQcGDRAXiumvAwFg/s1600/img-10.jpg"><img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhiENL7A6PwfEVF_mloftDSZocN3gAvTWNJcBJw33HnVeC_ZRo2z40f-IxqSCP4Y2ACxJ4zCvAlPI3wICQR1WCBK33WxZpCY9anOVCUCZ_YUsr9jYBsrH66A5UWlsfpQcGDRAXiumvAwFg/s400/img-10.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5487958988567549666" /></a><br /><br />Almost Home.<br /><br /><br />Goodnight everyone.brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com2tag:blogger.com,1999:blog-6827527823540310316.post-46425279476152737462010-06-21T14:20:00.000-07:002010-06-22T02:08:48.615-07:00¡hola, mundo!<a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOyPeYRuXwjWNB-XmIeXomrWk5EEDslOt2qqi7ZWPZWUi-Wvjg1FrN8moyy9Rxzfcmo9GcW0VIca3QcUkQXf8d-lIUl0Y2YRf-VqjgsLyiNd5x-WaPTHe88KMhnixaZxz2Sx8dFDTo2iU/s1600/20100510_007.jpg"><img style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 400px; height: 225px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOyPeYRuXwjWNB-XmIeXomrWk5EEDslOt2qqi7ZWPZWUi-Wvjg1FrN8moyy9Rxzfcmo9GcW0VIca3QcUkQXf8d-lIUl0Y2YRf-VqjgsLyiNd5x-WaPTHe88KMhnixaZxz2Sx8dFDTo2iU/s400/20100510_007.jpg" alt="" id="BLOGGER_PHOTO_ID_5485344186893609362" border="0" /></a><div><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOyPeYRuXwjWNB-XmIeXomrWk5EEDslOt2qqi7ZWPZWUi-Wvjg1FrN8moyy9Rxzfcmo9GcW0VIca3QcUkQXf8d-lIUl0Y2YRf-VqjgsLyiNd5x-WaPTHe88KMhnixaZxz2Sx8dFDTo2iU/s1600/20100510_007.jpg"></a><br /><br />I write to you from the from the wonderful city of Barcelona. Still hacking on PiTiVi occasionally, but presently spending most of the day on "not-pitivi.".<br /><br />I've been hacking on the render dialog for a month or so, and it's become a real monster of a branch. But, hopefully, it'll really clean up that part of the application.<br /><br /><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxEKpntNYpxXq8x6Jx7mTvcwxg9Yv8pN6cB3-LPW1VNFpQ1JKHYMCxovKlOctoeffx5mxZBfX0I1AkAuYMQFKVzPprkdpPKmVlDti3UstuVCJbzULU3jR5tK6Ze0bX47pBEhy7Nqp_i9s/s1600/P6200070.JPG"><img style="margin: 0pt 0pt 10px 10px; cursor: pointer; width: 400px; height: 300px;" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhxEKpntNYpxXq8x6Jx7mTvcwxg9Yv8pN6cB3-LPW1VNFpQ1JKHYMCxovKlOctoeffx5mxZBfX0I1AkAuYMQFKVzPprkdpPKmVlDti3UstuVCJbzULU3jR5tK6Ze0bX47pBEhy7Nqp_i9s/s400/P6200070.JPG" alt="" id="BLOGGER_PHOTO_ID_5485349032808411746" border="0" /></a><br /><br /><div>It's been exactly a month since I uprooted myself from San Francisco, and it's been quite an adventure. Unfortunately, I spent too long fiddling with my cell phone and camera and it's bed time now. I'm too tired to summarize everything that's happened, so I'll just tease you with a few more photographs.<br /><br />Rest assured, I'll come back soon with "accounts" of "events" and stuff.<br /><br />I miss everyone back home! Goodnight.<br /><div><br /></div><div><img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj2FI4BanKDkRbXwhWtjlhJG2dn3YGk-28LC5WIfT0pwE7tWcCEM9hjxFL1jCKlIp7TxA0Myt-QNtyrCupiUXdndZyOu_2YhsGFkN-1JMWBLPoVLnU3o4NpvisRLoxJBtaalxVQldLgBmY/s400/P6140017.JPG" style="margin: 0pt 10px 10px 0pt; cursor: pointer; width: 400px; height: 300px;" alt="" id="BLOGGER_PHOTO_ID_5485351408115958930" border="0" /></div></div></div>brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com1tag:blogger.com,1999:blog-6827527823540310316.post-28468286668199507702009-04-25T11:13:00.000-07:002009-04-25T11:24:49.484-07:00To the three undo strategies I mentioned yesterday, we can add a fourth: widget-level undo. Unlike the others, this one works entirely on the UI side. The basic idea is that since all UI flows through widets, all you need to do is keep track of when those widgets change. An implementation of this idea is provided by the gtkundo library.<br /><br />This seems like a good appraoch for input dialogs. You can reverse even small user actions that never actually propagate changes back to the model with relatively little effort (since a library like gtkundo provides all the code necessary to handle stock widgets), but it won't work for the timeline canvas itself, since this is a custom UI element. In any case I don't see python bindings for this library, so it would be difficult for us to use it anyways.<br /><br />The concept itself is useful, and I plan to study the code (which looks pretty simple).brandon lewishttp://www.blogger.com/profile/17046865031973847470noreply@blogger.com0