<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8649245443206318981</id><updated>2012-01-02T10:28:40.296-08:00</updated><category term='n900'/><category term='Harmattan'/><category term='n9'/><category term='MeeGo'/><category term='MusicShelf'/><category term='camera'/><category term='fremantle'/><category term='QML'/><category term='upnp'/><category term='n950'/><category term='pan'/><category term='Lumia 800'/><category term='WeTab'/><category term='maemo'/><category term='xrandr'/><category term='fmradio'/><category term='n800'/><category term='python'/><category term='comparison'/><category term='Linux'/><category term='n810'/><category term='kernel'/><category term='Qt'/><category term='Laptop'/><category term='ussd'/><category term='review'/><category term='pyfmradio'/><category term='mediabox'/><category term='Mer'/><category term='eBook'/><title type='text'>Python and more</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-370172922835808462</id><published>2012-01-01T07:21:00.000-08:00</published><updated>2012-01-01T07:42:04.289-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comparison'/><category scheme='http://www.blogger.com/atom/ns#' term='n950'/><category scheme='http://www.blogger.com/atom/ns#' term='camera'/><category scheme='http://www.blogger.com/atom/ns#' term='n9'/><category scheme='http://www.blogger.com/atom/ns#' term='n900'/><category scheme='http://www.blogger.com/atom/ns#' term='Lumia 800'/><title type='text'>Comparison of Camera Phones</title><content type='html'>For two years the N900 was my digital camera. With the mobile phone replacing my digital camera I don't have to carry an extra device with me. Besides that my old digicam is broken and thanks to the N900 I didn't have to buy another one.&lt;br /&gt;However, the good old days of the N900 are gone. Can any of Nokia's new phones keep up with the N900 camera-wise?&lt;br /&gt;&lt;br /&gt;I'm going to compare the N9, the N950, and the Lumia 800 to the N900. I'm not comparing to the N8, simply because I don't have one, and it's known to be the best camera phone anyway.&lt;br /&gt;&lt;br /&gt;The N9 is Nokia's flagship Qt device. It is mostly sold in countries where the Lumia devices are not on sale. Online retailers and some electronics stores sell the N9 in other countries as well. It features a 8 MP camera.&lt;br /&gt;&lt;br /&gt;The N950 is not on sale at all. It got cancelled due to unknown reasons before it went on sale in late 2010. It also has a 8 MP camera, but rumour has it that the hardware is actually capable of 12 MP. You only get 8 MP out of it with the software, though.&lt;br /&gt;In my opinion the N950 is not very good as an everyday's phone. It's a developer's device but not a reliable phone.&lt;br /&gt;&lt;br /&gt;The Lumia 800 is Nokia's current flagship Windows Phone 7 device. It has stolen the design from the N9 right down to the retail box and its contents. The Lumia 800 and N9 look like twins. I assume both phones have exactly the same camera hardware with 8 MP.&lt;br /&gt;&lt;br /&gt;The N900 is the legendary but aging king of Nokia's premium devices. It is a Linux box in your pocket, rather than a mere smartphone. Since the device is quite thick, it actually feels like a digicam in your hands. It is the only device with a movable lens cover. To take a photo, simply open the cover, aim, focus, and shoot. The camera has only 5 MP, but used to be one of the best (if not the best) cameras in mobile phones at its time.&lt;br /&gt;&lt;br /&gt;Only the Lumia 800 got a dedicated camera button like the N900. That button is placed well and works with two steps (focus - shoot) just like the N900. During regular one-handed use, however, this button is a little disturbing on the Lumia. It is not as recessed as the other buttons and it breaks the otherwise beautiful design of the phone.&lt;br /&gt;The N9 and N950 both don't have a camera button.&lt;br /&gt;&lt;br /&gt;All of these phones use Carl Zeiss optics. So they should all produce good images in theory. The N950 is a little different here, because it bears no Zeiss logo. Only devices with Zeiss optics that passed the Carl Zeiss certification may use the logo. One can only speculate about the N950. Didn't it pass, or has it just never been submitted for certification due to being cancelled before going no sale?&lt;br /&gt;&lt;br /&gt;None of these phone cameras can do optical zoom. If you need to zoom a lot, you should consider getting a real digicam.&lt;br /&gt;&lt;br /&gt;Let's compare the most common situation: aim, focus, shoot with automatic settings. You can always get a lot more out of the camera if adjusting the various parameters. But for quick pictures you usually won't do that.&lt;br /&gt;My scene for comparison is a look out of a window with the focus being on the traffic sign outside. Some curtain is visible inside the room, and lots of leaves are on the hedge and in the forest outside. So there are quite a lot of fine details to capture for the camera. A little reflection on the window pane makes focussing harder. The lower part of the image is quite dark. Digital cameras tend to produce a lot of grain in these areas.&lt;br /&gt;&lt;br /&gt;These are the images taken by N900, N950, N9, and Lumia 800, respectively:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-HdD31hfQMdc/TwB61qKIGrI/AAAAAAAABXo/DulvIXo3AHw/s1600/N900.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://1.bp.blogspot.com/-HdD31hfQMdc/TwB61qKIGrI/AAAAAAAABXo/DulvIXo3AHw/s320/N900.jpg" alt="" id="BLOGGER_PHOTO_ID_5692684991264725682" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-7V942beqCNI/TwB61-V8flI/AAAAAAAABX0/ib_jNF93-uE/s1600/N950.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 242px; height: 320px;" src="http://2.bp.blogspot.com/-7V942beqCNI/TwB61-V8flI/AAAAAAAABX0/ib_jNF93-uE/s320/N950.jpg" alt="" id="BLOGGER_PHOTO_ID_5692684996683005522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-s0Zg8FaLLXA/TwB62OKlq0I/AAAAAAAABYE/ZVs4EO1aSYc/s1600/N9.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 242px; height: 320px;" src="http://4.bp.blogspot.com/-s0Zg8FaLLXA/TwB62OKlq0I/AAAAAAAABYE/ZVs4EO1aSYc/s320/N9.jpg" alt="" id="BLOGGER_PHOTO_ID_5692685000930339650" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/--MRMpK1vRVc/TwB621H8czI/AAAAAAAABYM/kuzk_44vUTg/s1600/Lumia800.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 240px; height: 320px;" src="http://2.bp.blogspot.com/--MRMpK1vRVc/TwB621H8czI/AAAAAAAABYM/kuzk_44vUTg/s320/Lumia800.jpg" alt="" id="BLOGGER_PHOTO_ID_5692685011388232498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;While images on the N900, N9, and N950 are easily accessible, the Lumia posed a problem. USB mass-storage mode or Bluetooth file transfer are not available. So I tried to upload the photo to SkyDrive and download it to my computer. But SkyDrive crippled the image's resolution even when attempting to download the "original image". So I sent the photo via E-Mail to me. This worked, but still, the image was crippled to 2 MP. So if I cannot get an 8 MP photo off the phone, I will compare the 2 MP photo with the others instead. Well done, Microsoft! The photo doesn't show more details in the gallery on the Lumia, either, so I'm wondering if the Lumia does save with a higher resolution than 2 MP at all.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/-_2ZX5UNGkDI/TwB7YTkEt5I/AAAAAAAABYY/Bg328gDtF-E/s1600/sign.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 100px;" src="http://4.bp.blogspot.com/-_2ZX5UNGkDI/TwB7YTkEt5I/AAAAAAAABYY/Bg328gDtF-E/s400/sign.jpg" alt="" id="BLOGGER_PHOTO_ID_5692685586494961554" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Let's take a look at the traffic sign first. The N900 produces the sharpest result. But with 5 MP, the camera fails to capture the details. The sign is getting quite pixelated. The blurry image and the washed-out colors of the N950 are totally unacceptable.&lt;br /&gt;The Lumia 800 and N9 are about on par. The 8 MP capture the details pretty well, but they're both a bit blurry. The colors are most natural on the N900 and N950. The Lumia is over-saturated.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-GoNRs5c0950/TwB7iMg__pI/AAAAAAAABYk/XNjd-Q5Wrkc/s1600/curtain.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 100px;" src="http://2.bp.blogspot.com/-GoNRs5c0950/TwB7iMg__pI/AAAAAAAABYk/XNjd-Q5Wrkc/s400/curtain.jpg" alt="" id="BLOGGER_PHOTO_ID_5692685756401712786" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Next we look at the curtain, which is supposed to be out of focus. None of these images appear to be clearly out of focus, though. The N950 produces a very blurry image. The colors are quite OK, except for the Lumia this time. The N900 and the N9 produce the best images, but the N900 shows more color artifacts. The most color artifacts are visible on the Lumia.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/-LOpc8_aYrVs/TwB7qqxoqlI/AAAAAAAABYw/wH9B55u8egE/s1600/hedge.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 100px;" src="http://1.bp.blogspot.com/-LOpc8_aYrVs/TwB7qqxoqlI/AAAAAAAABYw/wH9B55u8egE/s400/hedge.jpg" alt="" id="BLOGGER_PHOTO_ID_5692685901963504210" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Look at the hedge now. Again, the N950 produces the worst result. The Lumia and N9 are lacking contrast, but the Lumia is slightly better than the N9 here. The N900 even though it only has 5 MP is the clear winner this time.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-uYl5FFIqKS8/TwB7wyCI5AI/AAAAAAAABZA/D4VKUvAGdDU/s1600/dark.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 100px;" src="http://2.bp.blogspot.com/-uYl5FFIqKS8/TwB7wyCI5AI/AAAAAAAABZA/D4VKUvAGdDU/s400/dark.jpg" alt="" id="BLOGGER_PHOTO_ID_5692686006990988290" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now let's prepare for the really shocking results and compare the darker areas. The Lumia produces a very dark area that is too dark, but there is almost no color noise. The other phones produce very noisy images with the N900 being the worst. There is a tint of green in all images except on the Lumia, which is the clear winner this time.&lt;br /&gt;&lt;br /&gt;To sum it up, the N950 is the clear loser in this comparison. It does not have and in my opinion does not deserve a Carl Zeiss logo.&lt;br /&gt;Next comes the Lumia 800. While its camera is about on par with the N9, the fact that you cannot easily get your pictures off the phone in full resolution, makes it a bad joke. The colors are a bit over-saturated and generally a bit too dark on the Lumia 800, too.&lt;br /&gt;The N9 scores second place. It has serious trouble under low-light conditions, however.&lt;br /&gt;The N900 has problems under low-light conditions as well, but captures more color detail in general. With some software improvements, the N9 could beat the N900 one day.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-370172922835808462?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/370172922835808462/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=370172922835808462' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/370172922835808462'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/370172922835808462'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2012/01/comparison-of-camera-phones.html' title='Comparison of Camera Phones'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-HdD31hfQMdc/TwB61qKIGrI/AAAAAAAABXo/DulvIXo3AHw/s72-c/N900.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-8695816631192469029</id><published>2011-07-23T14:19:00.000-07:00</published><updated>2011-07-23T14:32:01.988-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MeeGo'/><category scheme='http://www.blogger.com/atom/ns#' term='WeTab'/><category scheme='http://www.blogger.com/atom/ns#' term='Harmattan'/><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='MusicShelf'/><title type='text'>Put Your Music Shelf in Your Pocket - With Harmattan or N900CE</title><content type='html'>My little app &lt;a href="http://gitorious.org/meego-music-shelf"&gt;Music Shelf&lt;/a&gt; is a MeeGo music player that aims to be simple, easy, and good-looking. It is the proud winner of the &lt;a href="http://wetab.mobi/qt-wetab-app-challenge/"&gt;1st WeTab Qt App Challenge&lt;/a&gt; in category Entertainment with &lt;a href="http://apps.facebook.com/meine-umfragen/view/zul6ab9i"&gt;67% of votes.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Now that the challenge is won, I'm working to target other MeeGo platforms besides the WeTab as well. Thanks to QML and Qt, this is not really a big issue.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-J26v30Ox82w/Tis7kCg42LI/AAAAAAAABFE/jxlQvf_KuW0/s1600/musicshelf-harmattan.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 356px; height: 200px;" src="http://2.bp.blogspot.com/-J26v30Ox82w/Tis7kCg42LI/AAAAAAAABFE/jxlQvf_KuW0/s400/musicshelf-harmattan.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5632661249293080754" /&gt;&lt;/a&gt;&lt;br /&gt;There are bad news for N900 users, though. Maemo5 PR1.3 is not capable of running the app smoothly, so I'm not releasing it for Maemo5. The N900 MeeGo Community Edition, however, runs the app just fine.&lt;br /&gt;&lt;br /&gt;Another target is MeeGo Harmattan for the new Nokia N950 and N9 devices, where Music Shelf does really shine!&lt;br /&gt;&lt;br /&gt;By the way, Music Shelf is powered by the Qt incarnation of &lt;a href="http://maemo.org/downloads/product/Maemo5/mediabox/"&gt;MediaBox&lt;/a&gt; (which is my popular Maemo4 and Maemo5 project) technology. You can expect first releases for N900CE and Harmattan soon. And on the WeTab you can already download Music Shelf version 1.0 in the WeTab Market for free.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-8695816631192469029?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/8695816631192469029/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=8695816631192469029' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/8695816631192469029'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/8695816631192469029'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2011/07/put-your-music-shelf-in-your-pocket.html' title='Put Your Music Shelf in Your Pocket - With Harmattan or N900CE'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-J26v30Ox82w/Tis7kCg42LI/AAAAAAAABFE/jxlQvf_KuW0/s72-c/musicshelf-harmattan.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6942771074351289928</id><published>2011-03-03T11:15:00.001-08:00</published><updated>2011-03-03T11:45:35.999-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MeeGo'/><category scheme='http://www.blogger.com/atom/ns#' term='QML'/><category scheme='http://www.blogger.com/atom/ns#' term='Qt'/><category scheme='http://www.blogger.com/atom/ns#' term='eBook'/><category scheme='http://www.blogger.com/atom/ns#' term='n900'/><title type='text'>Book Animation Tech Demo on the N900</title><content type='html'>In the course of learning to use &lt;a href="http://qt.nokia.com/qtquick/"&gt;QML&lt;/a&gt;, I have tried to build a book animation with QML for MeeGo. It not only runs well on the N900 with Maemo5, but also on the &lt;a href="http://wetab.mobi/en"&gt;WeTab&lt;/a&gt;, the Lenovo IdeaPad S10-3t with MeeGo, my Ubuntu Laptop, and a friend even showed me how he was running it on Windows.&lt;br /&gt;This is truly &lt;a href="http://doc.qt.nokia.com/"&gt;"Code less. Create more. Deploy everywhere."&lt;/a&gt; :)&lt;br /&gt;&lt;br /&gt;This is a short video running a tech demo I made for the N900.&lt;br /&gt;&lt;br /&gt;&lt;object width="320" height="195"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-0w93UcuxKg?fs=1&amp;amp;hl=de_DE&amp;amp;rel=0"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-0w93UcuxKg?fs=1&amp;amp;hl=de_DE&amp;amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="195"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Maybe we'll see some MeeGo software with this technology one day. For now it's only a tech demo looking for an application.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6942771074351289928?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6942771074351289928/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6942771074351289928' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6942771074351289928'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6942771074351289928'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2011/03/book-animation-tech-demo-on-n900.html' title='Book Animation Tech Demo on the N900'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-657300362281895137</id><published>2010-10-30T12:23:00.000-07:00</published><updated>2010-10-31T04:19:54.234-07:00</updated><title type='text'>WeTab - A Look at the first MeeGo Tablet</title><content type='html'>A lot has been written in German media about the &lt;a href="http://wetab.mobi/en"&gt;WeTab&lt;/a&gt;. Mostly, every news magazine tried to compare the Tab to Apple's iPad and came to the conclusion that it's not an iPad. What a surprise!&lt;br /&gt;&lt;br /&gt;I've been using my WeTab 32GB for about a month, and this is what I can tell about it. Hell, I enjoy it!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GrwhB3fzGXM/TMx2TEClPyI/AAAAAAAAAMI/VafRHQctBcg/s1600/20101030_001.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_GrwhB3fzGXM/TMx2TEClPyI/AAAAAAAAAMI/VafRHQctBcg/s400/20101030_001.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5533928112005660450" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Hardware&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The hardware is manufactured by Asus, or more precisely, their OEM branch Pegatron. The Canadian &lt;a href="http://www.exopc.com/"&gt;ExoPC&lt;/a&gt; running Windows 7 makes use of the same hardware design, thus is the Windows brother of the WeTab. Asus is already well-known for their netbooks, so the WeTab hardware shouldn't disappoint, right?&lt;br /&gt;&lt;br /&gt;The WeTab is available in two versions. One version has a 16 GB SSD on board, and the other version has a 32 GB SSD, GPS, and a 3G modem with SIM card slot. Both versions have a slot for SDHC cards and two USB slots, next to the audio out port and HDMI out.&lt;br /&gt;The soon to be released &lt;a href="http://wetab-community.de/forum/viewtopic.php?f=56&amp;t=1519"&gt;dockingstation&lt;/a&gt; will have 3 USB (or was it 4?), microphone in, audio out, and RJ-45 Ethernet.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GrwhB3fzGXM/TMx2gX5IA8I/AAAAAAAAAMQ/SYCeHRBAGic/s1600/20101030_002.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 98px;" src="http://4.bp.blogspot.com/_GrwhB3fzGXM/TMx2gX5IA8I/AAAAAAAAAMQ/SYCeHRBAGic/s400/20101030_002.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5533928340673004482" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Another big plus of the 32 GB version is the built-in Broadcom Crystal-HD chip which enables the tablet to play 720p or 1080p HD videos fluently. The Crystal-HD chip is automatically used by the GStreamer framework and will soon also be available to the Flash player in the webbrowser.&lt;br /&gt;&lt;br /&gt;It also features a proximity sensor (called the quickselect button) and an ambient light sensor that is not yet enabled by software. The built-in webcam is 1.3 megapixels. At the bottom there is a connector port for the soon to be released docking station. I saw a prototype model of the &lt;a href="http://wetab-community.de/forum/viewtopic.php?f=56&amp;t=1519"&gt;dockingstation&lt;/a&gt; yesterday and it looked really sexy.&lt;br /&gt;&lt;br /&gt;The built-in accelerometer can be used for automatic screen rotation (currently the browser does this), or for games (but as of now there are no such games available). You can also turn around the tablet by 180 degrees and the screen will flip for all applications, including accelerated videos.&lt;br /&gt;&lt;br /&gt;The tablet features a capacitive multitouch-capable 11,6" touchscreen with 1366x768 pixels (that's HD Ready resolution). The CPU is an Intel Atom N450 at 1.66 GHz, and it has 1 GiB of RAM. There's also Bluetooth 2.1 and WiFi 802.11n. 3G on the 32 GB version is quad band with UMTS / HSDPA 850 / 900 / 1900 / 2100 MHz.&lt;br /&gt;&lt;br /&gt;The touchscreen is a &lt;a href="http://en.wikipedia.org/wiki/Liquid_crystal_display#Twisted_nematic_.28TN.29"&gt;TN panel&lt;/a&gt; and thus not well readable from the sides, or from below, as the viewing angle is narrow. According to 4tiitoo, the reason for using a TN panel was that at the time of product design, there were no better panels available in that size and resolution.&lt;br /&gt;The screen is glossy, so works well as a mirror, too, just like the Apple products.&lt;br /&gt;&lt;br /&gt;The touchscreen initially had some firmware problems which resulted in repeated phases of unresponsiveness, with a duration of up to 3 seconds. Many people, including myself, suffered from this. The newly produced units will have an updated touchscreen firmware, so this problem is gone now. On older tablets, the new firmware will be available for flashing soon. I already got the new touchscreen firmware flashed by a 4tiitoo employee at the WeTab Community Meeting in Munich yesterday, and the problems are since gone. I'm sooo happy now! :)&lt;br /&gt;&lt;br /&gt;Being Atom-powered, it has a fan on board. The fan itself is very silent but of course audible in a silent environment. It's not so much of a problem, though, IMHO. On the other hand, the fan-less iPad tends to switch itself off on hot days, so having a CPU fan could also be seen as an advantage.&lt;br /&gt;&lt;br /&gt;The built-in battery currently lasts for about 4 to 5 hours, which is due to the fact that there are virtually no power optimizations in place yet. Future software updates will enable a Atom-optimized kernel and WiFi powersaving. This could help expand the runtime a bit.&lt;br /&gt;&lt;br /&gt;Unlike the Nokia Internet Tablets and N900, there is no idle mode and you have to switch to standby instead, like on a netbook. Waking up from standby is instant and well below one second, though. The standby mode is actually "suspend to RAM".&lt;br /&gt;&lt;br /&gt;The tablet weighs about 1 kg. Being larger than the iPad this does not come as a surprise. Was the iPad as big as the WeTab, it would weigh even more, if you do the calculation.&lt;br /&gt;&lt;br /&gt;3G works great and I was able to surf the web during a two hour train journey yesterday, on a course where I usually have some problems surfing with the N900 at some places.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GrwhB3fzGXM/TMx2sZmhI7I/AAAAAAAAAMY/_zob2_Xpyjc/s1600/20101030_004.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://1.bp.blogspot.com/_GrwhB3fzGXM/TMx2sZmhI7I/AAAAAAAAAMY/_zob2_Xpyjc/s400/20101030_004.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5533928547290260402" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Software&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The WeTab runs &lt;a href="http://www.meego.com"&gt;MeeGo&lt;/a&gt;, and that's the reason why I bought it in the first place. It's the first consumer hardware available running MeeGo. As there is no tablet edition of MeeGo yet, it runs a MeeGo core with a custom Qt-based UI developed by &lt;a href="http://www.4tiitoo.com/"&gt;4tiitoo&lt;/a&gt;.&lt;br /&gt;And MeeGo pays off! It boots up within 20 to 30 seconds. That's really quick.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_GrwhB3fzGXM/TMx28KTjQ8I/AAAAAAAAAMg/QVX6cZ7zObs/s1600/2010-10-30_20-50-12-721.png"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 225px;" src="http://2.bp.blogspot.com/_GrwhB3fzGXM/TMx28KTjQ8I/AAAAAAAAAMg/QVX6cZ7zObs/s400/2010-10-30_20-50-12-721.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5533928818062083010" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;When the product was launched in late September, the software was at a rough and unfinished state, which could be due to the switch over to MeeGo shortly before the release. 4tiitoo had a lot of hardware problems with Ubuntu, so they (luckily) decided to switch over to MeeGo shortly before product launch.&lt;br /&gt;&lt;br /&gt;The first time you switch on the WeTab, you will have to register yourself. This currently gives no real benefit, but eventually you will be able to access the WeTab cloud (which will be voluntary). It kinda reminds of Android phones and their registration with Google. After registration, the tablet automatically pulls the latest updates, so that you start with the latest firmware.&lt;br /&gt;&lt;br /&gt;Since release, there have been quite a few software updates. About one major update per month and several minor bugfix updates in-between. Updates come over the air and usually install when you power off. You can also look for updates manually.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Let's take a look at some of the bundled software&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The pinboard is the WeTab equivalent of the desktop. You can place and arrange application launchers and widgets there. The board scrolls vertically so you have lots of space! The background image can currently not be customized, but this will be enabled in a firmware update in November.&lt;br /&gt;You cannot add launchers by yourself unless editing files via the terminal. This is just not supported as installing the software will install the launchers.&lt;br /&gt;&lt;br /&gt;The webbrowser is probably the most critical part of the tablet's user experience. It was really bad back in September but has since greatly improved. The developers put and are putting a lot of effort into this. The browser is based on Webkit, comes with Flash 10, and since the last firmware update features multitouch pinch-to-zoom gestures for fluently zooming in and out. It's a pleasure to use. Of course on a screen with that resolution, you rarely have to zoom unless you encounter some tiny text. Kinetic scrolling in the browser feels great, too.&lt;br /&gt;There is no menu for bookmarks, so all your browser bookmarks are placed as launchers with preview image on the pinboard (just like the N900 can do).&lt;br /&gt;&lt;br /&gt;The bundled e-Mail client is Claws Mail with touchscreen improvements (it doesn't look like Claws at all anymore). It works well with fingers but since I am not using it much, I won't say more about it. People who don't like Claws did install Thunderbird.&lt;br /&gt;&lt;br /&gt;The file manager is a weak piece. It does its job but leaves much to be desired. Especially, there are only two kinds of icons, folders and files. If you want to know more about a file, you have to select it to view the preview. Luckily, there's also Thunar available, and this is a good file manager. Nautilus is available from the RPM repository, too.&lt;br /&gt;&lt;br /&gt;The media player for audio and video is Banshee. I don't use Banshee since I have MediaBox on my WeTab, so I can't say much about it. Other people have successfully installed XBMC, too.&lt;br /&gt;&lt;br /&gt;The image gallery shows photos, plays slideshows and videos. It supports multitouch for zooming, and wiping gestures for skipping between images, but takes a long time to build preview images if you have a lot of photos. If could be a decent piece of software once it was faster. I'm expecting a later update to fix this.&lt;br /&gt;&lt;br /&gt;The eBook reader is FB Reader with a custom GUI. The GUI is not that good but works for reading books. You cannot set bookmarks or directly skip to a certain page, though. And the book selection dialog (or should I rather say file dialog) is not touch optimized at all, yet.&lt;br /&gt;Of course, FB Reader cannot load DRM-crippled books. For these books, some people have successfully installed Adobe Digital Editions or Amazon Kindle on the WeTab using Wine.&lt;br /&gt;&lt;br /&gt;OpenOffice.org comes with some touch optimizations such as larger icons. But this kind of software is better used with external keyboard and mouse. Then it works like you're used to.&lt;br /&gt;&lt;br /&gt;The maps application uses Microsoft Bing maps and comes with a widget for the pinboard and a full application with multitouch for zooming and GPS support. 4tiitoo also announced turn-by-turn voice navigation for later. OK, maybe the tablet is a bit too large for windshield mounting, though... ;)&lt;br /&gt;&lt;br /&gt;There is a market where you can get more software like Adobe Acrobat Reader, Skype, Stellarium, some games, widgets, etc. The market is currently very small and there is no pay-content yet. You can expect more software, once the SDK (based on Qt Creator and VirtualBox image) will be published later this year.&lt;br /&gt;&lt;br /&gt;Root shell. There is a root shell available for download in the market. Once you install it, you'll lose software warranty (of course, since from now on you can tinker with everything), but hardware warranty won't be affected. Having the root shell installed is called "expert mode", but actually it's just a launcher for a terminal (Xfce terminal to be precise) on the pinboard.&lt;br /&gt;&lt;br /&gt;If you want more apps like Opera 10 or Opera Mobile, you can e.g. go over to &lt;a href="http://portablelinuxapps.org"&gt;http://portablelinuxapps.org&lt;/a&gt;. &lt;s&gt;But you need the terminal for running this stuff.&lt;/s&gt;As it turned out, it's also possible to download them via Chromium, which opens the download folder in thunar, which in turn is able to launch them directly, after setting the executable bit. Thanks to andreas5232 from the WeTab-Community for this tip!&lt;br /&gt;&lt;br /&gt;The next major update will add support for a wide range of DVB-T sticks for turning the WeTab into a portable TV.&lt;br /&gt;&lt;br /&gt;Of course on a keyboard-less device the onscreen keyboard is a crucial part. The one on the WeTab feels great, is big enough for comfortable typing, but lacks keys like tilde or pipe for Unix people. On the other hand, there is a Ctrl-C key. Well, actually, it's the copy key, which happens to map to Ctrl-C, too. ;)&lt;br /&gt;Keyboard layouts can be edited via a XML file, though, so missing keys can be added, if necessary. The default layout also misses the dot on the same page as the numbers, which realy sucks for entering IP addresses. :(&lt;br /&gt;&lt;br /&gt;Should I mention multitasking? Of course, unlike that other pad, the WeTab does multitask. The task switcher works similar to the one on the N900, but without the eye candy transitions (as of today).&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Android Support&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The OS with the little green &lt;s&gt;trashcan&lt;/s&gt; robot runs on the WeTab, too.&lt;br /&gt;Support for Android can already be installed by brave people, but it's not officially out yet. Android 2.1 runs in a virtual machine and lets you use Android software. Since Google does not allow tablets to access the Android Market (with the exception of the Galaxy Tab, which is technically a tablet-sized phone and thus good for Google), the market in use is the Android Pit App Store.&lt;br /&gt;There are quite a lot of apps available, but most stuff from the Android market not (yet). Currently Android runs rather slow (hopefully this will become better once it's officially released) and does not play videos yet. Also, many Android apps look weird when running on a large screen, because they're optimized for tiny phone displays.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;A Geek's Delight&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The device can easily be opened to add more RAM. Some people are running it with 2 GiB of RAM.&lt;br /&gt;&lt;br /&gt;As of yesterday, a recovery USB image is available for restoring the device if you bricked it. Until yesterday, the brick had to be sent to the Medion support company for restoring, but this is no longer necessary, thanks to the recovery image.&lt;br /&gt;&lt;br /&gt;People have installed Windows 7 (which runs very well according to those who run it), and Ubuntu or MeeGo netbook. It's kinda hard to boot a different OS, because this is not supported, but Linux geeks find a way. Booting from an attached USB device is locked at EFI level by Asus/Pegatron, but there are ways around.&lt;br /&gt;&lt;br /&gt;The root shell gives you full access to the underlying MeeGo core. What else do you need? :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GrwhB3fzGXM/TMx3I20mKKI/AAAAAAAAAMo/8BCksIh9QJQ/s1600/20101030_005.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 400px; height: 300px;" src="http://4.bp.blogspot.com/_GrwhB3fzGXM/TMx3I20mKKI/AAAAAAAAAMo/8BCksIh9QJQ/s400/20101030_005.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5533929036170274978" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In the beginning the WeTab was a bit disappointing with the touchscreen problems and unfinished software. But with every update it becomes a bit better and I really like it very much now. The battery life time is still short with approx. 4 hours, but this should be fixed by software, soon. Since I have the WeTab every week is like Christmas with little new presents all the time.&lt;br /&gt;&lt;br /&gt;I was able to meet some people from 4tiitoo at the Community Conference yesterday, and it's really amazing how a small startup from Munich managed to bring out a MeeGo tablet with some great features before everybody else. Patience definitely payed off with the WeTab as 4tiitoo are fulfilling their promises. The future looks bright and MeeGo rocks! :D&lt;br /&gt;&lt;br /&gt;Currently the WeTab is only available in Germany at Amazon, MediaMarkt, Otto, Conrad, Cyberport, and Lufthansa Miles and More Shop. Hopefully it will launch internationally soon.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-657300362281895137?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/657300362281895137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=657300362281895137' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/657300362281895137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/657300362281895137'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2010/10/wetab-look-at-first-meego-tablet.html' title='WeTab - A Look at the first MeeGo Tablet'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GrwhB3fzGXM/TMx2TEClPyI/AAAAAAAAAMI/VafRHQctBcg/s72-c/20101030_001.jpg' height='72' width='72'/><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-3866019766037195262</id><published>2010-06-27T05:59:00.000-07:00</published><updated>2010-06-27T09:22:50.856-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='n810'/><category scheme='http://www.blogger.com/atom/ns#' term='n800'/><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><category scheme='http://www.blogger.com/atom/ns#' term='n900'/><title type='text'>A New Version of MediaBox for N900, N800, and N810</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GrwhB3fzGXM/TCdLq1bs_UI/AAAAAAAAALc/5kBQScrByT8/s1600/Screenshot-20100627-145610.png"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 180px; height: 300px;" src="http://1.bp.blogspot.com/_GrwhB3fzGXM/TCdLq1bs_UI/AAAAAAAAALc/5kBQScrByT8/s320/Screenshot-20100627-145610.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5487437870244101442" /&gt;&lt;/a&gt;&lt;br /&gt;There is now a new version 2010.06.26 of MediaBox Media Center available in extras-testing for N900 and extras for N800 and N810.&lt;br /&gt;&lt;br /&gt;It's somewhat a small premiere. :)&lt;br /&gt;As far as I know, MediaBox is the first 3rd party media player on the N900 to support the Maemo MAFW framework for media playback.&lt;br /&gt;MediaBox is also the first media player written in Python to use MAFW for playback. Of course &lt;a href="https://garage.maemo.org/plugins/scmsvn/viewcvs.php/trunk/mediaplayer/MAFWBackend.py?root=mediabox&amp;view=log"&gt;my code for using MAFW&lt;/a&gt; is open for anyone to use in their Python programs.&lt;br /&gt;&lt;br /&gt;Using MAFW on the N900 has some benefits. For instance, audio will play in silent mode and doesn't stutter while locking the screen. And you are able to control the volume with the hardware keys while the screen is locked (this requires Maemo5 PR 1.2).&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GrwhB3fzGXM/TCdLiGje44I/AAAAAAAAALU/yab2EiZ3Gmk/s1600/Screenshot-20100627-145421.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 180px; height: 300px;" src="http://4.bp.blogspot.com/_GrwhB3fzGXM/TCdLiGje44I/AAAAAAAAALU/yab2EiZ3Gmk/s320/Screenshot-20100627-145421.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5487437720221311874" /&gt;&lt;/a&gt;&lt;br /&gt;In case you prefer mplayer over MAFW, and have mplayer installed on your device, you can use it as media backend as well. Or just use plain GStreamer as before. The backend to use is configurable per media type.&lt;br /&gt;On the N8x0, the available backends are OSSO Media Server (the predecessor of MAFW), mplayer, and GStreamer.&lt;br /&gt;&lt;br /&gt;How do you normally get music onto your device? Now you can browse your UPnP media shares and download whole folders with their media contents onto the device. YouTube videos can be copied to the device, too, and MediaBox manages all this with the new download manager component.&lt;br /&gt;&lt;br /&gt;There have also been made some (a lot) performance improvements in the new version, and the handy sleep timer from the 0.96.x series of MediaBox is back.&lt;br /&gt;&lt;br /&gt;Enjoy, and please don't forget &lt;a href="http://maemo.org/packages/repository/qa/fremantle_extras-testing/"&gt;to vote for the package&lt;/a&gt; if you're using it from extras-testing on the N900!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-3866019766037195262?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/3866019766037195262/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=3866019766037195262' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3866019766037195262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3866019766037195262'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2010/06/new-version-of-mediabox-for-n900-n800.html' title='A New Version of MediaBox for N900, N800, and N810'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GrwhB3fzGXM/TCdLq1bs_UI/AAAAAAAAALc/5kBQScrByT8/s72-c/Screenshot-20100627-145610.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6894342333546305094</id><published>2010-01-31T05:21:00.001-08:00</published><updated>2010-01-31T05:25:31.495-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fmradio'/><category scheme='http://www.blogger.com/atom/ns#' term='n800'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>FM Radio for the N800</title><content type='html'>The Nokia N800, introduced in January 2007, was the first internet tablet from Nokia that featured a FM tuner chip (without RDS unfortunately).&lt;br /&gt;&lt;br /&gt;And now the popular FM Radio application from the N900 is coming to the N800 real soon! I'm currently working on N800 support in the application so that both devices will be sharing a common code-base.&lt;br /&gt;&lt;br /&gt;See FM Radio on the N800 in action:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GrwhB3fzGXM/S2WEETH4xYI/AAAAAAAAAKU/xAQErljRfsg/s1600-h/FMRadioN800.jpg"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 320px; height: 241px;" src="http://1.bp.blogspot.com/_GrwhB3fzGXM/S2WEETH4xYI/AAAAAAAAAKU/xAQErljRfsg/s320/FMRadioN800.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5432893734880068994" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6894342333546305094?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6894342333546305094/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6894342333546305094' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6894342333546305094'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6894342333546305094'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2010/01/fm-radio-for-n800.html' title='FM Radio for the N800'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GrwhB3fzGXM/S2WEETH4xYI/AAAAAAAAAKU/xAQErljRfsg/s72-c/FMRadioN800.jpg' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-8681228175975383003</id><published>2010-01-05T15:25:00.000-08:00</published><updated>2010-01-05T15:31:44.799-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ussd'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><category scheme='http://www.blogger.com/atom/ns#' term='n900'/><title type='text'>Isn't the Maemo community awesome? :)</title><content type='html'>First we get a &lt;a href="http://maemo-freak.com/index.php/component/content/article/1342-mkmms-first-working-third-party-mms-application-now-available-"&gt;proof-of-concept for MMS&lt;/a&gt;, and now we can &lt;a href="http://talk.maemo.org/showthread.php?p=454841"&gt;send USSD codes&lt;/a&gt;, such as *135# or *100# for checking your balance.&lt;br /&gt;&lt;br /&gt;It's still very early, but here's a screenshot of a working app.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_GrwhB3fzGXM/S0PK-mrgkcI/AAAAAAAAAJE/Su-d2Qew0IM/s1600-h/Screenshot-20100106-002113.png"&gt;&lt;img style="margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 192px; height: 320px;" src="http://4.bp.blogspot.com/_GrwhB3fzGXM/S0PK-mrgkcI/AAAAAAAAAJE/Su-d2Qew0IM/s320/Screenshot-20100106-002113.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5423401553167946178" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-8681228175975383003?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/8681228175975383003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=8681228175975383003' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/8681228175975383003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/8681228175975383003'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2010/01/isnt-maemo-community-awesome.html' title='Isn&apos;t the Maemo community awesome? :)'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_GrwhB3fzGXM/S0PK-mrgkcI/AAAAAAAAAJE/Su-d2Qew0IM/s72-c/Screenshot-20100106-002113.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6741742473783888670</id><published>2010-01-03T09:14:00.000-08:00</published><updated>2010-01-03T09:17:08.720-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><category scheme='http://www.blogger.com/atom/ns#' term='n900'/><title type='text'>MediaBox Media Center for N900</title><content type='html'>If you have been waiting for MediaBox Media Center on the N900, then I have good news for you.&lt;br /&gt;&lt;br /&gt;MediaBox version 2010.01.03 is now going to extras-testing for some QA. In the meantime for you to watch, I have recorded some videos with the N900's awesome TV-out feature.&lt;br /&gt;&lt;br /&gt;Browsing UPnP shares with MediaBox is as easy as browsing the filesystem. In this video MediaBox is used for watching a movie over WiFi on the N900.&lt;br /&gt;&lt;br /&gt;&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/qIXpwFZxwHk&amp;hl=de_DE&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/qIXpwFZxwHk&amp;hl=de_DE&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;A new feature of MediaBox is the shelf. It's the starting folder where you can always return with the press of a button. You can put shortcuts to almost anything on the shelf for quick access (songs, albums, artists, videos, photos, folders, internet radio stations, playlists, you name it).&lt;br /&gt;&lt;br /&gt;&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/etusNunBNRs&amp;hl=de_DE&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/etusNunBNRs&amp;hl=de_DE&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;MediaBox has a finger-friendly way of reordering playlists. Simply drag the items with your finger.&lt;br /&gt;&lt;br /&gt;&lt;object width="340" height="285"&gt;&lt;param name="movie" value="http://www.youtube.com/v/TwGmSOH_hvI&amp;hl=de_DE&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/TwGmSOH_hvI&amp;hl=de_DE&amp;fs=1&amp;rel=0&amp;color1=0x2b405b&amp;color2=0x6b8ab6&amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="340" height="285"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Oh yes, this video shows MediaBox in portrait mode.&lt;br /&gt;&lt;br /&gt;The upcoming MediaBox for Diablo for N8x0 will be quite similar to this version.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6741742473783888670?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6741742473783888670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6741742473783888670' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6741742473783888670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6741742473783888670'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2010/01/mediabox-media-center-for-n900.html' title='MediaBox Media Center for N900'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6393370138229654003</id><published>2009-11-01T04:17:00.000-08:00</published><updated>2009-11-01T04:25:44.396-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='upnp'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox finally supports UPnP MediaRenderer Output</title><content type='html'>The Fremantle version of MediaBox Media Center is coming along nicely. The latest development version (2009.11.1) is now in extras-devel, so if you're brave enough to test out hot fresh unstable stuff directly from extras-devel, you're invited to give it a try (installing just MediaBox from extras-devel should be pretty safe).&lt;br /&gt;&lt;br /&gt;The big news with the latest development version is UPnP MediaRenderer support. If you have a compatible (&lt;a href="http://gupnp.org/sources/gupnp-media-renderer/"&gt;GUPnP-Media-Renderer&lt;/a&gt; has been tested to be compatible so far) UPnP MediaRenderer in your network, you can have MediaBox play on that renderer instead of your phone.&lt;br /&gt;&lt;br /&gt;If the MediaRenderer supports it, you can even play local files from your phone on it, not only stuff hosted on another UPnP/DLNA server.&lt;br /&gt;&lt;br /&gt;Eventually, this cool stuff will be available for N8x0 users, too, of course.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6393370138229654003?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6393370138229654003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6393370138229654003' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6393370138229654003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6393370138229654003'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2009/11/mediabox-finally-supports-upnp.html' title='MediaBox finally supports UPnP MediaRenderer Output'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-4146460484054898944</id><published>2009-10-11T23:20:00.000-07:00</published><updated>2009-10-11T23:24:46.864-07:00</updated><title type='text'>Update on the N900 FM Radio</title><content type='html'>Success! We can receive FM radio on the N900 now.&lt;br /&gt;&lt;br /&gt;Controlling the FM radio in the N900 is tricky stuff. At first, the hardware is disabled for power saving reasons. Bluetooth has to be powered up, the I2C communication bus has to be powered up, and only then, the FM radio driver will actually load.&lt;br /&gt;&lt;br /&gt;I have created a package &lt;b&gt;n900-fmrx-enabler&lt;/b&gt; for this task. The FMRX-Enabler is a D-Bus service that takes care about enabling the FM radio hardware on request and powering it down again when no application are using it.&lt;br /&gt;&lt;br /&gt;After the driver has been loaded by the FMRX-Enabler, the FM radio provides two interfaces for controlling. A classic Video4Linux2 interface featuring only the basic stuff such as setting the frequency and muting/unmuting it, and a sysfs interface where you can read and write into file-like objects to control the radio.&lt;br /&gt;&lt;br /&gt;Another tricky part is getting to hear sound from the radio. Unlike the N800, the FM radio doesn't output to the speakers directly. You have to capture the sound from the PGA line and play it back. A simple GStreamer pipeline such as&lt;br /&gt;&lt;pre&gt;gst-launch pulsesrc ! pulsesink&lt;/pre&gt;&lt;br /&gt;does the job, after enabling PGA line2 and PGA capturing in the mixer.&lt;br /&gt;&lt;br /&gt;I have uploaded an application package &lt;b&gt;fmradio&lt;/b&gt; for the FM radio to extras-testing. Testers are encouraged to test this, too.&lt;br /&gt;&lt;br /&gt;One drawback with the FM radio is that due to constant capturing and replaying, the FM radio is kinda demanding on the battery. There's no safe way around that. The unsafe way around that can damage your speakers, so capturing/replaying is a must.&lt;br /&gt;&lt;br /&gt;I'm gonna put up some developer documentation for the FM radio stuff.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-4146460484054898944?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/4146460484054898944/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=4146460484054898944' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4146460484054898944'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4146460484054898944'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2009/10/update-on-n900-fm-radio.html' title='Update on the N900 FM Radio'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-1949811557885588855</id><published>2009-10-10T07:59:00.000-07:00</published><updated>2009-10-10T08:22:56.033-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fremantle'/><category scheme='http://www.blogger.com/atom/ns#' term='fmradio'/><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox on the N900</title><content type='html'>The popular NIT media center &lt;a href="http://maemo.org/downloads/product/OS2008/mediabox/"&gt;MediaBox&lt;/a&gt; is coming to the N900. Thanks to lots of user feedback the UI has been further simplified and optmized and of course "fremantlized". :)&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/Screenshot-20091010-154543.png" style="float: left; margin-right: 2em;"/&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/Screenshot-20091010-154820.png"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/Screenshot-20091010-154954.png"/&gt;&lt;br /&gt;&lt;br /&gt;The upcoming release for the N900 will be the first version to provide suport for portrait and landscape orientations. Browsing your music feels great in portrait mode!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/Screenshot-20091010-153928.png" style="float: left; margin-right: 2em;"/&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/Screenshot-20091010-154407.png"/&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/Screenshot-20091010-154320.png"/&gt;&lt;br /&gt;&lt;br /&gt;MediaBox will support playing FM radio on the N900 as well (the N900 device specs don't list the FM radio, but there is one, on the &lt;a href="http://www.alldatasheet.com/datasheet-pdf/pdf/175092/BOARDCOM/BCM2048.html"&gt;Bluetooth chip&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;Media indexing is now driven by tracker, the native indexer of the Fremantle OS. And if you don't like indexing you can of course browse the file system as before.&lt;br /&gt;&lt;br /&gt;When you start MediaBox you will see the dashboard. This is where you can access your playlists, browse the device and your UPnP/DLNA servers, and access your indexed music, videos, and pictures. You can even put shortcuts to your stuff onto the dashboard for quick access, e.g. songs or albums you like, or folders with photos. No matter how deep within folders and subfolders you are, the dashboard is only one finger-tap away.&lt;br /&gt;&lt;br /&gt;Another new feature is the folder history where you can see the folders where you recently were and go back.&lt;br /&gt;&lt;br /&gt;If you have &lt;a href="http://tuomas.kulve.fi/blog/2009/10/04/ogg-support-in-fremantle-extras/"&gt;Tuomas Kulve's ogg-support&lt;/a&gt; installed, you will also be able to play Ogg Vorbis and FLAC music.&lt;br /&gt;&lt;br /&gt;MediaBox still uses its own lightweight UPnP subsystem instead of gupnp that comes with Fremantle. My experience shows that the UPnP subsystem of MediaBox is still more compatible with the servers out there than gupnp is right now.&lt;br /&gt;&lt;br /&gt;MediaBox is currently in the extras-devel repository for Fremantle and it's marked as an incomplete beta version. I expect to upload the full release later this month, after which it moves on to the extras-testing repository for community Q&amp;amp;A. Then it should only be a matter of time until it will appear in the extras repository.&lt;br /&gt;The beta version in extras-devel is now updated frequently.&lt;br /&gt;&lt;br /&gt;The new version will also be available for Diablo after the release for Fremantle. Portrait mode will be supported on Diablo, too, if you have rotation-support installed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-1949811557885588855?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/1949811557885588855/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=1949811557885588855' title='13 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/1949811557885588855'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/1949811557885588855'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2009/10/mediabox-on-n900.html' title='MediaBox on the N900'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>13</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-3354597545217070335</id><published>2009-06-04T11:33:00.000-07:00</published><updated>2009-06-04T11:58:03.099-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox Media Center 0.96.5 with New Features</title><content type='html'>After several weeks of development, I have now released version 0.96.5 of &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox Media Center.&lt;/a&gt; Lots of user feedback helped shape the new version.&lt;br /&gt;&lt;br /&gt;Most notably the user interface looks a bit different now as it has been tidied up for a more consistent look &amp; feel and much better performance with reduced memory footprint.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Quick Scrolling and Search&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The item lists have a thumbable scrollbar and a index letter display helps you find your way while quick scrolling.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/mediabox-search.png" alt="Finding stuff in long lists"&gt;&lt;br /&gt;&lt;br /&gt;While searching for an item with the onscreen-keyboard or a hardware-keyboard, you can skip to the previous and next search results by pressing up or down on the D-pad.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Falling Asleep and Waking Up with Music&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;If you like to fall asleep with music or want to wake up with music, you will love the new sleep timer. Simply set the time when MediaBox should start or stop playing in the preferences viewer and select the media you want to have played. The sleep timer simulates PLAY and STOP actions so it can be used with virtually any media. For instance, you can have MediaBox wake you up with FM radio on the N800. With this feature, my N800 finally earned a steady place next to my bed.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/mediabox-zzz.png" alt="The new sleep timer"&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Timed Karaoke Lyrics&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Do you like lyrics? MediaBox displays song lyrics in &lt;a href="http://en.wikipedia.org/wiki/LRC_(file_format)"&gt;LRC format&lt;/a&gt;. LRC lyrics files need to match the file name of the song file, e.g. "Song.mp3" and "Song.lrc".&lt;br /&gt;LRC is a popular file format in China, and you can find lots &lt;a href="http://www.qqlrc.com/"&gt;of&lt;/a&gt; &lt;a href="http://lrcdb.org/"&gt;lyrics&lt;/a&gt; &lt;a href="http://winamplyrics.hit.bg/"&gt;on&lt;/a&gt; &lt;a href="http://powerlrc.atspace.com/"&gt;various&lt;/a&gt; &lt;a href="http://www.51lrcgc.com/"&gt;lyrics&lt;/a&gt; &lt;a href="http://lrc.bzmtv.com/"&gt;servers.&lt;/a&gt; Since LRC files are text files, you can also create them yourself.&lt;br /&gt;I plan on making a LRC editor for MediaBox in the near future, too.&lt;br /&gt;&lt;br /&gt;As always, MediaBox is available for N800 and N810 in the maemo-extras repository.&lt;br /&gt;Nokia 770 users can retrieve MediaBox from the SVN repository or manually pull the&lt;br /&gt;deb packages from the &lt;a href="http://repository.maemo.org/extras/pool/chinook/free/m/"&gt;Chinook maemo-extras repository server.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;A full list of what's new can be found in the &lt;a href="http://mediabox.garage.maemo.org/data/release-notes"&gt;release notes.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-3354597545217070335?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/3354597545217070335/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=3354597545217070335' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3354597545217070335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3354597545217070335'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2009/06/mediabox-media-center-0965-with-new.html' title='MediaBox Media Center 0.96.5 with New Features'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-685129881245056813</id><published>2009-05-19T13:06:00.000-07:00</published><updated>2009-05-20T00:50:41.428-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Mer'/><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><title type='text'>Mer plays videos with MediaBox</title><content type='html'>&lt;img src="http://wiki.maemo.org/images/a/ad/Mer-logo.png"/&gt;&lt;br /&gt;&lt;br /&gt;Another milestone has been reached in the &lt;a href="http://wiki.maemo.org/Mer"&gt;Mer project&lt;/a&gt; on its way to eventually replace Maemo on the N8x0 devices. It will be possible to play videos with Mer 0.13. The current SVN version of &lt;a href="http://mediabox.garage.maemo.org/"&gt;MediaBox&lt;/a&gt; supports Mer and uses the libxine backend for video playback.&lt;br /&gt;&lt;br /&gt;After installing libxine and &lt;a href="https://garage.maemo.org/scm/?group_id=355"&gt;MediaBox SVN version&lt;/a&gt; on Mer, you will need to install the D-Bus-Xine service. D-Bus-Xine is a simple D-Bus service for embedding libxine in applications. It was originally written for enabling DVD playback&lt;br /&gt;with MediaBox on PCs.&lt;br /&gt;&lt;br /&gt;A version compiled for Mer-ARMEL can be found &lt;a href="https://garage.maemo.org/frs/download.php/6105/dbus-xine-mer.tar.gz"&gt;here&lt;/a&gt;. If you want to compile D-Bus-Xine yourself, you can also download its &lt;a href="https://garage.maemo.org/frs/download.php/6040/dbus-xine-0.1.tar.gz"&gt;source code&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I haven't built deb packages for D-Bus-Xine yet, so you'll have to manually extract the tarball in the root directory (/) on Mer.&lt;br /&gt;&lt;br /&gt;After having started MediaBox, you should enter its preferences view&lt;br /&gt;and set the media backends to Xine for all filetypes that you want to be able play.&lt;br /&gt;However, there is no sound support yet in Mer 0.13, so don't expect too much.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;EDIT: see the comments for how to get sound&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-685129881245056813?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/685129881245056813/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=685129881245056813' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/685129881245056813'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/685129881245056813'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2009/05/mer-plays-videos-with-mediabox.html' title='Mer plays videos with MediaBox'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-1598604404871448844</id><published>2009-03-06T13:46:00.001-08:00</published><updated>2009-03-06T13:48:14.574-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox Media Center 0.96.4 released</title><content type='html'>&lt;b&gt;Hilights of the new &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox&lt;/a&gt; release:&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The overall performance of the user interface has been improved again and the lists now feature transition effects and remember the position where you where standing in the parent folder when you go back. This is especially handy when browsing UPnP/DLNA servers.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/mediabox-video.png"&gt;&lt;br /&gt;&lt;br /&gt;The mplayer backend has been optimized and mplayer now plays videos generally a lot smoother than before. Playback of higher resolution videos (e.g. 640 x 480) is now also smoother by automatic downscaling.&lt;br /&gt;&lt;br /&gt;Media indexing has been improved and runs faster. And if you don't like indexing of ID tags, you can always browse the filesystem to play your media, of course.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/mediabox-browse-by-genre.png"&gt;&lt;br /&gt;&lt;br /&gt;Music can now also be browsed by genre, additional to browsing by artist, by album, and by folder.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/mediabox-display-light.png"&gt;&lt;br /&gt;&lt;br /&gt;MediaBox can now be told to keep the display lit while playing media. Stop playing, and the device may enter powersaving mode again.&lt;br /&gt;&lt;br /&gt;If you use the Nokia headset that came with the device, you can now use the headset button to pause/play and skip to the next or previous track. Do this by pushing the button once, twice, or three times, respectively. Do not press the button to quickly because the headset is bad at detecting consecutive actions, though. Half a second between clicks is just right.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-1598604404871448844?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/1598604404871448844/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=1598604404871448844' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/1598604404871448844'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/1598604404871448844'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2009/03/mediabox-media-center-0964-released.html' title='MediaBox Media Center 0.96.4 released'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-7649458909156937087</id><published>2009-01-22T09:13:00.000-08:00</published><updated>2009-01-22T09:18:38.258-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Extending MediaBox: Creating a Simple Component</title><content type='html'>&lt;b&gt;Note:&lt;/b&gt; If you're reading this article in a feed aggregator like planet.maemo.org, it might be truncated. Please click the link to the original feed to read the full article.&lt;br /&gt;&lt;br /&gt;Get your text editor ready because this time I'm showing you the basics of plugin development for &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pycage.blogspot.com/2009/01/extending-mediabox-component-system.html"&gt;Last time,&lt;/a&gt; I have explained the component system of MediaBox. If you haven't read &lt;a href="http://pycage.blogspot.com/2009/01/extending-mediabox-component-system.html"&gt;this article&lt;/a&gt; yet, please do so as it will help you understand what's going on.&lt;br /&gt;Now we're going to write a simple plugin that displays a short notification when the application has started.&lt;br /&gt;&lt;br /&gt;As I have told you before, a plugin is a directory with some components in it. MediaBox looks for the plugin directories in its &lt;tt&gt;&lt;b&gt;components&lt;/b&gt;&lt;/tt&gt; directory. So we put a new directory in there with two empty files &lt;tt&gt;&lt;b&gt;__init__.py&lt;/b&gt;&lt;/tt&gt; and &lt;tt&gt;&lt;b&gt;StartupNotifier.py&lt;/b&gt;&lt;/tt&gt; in it:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  mediabox&lt;br /&gt;    |&lt;br /&gt;    +-- components&lt;br /&gt;          |&lt;br /&gt;          +-- my_first_plugin&lt;br /&gt;                |&lt;br /&gt;                +-- __init__.py&lt;br /&gt;                |&lt;br /&gt;                +-- StartupNotifier.py&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Every plugin needs the &lt;tt&gt;&lt;b&gt;__init__.py&lt;/b&gt;&lt;/tt&gt; file. This is the place where components are loaded and messages are defined. In this example, we will only load our StartupNotifier component, though.&lt;br /&gt;&lt;br /&gt;Put the following code into &lt;tt&gt;&lt;b&gt;__init__.py&lt;/b&gt;&lt;/tt&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  def get_classes():&lt;br /&gt;  &lt;br /&gt;      from StartupNotifier import StartupNotifier&lt;br /&gt;      return [StartupNotifier]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The function &lt;tt&gt;&lt;b&gt;get_classes&lt;/b&gt;&lt;/tt&gt; is called by MediaBox to load the components. This function must return a list of the classes (not instantiated objects) of your components.&lt;br /&gt;&lt;br /&gt;Now we are going to fill &lt;tt&gt;&lt;b&gt;StartupNotifier.py&lt;/b&gt;&lt;/tt&gt; with life. It is a simple component, so we derive StartupNotifier from the &lt;tt&gt;&lt;b&gt;Component&lt;/b&gt;&lt;/tt&gt; baseclass:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  from com import Component, msgs&lt;br /&gt;  &lt;br /&gt;  class StartupNotifier(Component):&lt;br /&gt;  &lt;br /&gt;      def __init__(self):&lt;br /&gt;      &lt;br /&gt;          Component.__init__(self)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;      def handle_message(self, msg, *args):&lt;br /&gt;      &lt;br /&gt;          if (msg == msgs.CORE_EV_APP_STARTED):&lt;br /&gt;              self.call_service(msgs.NOTIFY_SVC_SHOW_INFO,&lt;br /&gt;                                "Application Startup Complete")&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That's all. This simple form of a component is called a &lt;b&gt;mediator&lt;/b&gt; component, because it just listens for and emits messages. When a component wants to listen to the message bus, it simply overrides the method &lt;tt&gt;&lt;b&gt;handle_message&lt;/b&gt;&lt;/tt&gt; and checks for the message types it's interested in. The &lt;tt&gt;&lt;b&gt;call_service&lt;/b&gt;&lt;/tt&gt; method on the other hand sends a service call to the message bus.&lt;br /&gt;&lt;br /&gt;When you now start MediaBox, you will be greeted by your new plugin.&lt;br /&gt;&lt;br /&gt;Next time will be a bit more theoretical again. Then I'll talk about the different types of components and what they do in MediaBox.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-7649458909156937087?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/7649458909156937087/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=7649458909156937087' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7649458909156937087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7649458909156937087'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2009/01/extending-mediabox-creating-simple.html' title='Extending MediaBox: Creating a Simple Component'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-4456965330957412736</id><published>2009-01-17T01:42:00.000-08:00</published><updated>2009-01-17T01:46:47.092-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Extending MediaBox: The Component System Explained</title><content type='html'>I am going to write a bit about extending &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox&lt;/a&gt; with new plugins. Let's start with the basics of the component system first. I will show you some code examples in a later article.&lt;br /&gt;&lt;br /&gt;Since version 0.96 MediaBox uses a component system for extensions. It is essential to understand this system when implementing plugins.&lt;br /&gt;&lt;br /&gt;Components in MediaBox are independent objects connected to a message bus, where they can send messages or listen to messages from other components. Every component gets connected to the bus automatically when created. You don't have to take care about this step.&lt;br /&gt;&lt;br /&gt;A plugin is a collection of one or more components grouped into a directory. The YouTube plugin, for instance, consists of a YouTube device component and a component for the preferences dialog.&lt;br /&gt;&lt;br /&gt;Plugins can also add new messages to the vocabulary of messages that can be sent across the message bus.&lt;br /&gt;&lt;br /&gt;Here's a little ASCII-art to summarize this all.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;           consist of                 connect to&lt;br /&gt;  Plugins -------------&gt; Components ---------------&gt; Message Bus&lt;br /&gt;     |                    |      |                        |&lt;br /&gt;     |               emit |      | listen for             |&lt;br /&gt;     |                    |      |                        |&lt;br /&gt;     |                    |      |                        |&lt;br /&gt;     |     define         v      v          transports    |&lt;br /&gt;     +------------------&gt; Messages &lt;----------------------+&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Let's take a closer look at the message stuff now.&lt;br /&gt;As explained above, the vocabulary of messages that can be sent across the message bus is defined by the plugins. Most of the messages are defined by the "core" plugin (which is not really a plugin but contains many of the core components of MediaBox).&lt;br /&gt;&lt;br /&gt;Some messages are of type &lt;b&gt;event&lt;/b&gt;. They are used to notify other components about something that has just happened, e.g. that a new UPnP device has been discovered.&lt;br /&gt;Some messages are of type &lt;b&gt;action&lt;/b&gt;. They are used by components to trigger actions in other components.&lt;br /&gt;There are also messages of type &lt;b&gt;service call&lt;/b&gt;. While events and messages may be handled by any component that listents for these messages, a service call is only sent to one component and not visible to others. The message bus remembers which component can handle a particular service call and will route all subsequent calls for the same service to the same component again.&lt;br /&gt;&lt;br /&gt;To sum it up with ASCII-art:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;                              +------&gt; Event&lt;br /&gt;            is either of type |&lt;br /&gt;   Message -------------------+------&gt; Action&lt;br /&gt;                              |&lt;br /&gt;                              +------&gt; Service Call&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;When a plugin defines a new message, it has to give it a name. The name is all uppercase and consists of a domain name, the message type, and some descriptive name.&lt;br /&gt;The domain name helps to avoid name clashes of messages defined by different plugins. It should be the name of your plugin.&lt;br /&gt;The message type tells programmers about the type of message. It is one of &lt;b&gt;EV&lt;/b&gt; for events, &lt;b&gt;ACT&lt;/b&gt; for actions, and &lt;b&gt;SVC&lt;/b&gt; for service calls.&lt;br /&gt;&lt;br /&gt;These are some examples of actual messages defined by components belonging to MediaBox:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;tt&gt;CORE_EV_APP_IDLE_BEGIN&lt;/tt&gt;  (event: MediaBox is announcing to go idle in order to save battery)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;tt&gt;CORE_EV_APP_IDLE_END&lt;/tt&gt; (event: MediaBox is announcing to wake up from idle state)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;tt&gt;NOTIFY_SVC_SHOW_MESSAGE&lt;/tt&gt;  (service call: show a short message)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;tt&gt;HWKEY_EV_UP&lt;/tt&gt;  (event: user pressed up on the d-pad)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;tt&gt;HWKEY_EV_DOWN&lt;/tt&gt;  (event: user pressed down on the d-pad)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;tt&gt;HWKEY_EV_LEFT&lt;/tt&gt;  (event: user pressed left on the d-pad)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;tt&gt;HWKEY_EV_RIGHT&lt;/tt&gt;  (event: user pressed right on the d-pad)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;tt&gt;UI_ACT_SELECT_VIEWER&lt;/tt&gt; (action: select a viewer)&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Some messages take parameters. &lt;tt&gt;NOTIFY_SVC_SHOW_MESSAGE&lt;/tt&gt;, for instance, takes as parameter the text of the message to show. Some service calls even have a return value.&lt;br /&gt;&lt;br /&gt;These are the basics of the component system. Next time I will show you how components are integrated in MediaBox, and how to create a simple plugin.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-4456965330957412736?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/4456965330957412736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=4456965330957412736' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4456965330957412736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4456965330957412736'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2009/01/extending-mediabox-component-system.html' title='Extending MediaBox: The Component System Explained'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-7819924561692410754</id><published>2009-01-10T06:43:00.000-08:00</published><updated>2009-01-10T06:49:11.925-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Making Themes for MediaBox</title><content type='html'>Today I'm showing you how to make new themes for &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Every theme is a subdirectory in &lt;tt&gt;/usr/lib/mediabox/theme&lt;/tt&gt; or in &lt;tt&gt;~/.mediabox/themes&lt;/tt&gt; (MediaBox 0.96.2 or higher).&lt;br /&gt;You can test your themes in &lt;tt&gt;~/.mediabox/themes&lt;/tt&gt; and when distributing the theme as an installer package, it will install into &lt;tt&gt;/usr/lib/mediabox/theme&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;There are a two files that are absolutely necessary for a theme to work, and every theme must include them.&lt;br /&gt;&lt;br /&gt;The one is &lt;tt&gt;&lt;b&gt;PREVIEW.png&lt;/b&gt;&lt;/tt&gt;, which is a PNG image of size &lt;b&gt;112 x 67 pixels&lt;/b&gt;, showing a preview image of your theme. This is the icon that the users will see in the theme selector.&lt;br /&gt;&lt;br /&gt;The other file that is necessary is a simple text file called &lt;tt&gt;&lt;b&gt;info&lt;/b&gt;&lt;/tt&gt;. This file describes the theme and looks like this:&lt;br /&gt;&lt;pre&gt;name:        MyTheme&lt;br /&gt;description: My example theme for MediaBox&lt;br /&gt;author:      Your Name&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/mytheme.png"&gt;&lt;br /&gt;&lt;br /&gt;Of course, with only these two files, your theme will be pretty empty. Actually, MediaBox will load everything that it doesn't find in the current theme from the &lt;b&gt;default&lt;/b&gt; theme. Thus, every theme inherits from &lt;b&gt;default&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;When you look into the directory of the &lt;b&gt;default&lt;/b&gt; theme (&lt;tt&gt;/usr/lib/mediabox/theme/default&lt;/tt&gt;), you will see a lot of images in PNG format. These are the theme elements. Your theme can override any of these images by providing a PNG image of the same name and the same size. I have to stress that it is &lt;b&gt;absolutely necessary&lt;/b&gt; that the theme elements provided by your theme are exactly the same size as the ones in the &lt;b&gt;default&lt;/b&gt; theme! For instance, the element &lt;b&gt;mb_panel.png&lt;/b&gt; is of size 64 x 64 pixels. If your theme provides &lt;b&gt;mb_panel.png&lt;/b&gt;, it must be of size 64 x 64 pixels, too.&lt;br /&gt;&lt;br /&gt;A theme can have a bunch of .def files, which are text files containing font and color definitions. The name and number of the .def files is not important. Below are example entries of a .def file:&lt;br /&gt;&lt;pre&gt;#&lt;br /&gt;# Virtual Keyboard&lt;br /&gt;#&lt;br /&gt;color_mb_vkb_background: #000000&lt;br /&gt;color_mb_vkb_text: #dddddd&lt;br /&gt;font_mb_vkb: Nokia Sans Cn bold 20&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Empty lines and lines starting with a &lt;b&gt;#&lt;/b&gt; symbol are ignored by MediaBox and can be used for adding comments and making the file better readable.&lt;br /&gt;The other lines contain key-value pairs, where key and value are separated by a &lt;b&gt;:&lt;/b&gt; symbol. If the key name starts with &lt;b&gt;color_&lt;/b&gt;, then MediaBox treats it as a color definition. If the key name starts with &lt;b&gt;font_&lt;/b&gt;, then MediaBox treats it as a font definition.&lt;br /&gt;&lt;br /&gt;Color values are given in hexadecimal RGB (6 digits) or RGBA (8 digits) notation, prepended by a &lt;b&gt;#&lt;/b&gt; symbol. Most color keys take RGB values only.&lt;br /&gt;&lt;br /&gt;Font definitions are given in Pango syntax, containing the font name, optionally a style (&lt;b&gt;bold&lt;/b&gt; or &lt;b&gt;italic&lt;/b&gt;), and the font size in points. Although the Nokia internet tablets have a screen resolution of 225 dpi, the system renders fonts with 96 dpi.&lt;br /&gt;&lt;br /&gt;Any keys defined in the .def files of the &lt;b&gt;default&lt;/b&gt; theme can be overriden by your theme in .def files.&lt;br /&gt;&lt;br /&gt;Once your theme is ready, you may want to distribute it as a installer package for the application manager. I have created a &lt;a href="http://mediabox.garage.maemo.org/data/mediabox-extension-builder-0.1.tar.gz"&gt;build script&lt;/a&gt; for this task. If you have upload permission for the maemo-extras repository, you can then upload your theme with the &lt;a href="https://garage.maemo.org/extras-assistant/index.php"&gt;Maemo Extras Assistant web site&lt;/a&gt; and promote it to the extras repository, so that other users can enjoy it, too.&lt;br /&gt;&lt;br /&gt;Theme packages always depend on &lt;b&gt;mediabox-compat-theme&lt;/b&gt; with a certain version number. For MediaBox 0.96 and some following releases, this version number will be &lt;b&gt;1.0&lt;/b&gt;. So as long as MediaBox provides &lt;b&gt;mediabox-compat-theme, version 1.0&lt;/b&gt;, your theme will remain compatible. At a later point some minor changes or extensions to your theme may be necessary to fully restore compatibility again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-7819924561692410754?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/7819924561692410754/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=7819924561692410754' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7819924561692410754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7819924561692410754'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2009/01/making-themes-for-mediabox.html' title='Making Themes for MediaBox'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-4865025644757398852</id><published>2008-12-28T06:23:00.000-08:00</published><updated>2008-12-28T06:28:13.883-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>A New Version of MediaBox Media Center</title><content type='html'>Finally, after several months of work I have now released &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox&lt;/a&gt; 0.96, which was really overdue... ;)&lt;br /&gt;&lt;br /&gt;A lot of people were very helpful and regularly tried out the code fresh from SVN during the last few months and provided lots of feedback. Thanks to you all!&lt;br /&gt;Special thanks also go to Hugo Baldasano for his work on asynchronous networking and for good help with UPnP event handling!&lt;br /&gt;&lt;br /&gt;The long wait is now over and MediaBox 0.96 is available in the maemo-extras repository for Chinook and Diablo. The .deb packages for users of OS 2006 (yes, that's Nokia 770) and OS 2007 will be made available soon on the &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox homepage.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;UPnP Streaming&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/upnp.png"&gt;&lt;br /&gt;&lt;br /&gt;UPnP/DLNA is a great technology for streaming music, videos, and photos to your&lt;br /&gt;tablet. Simply put an UPnP media server in your home network and MediaBox&lt;br /&gt;will discover it automatically for browsing and streaming its contents.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Playlists and media bookmarks&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Playlists can be created and edited and are saved automatically. You can reorder the items at any time, and you can mix audio, videos, and images in a playlist.&lt;br /&gt;&lt;br /&gt;You can now also set media bookmarks in any (seekable) file to mark the best spots and to find the place where you stopped listening to your audio book or podcast the last time. Simply click on the star-button to set a media bookmark for the current position.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Shuffle and Repeat&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;I don't think I need to say much about these features anymore, except that MediaBox can do it now, too.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Car-Mode&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/songinfo.png"&gt;&lt;br /&gt;Car-mode is what I call the fullscreen mode of the music player because it's very handy to use while driving a car. Big buttons for previous, next, and play/pause, along with big cover-art and a big title label make MediaBox perfect for this situation. I use this mode frequently with a shuffled playlist when driving.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Themes&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/themes.png"&gt;&lt;br /&gt;&lt;br /&gt;It seems like every media center these days needs to be themable. MediaBox follows this fad so you can give it a new skin by downloading themes from the maemo-extras repository.&lt;br /&gt;The first extra theme available is called "DarkBox", and hopefully others and betters will follow. I'm going to give more details on theming and building theme packages later. It's really easy, so get your &lt;a href="http://www.gimp.org"&gt;GIMP&lt;/a&gt; or Photoshop ready! :)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Plugins&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/plugins.png"&gt;&lt;br /&gt;&lt;br /&gt;MediaBox can be extended with plugins, and I'm going to cover plugin development later. Some plugins are already available for download:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;a FM radio (for the N800),&lt;/li&gt;&lt;br /&gt;&lt;li&gt;a YouTube browser&lt;/li&gt;&lt;br /&gt;&lt;li&gt;and internet radio with SHOUTcast directory.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-4865025644757398852?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/4865025644757398852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=4865025644757398852' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4865025644757398852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4865025644757398852'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/12/new-version-of-mediabox-media-center.html' title='A New Version of MediaBox Media Center'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-5172114797809326884</id><published>2008-08-18T23:03:00.000-07:00</published><updated>2008-08-18T23:17:57.322-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pan'/><category scheme='http://www.blogger.com/atom/ns#' term='n810'/><category scheme='http://www.blogger.com/atom/ns#' term='n800'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Bluetooth-PAN fixed for Diablo</title><content type='html'>Yesterday I uploaded version 1.0.1 of &lt;a href="http://garage.maemo.org/projects/maemo-pan"&gt;maemo-pan&lt;/a&gt; to the Diablo extras repository. This new version finally fixes Bluetooth-PAN on Diablo.&lt;br /&gt;&lt;img align="right" src="http://maemo-pan.garage.maemo.org/img/maemo-pan.jpg"&gt;&lt;br /&gt;Nokia recently uploaded a fix for handling DUMMY network connections in Diablo, which is needed for getting Bluetooth-PAN integrated into the connection dialog. If you install maemo-pan 1.0.1, the dummy-network package from Nokia will be installed as a dependency automatically.&lt;br /&gt;&lt;br /&gt;Nokia's networking fix uses a hardcoded name for dummy connections, so you'll have to connect to "Dummy network" instead of "Bluetooth-PAN" (as it was on Chinook).&lt;br /&gt;&lt;br /&gt;Apart from fixing the networking issue on Diablo, maemo-pan 1.0.1 is the same as maemo-pan 1.0. New features will be added in a later release.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;maemo-pan 1.0.1 is only interesting to Diablo users. If you're running Chinook, maemo-pan 1.0 is fine. There is no version 1.0.1 in the Chinook extras repository because of that.&lt;/b&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-5172114797809326884?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/5172114797809326884/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=5172114797809326884' title='36 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/5172114797809326884'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/5172114797809326884'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/08/bluetooth-pan-fixed-for-diablo.html' title='Bluetooth-PAN fixed for Diablo'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>36</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-5990425489275554582</id><published>2008-06-12T07:32:00.000-07:00</published><updated>2008-06-12T09:21:29.505-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Tablet Python #4 - Sources of Memory Leaks</title><content type='html'>Marius Gedminas blogged an &lt;a href="http://mg.pov.lt/blog/hunting-python-memleaks"&gt;interesting article&lt;/a&gt; about memory leaks in Python. On the tablet you don't have much memory available, so memory leaks will annoy the users very quickly.&lt;br /&gt;&lt;br /&gt;Python is a garbage-collected language (like Java or C#), so memory leaking is normally not an issue, but there are situations where you should be careful.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Bindings to C libraries&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Many modules are bindings to C or C++ libraries, and memory leaking is unfortunately quite common in those languages, esp. in complex libraries. A hot candidate for memory leaking on the maemo platform are the GdkPixbuf operations.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;GdkPixbufs get not automatically garbage collected by Python. Always use &lt;tt&gt;del&lt;/tt&gt; on a GdkPixbuf explicitly when you don't need it any longer.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;The __del__ destructor method&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Classes can have some sort of destructor method in Python.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  def __del__(self):&lt;br /&gt;  &lt;br /&gt;      ...&lt;br /&gt;&lt;/pre&gt;   &lt;br /&gt;This is called when you use &lt;tt&gt;del&lt;/tt&gt; on the last reference you are holding. But be very careful! Classes overriding this destructor method are not eligible for breaking reference cycles by the garbage collector anymore! They have to be released manually. It's normally not necessary to override the &lt;tt&gt;__del__&lt;/tt&gt; method, so you better stay away from it.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;Always take special care when dealing with classes overriding the &lt;tt&gt;__del__&lt;/tt&gt; method. Cyclic references involving such classes cannot be resolved by the garbage collector automatically.&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-5990425489275554582?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/5990425489275554582/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=5990425489275554582' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/5990425489275554582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/5990425489275554582'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/06/tablet-python-4-sources-of-memory-leaks.html' title='Tablet Python #4 - Sources of Memory Leaks'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6108298499424997669</id><published>2008-05-09T12:06:00.000-07:00</published><updated>2008-05-09T12:15:03.431-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox 0.95 released</title><content type='html'>The new version 0.95 of the &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox Media Center&lt;/a&gt; is finally available. Thanks to all users who reported bugs and made suggestions for new features. Thanks to lot of feedback, many things have improved since the last release.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/playlist.png"&gt;&lt;br /&gt;&lt;br /&gt;With the new MediaBox you can finally compose playlists and rearrange them on the fly. If your internet tablet has a keyboard connected, you can also search for tracks in long playlists or albums by just typing a few letters of the title.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/search.png"&gt;&lt;br /&gt;&lt;br /&gt;The new version has an improved easy and finger-friendly user interface and reduces memory consumption, especially when dealing with large collections of media.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/menu.png"&gt;&lt;br /&gt;&lt;br /&gt;You can view the release notes at &lt;a href="http://mediabox.garage.maemo.org/data/release-notes"&gt;http://mediabox.garage.maemo.org/data/release-notes.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MediaBox 0.95 is available in the Maemo Extras repository. Click the arrow below for quick install.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mediabox.garage.maemo.org/data/mediabox.install"&gt;&lt;img src="http://mediabox.garage.maemo.org/images/install.png" border="0"&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Have fun!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6108298499424997669?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6108298499424997669/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6108298499424997669' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6108298499424997669'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6108298499424997669'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/05/mediabox-095-released.html' title='MediaBox 0.95 released'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-7312248510798287312</id><published>2008-05-02T13:10:00.000-07:00</published><updated>2008-05-02T13:15:22.433-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox Walkthrough: Search as You Type</title><content type='html'>Today I'm showing you another new feature of the upcoming version 0.95 of the MediaBox Media Center. Search-as-You-Type works on any internet tablet with a keyboard, either built-in or connected via Bluetooth or USB.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Find a track&lt;/b&gt;&lt;br /&gt;If you have many tracks in an album or the playlist and want to quickly scroll to a particular track, just type some letters from its title.&lt;br /&gt;&lt;br /&gt;While typing, MediaBox searches your tracks for a match and scrolls the list to bring the track into view. You can see your search term displayed in the title bar while typing.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/search.png"&gt;&lt;br /&gt;&lt;br /&gt;You don't have to type the full title as it's sufficient to type just a few subsequent letters from anywhere in the title.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Make a new search&lt;/b&gt;&lt;br /&gt;The search text field clears automatically after a few seconds.&lt;br /&gt;&lt;br /&gt;In order to make a new search, wait for the search text to disappear in the title bar, and enter your new search term.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-7312248510798287312?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/7312248510798287312/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=7312248510798287312' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7312248510798287312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7312248510798287312'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/05/mediabox-walkthrough-search-as-you-type.html' title='MediaBox Walkthrough: Search as You Type'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-8571452438220962198</id><published>2008-05-01T09:07:00.000-07:00</published><updated>2008-05-01T09:27:26.392-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Mediabox Walkthrough: Playlist Editing</title><content type='html'>In a few days the new version 0.95 of the MediaBox Media Center will be released for the Nokia internet tablets. Let me introduce a few of the new features until then. Today I'm showing you a bit about the new playlist feature.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Enter the music viewer&lt;/b&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/menu.png" align="right"&gt;&lt;br /&gt;You can edit the playlist in the music viewer. To get there, press on the tiny arrow button in the bottom left corner once.&lt;br /&gt;&lt;br /&gt;The screen will slide up to reveal the viewer menu where you can switch between the different viewers of MediaBox.&lt;br /&gt;&lt;br /&gt;Tap on the music viewer icon to select it. You're in the music viewer now.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Choose an album&lt;/b&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/albums.png" align="left"&gt;&lt;br /&gt;On the left-hand side of the screen you can see a strip of images representing your album folders which MediaBox has found on your device.&lt;br /&gt;&lt;br /&gt;You can drag the strip with your thumb to scroll through it.&lt;br /&gt;&lt;br /&gt;When you've found the album you're looking for, press on the little arrow button on the album image to open it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Add tracks to the playlist&lt;/b&gt;&lt;br /&gt;After opening an album, you can see all its tracks on the screen. Again, you can use your thumb to scroll through this list.&lt;br /&gt;&lt;br /&gt;The top item of this list represents the album itself and shows you the album cover (if available) and the number of tracks in the album. The other items represent the tracks in the album.&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/item-menu.png" align="right"&gt;&lt;br /&gt;On each track there is a menu button to the right. Tap on it to reveal the track menu, where you can choose between &lt;b&gt;[play]&lt;/b&gt; and &lt;b&gt;[add to playlist]&lt;/b&gt;. The album item does not (yet) have a menu button. Instead it has the &lt;b&gt;[add to playlist]&lt;/b&gt; button there.&lt;br /&gt;&lt;br /&gt;That way you can either add particular tracks or complete albums at once to the playlist.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Switch to the playlist view&lt;/b&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/playlist-button.png" align="right"&gt;&lt;br /&gt;There is a button in the toolbar where you can switch between album view and playlist view. Press it once to get to the playlist view.&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/playlist.png"&gt;&lt;br /&gt;The playlist view shows all your playlist items in a list. Use your thumb to scroll through this list.&lt;br /&gt;&lt;br /&gt;The album cover on the left side of each playlist item shows you where this particular track comes from.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Play or remove tracks&lt;/b&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/playlist-menu.png" align="right"&gt;&lt;br /&gt;Each playlist item has a menu item on the right-hand side.&lt;br /&gt;Press it once to reveal the item menu, where you will find buttons for &lt;b&gt;[play]&lt;/b&gt;, &lt;b&gt;[remove from playlist]&lt;/b&gt;, &lt;b&gt;[remove succeeding]&lt;/b&gt;, and &lt;b&gt;[remove preceeding]&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;b&gt;[remove succeeding]&lt;/b&gt; and &lt;b&gt;[remove preceeding]&lt;/b&gt; buttons are special because they do not only remove the selected item, but also all items preceeding or succeeding it.&lt;br /&gt;That way you can quickly clean up large portions of the playlist.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Reorder the playlist&lt;/b&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/walkthrough/playlist-drag.png" align="left"&gt;&lt;br /&gt;You can use your thumb to drag playlist items in order to reorder them.&lt;br /&gt;&lt;br /&gt;Use the tiny dragging area at the left of an item to drag it around.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-8571452438220962198?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/8571452438220962198/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=8571452438220962198' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/8571452438220962198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/8571452438220962198'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/05/mediabox-walkthrough-playlist-editing.html' title='Mediabox Walkthrough: Playlist Editing'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-2813209403682330647</id><published>2008-03-26T02:14:00.000-07:00</published><updated>2008-03-26T02:21:24.925-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xrandr'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Laptop'/><title type='text'>Laptop, External Monitor, and xrandr to the Rescue</title><content type='html'>I have just upgraded to Ubuntu Gutsy (I know I'm very very late) on my laptop. The installation went fine but when I connected an external monitor with a higher resolution than my laptop has, gdm and GNOME were not able to detect this, and instead displayed the picture in the upper left corner of the screen.&lt;br /&gt;&lt;br /&gt;This was especially funny with GNOME, because the desktop actually used the full resolution, and I could move windows over the whole screen. Only the panels were stuck in the middle of the screen.&lt;br /&gt;&lt;br /&gt;Apparently I'm not the only one with this problem, so let me tell you what I found out and how to fix this.&lt;br /&gt;&lt;br /&gt;Everything was fine with Ubuntu Feisty. When I connected an external monitor, the laptop screen switched off and the higher resolution was used. But now when I connect an external monitor, the laptop screen doesn't switch off automatically.&lt;br /&gt;&lt;br /&gt;Because the laptop screen is still on, the system now has two screens and GNOME will automatically adapt to the screen with the lower resolution.&lt;br /&gt;&lt;br /&gt;The moment I manually switched off the laptop screen with the tool &lt;span style="font-weight:bold;"&gt;xrandr&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ xrandr --output LVDS --off&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;the GNOME panels jumped to their correct position. So let's investigate this &lt;span style="font-weight:bold;"&gt;xrandr&lt;/span&gt; a bit more.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;xrandr&lt;/span&gt; is a powerful tool for managing multiple video outputs, rotating the screen, and setting up multihead displays.&lt;br /&gt;&lt;br /&gt;You can get a list of what the graphics driver thinks it has connected by invoking&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ xrandr -q&lt;br /&gt;&lt;/pre&gt;  &lt;br /&gt;This will give you something like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;Screen 0: minimum 320 x 200, current 1680 x 1050, maximum 1680 x 1200&lt;br /&gt;VGA-0 connected 1680x1050+0+0 (normal left inverted right) 433mm x 271mm&lt;br /&gt;   1680x1050      60.0*+   60.0  &lt;br /&gt;   1280x1024      75.0     59.9  &lt;br /&gt;   1440x900       75.0     59.9  &lt;br /&gt;   1280x960       59.9  &lt;br /&gt;   1152x864       74.8  &lt;br /&gt;   1280x720       59.9  &lt;br /&gt;   1024x768       75.1     60.0  &lt;br /&gt;   800x600        75.0     60.3  &lt;br /&gt;   640x480        75.0     60.0  &lt;br /&gt;   720x400        70.1  &lt;br /&gt;LVDS connected (normal left inverted right)&lt;br /&gt;   1024x768       60.0 +   60.0  &lt;br /&gt;   800x600        60.3  &lt;br /&gt;   640x480        59.9  &lt;br /&gt;S-video disconnected (normal left inverted right)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The interesting entries are &lt;span style="font-weight:bold;"&gt;LVDS&lt;/span&gt; (the laptop screen) and &lt;span style="font-weight:bold;"&gt;VGA-0&lt;/span&gt; (the external monitor). Both are connected. &lt;span style="font-weight:bold;"&gt;VGA-0&lt;/span&gt; might be called &lt;span style="font-weight:bold;"&gt;VGA&lt;/span&gt; or similar on your system, as this name is driver-dependent.&lt;br /&gt;&lt;br /&gt;If I wanted to check if an external monitor was connected, I'd just run&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;$ xrandr -q | grep "^VGA.* connected"&lt;br /&gt;  &lt;br /&gt;VGA-0 connected 1280x1024+0+0 (normal left inverted right) 338mm x 270mm&lt;br /&gt;&lt;/pre&gt;  &lt;br /&gt;I want the system to switch off the laptop screen whenever an external monitor is connected, so that GNOME will use the higher resolution. This easily can be done by adding the following lines to &lt;tt&gt;/etc/gdm/Init/Default&lt;/tt&gt; just before the&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;exit 0&lt;br /&gt;&lt;/pre&gt;  &lt;br /&gt;line:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;xrandr -q | grep "^VGA.* connected" &gt;/dev/null&lt;br /&gt;RC=$?&lt;br /&gt;if [ $RC = 0 ]; then&lt;br /&gt;  xrandr --output LVDS --off&lt;br /&gt;fi&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;It will also make gdm use the full resolution.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-2813209403682330647?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/2813209403682330647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=2813209403682330647' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/2813209403682330647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/2813209403682330647'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/03/laptop-external-monitor-and-xrandr-to.html' title='Laptop, External Monitor, and xrandr to the Rescue'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-7881922883114258618</id><published>2008-02-26T13:56:00.000-08:00</published><updated>2008-02-26T14:08:09.170-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pan'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>"Native" PAN support for maemo</title><content type='html'>&lt;img src="http://maemo-pan.garage.maemo.org/img/maemo-pan.jpg" alt="maemo in a PAN" align="right"&gt;&lt;br /&gt;The waiting is finally over. There is now support for phone-tethering via the PAN Bluetooth profile, which is so popular on Windows Mobile smartphones.&lt;br /&gt;&lt;br /&gt;By "native" I mean that it's quite well built into the system and does not appear as a separate application. And you no longer need a command line or root access for making PAN connections.&lt;br /&gt;&lt;br /&gt;After you have installed the &lt;a href="http://garage.maemo.org/projects/maemo-pan"&gt;maemo-pan add-on&lt;/a&gt; (sorry, only OS 2008 supported so far), you can get online with just a few simple steps:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Go to the system preferences and add your phone in the phone settings. Do not enter the wizard for configuring the dialup settings. PAN does not use them.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Start internet sharing on your phone. It depends on your phone how and where to do this. On Windows Mobile 5, open the Start menu and select "internet connection sharing" from there.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Make sure that Bluetooth is enabled on your internet tablet. Now open the connection dialog and you will see that there is a new connection called "Bluetooth-PAN". Select it and you will be connected to the internet via PAN.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;When you're finished, just close the connection the usual way. Wasn't this easy? :)&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Thanks go to aleksandyr for figuring out stuff and to Frantisek Dufka for writing the initial PAN connection shell script for OS 2008. Without you guys maemo-pan wouldn't have happened!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-7881922883114258618?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/7881922883114258618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=7881922883114258618' title='17 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7881922883114258618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7881922883114258618'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/02/native-pan-support-for-maemo.html' title='&quot;Native&quot; PAN support for maemo'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>17</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-3019240401226502391</id><published>2008-02-26T13:11:00.000-08:00</published><updated>2008-12-10T21:06:13.168-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>No, MediaBox Media Center is NOT developed by Nokia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_GrwhB3fzGXM/R8SCHmYgh6I/AAAAAAAAAD4/MMVYENzO8-M/s1600-h/mediabox-nokia.jpg"&gt;&lt;img style="float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_GrwhB3fzGXM/R8SCHmYgh6I/AAAAAAAAAD4/MMVYENzO8-M/s200/mediabox-nokia.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5171401339202209698" /&gt;&lt;/a&gt;&lt;br /&gt;Somebody at maemo.org must have thought &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox&lt;/a&gt; was a Nokia application while tagging some pages. The &lt;a href="http://maemo.org/downloads/product/OS2008/mediabox"&gt;MediaBox entry&lt;/a&gt; on maemo.org/downloads is tagged with "Application developed by NOKIA". This is plain wrong!&lt;br /&gt;&lt;br /&gt;No, I am not working for Nokia, and MediaBox Media Center is not related to Nokia in any way.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-3019240401226502391?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/3019240401226502391/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=3019240401226502391' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3019240401226502391'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3019240401226502391'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/02/no-mediabox-media-center-is-not.html' title='No, MediaBox Media Center is NOT developed by Nokia'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_GrwhB3fzGXM/R8SCHmYgh6I/AAAAAAAAAD4/MMVYENzO8-M/s72-c/mediabox-nokia.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6724465609610033012</id><published>2008-02-21T12:03:00.000-08:00</published><updated>2008-02-21T12:09:56.685-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox once again - 0.94.2 this time</title><content type='html'>Maybe I was too quick releasing &lt;a href="http://mediabox.garage.maemo.org/"&gt;MediaBox&lt;/a&gt; 0.94.1 yesterday. The config reader bug which could cause hanging during startup was only partially fixed in 0.94.1. So here's release 0.94.2 with even more bug fixes hitting the maemo download servers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6724465609610033012?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6724465609610033012/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6724465609610033012' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6724465609610033012'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6724465609610033012'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/02/mediabox-once-again-0942-this-time.html' title='MediaBox once again - 0.94.2 this time'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-7588764911897386732</id><published>2008-02-20T12:15:00.000-08:00</published><updated>2008-02-20T12:18:08.417-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox 0.94.1 fixing a few things</title><content type='html'>I have just released Version 0.94.1 of the &lt;a href="http://mediabox.garage.maemo.org/"&gt;MediaBox Media Center.&lt;/a&gt; This is a bugfix release and will help you if you experienced MediaBox 0.94 hanging on startup.&lt;br /&gt;&lt;br /&gt;The new version also adds support for non-UTF-8 character encodings in ID3 tags, such as ISO-8859-1 and UTF-16.&lt;br /&gt;&lt;br /&gt;Thanks to all users who reported bugs and made suggestions!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-7588764911897386732?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/7588764911897386732/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=7588764911897386732' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7588764911897386732'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7588764911897386732'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/02/mediabox-0941-fixing-few-things.html' title='MediaBox 0.94.1 fixing a few things'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-7979783635749569280</id><published>2008-02-11T11:50:00.000-08:00</published><updated>2008-02-11T11:58:55.665-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><title type='text'>MediaBox 0.94 - the New Enhancements and a Big Thank You!</title><content type='html'>Thank you all for reporting bugs and giving new suggestions for &lt;a href="http://mediabox.garage.maemo.org/index.html"&gt;MediaBox Media Center&lt;/a&gt;! You help me a lot making this the best and friendliest media center for the tablets! Keep on &lt;a href="https://garage.maemo.org/tracker/?group_id=355"&gt;reporting&lt;/a&gt;; you decide what's important!&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/songinfo.png" alt="MediaBox Track Info"&gt;&lt;br /&gt;&lt;br /&gt;So here is &lt;a href="https://garage.maemo.org/frs/download.php/3349/mediabox_0.94_armel.deb"&gt;release 0.94&lt;/a&gt; with a lot of small improvements.&lt;br /&gt;&lt;br /&gt;The media scanner will now cache already loaded thumbnails so it will be quicker after you add or remove a media folder. You can also specify for each folder which kind of media you have in there. Thus you will be able to avoid getting all your album cover art listed in the image viewer, for example.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/mediacollection.png" alt="Configuring the media collection"&gt;&lt;br /&gt;&lt;br /&gt;If you've always wanted to play the FM radio through the loudspeakers, you can do so now. MediaBox can finally switch from headphones to loudspeakers when the headphones are plugged in as FM radio antenna. The FM radio is only available on the N800, though.&lt;br /&gt;&lt;br /&gt;The button on the Nokia headset is now also supported and you can press it to pause and resume playback.&lt;br /&gt;&lt;br /&gt;I have also added a tag parser for FLAC tags and fixed some flaws regarding FLAC playback. &lt;a href="http://en.wikipedia.org/wiki/Free_Lossless_Audio_Codec"&gt;FLAC&lt;/a&gt; is a free and lossless audio codec for high quality audio.&lt;br /&gt;&lt;br /&gt;MediaBox is now powered by player backends for mplayer and the native osso-media-server. By selecting between two backends, more media formats can be played back. This especially adds support for real media and real internet radio streams (.ram), as well as MP4 and 3GP videos.&lt;br /&gt;&lt;br /&gt;The new MediaBox release is available from the &lt;a href="http://mediabox.garage.maemo.org/index.html"&gt;website&lt;/a&gt; as well as through the application manager in the Maemo extras catalogue. The package installs on OS 2006 (video playback not yet supported on the 770), OS 2007, and OS 2008.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-7979783635749569280?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/7979783635749569280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=7979783635749569280' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7979783635749569280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/7979783635749569280'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/02/mediabox-094-new-enhancements-and-big.html' title='MediaBox 0.94 - the New Enhancements and a Big Thank You!'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-3025839196054349665</id><published>2008-01-25T10:02:00.000-08:00</published><updated>2008-01-25T10:13:36.562-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox 0.93 with support for embedded ID3 album art and more</title><content type='html'>Maybe you have already noticed that there's now &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox&lt;/a&gt; 0.93 available in the maemo-extras repositories for OS 2007 and OS 2008.&lt;br /&gt;&lt;br /&gt;So what's new in this release?&lt;br /&gt;&lt;br /&gt;First of all, rendering became a bit faster. Many rendering operations are now directly performed on the X server where they run 2D-hardware-accelerated. Previously, only the kinetic scrolling was done like this. Especially the Nokia 770 gives very smooth results that way.&lt;br /&gt;&lt;br /&gt;But much more important, the media scanner became a lot quicker. So if there are no new thumbnails to generate, it will scan your media in almost no time. Together with deferred thumbnail assembling, this greatly speeds up startup time.&lt;br /&gt;The scanner is now also much more robust and knows how to get past bad media files that make mplayer hang during thumbnailing. Oh, and you can now watch the new thumbnails while they are being created.&lt;br /&gt;&lt;br /&gt;I have improved the ID3 tag parser as well and it supports ID3 v1, v2.2, v2.3, v2.4 now. If you have album art embedded in your ID3 tags, then chances are good that MediaBox will be able to show it.&lt;br /&gt;&lt;br /&gt;MediaBox also runs on the Nokia 770 with OS 2006, but video still does not work reliably there, and there are still some memory issues to be solved. But it's perfectly usable as a photo viewer or for playing music. Of course I'll keep testing MediaBox on the 770 and try to make it work even better.&lt;br /&gt;&lt;br /&gt;See the &lt;a href="http://mediabox.garage.maemo.org/data/release-notes"&gt;release notes&lt;/a&gt; for more.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-3025839196054349665?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/3025839196054349665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=3025839196054349665' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3025839196054349665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3025839196054349665'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/01/mediabox-093-with-support-for-embedded.html' title='MediaBox 0.93 with support for embedded ID3 album art and more'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-1259438430507944618</id><published>2008-01-20T13:32:00.000-08:00</published><updated>2008-01-20T13:46:19.435-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='n810'/><category scheme='http://www.blogger.com/atom/ns#' term='review'/><title type='text'>N810 - What's good, what's bad</title><content type='html'>It's been one and a half weeks since I got my N810 and I had some time to play around with most of its features.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What I like&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The N810 is a bit smaller than the N800 and 770 and easily fits a jeans pocket. The size is just perfect for an internet tablet. It's tiny, reasonably thin, but still features a screen big enough for enjoying multimedia and the web.&lt;br /&gt;&lt;br /&gt;For the first time, Nokia included a &lt;b&gt;usable&lt;/b&gt; carrying case with an internet tablet. If you remember the "sock" that came with the 770 and the "shades sleeve" of the N800 (where the device slipped out easily), you know what's unusable. The N810 case is still a soft case, but the device won't slip out and the upper hardware keys are still accessible.&lt;br /&gt;The surface and back of the device are made of brushed metal and look very noble compared to the toy-look of the N800. No other internet tablet can beat the speakers of the N800 but the tiny speakers to the left and right side of the N810 produce surprisingly good sound. The builtin stand is solid and has three positions. That's one more than the N800 has.&lt;br /&gt;&lt;br /&gt;There is finally a hardware keyboard which can be slid out. Of course, it's not a full-size keyboard, but the keys are good to press with your thumbs. I especially like the fact that it has backlight and is thus usable in the dark. I always hate it when I can't properly see my laptop keyboard in the dark. The stickiness of the shift and Chr keys was a good idea and it makes typing reasonbly fast.&lt;br /&gt;The stickiness is important because you usually don't want to hold down the shift key while pressing a letter when typing with only two thumbs. There is also a builtin GPS receiver together with preinstalled map software.&lt;br /&gt;&lt;br /&gt;The map software is simply a light version of the Navicore / Wayfinder navigation software. If you have a valid Navicore or Wayfinder license, you can unlock the navigation functions of the map software. As a 770-Navicore user I simply entered my key and, hey presto, I had the current Navicore (which is now called Wayfinder, since they bought Navicore) installed on the N810.&lt;br /&gt;Luckily, the N810 comes with the appropriate car holder. When I got the N800 I was annoyed by the fact that it didn't fit the car holder from my 770-Navicore.&lt;br /&gt;Some people reported problems with the GPS receiver, but I got a GPS fix rather quickly even on a totally foggy dark winter morning.&lt;br /&gt;&lt;br /&gt;I also want to point out that the new OS 2008 seems to be very stable and I didn't experience a single crash so far! It's also nice that you can now lock the screen and keys with a hardware key. Very handy!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;What I don't like&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Of course the N810 isn't perfect. Here's my rant.&lt;br /&gt;&lt;br /&gt;Who designed the carrying case? It looks as if I was carrying a medical device around. The look just does not fit a high-tech internet device! I hate the size of miniSD cards (and even more so the size of microSD!).&lt;br /&gt;My card readers and the N800 take full-size SD cards. Whenever I want to put a miniSD card into my N800 or the card reader, I have to fiddle with an awkward adapter. Totally annoying! The micro-USB port is also annoying because now I have an extra cable attached to my computer.&lt;br /&gt;&lt;br /&gt;The car holder has a big bulk of plastic on the top. This was totally unnecessary and I might eventually cut off this part. While I understand that the device leaves no place for cursor keys anymore, I find it bothersome to pull out the keyboard everytime I want to use the cursor keys or the center button.&lt;br /&gt;&lt;br /&gt;The map software lets you download new maps off the internet, but this &lt;b&gt;never&lt;/b&gt; worked for me. Not on my N800 and not on my N810. The Wayfinder download server must be seriously broken as many users report problems downloading maps. The included map of Germany &amp; Alps (2008) shows no difference to the map update of Navicore (2007) or the map included with Navicore (2006). And even the 2006 map wasn't up to date then. I still miss major roads built in 2006 on the 2008 map! For example, look at the B2 between Donauwoerth and Augsburg. The parts built in 2006 are still missing!&lt;br /&gt;And the map has bugs, too. For example, it shows Technische Universitaet Munich in a totally different town. Not to mention some POIs to be placed wrongly. I have no navi to compare, but I suspect that all navis using Teleatlas maps have the same problems.&lt;br /&gt;&lt;br /&gt;The new MicroB web browser shows very buggy behaviour when panning with the stylus. Sometimes it works, sometimes it jumps nervously around, sometimes it just selects text. The browser is also a bit slower than Opera on the N800 used to be.&lt;br /&gt;&lt;br /&gt;The position of the light sensor is also not optimal as it's too easy to cover it with your fingers while holding the tablet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-1259438430507944618?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/1259438430507944618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=1259438430507944618' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/1259438430507944618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/1259438430507944618'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/01/n810-whats-good-whats-bad.html' title='N810 - What&apos;s good, what&apos;s bad'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-3621824125018705761</id><published>2008-01-01T07:14:00.000-08:00</published><updated>2008-12-10T21:06:13.661-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><title type='text'>Tablet Python #3 - List Comprehension</title><content type='html'>A Happy New Year to everyone! In today's episode of Tablet Python I'm going to tell you more about list comprehension which we were already using in the &lt;a href="http://pycage.blogspot.com/2007/12/tablet-python-2-resource-modules.html"&gt;last episode.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Introduction&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;List comprehension is a unique feature of the Python language (correct me if I'm wrong). It might look intimidating at first, but believe me, it can soon become one of your best friends in Python. It's so elegant and simple!&lt;br /&gt;&lt;br /&gt;But let's approach this step by step.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 1: You can copy lists&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Let's define a list&lt;br /&gt;&lt;pre&gt;a = [1, 2, 3]&lt;/pre&gt;&lt;br /&gt;You can make a copy of &lt;tt&gt;a&lt;/tt&gt; by iterating through the elements in &lt;tt&gt;a&lt;/tt&gt;, like this:&lt;br /&gt;&lt;pre&gt;copy_of_a = []&lt;br /&gt;for element in a:&lt;br /&gt;    copy_of_a.append(element)&lt;/pre&gt;     &lt;br /&gt;This is about the way you would do it in any other language. But with list comprehension, you would simply write:&lt;br /&gt;&lt;pre&gt;copy_of_a = [ element for element in a ]&lt;/pre&gt;&lt;br /&gt;This simply says, build a list and for every &lt;tt&gt;element&lt;/tt&gt; in &lt;tt&gt;a&lt;/tt&gt;, put &lt;tt&gt;element&lt;/tt&gt; into this list. Then assign the new list to the variable &lt;tt&gt;copy_of_a&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;i&gt;For completeness, I want to tell you, however, that the easiest way to copy a list in Python goes by "slicing":&lt;/i&gt;&lt;tt&gt;copy_of_a = a[:]&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 2: You can build modified copies&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Let's assume you have a list of filesystem paths and would like to strip off the path so that only the filename remains.&lt;br /&gt;&lt;br /&gt;This is our list:&lt;br /&gt;&lt;pre&gt;a = ["/home/user/file1", "/media/mmc1/file2", "/media/mmc2/file3"]&lt;/pre&gt;&lt;br /&gt;And this is what we want to get:&lt;br /&gt;&lt;pre&gt;["file1", "file2", "file3"]&lt;/pre&gt;&lt;br /&gt;The classic way goes like this:&lt;br /&gt;&lt;pre&gt;b = []&lt;br /&gt;for element in a:&lt;br /&gt;    b.append(os.path.basename(element))&lt;/pre&gt;&lt;br /&gt;But with list comprehension, you'd do it like this:&lt;br /&gt;&lt;pre&gt;b = [ os.path.basename(element) for element in a ]&lt;/pre&gt; &lt;br /&gt;Or in words: build a list, and for every &lt;tt&gt;element&lt;/tt&gt; in &lt;tt&gt;a&lt;/tt&gt;, apply &lt;tt&gt;os.path.basename()&lt;/tt&gt; on &lt;tt&gt;element&lt;/tt&gt; and put the result into the new list. Then assign the new list to the variable &lt;tt&gt;b&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 3: You can filter lists&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Now let's take a look at the list comprehension construct from the &lt;a href="http://pycage.blogspot.com/2007/12/tablet-python-2-resource-modules.html"&gt;last episode&lt;/a&gt;:&lt;br /&gt;&lt;pre&gt;resources = [ f for f in os.listdir(_RESOURCE_PATH) if f.endswith(".png") ]&lt;/pre&gt; &lt;br /&gt;Can you guess what it does?&lt;br /&gt;Build a list, and for every &lt;tt&gt;f&lt;/tt&gt; in the result of &lt;tt&gt;os.listdir(_RESOURCE_PATH)&lt;/tt&gt;, put &lt;tt&gt;f&lt;/tt&gt; into the new list if &lt;tt&gt;f.endswith(".png")&lt;/tt&gt; returns &lt;tt&gt;True&lt;/tt&gt;. Then assign the new list to the variable &lt;tt&gt;resources&lt;/tt&gt;.&lt;br /&gt;It's the same as:&lt;br /&gt;&lt;pre&gt;resources = []&lt;br /&gt;for f in os.listdir(_RESOURCE_PATH):&lt;br /&gt;    if f.endswith(".png"):&lt;br /&gt;        resources.append(f)&lt;/pre&gt;         &lt;br /&gt;... but way shorter, less error-prone, and easier to read!&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 4: You can combine modifying and filtering&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Let's take this to the extreme by modifying and filtering a list at the same time:&lt;br /&gt;&lt;pre&gt;a = [ str(c) for c in range(100) if (c % 5 == 0) ]&lt;/pre&gt;&lt;br /&gt;This builds a list &lt;tt&gt;a&lt;/tt&gt; which contains as strings those numbers in the range between 0 and 99, which can be divided by 5.&lt;br /&gt;This would be&lt;br /&gt;&lt;pre&gt;a = []&lt;br /&gt;for c in range(100):&lt;br /&gt;    if (c % 5 == 0):&lt;br /&gt;        a.append(str(c))&lt;/pre&gt;&lt;br /&gt;for all those poor people who cannot use list comprehension.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 5: Still confused? It's simply a mathematical set notation!&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Do you remember this notation?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_GrwhB3fzGXM/R3pbFbVFxQI/AAAAAAAAADU/Tg7y0mtUHi8/s1600-h/listcomprehension.png"&gt;&lt;img style="cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_GrwhB3fzGXM/R3pbFbVFxQI/AAAAAAAAADU/Tg7y0mtUHi8/s320/listcomprehension.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5150529272645272834" /&gt;&lt;/a&gt;&lt;br /&gt;List comprehension in Python is just the same! &lt;br /&gt;&lt;pre&gt;B = [ x*x for x in A if (x % 5 == 0) ]&lt;/pre&gt;&lt;br /&gt;And that's the secret key which helps you understand it.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Generally, list comprehension helps you write cleaner code. It expresses how you think about solving the problem instead of describing every step necessary to solve the problem. Once you get used to it, it's a much more intuitive way of working with lists.&lt;br /&gt;A feature of higher-level (functional) languages is that you can make the computer solve problems by describing what you want, instead of giving step-by-step instructions on how to solve it.&lt;br /&gt;However, as with every powerful tool, use it wisely. It's e.g. generally not a good idea to use list comprehension to shorten code with side-effects. Don't use list comprehension to make your code shorter, but to make it understandable.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-3621824125018705761?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/3621824125018705761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=3621824125018705761' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3621824125018705761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/3621824125018705761'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2008/01/tablet-python-3-list-comprehension.html' title='Tablet Python #3 - List Comprehension'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_GrwhB3fzGXM/R3pbFbVFxQI/AAAAAAAAADU/Tg7y0mtUHi8/s72-c/listcomprehension.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-8238955248724485242</id><published>2007-12-30T05:31:00.000-08:00</published><updated>2007-12-30T05:41:59.126-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Tablet Python #2 - Resource Modules</title><content type='html'>&lt;b&gt;Introduction&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In this second episode of Tablet Python, I'm going to tell you about an easy way to make resource modules. A resource module is a Python module which you can import for loading resources such as images, fonts, or whatever you want.&lt;br /&gt;&lt;br /&gt;For example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import graphics&lt;br /&gt;  &lt;br /&gt;img = gtk.Image()&lt;br /&gt;img.set_from_pixbuf(graphics.icon)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Implementation&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;In &lt;a href="http://pycage.blogspot.com/2007/12/tablet-python-1-relocatable-software.html"&gt;episode #1&lt;/a&gt; we talked about writing relocatable software. We are going to apply the same technique for resource modules, since they will be relocatable as well.&lt;br /&gt;&lt;br /&gt;Our resource modules are Python packages, i.e. a subdirectory with a &lt;tt&gt;__init__.py&lt;/tt&gt; file in it. The name of the directory will be the module's name. Be careful to only use valid characters (characters valid for Python variables) in the directory name and the filenames of the resource files (e.g., &lt;tt&gt;my_icon.png&lt;/tt&gt; is OK, while &lt;tt&gt;my-icon.png&lt;/tt&gt; would be not!).&lt;br /&gt;&lt;br /&gt;Let's assume the following filesystem structure for our example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;  graphics/&lt;br /&gt;    + __init__.py&lt;br /&gt;    + icon.png&lt;br /&gt;    + logo.png&lt;br /&gt;    + background.png&lt;br /&gt;        &lt;br /&gt;  test.py&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The package directory will also contain the resource files. In order to access them, we'll have to put them into the module namespace. Write the following into &lt;tt&gt;graphics/__init__.py&lt;/tt&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import os&lt;br /&gt;import gtk&lt;br /&gt;&lt;br /&gt;_RESOURCE_PATH = os.path.dirname(__file__)&lt;br /&gt;&lt;br /&gt;def _load_resources():&lt;br /&gt;&lt;br /&gt;    # Find all .png files in the resource directory. This construct is called&lt;br /&gt;    # "list comprehension" and will be covered in detail in episode #3.&lt;br /&gt;    # This returns a list of the names of all files in the resource directory&lt;br /&gt;    # ending with ".png".&lt;br /&gt;    resources = [ f for f in os.listdir(_RESOURCE_PATH)&lt;br /&gt;                  if f.endswith(".png") ]&lt;br /&gt;                    &lt;br /&gt;    # load resources into module namespace&lt;br /&gt;    for r in resources:&lt;br /&gt;&lt;br /&gt;        # the filename without extension will be the name to access the&lt;br /&gt;        # resource, so we strip off the extension&lt;br /&gt;        name = os.path.splitext(r)[0]&lt;br /&gt;          &lt;br /&gt;        # this is the full path to the resource file&lt;br /&gt;        path = os.path.join(_RESOURCE_PATH, r)&lt;br /&gt;          &lt;br /&gt;        # Now we can load the resource into the module namespace.&lt;br /&gt;        # globals() gives us the dictionary of the module-global variables,&lt;br /&gt;        # and we can easily extend it by assigning new keys.&lt;br /&gt;        globals()[name] = gtk.gdk.pixbuf_new_from_file(path)&lt;br /&gt;&lt;br /&gt;    #end for&lt;br /&gt;&lt;br /&gt;# load the resources when importing the module&lt;br /&gt;_load_resources()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;That's all. Let's test it with a tiny test program &lt;tt&gt;test.py&lt;/tt&gt;:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import gtk&lt;br /&gt;import graphics&lt;br /&gt;  &lt;br /&gt;win = gtk.Window(gtk.WINDOW_TOPLEVEL)&lt;br /&gt;img = gtk.Image()&lt;br /&gt;img.set_from_pixbuf(graphics.logo)&lt;br /&gt;win.add(img)&lt;br /&gt;win.show_all()&lt;br /&gt;  &lt;br /&gt;gtk.main()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;You may put as many resource files as you want into the resource directory and simply access them by their name. The files are loaded only once when the module gets imported the first time. Subsequent import statements reuse the module without reloading the resources. I'm going to talk about the "singleton" nature of Python modules in a later episode.&lt;br /&gt;&lt;br /&gt;A more sophisticated example of resource modules can be found in the theming engine of &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox&lt;/a&gt; (the subdirectory called &lt;tt&gt;theme&lt;/tt&gt;).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-8238955248724485242?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/8238955248724485242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=8238955248724485242' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/8238955248724485242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/8238955248724485242'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/12/tablet-python-2-resource-modules.html' title='Tablet Python #2 - Resource Modules'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-2816094151911772003</id><published>2007-12-24T07:09:00.000-08:00</published><updated>2007-12-24T07:15:21.193-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox doesn't like winter?</title><content type='html'>There crawled a stupid little bug into MediaBox which made it dislike winter. A bug in the clock module made it return bogus data during winter. Since winter started recently, MediaBox failed to start up after December 22nd.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/clock.png" alt="clock"&gt;&lt;br /&gt;&lt;br /&gt;The &lt;a href="https://garage.maemo.org/frs/download.php/2946/mediabox_0.92.1_armel.deb"&gt;new release 0.92.1&lt;/a&gt; fixes this. Now you can enjoy MediaBox again!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Merry Christmas!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-2816094151911772003?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/2816094151911772003/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=2816094151911772003' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/2816094151911772003'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/2816094151911772003'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/12/mediabox-doesnt-like-winter.html' title='MediaBox doesn&apos;t like winter?'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-4985647290599433500</id><published>2007-12-17T13:51:00.000-08:00</published><updated>2007-12-17T14:08:42.261-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox with Internet Radio</title><content type='html'>Now you can listen to internet radio stations (MP3, Ogg, AAC, etc; realaudio not supported) with the &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox Media Center&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The &lt;a href="http://garage.maemo.org/frs/download.php/2863/mediabox_0.92_armel.deb"&gt;new release&lt;/a&gt; also features fullscreen song information.&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/songinfo.png" alt="MediaBox Song Info"&gt;&lt;br /&gt;&lt;br /&gt;The package installs on OS 2007, OS 2008, and even OS 2006. Not all features are enabled on OS 2006 at the moment, though.&lt;br /&gt;&lt;br /&gt;Have fun and don't hesitate to &lt;a href="https://garage.maemo.org/tracker/?atid=1372&amp;group_id=355&amp;func=browse"&gt;report any bugs&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-4985647290599433500?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/4985647290599433500/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=4985647290599433500' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4985647290599433500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4985647290599433500'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/12/mediabox-with-internet-radio.html' title='MediaBox with Internet Radio'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-4463537717426820967</id><published>2007-12-11T13:07:00.001-08:00</published><updated>2007-12-11T13:11:44.846-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Important Bugfix for MediaBox</title><content type='html'>I have just released &lt;a href="https://garage.maemo.org/frs/download.php/2830/mediabox_0.91.1_armel.deb"&gt;MediaBox 0.91.1&lt;/a&gt; to fix a critical bug in 0.91. If you're using MediaBox 0.91 with FM radio you should upgrade!&lt;br /&gt;&lt;br /&gt;MediaBox 0.91 has a bug which can break the radio stations list in the FM radio applet. After the list is broken, MediaBox will hang during startup. The new release fixes this.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-4463537717426820967?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/4463537717426820967/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=4463537717426820967' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4463537717426820967'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4463537717426820967'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/12/important-bugfix-for-mediabox.html' title='Important Bugfix for MediaBox'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-5222791563974614386</id><published>2007-12-09T13:10:00.000-08:00</published><updated>2007-12-09T13:19:00.676-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='n810'/><category scheme='http://www.blogger.com/atom/ns#' term='pyfmradio'/><category scheme='http://www.blogger.com/atom/ns#' term='n800'/><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox gets FM radio</title><content type='html'>I have been busy getting FM radio in the &lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox media center&lt;/a&gt; ready for release. So if you have a N800 (the only Nokia internet tablet with built-in FM tuner chip so far), you will get the radio button at the bottom.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/fmradio.png" alt="FM radio in action"&gt;&lt;br /&gt;&lt;br /&gt;But the &lt;a href="https://garage.maemo.org/frs/download.php/2816/mediabox_0.91_armel.deb"&gt;new release&lt;/a&gt; will also bring some improvements to N810 users (sorry, no FM radio on the N810...). Kinetic scrolling is now smoother without the occasional "hiccups" while playing an audio file. Some bugs have been squashed as well.&lt;br /&gt;&lt;br /&gt;Oh, and since MediaBox uses &lt;a href="http://pyfmradio.garage.maemo.org"&gt;pyFMRadio&lt;/a&gt; for the FM radio, I made a &lt;a href="https://garage.maemo.org/frs/download.php/2817/pyFMRadio-0.21.zip"&gt;new release&lt;/a&gt; of this as well. The new version has improved signal scanning for automatic station detection.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-5222791563974614386?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/5222791563974614386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=5222791563974614386' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/5222791563974614386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/5222791563974614386'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/12/mediabox-gets-fm-radio.html' title='MediaBox gets FM radio'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-5025263851119861542</id><published>2007-12-01T15:09:00.000-08:00</published><updated>2007-12-01T15:14:57.204-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='python'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Tablet Python #1 - Relocatable Software</title><content type='html'>&lt;a href="http://pymaemo.garage.maemo.org"&gt;Python&lt;/a&gt; is becoming more and more popular for development on the Nokia internet tablets. It is indeed a very powerful and clear language and makes it easy to write applications that work on all internet tablet versions.&lt;br /&gt;&lt;br /&gt;With this post I'm starting a new series on nice Python tricks which might be interesting to tablet software developers. So, if you're doing something in Python on your tablet, this series is for you!&lt;br /&gt;&lt;br /&gt;In this first episode I will talk about writing relocatable software. This is software which works no matter where it's installed. There are no hardwired absolute paths to resources in relocatable software.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Knowing where you are&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Every Python module knows the path where it's installed. You can retrieve the module's path by reading the &lt;tt&gt;__file__&lt;/tt&gt; variable.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;print "This module resides at:", __file__&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;This makes it easy to find the directory where your app is installed:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;import os&lt;br /&gt;path = os.path.dirname(__file__)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Finding your resources&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;So if you want to load bundled resources into your application, you know where to find them:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;path = os.path.dirname(__file__)&lt;br /&gt;image_file = os.path.join(path, "images", "foo.png")&lt;br /&gt;img = gtk.Image()&lt;br /&gt;img.set_from_file(image_file)&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Starting the application&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;This is the way I use to make my programs executable on the tablet. All of the program files and resources are within a subdirectory (e.g. &lt;tt&gt;/usr/lib/myapp/&lt;/tt&gt;) together with the executable start module, which could look like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;#! /usr/bin/env python&lt;br /&gt;&lt;br /&gt;from mediabox.App import App&lt;br /&gt;&lt;br /&gt;app = App()&lt;br /&gt;app.run()&lt;br /&gt;&lt;/pre&gt;    &lt;br /&gt;Let's assume this file is &lt;tt&gt;/usr/lib/mediabox/MediaBox&lt;/tt&gt;. Then I make a symbolic link to this file as &lt;tt&gt;/usr/bin/MediaBox&lt;/tt&gt;, and it's all done.&lt;br /&gt;&lt;br /&gt;If I move my software to another place, I would just have to update this link.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-5025263851119861542?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/5025263851119861542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=5025263851119861542' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/5025263851119861542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/5025263851119861542'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/12/tablet-python-1-relocatable-software.html' title='Tablet Python #1 - Relocatable Software'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-1202856212893594751</id><published>2007-11-27T12:11:00.000-08:00</published><updated>2007-11-27T12:14:52.875-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox 0.90.1 addresses the gconf issue</title><content type='html'>It seems that the gconf Python bindings are not available on every installation of &lt;a href="http://pymaemo.garage.maemo.org"&gt;pymaemo&lt;/a&gt;. Thus many users (mainly OS 2008) were not able to run the MediaBox media center. This release is for you!&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mediabox.garage.maemo.org"&gt;MediaBox&lt;/a&gt; 0.90.1 falls back to using gconftool-2, if no gconf bindings are available. As a side-result, version 0.90.1 will now also start on the Nokia 770 with OS 2006 and sorta works (kinetic scrolling looks incredibly smooth on the 770, actually &lt;b&gt;smoother&lt;/b&gt; than on the N800, but the 770 will choke on too many thumbnails for now).&lt;br /&gt;&lt;br /&gt;Thanks to all those who reported problems and helped me locate the gconf bug.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-1202856212893594751?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/1202856212893594751/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=1202856212893594751' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/1202856212893594751'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/1202856212893594751'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/11/mediabox-0901-addresses-gconf-issue.html' title='MediaBox 0.90.1 addresses the gconf issue'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-2289771187691444224</id><published>2007-11-26T11:40:00.000-08:00</published><updated>2007-11-26T11:48:30.801-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='n810'/><category scheme='http://www.blogger.com/atom/ns#' term='n800'/><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>MediaBox Enters the Stage</title><content type='html'>&lt;p&gt;&lt;br /&gt;Finally, the first version of &lt;a href="http://mediabox.garage.maemo.org/"&gt;MediaBox&lt;/a&gt; has been released. This is an&lt;br /&gt;extremely finger-friendly media center for the N800 and N810 internet tablets.&lt;br /&gt;The Nokia 770 should be supported with a later release.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;Let the screenshots speak:&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/mediabox-music.png"&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/mediabox-video.png"&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;tr&gt;&lt;br /&gt;&lt;td&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/images.png"&gt;&lt;/td&gt;&lt;br /&gt;&lt;td&gt;&lt;img src="http://mediabox.garage.maemo.org/sshots/clock.png"&gt;&lt;/td&gt;&lt;br /&gt;&lt;/tr&gt;&lt;br /&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-2289771187691444224?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/2289771187691444224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=2289771187691444224' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/2289771187691444224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/2289771187691444224'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/11/mediabox-enters-stage.html' title='MediaBox Enters the Stage'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-2680051484431732881</id><published>2007-11-19T02:42:00.000-08:00</published><updated>2007-11-19T02:47:19.675-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pyfmradio'/><category scheme='http://www.blogger.com/atom/ns#' term='n800'/><category scheme='http://www.blogger.com/atom/ns#' term='kernel'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>N800's FM radio now works in Japan</title><content type='html'>My &lt;a href="https://bugs.maemo.org/show_bug.cgi?id=2249"&gt;kernel patch for FM band selection on the N800&lt;/a&gt; was confirmed to work in Japan. Now I'm going to clean it up a little and improve support for it in &lt;a href="http://pyfmradio.garage.maemo.org/"&gt;pyFMRadio&lt;/a&gt;. Thanks to Kenroy Harrison for testing it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-2680051484431732881?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/2680051484431732881/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=2680051484431732881' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/2680051484431732881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/2680051484431732881'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/11/n800s-fm-radio-now-works-in-japan.html' title='N800&apos;s FM radio now works in Japan'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6221429616845582256</id><published>2007-11-18T08:03:00.000-08:00</published><updated>2007-11-18T08:20:36.678-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pyfmradio'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Enabling FM band selection on the N800</title><content type='html'>The Nokia N800 has a built-in FM radio which &lt;a href="https://bugs.maemo.org/show_bug.cgi?id=2249"&gt;can't currently be used in Japan&lt;/a&gt; since Japan uses a different FM band (76 MHz to 90 MHz) than Europe and the US (87.5 MHz to 108 MHz).&lt;br /&gt;Thanks to Kenroy Harrison for &lt;a href="http://garage.maemo.org/tracker/index.php?func=detail&amp;aid=1640&amp;group_id=441&amp;atid=1664"&gt;pointing this out&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The TEA5761 FM chip on the N800 supports the Japanese band by setting the BLIM bit but this is not supported by Nokia's driver code (Nokia doesn't sell the N800 in Japan anyway). So I have built a &lt;a href="http://garage.maemo.org/frs/download.php/2631/zImage"&gt;patched kernel&lt;/a&gt; enabling setting the BLIM bit.&lt;br /&gt;The n&lt;a href="http://garage.maemo.org/frs/download.php/2633/pyFMRadio-0.201.zip"&gt;ew release of pyFMRadio&lt;/a&gt; adds support for this kernel and allows switching the FM band.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;If you have a N800 and are currently in Japan, please test this Python code and report if it's actually working:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;from FMRadio import FMRadio&lt;br /&gt;import time&lt;br /&gt;&lt;br /&gt;r = FMRadio()&lt;br /&gt;r.set_fm_band(r.FM_BAND_JPN)&lt;br /&gt;for freq in r.scan():&lt;br /&gt;    r.set_frequency(freq)&lt;br /&gt;    r.set_volume(50)&lt;br /&gt;    time.sleep(3)&lt;br /&gt;r.close()&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6221429616845582256?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6221429616845582256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6221429616845582256' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6221429616845582256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6221429616845582256'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/11/enabling-fm-band-selection-on-n800.html' title='Enabling FM band selection on the N800'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6615894528329584898</id><published>2007-11-12T11:30:00.000-08:00</published><updated>2007-11-12T11:37:25.040-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pyfmradio'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>pyFMRadio and auto-scanning</title><content type='html'>&lt;a href="http://pyfmradio.garage.maemo.org"&gt;PyFMRadio&lt;/a&gt;, the N800 FM radio module for &lt;a href="http://pymaemo.garage.maemo.org"&gt;Python&lt;/a&gt; now supports automatic scanning for radio stations in the new release 0.20. The new version now also powers down the radio chip on close(), so it won't drain battery when the radio is not used.&lt;br /&gt;&lt;br /&gt;Here's some example code for callback-based station scanning:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;# import radio stuff&lt;br /&gt;from FMRadio import FMRadio, FMRadioUnavailableError&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;stations = []&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def scan_cb(freq, is_station):&lt;br /&gt;    """&lt;br /&gt;    Callback for scanning for stations. This callback is called for every&lt;br /&gt;    frequency and tells you if a radio station was found.&lt;br /&gt;    """&lt;br /&gt;&lt;br /&gt;    print "scanning @ %0.2f MHz" % (freq / 1000.0),&lt;br /&gt;    if (is_station):&lt;br /&gt;        print "STATION FOUND"&lt;br /&gt;        stations.append(freq)&lt;br /&gt;    else:&lt;br /&gt;        print ""&lt;br /&gt;        &lt;br /&gt;        &lt;br /&gt;&lt;br /&gt;# open the radio&lt;br /&gt;try:&lt;br /&gt;    radio = FMRadio()&lt;br /&gt;except FMRadioUnavailableError:&lt;br /&gt;    # radio not available&lt;br /&gt;    print "Your device doesn't seem to have a FM radio..."&lt;br /&gt;    import sys; sys.exit(1)&lt;br /&gt;    &lt;br /&gt;# get frequency range; currently only the US/Europe frequency band is supported&lt;br /&gt;# by the driver&lt;br /&gt;low, high = radio.get_frequency_range()&lt;br /&gt;print "Frequency range: %0.2f - %0.2f MHz" % (low / 1000.0, high / 1000.0)&lt;br /&gt;&lt;br /&gt;# scan for radio stations&lt;br /&gt;radio.scan(scan_cb)&lt;br /&gt;&lt;br /&gt;# if we have found some stations, start playing&lt;br /&gt;if (stations):&lt;br /&gt;    radio.set_volume(50)&lt;br /&gt;        &lt;br /&gt;    print "Now listen to the radio."&lt;br /&gt;    for freq in stations:&lt;br /&gt;        print "Tuning in %0.2f MHz." % (freq / 1000.0)&lt;br /&gt;        radio.set_frequency(freq)                &lt;br /&gt;        import time; time.sleep(3)&lt;br /&gt;&lt;br /&gt;else:&lt;br /&gt;    print "No radio stations found. The signal is too weak."&lt;br /&gt;&lt;br /&gt;# don't forget to shutdown the radio; this will also power down the radio chip&lt;br /&gt;print "Switching off the radio."&lt;br /&gt;radio.close()&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6615894528329584898?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6615894528329584898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6615894528329584898' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6615894528329584898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6615894528329584898'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/11/pyfmradio-and-auto-scanning.html' title='pyFMRadio and auto-scanning'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6662942244924594670</id><published>2007-11-10T02:48:00.000-08:00</published><updated>2007-11-10T03:05:24.280-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='n810'/><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>N810 maemo submission accepted</title><content type='html'>Here I am to join the lucky posts on planet.maemo.org about getting an N810 discount. Thanks to Nokia for choosing me again! :)&lt;br /&gt;&lt;br /&gt;My new &lt;a href="http://mediabox.garage.maemo.org"&gt;media center&lt;/a&gt; will soon be ready for the first release. It's already working great, only some rough edges to fix and some performance boosts to apply. When dealing with lots of thumbnail images in an resource-restricted environment such as the N800, you'll have to take special care about clean and efficient programming. And when I say "lots of thumbnail images", I mean that every video, every music ablum, and every image gets a thumbnail preview.&lt;br /&gt;&lt;br /&gt;Another big challenge will be to get the app running fine on the Nokia 770. No, this device isn't dead for me yet. Since the video bus of the 770 is actually faster than that of the N800, kinetic scrolling works great there as well. But I'm still struggling with memory limitations and some mplayer issues on the 770.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6662942244924594670?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6662942244924594670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6662942244924594670' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6662942244924594670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6662942244924594670'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/11/n810-maemo-submission-accepted.html' title='N810 maemo submission accepted'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-6675420399384828623</id><published>2007-11-07T11:42:00.000-08:00</published><updated>2007-11-07T12:48:29.726-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='mediabox'/><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>My Work on MediaBox</title><content type='html'>&lt;span style="font-weight: bold;"&gt;MediaBox Media Center&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Let me introduce &lt;a href="http://mediabox.garage.maemo.org/"&gt;MediaBox&lt;/a&gt;, a finger-friendly media center&lt;br /&gt;for Nokia internet tablets, to be released in a few days.&lt;br /&gt;&lt;br /&gt;This basically started some months ago as an experimental frontend to&lt;br /&gt;&lt;a href="http://mplayer.garage.maemo.org/"&gt;mplayer&lt;/a&gt;&lt;br /&gt;with physically correct kinetic scrolling for browsing the collection of&lt;br /&gt;video files. But soon it was clear to me that this user interface could do a&lt;br /&gt;lot more, so I added music playback and integrated the image viewer from my&lt;br /&gt;&lt;a href="http://obscura.garage.maemo.org/"&gt;Obscura project.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;MediaBox can play video, audio, display images, features a desk clock with&lt;br /&gt;large letters, and is open for new extensions. It will soon be able to use the&lt;br /&gt;FM radio in the N800 with the &lt;a href="http://pyfmradio.garage.maemo.org/"&gt;pyFMRadio project.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mediabox.garage.maemo.org/sshots/mediabox-video.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://mediabox.garage.maemo.org/sshots/mediabox-video.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Since the media player backend of MediaBox is mplayer, it will be able to play&lt;br /&gt;almost anything you throw at it, including Ogg Vorbis.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://mediabox.garage.maemo.org/sshots/mediabox-music.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://mediabox.garage.maemo.org/sshots/mediabox-music.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;PyFMRadio&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The Nokia N800 has a built-in FM tuner and I wanted to be able to use this with&lt;br /&gt;MediaBox. So far, the only FM radio application for the N800 seems to be the&lt;br /&gt;closed-source fmradio applet by Nokia. It's good but it's not finger-friendly.&lt;br /&gt;&lt;br /&gt;So I started diving into the kernel code and eventually came up with&lt;br /&gt;&lt;a href="https://maemo.org/community/wiki/fmradioprogramming/"&gt;a way&lt;/a&gt; to control the FM tuner chip with pure Python. This might&lt;br /&gt;be useful to other projects as well, so I set up the offspring project&lt;br /&gt;&lt;a href="http://pyfmradio.garage.maemo.org/"&gt;pyFMRadio.&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-6675420399384828623?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://pycage.blogspot.com/feeds/6675420399384828623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8649245443206318981&amp;postID=6675420399384828623' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6675420399384828623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/6675420399384828623'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/11/my-work-on-mediabox.html' title='My Work on MediaBox'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8649245443206318981.post-4985010542790068495</id><published>2007-10-25T14:19:00.000-07:00</published><updated>2007-10-25T14:25:26.645-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='maemo'/><title type='text'>Moved to blogger.com</title><content type='html'>I have moved my blog to &lt;a href="http://www.blogger.com/"&gt;blogger.com&lt;/a&gt; now. My next blog entry will be about MediaBox for maemo again. Expect some screenshots.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8649245443206318981-4985010542790068495?l=pycage.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4985010542790068495'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8649245443206318981/posts/default/4985010542790068495'/><link rel='alternate' type='text/html' href='http://pycage.blogspot.com/2007/10/moved-to-bloggercom.html' title='Moved to blogger.com'/><author><name>Martin Grimme</name><uri>http://www.blogger.com/profile/05731836850583838971</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author></entry></feed>
