Featured in Apple TV Concept

About a month ago I was skimming through the MacRumors WWDC 2014 roundup, where I first saw the Apple TV concept, originally published by German technology magazine Curved. An interesting concept, especially the remote controls UI, which obviously is inspired, if not based directly on my Remote Control for XBMC app. I reached out to @curved_de and quickly got a reply from Martin @deplaatjesmaker Hajek who is the original designer of the 3D concept.

|filename|/images/xbmc-remote/apple-tv-concept/apple-tv-concept.jpg

He actually thought he found an image of the UI of Apple’s own remote app through a Google image search, but in fact it was a screenshot of my app. That may well be the best compliment to get as an iOS app developer!

After my reaching out, Martin immediately updated both his Apple TV piece on his website as well as the article on Curved with a link attributing the UI design to Remote Control for XBMC. For that I’d like to publicly thank him. So thanks @deplaatjesmaker!

Also, don’t forget to check out his latest iPhone 6 concepts on http://www.martinhajek.com.

Remote Control for XBMC 3.1.0

Remote Control for XBMC version 3.1.0 is available for download on the App Store. This version contains several UI and stability improvements. I also implemented some significant improvements in downloading TV show information. With larger TV show libraries or when using slower hardware to run XBMC (a Raspberry Pi for example), this new version will improve responsiveness and should fix possible timeouts.

Remote Control for XBMC 3.0.0

I am pleased to announce that the redesigned version of Remote Control for XBMC is now available for download on the App Store.

Remote Control for XBMC on iOS 7

This morning I submitted a new version of Remote Control for XBMC for iOS 7. Finally. It’s completely redesigned from the ground up, which took me more than four months.

Why did it take that long? I wanted to bring consistency in the design of the app on iPhone and iPad and I tried to work out the best experience for iOS 7 on both devices. No pixel of the app has been left untouched by this update. It was a lot of work, but I am very happy with the result.

I started with the overall design and remote controls. I liked the connection panel I introduced for the iPhone version, so I decided to keep it in and bring it to iPad as well. The remote and library icons as well as the remote control buttons needed a more iOS 7 design aesthetic, so I redesigned these from scratch. Likewise, the player and volume controls buttons are also redesigned to fit the overall iOS 7 look. [1]

Launching the app into the remote controls view immediately shows the difference between the new design for iOS 7 and it’s original counterpart.

|filename|/images/xbmc-remote/ios7-redesign/remote-iphone-ios6.png |filename|/images/xbmc-remote/ios7-redesign/remote-iphone-ios7.png |filename|/images/xbmc-remote/ios7-redesign/remote-ipad-ios6.png |filename|/images/xbmc-remote/ios7-redesign/remote-ipad-ios7.png

The player and volume controls are part of the root view on iPad, on iPhone they are on the now playing view, which got its own redesign. With iOS 7, there’s a nice depth-blur effect when the artwork slides in from the bottom of the screen. On iPad the artwork slides in underneath the toolbar and on iPhone it slides in underneath the player and volume controls.

|filename|/images/xbmc-remote/ios7-redesign/now-playing-iphone-ios6.png |filename|/images/xbmc-remote/ios7-redesign/now-playing-iphone-ios7.png

The original interface design for iPhone had a lot of custom designed interface chrome, but stock iOS 7 actually looks very good already. As a result I could remove a lot of images from the application bundle (shrinking from almost 15Mb down to only 2.9Mb). Also many custom UI tweaks could be removed from the source code. I loved that part. Nothing feels better than cleaning up and removing things while actually making the app better. Hopefully the iOS 7 stock UI elements look and feel don’t wear too quickly. The music library browsing views are pretty much the same with fresh coat of paint:

|filename|/images/xbmc-remote/ios7-redesign/albums-iphone-ios6.png |filename|/images/xbmc-remote/ios7-redesign/albums-iphone-ios7.png |filename|/images/xbmc-remote/ios7-redesign/artists-ipad-ios6.png |filename|/images/xbmc-remote/ios7-redesign/artists-ipad-ios7.png |filename|/images/xbmc-remote/ios7-redesign/album-iphone-ios6.png |filename|/images/xbmc-remote/ios7-redesign/album-iphone-ios7.png |filename|/images/xbmc-remote/ios7-redesign/artist-ipad-ios6.png |filename|/images/xbmc-remote/ios7-redesign/artist-ipad-ios7.png

The TV shows section on iPad got a full make over, to make it more consistent with it’s iPhone counterpart. On iPhone, the TV shows view only got a cleaner look, except for the number of unwatched episodes badges. I have tried to make these more consistent with the way Apple’s iOS apps shows unread, unwatched and unlistened items. The screenshots show the banner style lists (which I personally like more), however TV show posters are still supported as well.

|filename|/images/xbmc-remote/ios7-redesign/tvshows-ipad-ios6.png |filename|/images/xbmc-remote/ios7-redesign/tvshows-ipad-ios7.png |filename|/images/xbmc-remote/ios7-redesign/tvshows-iphone-ios6.png |filename|/images/xbmc-remote/ios7-redesign/tvshows-iphone-ios7.png

The detailed TV show view is mostly a design make-over on both iPhone and iPad, again except for the unwatched episode indicator.

|filename|/images/xbmc-remote/ios7-redesign/tvshow-iphone-ios6.png |filename|/images/xbmc-remote/ios7-redesign/tvshow-iphone-ios7.png |filename|/images/xbmc-remote/ios7-redesign/tvshow-ipad-ios6.png |filename|/images/xbmc-remote/ios7-redesign/tvshow-ipad-ios7.png

Finally the movies view also got the new style of flagging unwatched ones. On iPad the movies browser got a more significant redesign to make it more consistent with iPhone, similar to the TV shows redesign:

|filename|/images/xbmc-remote/ios7-redesign/movies-ipad-ios6.png |filename|/images/xbmc-remote/ios7-redesign/movies-ipad-ios7.png |filename|/images/xbmc-remote/ios7-redesign/movies-iphone-ios6.png |filename|/images/xbmc-remote/ios7-redesign/movies-iphone-ios7.png

The new version will be a free update, available on all devices that support iOS 7. As I mentioned before, I’m very content with the new looks and I enjoy using my own app almost daily. I hope everyone out there who is using or who will be using Remote Control for XBMC will enjoy it as much as I do.

[1]I originally did my design work in Inkscape, but since I’ve bought Sketch, I’ve recently done all design work with it. It’s really the best UI design tool I know and well worth the purchase. With this full app redesign I’ve moved over all pixel based UI design work for Remote Control for XBMC to Sketch.

Boost.Foreach and Compiler Bugs

Posted on 06 August 2013  •  Permalink  •  Category c++

Boost is a library that definitively boosts your productivity writing C++ code. For instance, for loops can be made a lot more readable if you use Boost.Foreach. It’s almost as if you are writing Python, Objective-C or even Java, which support a foreach construct natively.

However, like always, hiding things behind an abstraction can be a problem. Especially when the abstraction depends on a compiler bug. That’s the case with BOOST_FOREACH in Boost versions prior to Boost 1.47, which relies on a compiler bug for rvalue detection. And it so happens that is compiler bug is fixed in GCC 4.6, which breaks older Boost versions.

Ubuntu 12.04 actually ships with Boost 1.46.1 and GCC 4.6.3. A deadly combination as it seems. Just try to run this little C++ program:

#include <boost/shared_ptr.hpp>
#include <boost/foreach.hpp>
#include <vector>
#include <iostream>

const std::vector<boost::shared_ptr<int> > f()
{
  return std::vector<boost::shared_ptr<int> >(4,
    boost::shared_ptr<int>(new int(12)));
}

int main(int argc, char **argv)
{
  BOOST_FOREACH(const boost::shared_ptr<int> &pi, f())
  {
    std::cout << *pi << std::endl;
  }
}

You would expect to see 4 lines printed with the number 12. Instead you will get this:

$ g++ test.cpp -o test
$ ./test
test: /usr/include/boost/smart_ptr/shared_ptr.hpp:412:
  boost::shared_ptr<T>::reference boost::shared_ptr<T>::operator*() const
  [with T = int, boost::shared_ptr<T>::reference = int&]:
    Assertion `px != 0' failed.
Aborted (core dumped)

So what’s actually happening here? Internally Boost.Foreach will try to detect whether the container expression is an lvalue or an rvalue. In the example above the result from f() is such rvalue: a temporary object that will be gone as soon as it goes out of scope. Boost.Foreach takes precautions for that by copying the rvalue internally such that it will live as long as the scope of the for loop.

Now what happens if rvalue detection fails in above example? It means that the vector returned by f() will be gone before the statements in the loop get executed. The destruction of the vector means the smart pointers are destructed too. As a result, trying to access them in the std::cout statement will trigger the px != 0 assertion.

Fortunately this problem is fixed in Boost 1.47 and up. For more information on how Boost.Foreach works, see Conditional Love: FOREACH Redux.

Redesign and iPhone XBMC Remote

After I finished iPhone support in Remote Control for XBMC I decided that its landing page was definitely overdue for an update. That lead me to decide to also overhaul the technology I’m using for this site. A new engine and a new design, should be four weeks I thought, and a nice moment to launch iPhone support with a new dedicate page. Those four weeks turned into four months, because while I was redesigning my site we also redesigned and refurbished our bathroom in our house. Although there are many similarities in the design process, I can tell you redesigning a website definitively doesn’t result in the amount of dust you get from redesigning a bathroom.

So even though the Remote Control for XBMC 2.0.0 update with iPhone and iPod touch support is already available on the App Store for four months (to be precise, it was accepted by Apple on March 12), today, I’m officially launching my new design and a beautifully redesigned Remote Control for XBMC landing page.

In the meantime I’ve also released a 2.0.1 update with a few fixes which is currently the latest version available for download in the App Store. Besides support for iPhone and iPod touch, here’s a summary of the changes in 2.0.0 and 2.0.1:

  • Added rewind/fast-forward buttons for small skips (tap) and seeking (tap-and-hold).
  • Previous/next buttons act as big skips when video is playing.
  • Better time formatting for TV show episodes and songs.
  • Odd rows in iPad are now colored differently.
  • Redesigned missing album, TV show, movie, audio and video art.
  • Add setting to prefer posters over banners (only supported for Frodo).
  • Fix vertical alignment of down button on retina displays.
  • Fix bugs with processing (large) library updates.
  • Fix crash with Frodo when loading TV shows that have no associated banner or poster art.
  • Fix issue with illegal unicode characters in thumbnail paths when XBMC runs on Mac OS.
  • Many other minor bug fixes and improvements.

Lastly, with the release of XBMC 12.0 (Frodo), Remote Control for XBMC does not support XBMC 10.0 (Dharma) anymore. Please upgrade your XBMC installation if you are still using XBMC 10.0.

Migrated to Pelican

Posted on 13 March 2013  •  Permalink  •  Category misc

When I started this site, all I wanted was a place to pin down my thoughts. Back in 2007, I chose WordPress to be the backend of Code-muse.com. It’s been almost 6 years, my requirements for this site have changed and there’s been some interesting changes in the technology landscape with respect to web development and blogging in these years.

Besides writing down an occasional blog post, Code-muse.com has become the home of Remote Control for XBMC as well. I was getting tired of having to use WPs web backend to edit the posts and pages, and most of the time was copy/pasting text to/from Vim. So I was actually wondering why I didn’t choose to use a static website generator in the first place. Maybe they weren’t as popular in 2006 as they are now.

I’ve took some time to check out several popular static blog/site generators and finally settled with Pelican, a Python based static site generator. I’m not really into Ruby, which is why I didn’t go for Jeckyll or Octopress. I checked Hyde, which looks promising, but there’s almost no documentation for Hyde, whereas Pelican’s documentation is excellent. As far as I can tell at this moment, I am quite content with Pelican.

So here it is; a statically served all new Code-muse.com.

Remote Control for XBMC 1.8.0 — New Name!

XBMC Remote Control for iPad has a new name, it will now live on as Remote Control for XBMC. The latest release (1.8.0) has many internal improvements using new iOS 5.x features, preparing for iPhone/iPod touch support. Yep, you read that correctly: support for iPhone and iPod touch devices is coming! But before that’s finished, this release pushes some improvements made in the process so far and fixes compatibility with the upcoming XBMC Frodo (12.0) release.

For the full list of changes and to get the latest version, visit the App Store.

XBMC Remote Control for iPad 1.7.0

A new update to XBMC Remote Control for iPad, which adds additional eye-candy when you browse your music and TV show library and brings some minor bug fixes including updates to support the latest Frodo builds, is now is now available as version 1.7.0 on the App Store.