Crestline 2007/06/03



Second time launching Crestline. Not the most graceful launch as I was a tad nervous about Crestline winds, combined with wanting to spend the extra 15 seconds to double check the replacement brake line I put in after my last flight. (The sheething of one of my upper cascade brake line had caught on a rock on launch a while back and gotten torn, finally got it replaced). Worked the ridge at Crestline only briefly, then bailed to head out and get over regionals. Made regionals with about 200′ to spare, still not 100% comfortable with Crestline, need to get there so I can actually try to work the ridge there on good days.

After getting to Regionals, worked that a little bit, the air was pretty punchy, with thermals that seemed pretty broken up. Only really properly cored a few of them, the rest of the time was mostly boating around, hitting lift, then sink, then lift, with nothing really coreable. Fun none the less!

The KML File.

Billboard, b*tches!

Ignoring my crappy day yesterday (I got some uber-sport sunscreen in my eye at launch, and couldn’t see right for the next 3 hours, so didn’t get to fly), this weekend was great for paragliding. In particular, Saturday was “epic” (quoth Dusty).

While sitting on launch waiting for the conditions to get good, I was chatting with Brian, and we got the idea of maybe shooting for hitting Pine (the mountain + ridges just to the west of Marshall) if the day suited it. I was excited at the idea, but wary. I was definitely trying my hardest to make sure I didn’t get too set on the idea, lest that lead me to pushing to hard for it when I shouldn’t. Little did I know what was in store!

I launched right at 5PM, steady wind with no complications. Worked the ridge a bit right at Marshall, and then decided to shoot out to Regionals, where folks seemed to be doing well. Got over regionals a little low, and scraped around until I caught one or two thermals that got me to about 4300. Brian was no where to be seen, but I figured I’d give Pine a shot. I now know that I definitely need more than 4300 if I want to try for Pine straight from Regionals! I got about 2/3 of the way to the lower Pine ridge and tucked tail, turning around and heading back for Regionals before I got stuck and had to hit the backup LZ.

I made it back to the lower ridges of Regionals (what are these called? anyone?) with little altitude to spare, and back to hunting I went. Things were looking pretty bleak, until I found a nice wide thermal that I managed to ride back up to 4100, directly above Cloud Peak. Regionals was now happening a little bit more, and several pilots were now getting up to about 4500 at times. Suddenly, I noticed Dusty’s wing heading over towards where Rob was circling, and I thought to myself, “If I want to follow anyone to look for good thermals, it’s them!” so off I went. Lo and behold, after searching a bit with Dusty, he and I latched onto a rocket of a thermal. It wasn’t necessarily pretty, and we both had to work to keep with it, but we both managed to ride it to 5100.

At that point, Dusty started heading “back.” I’d only ever even *launched* from Crestline once, and certainly never gotten high and flown back there. I had a moment of doubt, but then decided that since I had about 50-100 feet on Dusty, I could keep my eye on him the whole time, follow him, and worst case scenario bail and head out again. The glide was smooth, with not a single beep out of my vario the whole time we were headed back. We crossed the ridge leading down from The Billboard (Yes! I’d made it there!) at about 4600, and there were those lovely beeps of the vario again! We circled in the bowl there, and I got to have my first pass flying over the billboard! (for those that don’t know, the billboard is an old radio antenna that looks like a green billboard, thus the name).

Did a few passes there, before Dusty stared heading for Pine. Why not? Off I went. On the way there though, I hit some pretty big sink, and I’d fairly well used up my reserve of boldness in the glide back to Crestline, so I decided to play it safe, and aborted the glide to Pine to head back to Regionals. Made it back there with altitude to spare, but not a lot, and started working things there again. Folks were working the area by the 750, so I headed that way, and managed to hook a nice one that drifted me back towards Marshall and up to 4300. I noticed Brian over by Marshall, so headed that direction. Made a couple passes over the peak, and managed to nail my first top landing there! Brian later managed to scrape his way up enough to have a side hill landing, and we took a nice breather before both launching again and enjoying sled rides to the LZ. An eventful 1:30h flight, followed by a victory lap flight of 14 minutes! What a day!



And here is the KML file.

Soboba flying!

Had a great weekend at a work party/fly-in at Soboba, a flying site near San Jacinto, California. Talk about a fun time! We worked all saturday morning widening a leg of the trail used to hike up to launch to 6′ wide, to make hiking easier, and to hopefully allow quads and hardy golf carts to help bring equipment, gear, and pilots up the hill. We all got dusty as hell from the upslope wind, but it was definitely worth it. Got some lunch at McDonald’s/Taco Bell and made complete messes of their bathrooms trying to wash off the layers of dirt and dust.

Got back to the LZ, and headed up the hill! The hike wasn’t so bad, a little bit of good exercise before getting to fly. Did some para-waiting for a while, and finally most folks got off the hill around 5 PM, give or take. It was a classic glass off, with butter smooth lift anywhere you went looking for it. Had a nice hour and a half flight, and managed not to screw up my first landing in a foreign LZ. Here’s a screenshot:



And here’s the IGC and (since they’re in high demand) KML files. The KML file could use some work, I haven’t yet figured out how to 1) actually see the individual track points or 2) see a path that includes the elevation so you can actually see the 3D path like the one rendered by GPLIGC.

Camped out that night, enjoyed a nice BBQ with everyone, then crashed in the shipping container at the bottom of the hill. Spent the next day hanging out, working a bit on some stuff by the shipping container, then headed home since we were grounded by rain.

Altogether, an awesome weekend, and a lot of fun flying for the first time at a new site. Big thanks to Darrel, Bob, Alan, Elvis (and his awesome dog Leeloo Dallas Multipass Lopez), Roger, Mike, Regina, and everyone else that was there and made it such a great time flying there!

EDIT: Thanks to some examples from my brother, 3ric, The KML file now has a path that includes all the altitude information. You can right click the path, click properties, go to the altitude tab, and click “Extend path to ground” if you want to help visualize the path that way. Here’s a screen grab of the path in google earth:



GPS tracks of my paraglider flights

So a while ago I took advantage of my REI dividends and bought myself a Garmin Foretrex 101 to take with me on my paraglider flights. Three weekends ago I managed to sneak a flight in, and recorded my first track on the thing. I found GPLIGC a while ago, which is a utility for viewing the statistics of flights, as well as doing 3D models of IGC files (which you can create from the Garmin format easily). I managed to get the elevation data installed/configured, but I haven’t yet figured out how to get the giant 6000×6000 pixel GeoTIFF images from here into a format GPLIGC can digest, so no orpho map backgrounds for my stuff just yet. Anyways, here’s a rendering of my flight:



It was a nice hour long flight, beautiful conditions, etc. I actually only landed because I was starting to feel a bit queasy after the previous night’s festivities (if you look closely at the flight, you can see a spiral or two in there that I pulled to try to get down faster (and for practice as well).

You can grab the IGC file here. Fun stuff, I wish GPLIGC were anything *other* than Perl/Tk, but until I magically find time to hack on something myself (maybe leverage Turtle? Do something new myself?), it will definitely do. Fun stuff!

Medsphere is hiring!

Medsphere is hiring! We are on the lookout for sharp software/UI developers right now to work in Orange County, California. We have a full job description up, but I’ll attempt to summarize from a “in the trenches” perspective:

The R&D team is busy implementing all sorts of GUI components of the healthcare experience. We recently open sourced OpenVista CIS, which is the project I’ve been working on the past year and half, and we will be doing continued development on that, as well as working on several other components needed to flesh out the healthcare experience. The perks include:

  • Working on a project that can have a huge impact on the health and welfare of thousands of individuals.
  • Working in a fun, flexible environment using open source technologies. The UIs are written in gtk#, but we’re looking for anyone with UI design experience. You can pick up gtk+/gtk# easily if you’ve done UI development before.
  • Enjoying beautiful, sunny southern California. If you need convincing, it’s a gorgeous 75F out right now. If you’re not out here already, we can certainly try to work something out to get you out here.

If you’re at all interested, please mail your resume to me at pete.johanson@medsphere.com

Slackline!

At the end of last summer, I start going to this indoor rock climbing gym, Rock City, a few times a week. The first night I was there, I saw some folks doing slackline there. I’ve been intrigued ever since. I’ve been really working on it a lot the past few months. I’m slowly starting to get there:

(In case the embedded flash doesn’t work, you can watch the the video on revver here.)

I’ve got the original version up here (beware, about a 12 MB file). Fun!

HOLY OPEN SOURCE, BATMAN.

As Brad has already posted, today marked the release of OpenVista CIS 0.9 by Medsphere! I’ve been working on the project since September, 2005, and this release has been a long time coming. CIS is a cross platform gtk# application (currently runs on Linux and Windows, in theory on OSX, although we’ve not tested at all) for managing patient information (an Electronic Health Record (EHR), specifically). The application is actually a rewrite of an old Delphi (and by old, I mean *old*) application, CPRS, that was developed by the Department of Veteran Affairs.

Obligatory screenshot:



There’s over 100K lines of code, some of it hairy, some of it beautiful. All of it lovingly wrought with years of tears and sweat. We will continue working on the project, as well as ancillary projects to manage other parts of the whole healthcare process moving forward, all based on gtk#. We are shooting for doing beta deployment(s) of CIS sometime this year (I won’t give exact dates, as that’s completely out of my hands), which is going to be the next huge breakthrough for our project.

Huge thanks to everyone involved, including our great team here, the folks at Novell that hack on Mono and gtk#, the gtk+ authors, and everyone else that makes this sort of thing possible.

Still lots of work left to do, so I’ve got to get back to it, but I needed to post about this, before my excitement makes me explode. Go Go Gadget Open Source!

PS - We’re pretty much constantly on the lookout for folks that want to hack on gtk#/healthcare software. We’re located in sunny southern California, in Orange County. If you’re interested (or if you’ve got any questions about the project, etc), please drop me a line.

In case you thought my helmet couldn’t look goofier.

As beautiful as SoCal is, there are sadly fewer flyable days here in the winter, thanks to Santa Anas (well, fewer flyable days at my usual site, I have to get off my *ss and go check out the Elsinore site soon). With all this extra time, and a trip to Seattle for Thanksgiving, you get…. helmet cam!

The base unit which is epoxied to the helmet is a custom aluminum part whipped up on my brother’s CNC lathe:



The final result, just resting on the helmet, no epoxy:



The final result epoxied on, with 1/4 20 post, and a wing nut for tightening against a camera/DV camera/whatever:



And in action!



In generally, the paragliding the last few months has been *awesome*. Brad came out one weekend and took some photos from launch:





That day I had an awesome 2 1/2 hour flight, and got to *just* under 6000′ above sea level. Talk about fun! I’ve got over 23 hours of airtime logged now. Anyways, I’ll stop boring people now, but I’ll leave you with this wonderfully photo of the shavings left over from the lathe work:

Hot cross-platform PDF action.

One of the things we know we need to do in the not so distant future at work is support PDF viewing/thumbnailing. In particular, it needs to be a solution that works on at least Linux, and Windows (OSX would be great, but not really a priority for us). To that end, I spent some time last weekend working on 1) getting poppler compiled on win32, and 2) Updating the poppler-sharp binding initially created by aes and get that building on win32 as well.

Lo and behold, after lots of cygwin mucking, libtool massaging, etc. I give you, the sample poppler-sharp viewer!

win32:



Linux:



I will be writing up build instructions eventually so others can reproduce, but until then I’ve got a few other gifts.

Windows files:
poppler-0.5.4-cvs.zip - Runtime files for poppler.
poppler-0.5.4-cvs-devel.zip - Development files for poppler.
poppler-sharp-0.5.4-bzr.zip - Runtime files for poppler-sharp, including a sample viewer application.

Note, these all depend on gtk+ and gtk#, respectively, on win32. The necessary win32 build changes can be found on freedesktop bug #7107, and my bzr branch of poppler-sharp is at http://www.tenslashsix.com/bzr/poppler-sharp/

The poppler build is pretty much guaranteed to have issue with other character sets/fonts like Japanese, etc until I can get some path stuff fixed, and the poppler-data tarball properly installed for win32.

More to come later on this.

UPDATE: Miguel pointed out that not everyone has every SCM under the sun installed, so here’s a temporary tarball snapshot of things: poppler-sharp-0.5.4.tar.gz. The release version, etc is by no means meaningful/realistic, I just set the version to match the poppler version for now.

Paragliding photos (finally)

Yesterday, my friend/coworker Jon and his girlfriend Kathy came out to the Andy Jackson Memorial Fly-in to hang out and take a *bunch* of photos. The fly-in was awesome (for those that don’t know, a fly-in is a gathering/party at a flying site where pilots come to all fly, drink, BBQ, socialize, etc) with the skies fairly filled during the peak times.

I finally have photos!:



I had a good hour+ flight, and am finally feeling comfortable flying in slight crowded air. Just requires paying a *lot* of attention to where everyone is, and strictly following the right-of-way rules. There was a spot landing contest (everyone puts in $5 to enter, whoever lands closest to the cone in the spot wins the pot), which I actually managed to win somehow:



Upon hearing of my victory, I performed a celebratory fist raising:



All of Jon’s photos can be found in this gallery. All in all… I still absolutely love this sport. Don’t count on me giving this up anytime soon…



O Canada!

After waiting a year and a half for the paper work to go through, it’s official:



Thanks to my mother being a Canadian citizen, I have now successfully claimed my dual citizenship. Next up I can get a Candian passport, and travel as a Canadian, instead of as an American, something that is more in more important in light of how well… loved the US is right now by the rest of the world.

Schizo, Paragliding, Ambient Orb

I recently adopted a new family member:



His name is Schizo, or Schiz for short. He was found in the alley by my paragliding instructor’s house, and I’ve taken him under my wing, as it were. (Oy. Again with the bad puns.) The vet seems to think he’s about 8 weeks old. Don’t be fooled by his seeming quiet and calm demeanor. He’s as calm as he is in the picture about 9/10 of the time. The rest of the time he’s busy tearing through my apartment at break neck speeds.

In paragliding news, I got my P2 rating finally this past weekend, which means I’m free to fly at other sites, and without my instructor around, etc. I’ve currently had 27 flights, with 11.8 hours logged. I’m still absolutely loving it. As such, I’m starting to plan/save for a paragliding trip next summer to Europe. The current initial thought is to hit France, Italy, and maybe one other country sometime in June/July next summer. More updates will hopefully follow as I start gather more info online, figure out how long I can actually take off, etc.

Some friends gave me an Ambient Orb for my birthday recently, which is *very* cool. You can actually create your own custom “feeds”, which is really just saying you can push arbitrary data (color + pulse rate/pattern) to the thing via their web interface and they then push details to the orb via the cell/pager network. Starting to write a little daemon in ruby to pull weather data from the Crestline Soaring Society’s Weather Station, do some sort of “good flying day” heuristic based on the past 4-10 weather readings, and update the orb accordingly.

Currently I’m thinking of solid green being ideal, with blue being too light wind, orange/red being too strong winds. The distance from green will be multiplied by a factor corresponding to wind direction degrees away from ‘ideal, straight up the hill winds for launch’. If either the wind is blowing down (wind blowing down the hill is a deal breaker for launching) or a detected rotor (usually identified by the wind direction switching between blowing up, down and, cross in fairly rapid succession) causing a fairly rapidly pulsing red effect. Suggestions welcome for other ways of representing those sorts of details with this orb.

Other feed ideas I had included an Iraq Death Toll feed, either based on the daily death count (if I can find actual data for that online) or on the running monthly count. Morbid, I know, but I think there’s some potentialy for a meaningful use for this thing.

We also are thinking of buying one or two for the office, and hooking them up to our bug tracking software at work… Solid color representing the current bug count, and brief red rapid pulsing when severity 1 crasher bugs get reported. Other ideas?

bloody extortion

Pepe’s towing can go do unpleasant things to goats. What a wonderful way to cap off my f*cking evening:

That’s right, $265 to pay the company that towed my car to give me back my own property. Words cannot describe the rage I am feeling right now.

“So that’s what my chin looks like” and paragliding update.

So this past wednesday I had a random urge:

Say goodbye to my 3 year old beard. I miss it already. Oh well.

In paragliding news, I flew my first non-radio assisted flight today. 3rd solo flight. Managed to nail the landing, hitting ‘the dot’ almost right in the middle. This makes me very happy, as my flight last weekend I managed to overshoot the dot by quite a bit. Also bought a barely used wing + harness (the ones I’d been flying on) from Rob and Di today, which is awesome. The wing is an Ozone Buzz, a very nice DHV 1-2 wing. Still loving every second of my time spent doing this sport. Going both days next weekend to fly. I need 3 more spot on landings before I can consider getting my novice rating.

happy flying everyone!

first solo flight! HOLY. CRAP.

So today I did my first, radio assisted, solo paragliding flight from the peak. Absolutely amazing. We waited til late in the day to do it, so it was mostly smooth sailing except for some mild turbulence about 3/4 of the way through the run. Fairly straight run down to the landing zone, mainly just wanting to get a solid first run in and out of the way. Managed to nail my landing, which was awesome for my first run. Got lots of cheers during, and handshakes after congratulating me on my first flight, which was awesome. Very supportive group of folks in the community, which is great to see.

Next solo is this coming saturday; I can’t wait. Until then, I managed to take just a few photos of things. No action shots, sadly, but at least something:

The small storage space and structure at the LZ, with folks hanging out. The thing has solar cells on the roof used to charge the lights for when folks hang out at night, etc:



This one shows one of the guys folding up his wing. The top farthest peak is the crestline where people launch from. 2300′ above the LZ, is what I’ve heard:



Fun stuff!

dozen flights, lots of cool people, small muine update

Had my second paragliding lesson with Rob today, which was just as exciting as the first, if not more so. Started with more just basic kite work, then started doing flights off the small bunny hill. I’m bad at guaging heights, but I think the small hill s about 50′ high. Got a total of 12 flights in on that hill, which were awesome. I’m really starting to get a hang of kiting/takeoff/wing control, which makes me really pumped.

I have to do a minimum of 15 flights on that hill before I can do my first radio assisted solo flight, so the current thinking is next lesson we’ll do another tandem flight, then finish with more small hill flights to finish that, then the next lesson, if I’m comfortable, the conditions are good, etc. I’d start doing solo flights.

Yes, you heard it right, in 2 weekends I might have my first real solo flight!!! I’m so psyched about how things are going. After each lesson, I’ve just spent the drive home thinking through all the details of things I’ve learned and trying to process as much as possible. I also managed to forget my camera today, so sadly no photos yet of things.

After the lesson, I joined a bunch of the folks for dinner at one of the local hangout/pizza joints. Met a lot of great folks, many of whom’s names I’ve innevitably mixed up or forgotten, but still seems like an awesome, very close group of people. Looking forward to getting to know more of them, etc. Rob and Dianne in particular seem like amazing people, having been doing this for years and years, and clearly playing an important role in the paragliding/hanggliding community here. If anyone is in SoCal and looking to learn either sport, I would highly recommend you contact Rob. </shameless plug>

On the tech side of things, I released a 0.8.5pre1 pre-release of muine last night, the major updating being support for Gstreamer 0.10. I’m going to do a final 0.8.5 release sometime next week hopefully. Sorry the geeky side of things here is so brief, been a bit pre-occupied with other things recently… can you blame me?

The rune crumbles to dust!

You’ve survived this attempt on your life.
The rune crumbles to dust.

- Nethack quote found in a source code comment at work.

So instead of dying today at my paragliding lesson, I had an *amazing* time. No amount of personal hype/excitement could reduce how incredibly awe inspiring my first tandem flight was. Just gliding above ravines and ridges with nothing but open air all around is quite possibly the coolest thing I’ve ever done.
.
.
.
wow.
.
.
.
wow.

Ok, you get the point. After the initial takeoff (which was startlingly uneventful: Rob (my instructor) went over the basics of the pendulum effect, etc. then basically once we were set he said ‘Run!’ and then we were off), I pretty much flew the whole flight, including the landing (which I managed to do quite gracefully, to my surprise). Rob only stepped in a few times to handle some potentially delicate situations like merging into a group that was circling a thermal, etc.

After that, we went back to the LZ (landing zone, for those kids not cool enough to know all the hip lingo) and I did a lot of ‘kite work.’ Basically, one of the trickier beginner things in paragliding is the initial inflation and control of the glider before/during takeoff. So I did that the rest of the day; I’m by no means a natural, but I was definitely starting to get the hang of things by the end of the day.

My next lesson is in a week, and I can’t wait. I’ll be doing more kite work, but with a more high performance wing, and also get to going from kiting to actually lift offs and short rides down the small hill at the LZ. I think I stick to several lessons just at that for a bit, then finally do my first radio assisted solo flight from the top. I can’t wait!

I’ve not yet met the SoCal girl of my dreams since I moved out here, but I can tell you one thing: I’m definitely in love.

NYC weekend, one day til liftoff!

Spent a long weekend last weekend back in NYC, primarily to participate in the NYU alumni vs. current team ultimate game. As predicted, we *destroyed* them, final score of 15-5. NYC got record rain sunday, and it was pouring the whole time. Talk about FUN!

Got to hang out with a bunch of the old ultimate crew, including Dusty, Julie, Meyer, John, Jimmy, Jeff, etc. Awesome times were had by all. Got some good scrabble and not-so-good smash brothers in while I was there, which was long overdue. Unfortunately, I took exactly 0 photos, which sucks. I’m bad at the whole ‘photo thing’ (unless it’s spin photos, those I can do).

In other news, *tomorrow* is my first paragliding lesson. Starts at 4PM. I’m so excited I need to buy a new office chair, cause I’ve soiled this one. Thor better bring me good weather tomorrow, or someone’s getting hurt. Will report back on how it went (assuming I don’t die in the process)

NP: Man Man - Push the Eagle’s Stomach

We’ve set a date!

No, I’m not getting married, I’m not even dating anyone currently, silly!

NO! I’ve set a date with an instructor for my first paragliding lesson! Paragliding is something I’ve always had a great interest in, and I even managed to take one lesson whlie in highschool. Unfortunately, time, money, and opportunity were all against me then, and I never got to really get into it.

Fortunately, most of those factors are now actually to my advantage, thanks to the whole ‘moving to california for the great job’ thing, so what better time than now!

My first lesson is April 29th with “Rob” (I would’ve started next weekend, but that weekend I’m back in NYC for a quick visit to see friends and play some ultimate), and I can’t wait.

When I told my manager Ben my intentions to do paragliding a few weeks ago, his response was “Just wear a helmet and wrist guards, that’s all I care about” (paraphrased (*para*phrased; GET IT?! (oy))). No matter what else happens, long as I can type, and (optionally) think for my programming gig, he could care less. (:

Here’s to not dying!

Context menus for Gtk.TreeView headers

[The following mini-HOWTO is posted in the hopes of saving someone else the trouble of figuring out all this magic later]

This past week at work, I came upon the interesting problem of adding a right click menu to the *header* of a Gtk.TreeView. The issue being that TreeViewColumn is not infact a Gtk.Widget, but merely a Gtk.Object, exposes no Child or Children property like a Gtk.Bin or Gtk.Container, and is generally relatively API limited.

The following code snippet was adopted from some random bug on the GNOME bugzilla that I’m now failing to locate and link to. The full example in Boo can be found here. I have a version in C# as well, but it’s not nicely formatted, and lacks the inline comments that the above Boo version has.

The basic gist of the trick is to set TreeViewColumn.Widget to a new Gtk.Label instance:

col.Widget = Label (”Right Click Me!”)
col.Widget.Show ()

and then iterating over the Parent Gtk.Widgets of the label until you find one that is an instance of a Gtk.Button:

parent_widget = col.Widget.Parent
parent_button = parent_widget as Button
while (parent_widget != null and parent_button == null):
    parent_widget = parent_widget.Parent
    parent_button = parent_widget as Button

This Button will actually be the one used for the header, and you can connect to the ButtonPressEvent here, and in that handler do any menu pop up, etc. that you desire:

if parent_button is not null:
    parent_button.ButtonPressEvent += OnHeaderButtonPress

In your handler, you can then pop up a menu if it’s the correct button, etc:

[GLib.ConnectBefore]
def OnHeaderButtonPress (o as object, e as ButtonPressEventArgs):
    if e.Event.Button == 3:
        menu.Popup ()
        e.RetVal = false

Couple of gotchyas:

  • You *must* add the TreeViewColumn to the TreeView before doing any of the custom widget parent stuff. The column doesn’t do most of the setup unless this has happened first.
  • Make sure you use [GLib.ConnectBefore] on your method attaching to the ButtonPressEvent, so it gets called before TreeViewColumn’s handler does, otherwise you’ll never even see the event. Similarly, if you handle the event, you’ll want to set args.RetVal = false to stop propogation of the event.
  • There’ s no guarantee this won’t break if the gtk+ folks change the internals of GtkTreeViewColumn.
  • Your TreeView must have HeadersVisible and HeadersClickable true.

Checkout the full Boo code for all the magic, with inline comments.

UPDATE: As Joe pointed out in the comments, you can actually optimize the ‘find the parent button’ process by using Gtk.Widget.GetAncestor (GLib.GType). There’s a new version of the full boo file found here. Thanks Joe!