Full-screen video playback for Android

AndroidSo you want to have video playback in your Android app? This is pretty straightforward to do once you know what you’re looking for and, aside from a few (rather tedious to figure out) small snags which I’ll go into later, can be completed relatively quickly.

What we wanted to do for W&M’s Dress the Griffin app was, when a button was pressed, open a video fullscreen, automatically play it, and when the video completes, return to the previous screen. It took me a while to find the correct Android widget to use, but once I did, things were pretty straightforward (I went off-track for a bit trying to get a MediaPlayer to work, but it turns out there’s a VideoView explicitly for doing what I was looking to accomplish).

The two main files you’ll need for a full-screen video player are a new Activity class that will create a VideoView and set it as the main content view until the video playback has completed:

package yourpkg;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.net.Uri;
import android.os.Bundle;
import android.widget.VideoView;

public class VideoPlayer extends Activity
   implements OnCompletionListener {

	private VideoView mVideoView;

	@Override
	public void onCreate(Bundle b) {
		super.onCreate(b);
		// Bring the video player to the front
		setContentView(R.layout.videoplayer);
		// Get a handle on the VideoView
		mVideoView =
			(VideoView)findViewById(R.id.surfacevideoview);
		// Load in the video file
		mVideoView.setVideoURI(
			Uri.parse("android.resource://yourpkg/raw/videoname"));
		// Handle when the video finishes playing
		mVideoView.setOnCompletionListener(this);
		// Start playing the video
		mVideoView.start();
	}

	@Override
	public void onCompletion(MediaPlayer mp) {
		// The video has finished, return from this activity
		finish();
	}
}

And a layout XML file to show your video fullscreen:

<?xml version="1.0" encoding="utf-8"?>
<!-- Create a full-screen layout
	The video I'm playing back is portrait/vertical so
	set the orientation accordingly.
-->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >

<!-- Create a full-screen VideoView -->
    <VideoView
        android:id="@+id/surfacevideoview"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
    />

</LinearLayout>

Once these are set up you are pretty much ready to go, all you’ll need to do is start the video playback activity, spurred by a button press or something similar:

Intent videoPlaybackActivity =
	new Intent(v.getContext(), VideoPlayer.class);
startActivity(videoPlaybackActivity);

and you’re off.

The three main things you have to be aware of are file size, aspect ratio, and video encoding.

File Size: Try and make your video the smallest file size and lowest resolution that you can tolerate, since this will be played back on a myriad of devices with a wide range of memory limitations.

Aspect Ratio: Keep in mind your video will be letterboxed to fit the screen dimensions of each device, so make sure you can handle the smallest size and screen density that you can (depending on what devices you plan on supporting). For more about supporting multiple screen sizes the Android documentation offers a pretty nice overview.

Video Encoding: This caused me more problems than anything else. I was presented with a lot of “Sorry this video cannot be played” messages, blank screens that would immediately kick back to the main screen, or blank screens that would only play the audio and not the video on my way to finding the correct video encoding (and all of those symptoms are frequently, if not exclusively, caused by incorrect video encoding).

The Android documentation’s list of supported media formats was a good start, but even when I thought I had the correct encoding I was still having major issues with playback. Luckily a great open-source multi-platform video transcoder app called Handbrake came to the rescue. After tweaking seemingly every possible combination of controls in Handbrake I ended up back on what was essentially the “iPhone and iPod Touch” preset. So here are the video export settings for Handbrake that worked for me for video playback for Android:

  • MP4 format (so end up with a .m4v file)
  • MPEG-4 video codec (with “constant quality” setting QP 14)
  • AAC audio codec, 128 kbps

The only change from the “iPhone and iPod Touch” preset is that the video codec is changed from H.264 to MPEG-4. This tweak wasn’t really intuitive from the documentation (which made it seem like either H.264 or MPEG-4 should’ve been fine) but this is what ultimately worked for me.

Happy full-screen video playing!

More

Image placeholders for your website mockups

This is a nice way to ease into the week (courtesy of an afternoon article in NetTuts+). Rather than using boring solid-color boxes as placeholders in your website mockups here are two (cute!) alternatives: placekitten (my personal preference) and PlaceDog. For either one you just put your image dimensions (width & height in pixels) after their URL and you’ll get a placeholder image (so something like: http://placekitten.com/200/160)

PlaceKitten Sample

PlaceKitten Sample (200x160)

PlaceDog Sample

PlaceDog Sample (200x160)

Or for a slightly more serious version, you can pull themed images (based on tags) from Flickr with flickholdr.com
FlickHoldr Sample

FlickHoldr Sample (200x160, ocean)

More

An introduction to blogs, Twitter, and Facebook

Below is a post I wrote for Bethel United Methodist Church’s blog. I grew up going to Bethel and now I maintain their website and Google Apps account. Many of the “new technologies” the past few years have become commonplace with some members of the church, but other folks aren’t familiar with all the different social media outlets, or how they can be used, so this is my overview of a few of these (blogs, Facebook and Twitter).


What is all this “social media” stuff anyway?

Bethel Church has been “online” for over 10 years with our website. We’ve recently begun to venture into the technology front even further with email mailing lists and having the second service every Sunday available to watch live online. All of these services are great, and will continue to be used here at the church, however a new type of communication has also begun to emerge that can supplement our current communications.

Over the past few years, we have been presented with a lot of new information courtesy of what is known as “social media”, which includes things like blogs, Facebook, and Twitter (for detailed descriptions of each, please see the appropriate section below). At their core, all of these things are websites that provide people and businesses with a place to share their thoughts and interests online. These websites disseminate information, whether it be a personal account of someone’s latest vacation, or the promotion of an upcoming event at a restaurant and they each foster communities of their own, spurring discussions and comments on what people have shared.

So why am I blogging about this? At my job in Creative Services at the College of William & Mary I work daily with the technologies I mentioned above, we use these social media outlets to share the mission of the College with our community and the general public. Additionally, I have been using these social media sites personally for quite a while. Since I am in Williamsburg, but still want to help out my home church, I volunteer to run and update our website and now I’m starting to explore our church’s presence on social media and determine how we can utilize it to the best of its capabilities.

How can we use it?

The church has had a website for many years, way before any of these social media sites were around, and Facebook, blogs and Twitter are the next step in our “online presence.” The content shared via social media should supplement, not replace, what is currently offered on our main website.

Since not everyone who is interested in coming to church is able to attend in person, offering a virtual community where folks can learn about our church is a great outreach tool. Through our interactions with each other on these sites we offer a glimpse of the welcoming and loving atmosphere that we strive to offer.

Venturing into these new forms of communication also helps us to keep the church community vibrant with new members, as this is another avenue to explain and explore what we do. With over 500 million users on Facebook, 190 million on Twitter, and an unlimited audience for the blog, this is a huge community of people with whom we can communicate. When you share something on Facebook about the church, it goes to all of your friends (by appearing on their Facebook wall). If your friends find it interesting they will share it with their friends and so on; with just one post we have been able to reach hundreds, even thousands, of people.

Facebook and Twitter are also a great way to provide quick updates within our community. If it’s decided the church is closing due to inclement weather, or we want to remind everyone about the UMW breakfast coming up, you will find out that information as soon as it is released, since you can receive updates from Twitter and Facebook on your mobile phones as well as on your computer.

What are they?

Blogs

In the case of blogs, like this one, the author writes an entry, known as a “post,” explaining their thoughts on a topic (the term “blog” came from combining the word “web log”). The readers of the post can then share their thoughts by leaving comments, which can spark further discussion and ideas.

There are blogs and blogging communities for just about every topic and interest, and the way that you can keep up with the latest posts on a blog is using what is called “RSS” (which stands for Real Simple Syndication). What RSS allows you to do is to be automatically notified when a new post is made available on a blog, you find out about these new posts by “subscribing” to that blog’s RSS feed.

There are many different ways to receive the notifications of the new posts, most popular is what’s called an “RSS reader”, that acts as your own personal customized newspaper and pulls together all the RSS feeds from all the blogs that you have subscribed to and presents them to you in one place. Popular RSS Readers include Google Reader, iGoogle, FeedDemon, and Bloglines.

Facebook

Facebook is the most popular and wide-spread of the social media “platforms”. With Facebook, a person creates an online profile and can indicate other profiles on Facebook that belong to their friends and connect with that person by “friending” them. Facebook users can share photos, videos, website links, and more on their profile and that activity will show up on their friends “Facebook Wall” amongst activity from all the other person’s friends.

Businesses, community organizations and non-profits may also create online profiles, but since they are not tied with a particular person they are known as “fan pages” and other users of Facebook can indicate that they support that organization by “liking” the page. Organizations with a fan page communicate with their fans by posting status updates, photos, videos, etc. just like a personal profile, and these updates will show up on the “Wall” of anyone who likes the page. Fan pages can serve as a community-based supplement to an organization’s website. We just started a fan page for the church this weekend.

Facebook also offers what are known as “Facebook Groups”, which are like “clubs” in the real world, they require you to “join” and then members of that group can interact directly with each other. Any activity on the group’s “wall” comes from individual members, and communications within the group are done with Facebook messages. Groups are best for small-scale, personal interactions. Our church Facebook group has been around for over two years.

Twitter

Twitter is similar to blogging, however each of the posts from a person is limited to 140 characters and these posts are automatically shared with other Twitter users who “follow” them. When people post on their Twitter account it is known as “tweeting,” these little posts (called “tweets”) can range in topic from what the person had for breakfast, to their opinion on the latest news story, or, if the account is a company, advertising a last-minute sale. Twitter has become the fastest way for news to travel, as “tweeting” can easily be done using a mobile phone. We’ve just started a church Twitter account as well.

More

Programmatically taking a screenshot of your app in iOS

Dress the Griffin on the iPadFor William & Mary’s Dress the Griffin app we offer the option to save the Griffin’s current outfit as an image to the iOS device’s photo album (which can then be shared via email or various social media outlets). I had a hard time finding a place that outlined these steps clearly, so here is the rundown of what needs to be done to programmatically save a full screen screenshot of your iOS app to the user’s photo album.

/* Action taken when the "Save" button (saveAsImageButton) is pressed in the app */
- (IBAction)saveScreenshot {

   // Define the dimensions of the screenshot you want to take (the entire screen in this case)
   CGSize size =  [[UIScreen mainScreen] bounds].size;

   // Create the screenshot
   UIGraphicsBeginImageContext(size);
   // Put everything in the current view into the screenshot
   [[self.view layer] renderInContext:UIGraphicsGetCurrentContext()];
   // Save the current image context info into a UIImage
   UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
   UIGraphicsEndImageContext();

   // Save the screenshot to the device's photo album
   UIImageWriteToSavedPhotosAlbum(newImage, self,
      @selector(image:didFinishSavingWithError:contextInfo:), nil);
}

// callback for UIImageWriteToSavedPhotosAlbum
- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {

   if (error) {
       // Handle if the image could not be saved to the photo album
   }
   else {
      // The save was successful and all is well
   }
}

Note: The bulk of these functions are out of Apple’s UIKit framework so check out their documentation for even more information.

More

Hello world!

Hello World Toast by oskay on Flickr

hello, world by oskay on Flickr

Yes, it’s the quintessential and probably overused “first test post”, but appropriate for a technically inclined blog, don’t you think? 😉

I already have a personal blog where I post stuff (albeit, sporadically) on my travels, photography, and food, but I wanted a central place to write down all the random tidbits I’ve found useful in my work as a Web Programmer at the College of William & Mary, as well as a place to share articles from around the web that I think are useful in some way or another related to web development, social media, higher ed, and mobile apps.

If there’s something you’d like to see here or find out more info on, please let me know!

Here we go…

 

More

Brandon Plantation and Gardens

Brandon Plantation House

Brandon Plantation House

This past weekend we had a turn of nicer weather so Jeremy and I made a day trip on Saturday to visit Brandon Plantation on the James River. We started the day at the first Williamsburg Farmer’s Market of the season, had breakfast at the Trellis, then just started driving. We didn’t have a particular destination in mind, only that we wanted to take advantage of the sunny (most of the time) weather and get out of the house. We decided to go across the Jamestown-Scotland ferry and found (using a paper map, craziness!) a place called “Brandon Plantation“. After a bit of Googling on my Droid we found directions and I called to make sure they were open (they were, until 4pm).

As we came up the long drive the weather started looking a bit grumpy, but the clouds had been coming in and then dissipating all day so we decided to stick with the “being outside” plan. We pulled into the parking lot and were the only car there, there was no sign of anyone else at the plantation aside from a car next to one of the secondary buildings. The admission fee is $8 on an honor system so we decided to poke around quickly, see if there was more than just the immediate area to see (there definitely was), and then pay our fee. Just as we walked up to the house there was a random downpour for about 2 minutes but then after that we were given a break from the rain and Jeremy and I explored the freshly rained-on gardens and grounds (yielding a few fun “raindrops on plants” photos 😉 ).

The house (which is not open to the public) is a really cool bit of architecture and the gardens are broken up into little “rooms” with a single entrance to each. The daffodils were in full bloom as well as many of the trees. The plantation was built right along the James River so we stopped at the riverside and enjoyed the views, snapped some photos of the storm clouds go over the opposing shore and then headed home. The entire time we were there we only saw one other person, the gardener, but it was a great afternoon trip and definitely a spot to come back to as the flowers continue coming up (it’s also on the Garden Club of Virginia’s Historic Garden Week list of places to visit).

Brandon Plantation Flickr Set

Brandon Plantation Flickr Set

So those have been all of my photo trips as of late. Hopefully I can be a bit more diligent about posting as the weather gets nicer and we go out on more excursions.

Happy Spring!

More

Botanical Gardens and PicPlz

Jeremy and I went to Lewis Ginter Botanical Garden at the end of January in the pursuit of flowers in the midst of the crazy winter we’ve been having, thankfully they have a great greenhouse with seasonal flowers on one side, tropical plants in the center, and orchids on the other side. It was great to get outside and walk around (and go inside the greenhouse and enjoy the warmth and lovely flower smells) so we decided to buy an annual membership since we usually go to the gardens two or three times a year, and with the admission price for two people it was worth it to buy the pass. The extra bonus with the membership is that it gets you into a whole slew of other botanical gardens around the country (including the gardens in Norfolk), so it’s a really great deal and is now in the rotation of default places to go take photos when we need some inspiration. Flickr sets linked below.

Lewis Ginter Botanical Gardens Flickr Set 1

Lewis Ginter Botanical Gardens Flickr Set - trip 1

Lewis Ginter Botanical Garden Flickr set - trip 2

Lewis Ginter Botanical Garden Flickr Set - trip 2

Norfolk Botanical Garden Flickr Set

Norfolk Botanical Garden Flickr Set

"Free Smells" PicPlz photo from Austin

I’ve joined in on the “use your smart phone to take pictures and then add filters to it” trend and have started using an app called PicPlz to try and practice taking more “random” photos of everyday stuff. So every once in a while either in my Twitter or my Flickr stream (or both) you’ll see a photo or two appear from something random I noticed during my day. My first PicPlz photo was taken at on our first trip to Lewis Ginter.

More

What I’ve been up to: SXSW

So it’s been a ridiculously long interlude since my last post so the next few posts are a quick rundown of what I’ve been up to.

SXSW 2011First, I went to South by Southwest (SXSW) Interactive in Austin in March with Jeremy, that was a blast.

I had my first food truck encounter (so good!), met a bunch of the Foursquare development team, got to go in as a VIP to the Foursquare party (we were waiting in line and one of the guys at the door recognized us from the earlier Superuser meetup and he pulled us in), saw a screening of “Win Win” with Paul Giamatti (including seeing the cast in person after the show at a Q&A), and went to tons of sessions ranging from social media and location-based services to keynote talks by Dennis Crowley (CEO of Foursquare), Felicia Day (of The Guild and Dr. Horrible fame) and Guy Kawasaki (former Product Evangelist for Apple).

Since this is one of (if not the) biggest general tech conference in the country it was definitely a bit overwhelming (lots of people, lots of social interaction, lots of networking) but I came out of it with some fun ideas to bring back to the College and got to meet up with some fellow W&M alums who were either attending or presenting at the conference.

More

chicago – day 2

Since our flight was not until 7pm Sunday night we had pretty much the entire day for exploring. We decided to go to the famed Field Museum of Chicago, but first we stopped for breakfast at a bagel place called NYC Bagel Deli (found courtesy of Yelp, again, yay for social media), New York-style bagels in Chicago, I know but they were really good (I got an everything bagel with garden veggie cream cheese, that’s my control case for bagel places, if they do that well, then they’re golden). After breakfast (and coffee for me) we made our way to the nearest El stop and hopped on, riding “the Loop” around downtown Chicago to the Field Museum. As we were walking to the museum we went past an interesting, and slightly creepy art installation called “Agora” that had the backdrop of the Chicago skyline, a very cool locale to be sure. Then we were off (after taking some panoramic shots of Chicago from the steps of the museum) to explore the Field Museum.

When you first enter the large atrium/lobby of the museum you are greeted by its most famous resident, Sue, the largest, most complete and best preserved T-Rex. We started on the top floor of the museum with the gemstones, and worked our way around the floor looking at the ancient Asian artifacts, meteorites and more, and realized we’d spent over 2 hours just on that floor…there was no way we were going to be able to get to any other museums that day. So we took our time strolling through the other areas of the museum, past the “Gold” exhibition, the menagerie of stuffed animal specimens from around the world and of course, the dinosaur fossils.

After we finished at the museum we went to a restaurant called Mercat a la Planxa, a restaurant owned by Iron Chef Jose Garces. We were there just in time to catch the brunch tasting menu, we had the option of picking four tapas courses and unlimited bloody marys, mimosas or 3 different flavored sangrias or five tapas courses, all for $25. Not being able to pass up such a good deal for food and drink we opted for the four course menu and I had the rosemary and grape sangria and Jeremy had the pomegranate peach sangria. The entire menu is (not surprisingly) Spanish-influenced and was very tasty, Jeremy and I made sure to order different items so that we were essentially getting an 8 course tasting menu.

Brandade

Brandade (this was very good)

Bacon-wrapped dates

Bacon-wrapped dates

Andouille potato hash

Andouille potato hash

Shrimp and grits

Shrimp and grits

Grilled chicken sandwich

Grilled chicken sandwich

Crab salad

Crab salad (yum)

Ham sandwich

Ham sandwich

Steak and scallop

Steak and scallop (one of my favorites of the meal)

Cream puff with berries

Cream puff with berries

Rice pudding

Rice pudding (and Jeremy trying to get into it before I was done taking photos)

Chocolate pudding

Chocolate pudding

Once the meal was over they were done serving brunch (it was 3pm) and they were gearing up for dinner, so when we asked to see a dessert menu they just brought us the three “demonstration” desserts for the day for free, a very nice gesture and they were quite tasty as well. I had my DSLR with me this time for photos (and my 50mm prime lens) and since the restaurant was pretty quiet it was much easier for me to take pictures (although the server did catch me doing it one time, saying “We see a lot of people doing that”, so I didn’t feel quite so guilty).

After lunch we checked out of the W, and hopped on the El back to O’Hare. Our flight left on time and we were back in the ‘burg by 10:30pm. Overall it was a great trip (and a lovely surprise), I was expecting Chicago to have more of that “big scary city” feel but it didn’t. There is some really cool architecture there, nice parks and walkways along the water and great restaurants, I’m definitely looking forward to the next time I can return.

All of my photos of the trip are up as a Flickr set.

More

Chicago dinner day 1 at L20

So whenever we go on a trip Jeremy always tries to find a tasty place for dinner one of the nights we’re there, with extra bonus points awarded to restaurants that offer a tasting menu. He found out about L20 via UrbanSpoon (yay social media) and made reservations for us for Saturday evening. We took the complementary car service from our hotel and it was about at 15 minute drive north to the restaurant situated in the Lincoln Park neighborhood.

The whole decor was very modern, lots of wood (both natural and enameled), with a white branch sculpture/flower arrangement (on various branches were little clear test tubes with white orchid blossoms in them) as the main focal point of the room. There were about 20 tables in the entire restaurant and probably 10 or 12 staff members, so the service was excellent, there was never a time where your water glass was empty or an empty plate sat in front of you (and as in many fine dining restaurants, I always get a kick out of how if you get up from the table at any time during the meal a fresh napkin is awaiting you when you come back, no using “old” napkins! Sometimes it was almost a race to see if you could get back to the table before the server had returned with the replacement napkin). The service there was probably the most efficient and attentive that I’ve experienced and the food was excellent.

L20 brands itself as a seafood restaurant and they definitely follow that in their tasting menu, with only 2 non-seafood savory dishes out of the 12 course fall tasting menu. The first few courses were sushi/sashimi style, which was a new food experience for Jeremy as he isn’t much for sushi in general, but the preparations of these wasn’t your typical “sushi roll” and the quality of the ingredients made each dish delicious. Nearly every course came paired with its own wine and we were also served an amus bouche along with a pre-dessert palate cleanser and post dessert cookies so in total it was more like a 14-course wine-pairing meal, needless to say we were very satisfied by the end of the meal. Here’s the rundown of the dishes with photos (apologies for not the best composition/focus on these, I was trying my best to be subtle when taking the pictures, didn’t have the flash on, but with so many servers milling about I wasn’t able to keep my little photography project very secret).

Amus Bouche
Smoked diver scallop in gelatin

 

Smoked diver scallop in gelatin

Smoked diver scallop in gelatin


Wine 1: Alsace seyval blanc

Course 1: Hamachi and tuna with uzu marinade and micro chives

Hamachi and tuna with uzu marinade and micro chives

Hamachi and tuna with uzu marinade and micro chives

Course 2: Fluke tartar with olive oil and salt cured lemon (the salt cured lemon really added a lot of dimension to this dish, this was my favorite of the “light” courses)

Fluke tartar with olive oil and salt cured lemon

Fluke tartar with olive oil and salt cured lemon

Wine 2: Sake

Course 3: Himachi-wrapped uni with apricot oil (never had uni before, interesting texture but tasty)

Himachi-wrapped uni with apricot oil

Himachi-wrapped uni with apricot oil

Wine 3: White rioja

Course 4: Diver scallop with a passion fruit, sauvignon blanc and vanilla sauce, with caramelized cauliflower

Diver scallop with a passion fruit, sauvignon blanc and vanilla sauce, with caramelized cauliflower

Diver scallop with a passion fruit, sauvignon blanc and vanilla sauce, with caramelized cauliflower

Wine 4: Kabinett Riesling

Course 5: Fois gras a la planca with a baked citrus marmalade, braised fennel and citrus zest (very rich, but love the texture of the seared fois gras)

Fois gras a la planca with a baked citrus marmalade, braised fennel and citrus zest

Fois gras a la planca with a baked citrus marmalade, braised fennel and citrus zest

Wine 5: Melville Chardonnay

Course 6: Butter poached lobster bisque with chestnuts, Cognac and fresh cream (the broth on this bisque was amazing)

Butter poached lobster bisque with chestnuts, Cognac and fresh cream

Butter poached lobster bisque with chestnuts, Cognac and fresh cream

Wine 6: Viognier, Greece

Course 7: Salted cod with fingerling potato emulsion and Italian caviar (a bit salty but the potato emulsion was a cool twist)

Salted cod with fingerling potato emulsion and Italian caviar

Salted cod with fingerling potato emulsion and Italian caviar

Wine 7: Bohan fillan 2008 pinot noir

Course 8: Snapper with cilantro merengue frozen table-side with liquid nitrogen, curry, coconut powder, cumin coriander chip, jasmine rice sauce,  and brussel sprout leaves (this dish was both Jeremy’s and my favorite)

Snapper with cilantro merengue frozen table-side with liquid nitrogen, curry, coconut powder, cumin coriander chip, jasmine rice sauce,  and brussel sprout leaves

Snapper with cilantro merengue frozen table-side with liquid nitrogen, curry, coconut powder, cumin coriander chip, jasmine rice sauce, and brussel sprout leaves

Wine 8: Montsano Chianti

Course 9: Halibut with lemon truffle sauce, shaved truffle and celery (this was one of the first times I had whole fresh truffle, honestly, it didn’t have the crazy amazing flavor i was expecting, just very subtle mushroom/earthy flavor)

Halibut with lemon truffle sauce, shaved truffle and celery

Halibut with lemon truffle sauce, shaved truffle and celery

Wine 9: Man O’ War Syrah, New Zealand

Course 10: Korean shortrib with green cabbage, sauteed romaine with sesame oil, homemade kimchi and tempura rapini

Korean shortrib with green cabbage, sauteed romaine with sesame oil, homemade kimchi and tempura rapini

Korean shortrib with green cabbage, sauteed romaine with sesame oil, homemade kimchi and tempura rapini

Dessert palate cleanser: Frozen passionfruit orange marshmallow

Frozen passionfruit orange marshmallow

Frozen passionfruit orange marshmallow

Course 11: Caramelized apples with brown butter, toasted milk ice cream, red apple cake, vanilla sphere (remembered a bit late to take a picture for this one)

Caramelized apples with brown butter, toasted milk ice cream, red apple cake, vanilla sphere

Caramelized apples with brown butter, toasted milk ice cream, red apple cake, vanilla sphere

Wine 10: Moscato, Sicily

Course 12: Orange grand marnier soufflé with orange marmalade (this was so good! sweet and tart and soft and crunchy all at the same time)

Orange grand marnier soufflé with orange marmalade

Orange grand marnier soufflé with orange marmalade

Bonus mini-dessert: Lemon merengue and Cantaloon cookies (I had no room to finish these, took bites to taste and that was all, Jeremy really liked them though)

Lemon merengue and Cantaloon cookies

Lemon merengue and Cantaloon cookies

Overall, if you like seafood, you will love L20, the quality of the ingredients was impeccable and the tastes and flavors were some I had not ever encountered before. Yum.

More