VMware Workstation 6.0 beta 3

We’ve just put out VMware Workstation 6.0 beta 3. As per the ancient traditions set forth by the VMware founders, we decided to make this release awesome. I’ll go over a couple of my favorite, but for the rest, read the release notes.

  • Record/Replay

    Workstation 6 beta 3 is the first release to support our new Record/Replay functionality that we mentioned at VMworld. Essentially, it allows for making a recording of (almost) everything that happens to a VM between the time you hit Record and the time you hit Stop. This is not a movie recording, but more of an execution recording. You can play it back however many times you like.

    What is this good for? Well, have you ever tried testing a program only to encounter a bug that you just can’t reproduce? Maybe there was some memory corruption that happened under some specific case that you just can’t seem to diagnose. Or maybe it’s a network packet that came in in some form that your application didn’t expect. Under normal circumstances, you’d have to do a lot of guesswork in order to find out what exactly happened. Far too often, it’s just too hard to reproduce the bug and it goes unfixed for some time.

    Now imagine instead that you’re testing the program in Workstation and, before your testing, you hit Record. You attempt the test and the program crashes in some weird manner. No problem. Hit Stop and replay the recording. Just before the crash occurs, stop the playback and attach a debugger. Messed up? Didn’t find the cause? Replay that recording again.

    It should be pointed out that these recording logs take up a lot of space, so you don’t want to keep too many around. Also, the feature is very experimental, so don’t be surprised if there are problems. Some things are not yet supported, like 64-bit guests, Virtual SMP, and certain devices (USB, for example). We plan to change the UI around a little bit, and it’s likely that future Workstation releases will improve the usability and usefulness of this feature.

  • Debug guest apps from the host using Eclipse

    We now offer the ability to debug applications inside the guest from Eclipse on the host. This provides for a nice sandbox for the application. Your app can crash the computer during a debug session and your host won’t even feel it! There’s a good blog post from the developer of the Eclipse support discussing this feature and some of its many uses.

  • Fullscreen improvements

    A previous beta introduced the new combined Fullscreen mode. We used to have separate Fullscreen and Quick Switch buttons on the toolbar, each useful for certain purposes. The new combined mode is closer to Quick Switch, but until now has missed the nice aspect of Fullscreen where the image would actually by the size of the monitor (due to changing the screen resolution).

    Now, when in fullscreen, you have the option of changing the view mode (from the drop-down toolbar). The guest resolution can be changed to match the host’s screen resolution, the guest can be stretched (emulating the original fullscreen), or the guest’s screen can be centered on the monitor.

  • Tab dragging

    The Linux UI now supports tab dragging, thanks to the new support in GTK+ 2.10 and some hacks to get around some bugs. Combined with the multiple window support we put in a previous beta, you can now have as many windows open as you like and drag and drop VM tabs between them. While not a major feature itself, it is a nice usability thing we’ve wanted to do for a while now.

  • Many many bug fixes

    The new feature list may not be huge, but at this point in the beta cycle there shouldn’t necessarily be a lot of new features. So what have we been doing? Why, fixing just tons of bugs of course. A lot of crashers have been fixed, work has gone into improving multiple monitor support, the UI has improved in various areas, and code has been cleaned up. All in all, we’re in good shape, and will be mostly staying in bug fix mode until the final release to ensure that the result is a product we can all be proud of.

I should also point out that if you are not a Workstation user but have been contemplating a purchase, you don’t need to wait for Workstation 6. You can now buy Workstation 5.5 and get a free upgrade to 6. This only applies to new purchases, so if you’ve been a Workstation 5 user for a while, you’ll have to purchase 6 separately.

VMware Workstation 6.0 beta 3 Read More »

Terror on Amtrak Bus 3717

This past night, Thursday the 8th of February, I journeyed home to see my family by way of Amtrak. It was a typical train ride, followed by what should have been a typical bus ride for the final stretch home. Not surprisingly, the bus was delayed an hour and a half. When it finally arrived, the bus driver told us “Tonight is going to be a very late night.”

None of us had any idea how true this would be. Aside from one person, perhaps — The Terror on Amtrak Bus 3717.

Sitting in the shadows at the back of the bus was a crazed man who was very high on something, and it wasn’t life. Few knew he was even there, at least for the first 10 minutes of the trip. And that’s when we first heard him speak:

“Three of you are going to die a painful death tonight.”

Half the people on the bus heard his words, but most paid no attention to it. Just a common jokester messing with friends, some of us thought. It wasn’t long, though, until someone began to panic and called out for the driver.

“Driver! Driver!!”

There was a loud scream.

The bus came to a sudden stop and the lights flashed on. Everyone turned to look at the back of the bus. The crazed man was repeatedly punching an older lady in the face as her daughter watched in horror.

Without hesitation, four men jumped up and pinned the attacker down. Two held on to his arms, holding them such that any movement would cause the arms to twist painfully. The third had a hold of his feet, while the fourth had a grip on his head and neck, strongly hinting that he would gladly snap the neck if the man dared struggle.

The victim’s face was covered in blood and the daughter was crying with fear. Seeing that the man was restrained, the bus driver immediately called for the highway patrol.

10 minutes went by, though it may as well have been hours. Eventually, the police pulled over and stepped onto the bus. Two went to the back and cuffed the crazed attacker, while a third attended to the lady.

The next hour and a half was a blur of testimonies, uniforms, and contact information exchange. By the end of this, we learned two things.

  1. If the attack had not happened, the attacker would have left the bus on his next stop, which was a mere 15 minutes away; and
  2. There was already a warrant out for his arrest.

Finally it was all over. The assailant was gone, people had been let off at their stops, and the lady was deemed “well enough” to avoid an ambulance trip.

Remember, boys and girls (especially the girls). Make sure that when riding a bus, you sit as close to the front as possible. It’s far safer and gives you more protection against the hidden terrors that lurk in the shadows of the back of the bus.

Terror on Amtrak Bus 3717 Read More »

VMware IPO news, and 3D in VMware demoed

VMware IPO

Wow, exciting day for VMware. For those who haven’t yet seen the news, our parent company, EMC, announced a VMware IPO. Approximately 10% of VMware is being sold. This is all news to me too, but it’s damn exciting.

“VMware is one of the fastest-growing businesses in the history of the software industry. We expect the IPO to unlock more of VMware’s value for EMC shareholders while also strengthening its ability to retain and attract the software industry’s top talent.”
— Joe Tucci

I know many people have said they would invest in VMware if it had its own stock symbol rather than sharing EMC’s. Now you have no excuse! 😉

3D in VMware Fusion

Some people, including a couple of competitors, are of the belief that nobody to date has supported 3D in a virtualized environment in any usable way, and have made claims that they’ll be the first. It’s not their fault, this wasn’t so widely known. Afterall, we’ve only had this supported and documented for two years now.

Well, cat’s out of the bag now. I was doing my usual search for VMware on Digg, and this post came up showing a video of 3D in VMware Fusion. As you can see from the video that it links to, 3D in VMware is quite usable. 🙂

Update: The URL for the digg post has moved. Fixed the link.

VMware IPO news, and 3D in VMware demoed Read More »

Vista’s gremlins, now on Linux

Vista is an interesting operating system. They have done a number of very cool things with it, and yet it has confused and frustrated me in all new ways. I have been running Vista in a VM for a little while now. I think in many ways it is a better operating system. And there is one thing Vista comes with that beats us hands-down.

It has a Gremlin clock.

Vista's Gremlin skin

The little clock applet on the side has several skins, and one of them is a pink, furry gremlin. I fell in love with this little guy and decided that we must have a Gremlin clock skin ourselves. So I set out to create one, using MacSlow’s cairo-clock. After a couple hours of work, I ended up with this:

I think it’s a cute little thing. I hope others like it too. Just download it and untar into $HOME/.cairo-clock/themes or /usr/share/cairo-clock/themes.

A couple of notes about the theme. cairo-clock doesn’t tend to like themes with different widths and heights and expects the clock face to be in the center of the images. Since the clock face on the Gremlin theme is a bit lower, near the bottom of the gremlin, the theme images had to be made to give a lot of whitespace below the clock. The actual gremlin is on the upper-half of the images. This is not a huge problem except that there appears to be a bug where you can click and drag the clock on parts of the lower region, where it’s completely transparent. Hopefully this isn’t a big problem for most people.

Oh, and MacSlow, if you want to bundle this as part of cairo-clock, I’d be all for it 😉

Now we’re on par with Vista. Yep.

Vista’s gremlins, now on Linux Read More »

Re: Subverting Subversion

I used to use the same trick Rodney Dawes describes in Subverting Subversion. Yes, it was very annoying to have to set everything from a file every time, or from stdin.

Ah, but there’s a better way, and people new to SVN seem to somehow miss this valuable command.

$ svn propedit svn:ignore

Up comes your editor, just as if you opened .cvsignore. You can now safely nuke your .cvsignore files. This is a useful command, so write it down until it’s burned into your brain.

Re: Subverting Subversion Read More »

Happy New Year!

Another year come and gone. Hopefully everybody is out having a good time or recovering from a good time. I just finished up for the night and am planning to get some reading done before bed, but thought a quick blog post summarizing the year was in order.

  • This year marks my second year living in the Bay Area and working at VMware, and my first year really heading up some larger projects. I began the year by working on what would in time be known as VMware Server, and spent the first half of the year head down at my desk working on each release. Following that, I’ve been working on specifications, feature implementations, and even Tango-style icons for VMware Workstation 6.0, which I will continue with for some time.
  • Jamie and I have now been dating for just over two years.
  • For the first time, I was invited to FooCamp, hosted by Tim O’Reilly. Awesome event that I really hope to be invited back to next year.
  • I learned to boogie board with a couple of friends in Santa Cruz. Later in the summer, Jamie and I took a nice vacation in Santa Cruz and spent most of it at the Santa Cruz Beach Boardwalk.
  • I had my second trip to Boston this year for the GNOME Summit. I went with Jamie to Salem and explored the touristy little town. Fun place, and I’d definitely like to spend more time there in the next couple of years.
  • I went with some friends to Castro St. in San Francisco for the first time for the big Halloween costume party that they have every year. We found out the following day that there was a shooting not too far from us, which was unnerving.
  • I got a Nintendo DS and a Wii, and have spent far too much money on both. I’m going to just start signing over my paychecks to Nintendo.

I’m sure I’m missing a few things. 🙂

Now, New Years Eve doubles as my mom’s birthday, which I imagine was not fun when growing up. I think the only day worse for a birthday is Christmas. It was certainly fun tonight, though. The night was spent with my mom, stepdad, brothers, sister, and Jamie. We watched Cars and played Scrabble, Bomberman Touch! for the DS (fun game!), and Cranium. We ended up spending most of the evening on Cranium, which has to be my favorite family game. We kept laughing so hard that we got ourselves sick.

Jamie brought over a bottle of champagne for us to drink. It was a late Christmas present, intended for New Years. We’re not heavy drinkers, so we only finished half the bottle, but it was very nummy. Along with that, we had a variety of snacks, including cheeses, beef sausages, vegetables, sodas, and pizza. This was, I think, my first New Years with my sister Jenna, as she had always been visiting cousins on New Years. She was pretty good most of the night, considering she had to stay up until midnight 🙂

January 1, 2007. With any luck, this year will be more exciting and eventful than last year. There are changes I hope to make, projects to abandon, projects to take up, and places to go. I think I’ll get some sleep so that I can get a head start on that.

Happy New Year!

Happy New Year! Read More »

Time to rethink GTK+ Tab Dragging

I’ve been planning on adding tab drag-and-drop functionality to VMware Workstation 6.0. Rather than implementing this ability from scratch (which I did with Gaim, and would rather not do again), I took the sane approach and started investigating the GTK+ 2.10 API for GtkNotebook tab drag-and-drop.

This is functionality that many applications have had to implement themselves, so it’s great that support had finally gone into GTK+ 2.10. So I must wonder, with all the various applications that would benefit from this new API, how did we get it so wrong?

Now, before I continue, let me say that I applaud the effort in getting this into GTK+ in the first place. Reordering tabs looks smooth, it’s only one API call, and the basics are trivial. Where this all falls down is when you try to do anything complicated with it, and by complicated I mean anything beyond a simple text editor.

Before starting, I investigated how many projects were using this API. A quick Google Code search shows that almost nobody does, aside from maybe the tab reordering API. I did find this list of complaints, which I remember reading before. I won’t repeat everything on this list, but I will list what I’ve ran into, and how I think we can improve this API.

Global functions are very bad. (Bug 386935)

In order to allow for a tab to be dragged out and form a new window, the application must call gtk_notebook_set_window_creation_hook and pass a callback function. When a tab marked as detachable is dragged to the root window, this function will be called. It is expected that the function create a new window, position it as per the x and y coordinates of the drop (if it so desires), show it, and return the resulting notebook. GTK+ will then add the tab to that notebook.

While useful, this suffers from a major design flaw. You can’t set a window creation hook per-notebook. You get exactly one window creation hook function, which must be responsible for any and all notebooks in the program. The hook function can only distinguish between them using the notebook’s group ID.

For smaller programs, this isn’t a huge limitation. Simple text editors and the like only need one function. However, imagine if your application has multiple notebooks that each need to be dragged, and imagine if the code for those notebooks are in two separate parts of the tree. Maybe you have a nice separation of the different parts of the project. Regardless, now you have to have one common function that knows about both and handles their window creations.

The problem gets far worse for applications separated into different libraries, or those using widget utility libraries. Two separate libraries both providing a notebook with drag-and-drop with their own window creation won’t be able to set up a hook. They would require that the main application handle determining the group IDs of the notebook widgets they care about and then calling the proper functions in the libraries. While doable, it’s a horrible burden on the application, and it doesn’t always work.

Of course, the whole thing completely breaks down when you’re writing a plugin with a notebook rather than an application. The plugin won’t be able to offer its own window creation, due to possible conflicts with the main application and other plugins.

The solution, of course, is to have per-notebook window creation hooks. GTK+ could attempt to call one of these and then fall back to the global hook, if it exists. If calling the global hook, GTK+ could spit out a warning informing the user that the program should be upgraded to the new API and that the existing method is deprecated.

Rather than functions, though, a signal handler may make more sense. It could use a collector and call the handlers until it finds one that returns a GtkNotebook. I could see this being useful if a widget component library (as part of a larger project) provides a default window creation handler that the calling application wants to override for a specific case.

Numeric group IDs lead to namespace collisions. (Bug 386930)

Right now, in order to indicate which notebooks are compatible for drag-and-drop operations, each GtkNotebook gets a group ID. This is an unsigned integer with absolutely no rules on how an ID should be picked. This is very dangerous, as it could cause namespace collisions in larger applications, resulting in tabs being droppable onto incompatible notebooks. This could easily crash such applications.

There’s no reason for us to be using integers. Take a look at GtkRadioButton. They also have groups, but they work a bit differently. The first GtkRadioButton defines the group, and the rest get passed that as the group identifier. In gtkmm, you actually have a Gtk::RadioButtonGroup object that you simply instantiate and then pass to each radio button.

Now, in any well-designed program, there should be only one place creating the notebook for a certain type of window, and usually that’s the only type of notebook capable of accepting tabs from the same class of notebook. So, why not do something like what gtkmm does and have some sort of static object that represents that group, define it once, and pass it to each notebook? This is guaranteed to be unique, and solves the namespace collision issue.

Signals need to be more clear. (Bug 386943)

You can determine if a page was added to a notebook or removed from it, but there’s no clear way of determining if it was due to an API call, or a drag-and-drop operation. We worked around it in VMware Workstation, but it would have been very helpful to know precisely that a page was added due to drag-and-drop. Same with the removed signal. I know they wanted to condense the signals and figured it would work in all cases, but it doesn’t, so please, give us some more specific signals!

Drop operations should be able to be programatically rejected. (Bug 386950)

There are times when you want to allow a tab to be draggable, but want to reject it in notebooks under certain circumstances. For example, in VMware Workstation, we have the “Home” tab. I would like to be able to drag this to empty windows, but if that window has a “Home” tab already, I want to reject the drag. To my knowledge, there is no way to do this currently.

Detaching tabs into new windows requires a drag to the desktop. (Bug 360225)

In most any program with tab drag-and-drop, you can drag a tab off into any area not in the tab bar and it will detach into a new window. With the GTK+ tab dragging, you have to actually drag it to the root desktop. Even dragging off into another window isn’t good enough. This sucks. Let’s fix this properly. We’re not doing anybody any favors.

I’m missing a few annoyances I ran into, but I’ll be blogging about them separately once I remember.

So, to recap, I believe we should:

  • Deprecate gtk_notebook_set_window_creation_hook and add a new create_window signal, returning a GtkNotebook.
  • Ditch the numeric group IDs and use some sort of identifier object or generic pointer to a static variable and pass that in instead.
  • Add new signals or something telling us specifically how the tab was added/removed.
  • Provide a way to reject a tab drop on a particular notebook programatically.
  • Call the window creation hook any time the tab is dragged off the tab portion of the notebook.

It would be great to see these things fixed so that more applications can actually use this API without major headaches. Anyone up for the task?

I plan to put up a new post soon giving a couple of tips for using the current API.

Update: Bugs have been filed for the above. They’re in the topic headers.

Time to rethink GTK+ Tab Dragging Read More »

Random Fun Stuff

  • Welp, I’m up late tonight, as Woot.com is having a Woot-Off. These are dangerous for both my health and my wallet, but I’m determined to get a Bag of Crap this time. I don’t expect to win a 50″ HDTV or a Wii like some lucky people, but I figure it’ll be fun regardless. That is, if these USB harddrive enclosures ever sell out.
  • I ordered a DVD boxset of the entire Buffy the Vampire Slayer series, and it finally came! Not a bad price, given that Buy.com was having a sale and Google Checkout was taking $20 off on top of that.
  • I’ve been hooked on Zelda: Twilight Princess for the Wii. Best Zelda game I’ve played since the original. I think I’m about 20 hours into it right now, though I’m perhaps not as far along as I should be. Spent a lot of time just exploring the world, as one should do in a Zelda game.
  • I must buy this toy if/when it comes out. The expressions on the little people are priceless.

Random Fun Stuff Read More »

A Wii Surprise for Mii

Like every other self-respecting Nintendo lover out there, I tried to get a Wii on opening day, with of course no success. I was heading back home to visit family on opening day, and had researched roughly how many Wiis each store in town had in stock, but there were more people than Wiis at each store. I called up Circuit City later that day and asked when they expected another shipment in. They said they didn’t know, but after talking to the guy for a couple minutes I was told that if I came in, I could place a special order and would be notified when my Wii arrived.

I went to Circuit City and talked to the guy who handles the special orders. He seemed a bit upset that someone had told me that they were accepting special orders and was quick to tell me that they weren’t officially doing that and that my special order might be canceled at any given time. However, after a little bit of pushing, he took my credit card info and put me on the list. He said I would get a call if and when a Wii arrived that they could give me, but told me that I would likely be called and told that the special order was canceled, at which point they would refund my money.

That was Sunday the 19th. On Wednesday the 22nd, I was woken up with a call from Circuit City letting me know that they randomly received one Wii, and that it was being held for me. I was told I could pick it up at any time. Well, I wasted no time on this one. An hour later, I was setting up my brand new Wii.

The Wii is a very impressive system. The controls work far better than I had expected. I have Wii Sports and Excite Truck, with plans to pick up Elebits, Zelda, and Mario Galaxy when possible. Wii Sports is a great multiplayer game, but I must recommend stretching before play. Excite Truck is also loads of fun, though its multiplayer support could stand improvement. It’s limited to a two-player versus mode, so if you want any more players, you’re out of luck. Still, fun game, and I highly recommend it.

I invited my friends Jen, Amanda, and Dell, and my girlfriend Jamie over to play with my Wii (don’t bother with the jokes, we’ve already made them). I had them create Miis, which they loved, and we all played some Wii Sports. They had a blast and talked about how much fun the system was. Now, they’re all gamer girls to some degree, but I’m looking forward to inviting some of my non-gamer girl friends over to see what they think of the system. If Nintendo is right, they’ll hopefully be drawn to it. We shall see 🙂

Now, part of the reason I wanted a Wii so bad was to play classic games using the Wii’s Virtual Console. I added $40 in Wii points and picked up Legend of Zelda, Solomon’s Key, Bomberman 93, and Solomon’s Key. The emulation works very well. I spent most of today playing (and beating) Legend of Zelda. What’s cool is that most of the console games can be suspended and resumed later on, so if you suddenly get the urge to play something else, you simply press the Home button, play another game, and then come back to the emulated game whenever you want to.

What excites me the most isn’t the Wii itself, but what’s coming next. I can’t help but wonder what the next generation of consoles will be a few years from now, what they’ll be capable of, and how they will change gaming.

The one downside to the Wii is that when you’re sick, it’s hard to play some games (Wii Sports mainly). I’ve been dealing with a head cold for a few days, and it’s difficult to play some Wii games when you don’t feel like moving. Fortunately, there’s always the classic games.

If you know me and you have a Wii, contact me and we can exchange Wii console numbers.

A Wii Surprise for Mii Read More »

Planet VMware, Planet V12n

We officially announced two new planets last night at VMware: Planet VMware and Planet V12n, both powered by Planet.

Planet VMware is a Planet for VMware employees, in the spirit of Planet GNOME and such. There are currently ten VMware bloggers on there. This will of course increase in time.

Planet V12n is designed to be the go-to source for virtualization news. Blogs and sites such as virtualization.info and Virtual Strategy Magazine are included, with news covering all things virtualization, VMware and otherwise. The VMware employee blogs are also shown alongside the virtualization blogs.

The planets are very new, so there’s a couple of bugs to work out. The Planet VMware atom feed is busted right now, but it’s a known problem and will be fixed shortly. Please let us know if there are any other glaring problems.

Planet VMware, Planet V12n Read More »

Scroll to Top