Saturday, December 25, 2010
Sunday, December 19, 2010
Friday, December 10, 2010
Thursday, November 25, 2010
Saturday, November 20, 2010
Saturday, November 6, 2010
Thursday, October 28, 2010
Wednesday, October 20, 2010
Saturday, September 11, 2010
Tuesday, August 3, 2010
Some of you already know what the above images are about, but I'm so happy about getting this to work, that I thought I'd post a blog about it. It happens to coincide with the end of this year's REU (Research Experience for Undergraduates) program during which I had 5 undergrads in the lab working on several eye tracking projects. This year it was all about video, which prompted me to develop the program responsible for drawing the above images. Collecting eye movement data (x,y,t) over video is what I worked on in Barcelona. It took me pretty much most of those 6 weeks to get enough C/C++ code together to be able to display video while recording gaze data. Once that was done, I handed the program over to the REUs who then ran four studies and who also extended the program to do various other things. Meanwhile, the whole effort motivated me to figure out how to display the captured data atop the video frames as a means to visualize the recorded gaze data. The algorithm for generating the above heatmaps is pretty straightforward and is well-known. Step 1 involves dropping a Gaussian point-spread function at each gaze location, growing the resultant heightfield with as many gaze points as collected per each video frame. Step 2 requires finding the maximum value in the heightmap. Sounds easy, but for an NxN image, it takes O(N^2) operations. Step 3 then requires normalization of the heightfield (division by the max value). Step 4 then recolors the height (luminance) by mapping it to the rainbow color palette. The last two steps, which can be combined into one, together take another O(N^2) steps. The image above at left was created this way for a data set of 24 scanpaths (sequence of gaze points) on the CPU. Looks good but it's slow (took about a minute). The image at right took only a fraction of a second and looks almost identical. The trick here is to use the GPU to reduce the number of operations form order O(N^2) to O(log(N)) for the max value localization and O(1) for the recoloring. On one particular workstation with a decent graphics card I observed a 700-fold speedup due to these reductions. That just blew me away, which is why I'm so excited about this development. I recently moved that bit of GPU code onto my video playing code and sure enough, even for a fairly large data set (oh, about 8 people or so), the code appears to play the video at real-time (30 Hz) rates. I suppose I should take timings of this just to confirm how long it takes...this could make a nice little paper someplace. Other eye tracking types might like to know how the whole thing is put together...
Monday, July 12, 2010
The pic is back from our gig on July 7th. Right in the middle of a heat wave, when it went up to 98F. If I look like I'm trying to concentrate, I was. I don't know whether it was the heat, the Gretsch drums, or something else or a combination of factors, but I was not having a good first set. I think it played ok, but I know I made a couple of flubs here and there. I pulled out my old Gretsch drums but I haven't played on them in a very long time. Lately I've been playing on the Tama rockstar kit I traded for my old Pintech electronic set. I like the Tama's larger toms and I think its compactness—one less floor tom. The Gretsch kit has two floor toms and maybe because of that seems more spread out. I remember missing the right crash symbol because it was out of my immediate reach (had to stretch for it). So after the gig I transferred the bass drum's resonant head (with the band name on it) onto the Tama kit and bagged the Tama kit. I don't think I'll be using the Gretsch kit any more, so it may be time to start looking for a new owner for that kit. Right during setup I busted a resonant head on the small 10" tom...it sounded kinda crappy the rest of the night, another reason for a lackluster first set...once I got into the habit of going for the second tom, and the temperature went down, the second set was much better.
Tuesday, July 6, 2010
Monday, July 5, 2010
As soon as I got back from Barcelona, it was straight back to work. I was already a week behind on my meetings with this year's REU students, so it's been pretty hectic. Today is the last day of the 4th of July long weekend, and since I'm stuck at home on the couch, I thought I'd update the blog. Somehow I managed to pull my left pec muscle a couple of days ago, which is why I'm sitting here coding and not out on the boat. I guess it must have been lugging the new sailboat battery that did it, but I can't be sure. All I know is my left pec is so painful that it's difficult to breathe. I wanted to get out on the sailboat, give it a nice cleaning, and putt around on it, but I'm having trouble moving around much. It's nice to have caught up to some badly needed coding, but it's really nice outside, too... Hopefully this goes away by tomorrow, because that's when I need to load up the truck with my drum gear for Wednesday's Greenville gig. Tonight is band practice, when I'll see how I can play in this condition. Major annoyance. Anyway, above is a short video of the fireworks that the city of Clemson puts on every year at the YMCA beach. We get out there on the motorboat and sit and watch (a major reason for getting the powerboat back in '03 I think it was—the idea was to have it on the water by July 4th—I think we got it in the water just in time). This is the first video upload I've done on the blog, hopefully it turns out ok. I shot the vid on my iPhone, so it may be a little blurry, although I think it managed to focus itself fairly well.
Sunday, May 30, 2010
Although I had the option of taking the train to Barcelona's BCN airport, in the end I decided to cab it. It was either spend 6 hours at the airport or get 6 hours worth of sleep. I went with the sleep and hit the sack at 9pm. Got up at 3am, hailed a cab (lots of them around), paid the 26 euros, and checked-in. The airport was surprisingly busy for 5am—I pissed off some American ladies by cutting in front of them in the queue, but then jumped back out when I saw the "elite" line empty. Due to my frequent flyer miles I am privy to this service and so it took me 5 mins to check in vs. standing in line for what looked like it would take 30 mins–1 hr. Security was fairly smooth throughout the trip, including Amsterdam's Schiphol. The plane closest to the window in the pic at right is at the gate from where I departed and on a similar plane, the Airbus A330.
The AMS-DTW flight was its usual 7-8 hour duration, this time I watched the Academy winning Jeff Bridges in Crazy Heart, and it was about the only thing left in the selection that I hadn't seen that I was interested in. I'd already seen Sherlock Holmes (very good, btw, if you like Guy Ritchie movies, as I do) and The Book of Eli with Denzel (also pretty decent). Oh I forgot! I hadn't yet seen The Damned United about British football ca. 1967—1974 and about Brian Clough, a coach of that era. It starred the guy who played Frost in Nixon/Frost, and it was surprisingly very good. After that flight, I had sushi at DTW then hopped on to the flight to YOW where I am now. I decided to stay a few nights in the University of Ottawa student dorms to save a few bucks—46 a night is hard to beat, although I have to use the common washroom and I now miss having my own kitchen! Even though I thought that the little kitchen in the Barcelona apartment was pretty dinky, it's particularly good for breakfast items, something my stomach is now demanding :)
Thursday, May 27, 2010
Yesterday as I went to the grocery store (yet again—this time I only needed a few things, which seems more like the style of shopping done here: come in for a few things instead of the large, weekly shopping normally done in the US), I thought I'd go in to the Sants Estacio train station to check on trains to the airport. It turns out this station, directly on the route of the airport train, is right across the street from the grocery store I go to. The store happens to be just past the gym where I go work out every morning, which happens to be right in front of the Parc Industriel, a small little park with grass, trees, and water. To get to the water, you walk past this little grove of trees and playground where parents and kids show up in the afternoon. Once you ascend a tall flight of steps, you're then looking down on the water. I suntanned there last Monday where it was a bit quieter than the beech (no nagging masseuses or beer salesmen). Sorry for the poor picture quality, I just used my old cell phone to take them.
The Sants is a fairly large train station, and happens to be the first station I arrived at the first time I visited Barcelona. Back then I had wanted to get to Plaza Catalunya, which meant transferring at this station. Well, suffice it to say that although I succeeded, I was still somewhat confused as to how I managed it. Remember back then I hadn't really fully understood the three train systems that exist here. In fact, back then, I took the Renfe train to Catalunya, never managing to locate the metro lines that also go there (although now that I think about it, on my second visit, I think I did manage to switch to a metro line). Now, of course, on my third visit, this station looks mush less bewildering. And since it's walking distance to my apartment, and I already have a metro train ticket (which works on all three train systems), I think I'll just take the train to the airport Friday night instead of hailing a taxi. It'll save a few euros and kill some time. And it's a good thing I inquired at the station for the schedule, because it turns out there's some kind of strike going on, and so the train schedule's a bit messed up. No problem though, in fact, this Friday it seems to be in my favor as the last train is later than usual, leaving after midnight, which would suit me just fine. One minor issue is that the train station is at the older airport terminal, which means I'll need to catch a bus to Terminal 1 when I get there. Hopefully everything is still running at the airport as I basically intend to spend the night there...that's my "temporary" exit strategy, meaning my exit to Ottawa from where I come back to Barca for one last week (of vacation).
Friday, May 21, 2010
The other day I took the metro to (what I'm guessing is) one of Barcelona's larger malls, the Diagonal Mar. I think it's one of the larger ones, although it wasn't quite as large as Greenville's own Haywood Mall. What's more, Haywood Mall has more "upscale" stores than Diagonal Mar, e.g., the latter lacks stores such as Williams-Sonoma. So I'm thinking there must be other more posh malls around here somewhere. With Barcelona's population of 1.6 M compared to the 1.2 M spread out between Greenville-Spartanburg-Anderson, surely there must be another ritzy "Galleria" type place here somewhere, no? Or maybe the stores are just smaller and more spread out throughout the city? There is, for example, a Henckels store devoted to that brand, specializing in cutlery (knives) and personal hygiene products (nail clippers, etc.). It's a pretty ritzy store, but not in any mall, just on a little side-street off Las Ramblas.
Maybe the mall is a North-American concept, I don't know. In contrast, Barcelona has many, many shops, each specializing in particular things. I'm not exactly sure where they're all located, however. There are various "village"-like communities throughout the city. Las Ramblas, for example, has a large number of specialty stores, and just off Las Ramblas there are various higher-end stores like the Henckels shop I mentioned. But Las Ramblas caters to tourists as well as locals, so I'm not sure whether the locals actually do their shopping there. Meanwhile, other "villages" such as where I am (Hostafrancs) has its own number of shops. I was told that each of these "villages" also has its own town hall, or ajuntament (which I think is Catalan) and so it stands to reason that each little area is also its own little shopping district. This is not uncommon, e.g., many large cities have their "little Italies", or "Chinatowns", I'm just not familiar with them all here in Barca. I did, however, find the official FCB store, and bought myself two jerseys. I have the traditional blue-maroon one, and I also bought this neon-yellow sleeveless one. In the pic (rather dark, sorry) I'm wearing the neon-yellow one, just before heading off to the gym in the morning (it's dark because I have the balcony doors closed).
When I first got to the apartment almost a month ago, I was dismayed to find its facade blocked by a scaffolding, covered up by a blue mesh. I suppose I should have taken a picture of it, but instead I took the time to complain to the landlord. Luckily he was both responsive and reasonable and knocked 20% off the rent due to the inconvenience. Well, I couldn't really open the balcony doors cause there were workers out there, I couldn't stand on the balcony without almost hitting my head on one of the scaffolding levels (one of the walkways was right at my eye-level), and I couldn't really see outside due to the blue mesh covering up the whole thing. The landlord had informed me that this would go on till about mid-June. Happily, they finished ahead of schedule, and as of yesterday the scaffolding's gone! Yesterday I enjoyed a couple of Leffe beers on the balcony (mine is the one at bottom-left, obscured by the tree), watching people milling about below in the afternoon sun. The good weather appears to have finally returned as well—I'm in shorts again today, as I was the first week I was here, all the time in between it's been rather chilly and one week it was raining fairly steadily all week long. Saturday there's a 30% chance of rain, but Sunday and Monday look good at 21 C and sunny, and it's a long weekend here, to boot! Should be a nice weekend and then next Saturday it's off to Ottawa!
Here's how I make use of my small apartment kitchen. In the pic I'm just getting ready to cook Penne with Calamari and Malvasia. At right is some bread I broke up and that I'm going to toast in the tiny oven just behind the little tray on which the bread sits. On the stove I have water boiling for the Penne, and my main pan for combining the rest: whole canned tomatoes that you see behind the small cutting board on which lies the sliced red onion. To the right of the tomatoes is a tiny little espresso cup that I use for small amounts of spices, in this case there's about a teaspoon of crushed red pepper flakes in there. Just behind the pot with water and against the backsplash is the thin, tall bottle of sherry (jerez) that is subbing in for Malvasia wine. This wine was a good choice for this dish as it is sufficiently sweet and so I think a good sub for Malvasia (the bottle itself also makes a good rolling pin!). On the counter, in front of the cutting board is my block of Manchego cheese, the famous Spanish cheese (very good, btw), and behind that at the far corner is my plate of cut up squid (Calamari). All of these ingredients get combined into a very tasty dish that, in this particular instance, made 4 servings. To save some money, I basically at this dish all week :)
The finished dish is shown at left, with the Manchego cheese sprinkled on top—it eventually melts and "gooeys" up the dish. The Calamari was excellent, although I wouldn't recommend extending this dish four days the way I did, I just did that to see how far I could stretch it, next time I'll likely cut the ingredients in half. To the right you see the finished product of the previous weekend's meal, one for which I used the sherry wine as a rolling pin (to roll out the puff pastry), and one of my personal favorites, Beef Wellington, partially because it calls for beef fillet and partially because I liked the way Gordon demonstrated making it on TV; his own excitement is almost inspiration enough to make you want to try making it. The beef makes it somewhat expensive (about 11 euros in this case, but it made two servings), but the result is very tasty, especially if you don't overcook it. I was a bit worried about that with this little oven, because I had trouble with the pizza I made the weekend before. I couldn't get the pizza dough to bake properly, which led me to think that the oven was on the cool side. That may have worked in favor of the Beef Wellington, because the beef turned out good (pink on the inside), but the puff pastry appeared to cook fully. I had more pastry dough than I needed, but I erred on the thin side which I think was wise—the thought of "double-wrapping" had crossed my mind, but fortunately I banished the thought. In retrospect I think double-wrapping could have ruined the dish by potentially undercooking both meat and dough. And, curiously enough, in this oven, the bottom of the dough was more burnt than raw, as it's turned out before back in the oven I've used in the US. All in all, although the kitchen is rather cramped (the stove top burners are too close together and too close to the controls), it's fairly serviceable.