November 21, 2009

Benjamin OtteVideo Hackfest day 2

(Benjamin Otte)

Carl stayed true to his awesomeness from yesterday: He updated the hackfest notes with the things we did today. In particular, it includes “hacking ideas” that we’d like to work on.

I’ve spent a lot of time discussing the ideas of my gst-plugins-cairo design with all people. And I have to say I’m happy to say that the general approach has seen excitement from all sides and there doesn’t seem to be any big issues with it. THe best way to summarize it is probably an event from today: Edward ran a gst-launch pipeline as a benchmark for gst-plugins-cairo and it completed in 0.2 seconds.

November 21, 2009 01:04 AM

November 20, 2009

Edward HerveyAnswering questions…

(Edward Hervey)

(This was initially posted as a reply to a blogpost regarding PiTiVi being proposed as a default application in the upcoming Ubuntu Lucid. That comment was removed for an unknown reason, so I thought it best to put it here, and it would also be interesting for other people)

What a depressing post (in some aspects). I’ll answer the various questions/comments/rants all the same.

PiTiVi doesn’t support DV/mpeg4/whatever-format

Where did you get that idea from ? PiTiVi doesn’t come shipped with codecs, it relies on GStreamer to provide the needed plugins/decoders/etc… If you load a DV file in pitivi and you don’t have the plugins, the application missing-plugin system should appear proposing you to download the needed plugin.

Collabora pushed PiTiVi aggresively into ubuntu

That’s 100% totally wrong. I personally had chats with Jono and Rick Spencer about having PiTiVi shipped as a default application, and canonical were interested by the idea of having a video editor shipped by default. All of this was far from being enforced, or us (Collabora) going out of our way to have PiTiVi shipped by default. And nothing’s engraved in stone at this point. If we (pitivi development team) get feedback/help on improving what’s bothering people by the Lucid release date and people deem it good enough to be shipped by default, great ! If we get no help… well.. PiTiVi won’t die and people will still be able to use it via PPAs.

Why ship PiTiVi as default app and not another video editor ?

I’d say the main reason is that all the dependencies (except for goocanvas, which is pretty slim) are already shipped by default : GStreamer, GTK, python. All the other editors would require bringing in more dependencies. I’ll let Canonical/Ubuntu confirm that or not.

lack of features …

On this part we have always taken the stand of making sure features are as solid as possible before adding new features. In terms of video editing, that means you do need to have input/output format support rock solid, trimming/cutting rock solid. Check out how many clips/movies/documentaries/… out there and see how much of them make use of video effects, for how long, and how many don’t.
The two features we find critically missing are : video transitions and overlaying. I just merged yesterday the videomixing branch yesterday to master which enables setting transparency on every video streams (like Sony Vegas does). It still has some issues, but having it in master will force/speedup the bugfixing process.
Video effects are not a top-priority. Getting those… without being able to do the features above are pointless. We won’t diverge from that point of view. Helping us get the above rock solid as fast as possible … will mean you will see video effects faster.

To people throwing generic rants about <video-editor-name> sucking

Write a video editor (or any non-trivial multimedia applicatoin), then come back and rant about other people’s application sucking. Then we might have a proper discussion. In the meantime… you’re not improving the situation.

PiTiVi is dead or no longer maintained

The 3 main developers (who also happen to be hired by Collabora and that includes myself) have been working on some other company work in the meantime. Keeping Collabora hiring those 3 developers, means ensuring they have time to be paid to work on it also. (I’d personnaly love to have people working 100% of the time on PiTiVi … but you need to take into account the reality of running a business).
We’re progressively getting more company time for PiTiVi (Brandon has been back on it full time for the past frew weeks for example). It’s far from being abandoned/dead, just that we do it at our own pace. It’s freely available (LGPL, no copryight attributions required) and will always stay that way. We always welcome contributions and are pretty fast to review/commit patches.

Drop in on #pitivi on irc.freenode.net or send us a mail on pitivi-pitivi@lists.sourceforget.net and come and give your feedback, what can be improved, what’s good and should be kept and … who knows … be part of the pitivi team :)

Edward Hervey: PiTiVi creator/maintainer, GStreamer hacker, Collabora Multimedia co-director

by Edward Hervey at November 20, 2009 04:19 PM

Bastien NoceraSticky tape

(Bastien Nocera) Google might know how to write a web browser, but writing an OS certainly isn't their forte.

You might have seen Matthew's mention of the acpid hacks, some of the other sources are just as funny to read.

by hadess (noreply@blogger.com) at November 20, 2009 12:03 PM

Benjamin OtteVideo Hackfest day 1

(Benjamin Otte)

The Video hackfest is on!
I originally wanted to summarize the happenings of the day, but Carl took notes: Go read them. I just want to add that I’m very happy with how it’s turning out: Lots of discussions happening all around, the weather is great and the hostel is awesome. Off to bed so I don’t miss any discussions tomorrow…

November 20, 2009 01:07 AM

November 19, 2009

Bastien NoceraFedora 12, and beyond

(Bastien Nocera)
Fedora 12

Fedora 12 got released yesterday, with plenty of nice new features.

My hand in that was the running bluetoothd on-demand, work on gnome-volume-control and its profile switching (meaning dead-easy 5.1 support), enhancements in the GNOME Bluetooth UI (which you probably already saw if you use Fedora 11), the PAN support in NetworkManager.

The stuff I really like is:
- the Bluetooth PAN support, so I can install the non-free wireless drivers on my laptop (which lacks Ethernet)
- the new notification theme
- the awesome work on KMS, and performance enhancements, which means I now use a GL compositing manager on all my machines
- the out-of-the-box mounting of my iPod Touch, though music syncing is still some way away.

You might want to read Matthias' interview for the Fedora 12 release.

Fedora 13

More recently work has started on Fedora 13.

nautilus-sendto got its own plugin API now, so you can extend it whilst keeping the code closer to your application or library. Empathy in GNOME 2.30 will take advantage of that. Pascal Terjan worked on the Pidgin plugin to make it use the Pidgin D-Bus interface, which means we don't need a Pidgin plugin to talk to nautilus-sendto anymore. Both changes are in Fedora 12 and Fedora 13.

Totem finally got some of my time, and a number of bug fixes have gone into the GNOME 2.28 and unstable branches. In master, we now have a nice OSD, disk-buffering of streams, reverse frame-stepping, and RTSP/HTTP authentication. Much thanks to the GStreamer guys, and Wim in particular, for making those last 3 items possible in Totem.

There's a few more items I'm still working on that'll sure please the crowds :)

by hadess (noreply@blogger.com) at November 19, 2009 01:52 PM

Sebastian PölsterlGNOME DVB Daemon 0.1.13 is out

One month after the last release, I released version 0.1.13 of GNOME DVB Daemon today. It's mainly a bug fix release which fixes a couple of problems with recordings, especially if watching and recording took place at the same time. There are only two new features: You can now sort channels either by name or by group in Totem. Channels can be grouped in gnome-control-center under Edit -> Channel lists. In addition, a detailed description of a show will be display if you double click on an entry in the "What's on now" view. This release depends on gst-rtsp-server 0.10.5 and GStreamer 0.10.25.

Plans for the next release include:

  • Support re-occuring recordings so you only have to schedule one timer to record your favorite weekly show
  • Allow to edit timers after they have been created
  • Basic support of UPnP/DLNA ScheduledRecording spec via Rygel
  • Only display option to select device groups if more than one device group is configured
  • Re-write of the user guide (possibly using Mallard)

by sebp at November 19, 2009 12:50 PM

November 17, 2009

Ralph Giles17 Nov 2009

In the Future, we will embed machine images in our Ogg files, which, when booted and given network access to the other multiplexed data will decode, render, and export the results data in a variety of JSON responses.

November 17, 2009 11:12 PM

Brian CameronGNOME Marketing Hackfest

This past week I attended the 2-day GNOME Marketing hackfest in Chicago from Tuesday, November 10th through Wednesday, November 11th, and I wanted to share a report about what happened at the event.&nbsp; It was really good to be able to further engage with the GNOME marketing team at the hackest and to be able to represent both Sun Microsystems (I was the only person from Sun at the event) and to also represent the GNOME Foundation.&nbsp; Since I obviously live in Chicago, it was pretty easy for me to attend. <br /> <br />To give some background, I started being involved with the GNOME marketing community shortly after being elected onto the GNOME Foundation board of directors (about 2 years ago).&nbsp; A lot of important decisions and discussion within the GNOME community happens on the marketing list.&nbsp; Therefore, I recommend that people with an interest to increase their participation with the GNOME community consider getting more involved with the GNOME marketing community.&nbsp; It is a great way to get one's finger more on the pulse of what the community is doing. <br /> <br />The Marketing Hackfest actually got started around 5pm on Monday the 9th.&nbsp; Several people (including Stormy Peters and Paul Cutler) arrived in Chicago by this time.&nbsp; So, I joined them for dinner at a downtown Chicago Thai restaurant.&nbsp; Afterwords we went to the Hard Rock Cafe to talk about GNOME marketing over drinks. <br /> <br />Tuesday the 10th was the first day of the hackfest at the Google offices at 20 W. Kinzie in Chicago.&nbsp; Not surprisingly, the Google offices are a really great environment to meet, work, and collaborate.&nbsp; With GNOME 3.0 approaching, everyone agreed that the hackfest should focus on marketing the new GNOME 3.0 release.&nbsp; The main focus was marketing towards end users (as opposed to developers, distributions, or organizations that help fund the GNOME Foundation). <br /> <br />Paul Cutler showed everyone the marketing presentation that he has been giving at recent conferences.&nbsp; Although his presentation did a good job of showing off the &quot;revamped user experience&quot; provided by GNOME 3.0, it was clear that there is still more work needed to clarify what GNOME 3.0 means to users.&nbsp; For example, while there are a lot of clear <br />improvements with how the desktop itself works (e.g. GNOME Shell &amp; zeitgeist), there is not as much clarity on what GNOME 3.0 means in relation to desktop applications.&nbsp; We spent some time brainstorming to identify additional ways to highlight what is exciting about GNOME 3.0. <br /> <br />One of the major tasks that had been planned in the hackfest agenda was to create more effective marketing materials to assist volunteers that run the GNOME booth at various conferences (who typically make use of the GNOME Event Box).&nbsp; In the past, the GNOME Foundation has gotten reports that people running such GNOME booths did not have a clear idea what to demonstrate, talk about, or how to answer common questions. <br /> <br />We spent much of the first day working collaboratively in gobby to compose first drafts of a talking points document, a FAQ, and a brochure that we intend to include with the GNOME Event Box to help such people more effectively demonstrate and present GNOME at such events.&nbsp; These materials will also be made available on the web to help people giving <br />presentations who are not using the GNOME Event Box. <br /> <br />After the 1st day of the hackfest, we spent the evening at the Rock Bottom Brewery for dinner, discussion, and drinks.&nbsp; Kevin Harris, who runs the Chicago Linux Users Group joined and there was good discussion on how to revitalize the Chicago GNOME community within the context of the Chicago LUG. <br /> <br />The second day of the hackfest was focused on developing a slogan for GNOME 3.0, and working to improve the marketing assets that the GNOME Marketing team manages.&nbsp; Refer here: <br /> <br /> <a href="http://live.gnome.org/GnomeMarketing/MarketingMaterial" class="moz-txt-link-freetext">http://live.gnome.org/GnomeMarketing/MarketingMaterial</a> <br /> <br />Mainly we focused on two areas where things are currently lacking.&nbsp; One, the GNOME community needs more stock presentations to showcase GNOME in general and the upcoming GNOME 3.0 release.&nbsp; It was highlighted that much of this sort of information could be useful to downstream distros so it is also important to provide this sort of information in a way that would be useful to them. <br /> <br />Two, the GNOME community needs template GNOME-branded slides.&nbsp; For example, people who receive travel funding from the GNOME Foundation should be expected to use GNOME-branded slides that highlight that the person was sponsored by the GNOME Foundation.&nbsp; Such presentations should also include a standard slide that encourages people in the audience to consider donating to the GNOME Foundation (e.g. via the Friends of GNOME program). <br /> <br />So, we spent several hours identifying what specific work need to be done in these two areas, and we started doing the work to fill in the missing pieces. <br /> <br />Also on the second day of the hackfest, Jason Clinton gave a 1-hour presentation about his ideas to improve GNOME application About dialogs to better market the GNOME project.&nbsp; He suggests that the About dialog should provide two new buttons.&nbsp; One that will launch a website to help users learn more about GNOME, and the second to encourage users to <br />donate to the GNOME Foundation.&nbsp; He proposed that GNOME should automatically track who donates money via this new About dialog (unless they opt-out).&nbsp; This way, when any user launches the About dialog, it would highlight and recognize those users who were inspired to donate from that program's About dialog.&nbsp; This, for example, would provide a way for GNOME users to recognize their favorite applications. <br /> <br />After the 2nd of the hackfest, we went to dinner at a local cajun restaurant named Heaven on Seven.&nbsp; The hackfest wrapped up right after dinner since pretty much everyone (aside from myself) needed to rush to the airport to catch flights home. <br /> <br />There were a lot of side-discussions both during the hackfest and after in the evenings.&nbsp; All of the dinners were working dinners and everyone did a great job of keeping on-topic.&nbsp; Such topics included: <br /> <ul> <li>How the GNOME community needs to be more effective at attracting attention from the press, and the importance of doing more effective and regular press releases. </li> <li>Accessibility, and the importance of keeping GNOME 3.0 accessible was a topic that frequently came up.&nbsp; The GNOME Marketing team seems to clearly understand that it will be a big blow to the GNOME message if GNOME 3.0 is not usably accessible.&nbsp;</li> <li>The marketing team is very interested in creating video advertising and instructional videos for GNOME 3.0.&nbsp; Several hours were spent talking about suitable topics and how to go about producing such videos in a volunteer community.&nbsp;</li> <li>Several times, it was highlighted that 97% of all &quot;Friends of GNOME&quot; donations come from people who are end-users and not GNOME Foundation members.&nbsp; However, the GNOME community does not do a very good job of advertising Friend of GNOME outside of the GNOME developer community.&nbsp; Much time was spent discussing how to better reach out and advertise the Friends of GNOME program directly to end-users.</li> <li>Getting more people from the GNOME community involved with the marketing project.&nbsp; The theme that &quot;all GNOME community members are really a part of the marketing effort&quot; came up frequently.</li> <li>People seemed to agree that the Marketing team should run a regular IRC meeting, much like the GNOME a11y team does.&nbsp; The idea being that this would help encourage more people to get involved with GNOME marketing projects.</li> <li>The importance of fostering more mentorship within the GNOME community to attract new volunteers in marketing and other areas.</li> <li>Ways to better recognize GNOME volunteers.&nbsp; For example, there was the suggestion that influential people in the GNOME Foundation and on the marketing team should invest more time to write positive recommendations for outstanding GNOME contributors on social networking websites like LinkedIn, and to develop other ways to highlight such outstanding contributors.</li> <li>Ideas on how to improve fundraising, including ideas on how the GNOME community could be more effective at pursuing grants. <br /></li> </ul> Overall, the event was a big success.&nbsp; This was the first time the GNOME Marketing community has ever gotten together for a face-to-face meeting.&nbsp; With GNOME 3.0 approaching, it is an important time for the marketing team to become more consolidated and focused on making GNOME 3.0 a success. <br /> <br />Everyone had a lot to contribute and there was a real feeling that the hackfest was a real energy boost that should result in a lot of productive work from the marketing team over the next months.&nbsp; People seemed to feel that another one or two Marketing Hackfests are in order before GNOME 3.0 is actually released.&nbsp; People also seemed to feel that future marketing hackfests should be longer (perhaps 3 or 4 days). <br /> <br />Of course, special thanks to Novell and Google for sponsoring the event.

by yippi at November 17, 2009 10:25 PM

Andy Wingocodification

(Andy Wingo)

Quoth Johnny Rotten: "You're only twenty nine, got a lot to learn". In my case, both conditions hold, and, regarding the latter:

Who knew?

by Andy Wingo at November 17, 2009 09:39 PM

GStreamerGStreamer Good 0.10.17 & Bad 0.10.17 stable releases

(GStreamer)

The GStreamer team is pleased to announce new releases of the Good and Bad Plugins modules in the 0.10 GStreamer stable release series.

Check out release notes for gst-plugins-good and gst-plugins-bad or download tarballs for gst-plugins-good and gst-plugins-bad

November 17, 2009 01:00 AM

November 16, 2009

Moovida NewsThe Apple ‘Main Menu’ and The Drive for ‘Simple & Faster’

It was with a slight smirk in the Fluendo offices as the Moovida team looked at the latest 3.0 update to Apple’s ‘Hobby’ project the AppleTV. What caused us to smile was the new changes to their ‘Main Menu’ with Apple declaring that it ”…features a simpler and faster interface that gives you instant access to your favorite content” [1]. Haven’t we seen this somewhere before and came to the same conclusion?

appletv_mm

It is interesting to see someone like Apple struggle with the complexities of a media center and despite its ‘hobby’ status it stands out as one of the poorest products in their inventory. How do you transport desktop features and methodology to a TV set and offer a simple interface that everyone can understand and find easy to use? Apple is failing at this. Some of the Moovida team has been doing this media center gig for nearly ten years and we feel we have the answers. We have been wrestling with interface ideas and that healthy balance of power versus simplicity as we continually ask ourselves that very question. I feel we are getting it right and on the verge of making it even better.

moovida_mm

When Moovida replaced Elisa, we redesigned our Main Menu. The reason for this was to remove clicks, to make the experience as speedy and intuitive as possible and more importantly put a real emphasis on ’simpler and faster’. In fact, at the time I highlighted the AppleTV as a shining example of what NOT to do! (hey, I don’t like everything Apple does!). However, Apple updated their Main Menu and in effect ‘borrowed’ one of the key aspects that make our media center so much more intuitive. Is Apple following in our footsteps? In many ways they are, but in a smug way it is nice to see a ‘competitor’ as big as Apple trailing behind us and yet still not achieving the level of user experience standard we feel Moovida offers (but maybe we’re just full of ourselves?).

Still, the good thing about our project being open source is, we have the chance to move faster and more importantly for us, it isn’t a hobby!

[1] Apple Introduces Apple Tv 3.0 Software With Redesigned User Interface – Eddy Cue VP of Internet Services: http://www.apple.com/pr/library/2009/10/29appletv.html

by David McLeod at November 16, 2009 05:25 PM

November 14, 2009

Zeeshan AliSome important definitions

(Zeeshan Ali) The information on this page is essential for everyone out there who is even tiny bit interested in UPnP/DLNA.

November 14, 2009 03:12 PM

November 12, 2009

Zaheer Abbas MeraliN900 (and other OMAP3 devices) DSP accelerated Theora

(Zaheer Abbas Merali)

David Schleef’s theora optimisation for the dsp in the OMAP3 will really make open video a reality for the N900 and other OMAP3 devices like Palm Pre/Motorola Droid. Thank you David and Mozilla for the work.

by admin at November 12, 2009 08:45 AM

David SchleefTheora on TI C64x+ DSP and OMAP3

(David Schleef)

For the last several months, Entropy Wave has been making Theora work on the TI C64x+ DSP as a project for Mozilla Corp.

An Ogg/Theora video of Big Buck Bunny being played back on a Beagle Board via the C64x+ DSP coprocessor

An Ogg/Theora video of Big Buck Bunny being played back on a Beagle Board via the C64x+ DSP coprocessor

The goal behind porting to the C64x+ is to run on OMAP3 SoC from TI, which has an ARM Cortex A8 core and also has a C64x+ DSP coprocessor. This SoC (System on Chip) is best known as being the base behind Nokia’s N series of mobiles (including the N900), the Motorola Droid, Palm Pre, and the Beagle Board. The DSP coprocessor is commonly used for audo and video processing, including video encoding and decoding, and TI makes codecs available for MPEG-4 video decoding, AAC decoding, etc.  Having Theora decoded on the DSP fits into Mozilla’s Fennec project, making Firefox with video useful on a mobile platform.

One of the engineering reasons behind having a separate processor for media handling is that it separates real-time tasks (media decoding) from non-real-time tasks, such as running web browser software. From the standpoint of software running on the ARM, the video decoder looks and acts just like a hardware video codec. The DSP on the OMAP3 is even more compelling for video decoding because attached to the DSP are several units that accelerate motion vector copying, VLC decoding, and loop deblocking. Unfortunately, these pieces are not publicly documented by TI, so the current Theora port (which is open source) is unable to use them. A future Entropy Wave project will likely add support for these acceleration units which would allow the performance of the Theora decoder to be similar to TI’s MPEG-4 codec, which can do 800×480 playback (possibly more?). As it looks now, the resulting code would necessarily be closed source until such a time when TI wishes to make the specifications public.

As it currently stands, the Theora decoder plays 640×360 24fps at slightly more than 100% speed on average. This isn’t quite good enough to call it “real time”, since some frames take longer than the allotted time to decode, but it’s pretty close and the results are good. Additional speed improvements in libtheora would require internal changes, which would be a project in itself. One clear area for improvement is that the DSP spends a substantial part of its time idle, because the host code is serialized with the DSP processing. Fixing this is likely to put the above case firmly into the “real time” category. Given that 640×360 is larger than the iPhone display resolution and almost as large as the N900 resolution, it’s clearly good enough, even if it is less than TI’s hardware accelerated MPEG-4.

On the Entropy Wave site is a page describing the demo, including where to download images and how to compile source code.

A big thanks to the people that laid the foundations for this work, especially Felipe Contreras.

by admin at November 12, 2009 04:24 AM

November 11, 2009

Moovida NewsGood things come in open packages

Moovida is a great open source Media Center, simple and free to download on Linux or Windows . But what’s even sweeter is when it’s packaged by your open source operating system…

Now Ubuntu and Mandriva users can have the Moovida installed faster that you can say “supercalifragilisticexpialidocious” (ok maybe this is only true for heavy stutterers) by checking the software center for Ubuntu, or by editing the package manager. Find details on how Moovida is packaged on all other Linux distributions here.

To update Moovida to the latest version, there are automated and transparent updates in the plugin repository, and Ubuntu users can also use the packages in our PPA .
 
Fear not Windows users, we understand that it might sound like Chinese to you, this post is for Linux aficionados ;)

by Vober at November 11, 2009 09:13 PM

Bastien NoceraA little OSD

(Bastien Nocera)
Totem in master now has purdy OSD when you press a key, or a key on your remote control, and you're in fullscreen. Note that this requires compositing.

Screenshot streaming the Avatar HD trailer

by hadess (noreply@blogger.com) at November 11, 2009 04:58 PM

November 10, 2009

Andy Wingohacker culture, permaculture

(Andy Wingo)

callings

Here's an idea: of everyone out on the ether brushed by these bytes, there has to be a good number of us that are in "it" not just for the game, but for life: in the sense that our actions can be life-affirming, that our interactions can help bring about a more beautiful world.

So, with that realization in mind, I call "book club". Let's read a book together!

What book, you ask? Here's mine for now: Permaculture: Principles and Pathways Beyond Sustainability. It's by David Holmgren, one of the originators of the permaculture design system.

I think that Holmgren has as much to say about how we live life as Alexander. He's also a builder, in a way. It really seems to me that Holmgren's work fosters Alexander's quality-without-a-name. All that is by way of introduction, to say that people that like Alexander, of whom there are many in the hacker world, might well enjoy Holmgren.

But why this book now? The answer is that Lyn Gerry, the host of the radio show, Unwelcome Guests, is reading it to us: an hour every week. It's nice to hear a book. It's also nice to hear it like this, over time, so every part has a chance to seep in.

So. For the first installment I'll give a direct link to the MP3: here. It starts with a poem and a tune, then the reading. I'm not sure where the reading starts in second installment, from this week's episode, because I just downloaded it. Usually it's at the start of the second hour -- the hours are separated in the direct downloads -- but I always listen to the whole thing anyway, so I download them both. There's a podcast link too on the archives page.

I would like for our conversations about the book to be open, in the sense that radio is open, for people to tune in and listen to if they want. By that I mean to say let's not have a mailing list -- what do people think about seeing if we can have a cross-blog-and-comments, cross-identica/twitter discussion? That could fail of course, but it sounds like a nice thing to try.

Anyway, let me know if you want to join. I know that if you're interested, that will make at least two of us.

cold, cold part of the world

I'm off to Sweden tomorrow for the 2009 GNU Hackers Meeting, co-located with FSCONS, the Free Society Conference and Nordic Summit. I'll talk at the GHM about recent developments in Guile, and Guile's place within the GNU universe. If you're going to be at FSCONS, let's meet up!

by Andy Wingo at November 10, 2009 10:53 PM

Jan SchmidtA glimpse of audio nirvana

(Jan Schmidt)

This is post is basically a love letter to the Pulseaudio and Gnome Bluetooth developers.

I upgraded my laptop to Ubuntu Karmic recently, which brought with it the ability to use my Bluetooth A2DP headphones natively. Getting them running is now as simple as using the Bluetooth icon in the panel to pair the laptop with the headphones, and then selecting them in the Sound Preferences applet, on the Output tab.

As soon as the headphones are connected, they show up as a new audio device. Selecting it instantly (and seamlessly) migrates my sounds and music from the laptop sound device onto the headphones. The Play/Pause, Next Track and Previous Track buttons all generate media key keypresses - so Rhythmbox and Totem behave like they’re supposed to. It’s lovely.

If that we’re all, it would already be pretty sweet in my opinion, but wait - there’s more!

A few days after starting to use my bluetooth headphones, my wife and I took a trip to Barcelona (from Dublin, where we live for the next few weeks… more on that later). When we got to the airport, the first thing we learned was that our flight had been delayed by 3 hours. Since I occasionally hack on multimedia related things, I typically have a few DVDs
with me for testing. In this case, I had Vicky Christina Barcelona on hand, and we hadn’t watched it yet - a perfect choice for 2 people on their way to Barcelona.

Problem! There are four sets of ears wanting to listen to the DVD, and only 2 audio channels produced. I could choose to send the sound to either the in built sound device, and listen on the earbuds my wife had, or I could send it to my bluetooth headphones, but not both.

Pulseaudio to the rescue! With a bit of command-line fu (no GUI for this, but that’s totally do-able), I created a virtual audio device, using Pulseaudio’s “combine” module. Like the name suggests, it combines multiple other audio devices into a single one. It can do more complex combinations (such as sending some channels hither and others thither), but I just needed a straight mirroring of the devices. In a terminal, I ran:

pactl load-module module-combine sink_name=shared_play adjust_time=3 slaves=”alsa_output.pci-0000_00_1b.0.analog-stereo,bluez_sink.00_15_0F_72_70_E1″

Hey presto! Now there’s a third audio device available in the Sound Preferences to send the sound to, and it comes out both the wired ear buds and my bluetooth headphones (with a very slight sync offset, but close enough for my purposes).

Also, for those interested - the names of the 2 audio devices in my pactl command line came from the output of ‘pactl list’.

This kind of seamless migration of running audio streams really isn’t possible to do without something like Pulseaudio that can manage stream routing on the fly. I’m well aware that Pulseaudio integration into the distributions has been a bumpy ride for lots of people, but I think the end goal justifies the painful process of fixing all the sound drivers. I hope you do too!

edit
Lennart points out that the extra paprefs application has a “Add virtual output device for simultaneous output on all local sound cards” check-box that does the same thing as loading the combine module manual, but also handles hot-plugging of devices as they appear and disappear.

by thaytan at November 10, 2009 07:41 PM

Moovida NewsIt ain’t over til it’s over

Remember the Moovida-Mandriva dev contest we announced a while back? Well you have two weeks to submit your contributions for the chance to win some sweet prizes. We’ve already received great plugin submissions, but there are still so many possibilities out there we don’t even know where to begin… ok well actually we do, just make sure not to duplicate your efforts with existing Moovida plugins.

So what fruits have the dev contest brought so far? So far Vimeo, Arte and CNN will be available soon. Here’s a sneak peek of what type of content awaits on your Moovida Media Center:

  • With Vimeo, you don’t need to search through thousands of crap videos before finding something worth watching. They’ve got gems of all kinds like this 5 second film:
  • Arte offers audacious and artsy content in French & German, not to say weird. They also stream great live concerts.
  • Dude, if you don’t know CNN, you need this plugin badly. It’s a little something we like to call news. Here’s a prime example of their high standards in reporting:

I’m pumped, are you?

by Vober at November 10, 2009 11:49 AM

November 09, 2009

Andy Wingoclass redefinition in guile

(Andy Wingo)

Yes hello hello!

Long-time readers will perhaps recall this diagram:


figure zero: things as they were.

It comes from an article describing how Guile represents its objects in memory, with particular concern for Guile-GNOME.

I was hacking on this code recently, and realized that this representation was not as good as it could be. Our switch to the BDW garbage collector lets us be more flexible with the size of our allocations, and so we can actually allocate the "slots" of an object inline with the object itself:


figure one: things how maybe they could have been.

Alas, during the hack, I discovered a stumbling block: that this representation doesn't allow for classes to be redefined.

redefine a data type, what?

Yes, Guile's object-oriented programming system (GOOPS) allows you to redefine the types of your data. It's OK! CLOS lets you do this too; it's an old tradition. Redefining a class at runtime allows you to develop by incremental changes, without restarting your program.

Of course once you change a class, its instances probably need to change too, probably reallocating their slots. So we have to reintroduce the indirection -- but allowing for locality in the normal, non-redefined case. Like this:


figure two: things how they are, almost.

So updating an instance is as simple as swapping a pointer!

Almost.

Well, not really. This is really something that's unique to Lisp, as far as I can tell, and not very widely-known in the programming community, and hey, I didn't completely understand it -- so man, do I have a topic for a blog or what.

step one: make a hole in the box

The way redefinition works is that first you make a new class, then you magically swap the new for the old, then instances lazily update -- as they are accessed, they check that their class is still valid, and if not update themselves. It's involved, yo, so I made a bunch of pictures.


figure three: class redefinition begins with defining a new class.

So yeah, figure three shows the new class, lying in wait beside the old one. Then comes the magic:


figure four: same identity, different state.

What just happened here? Well we just swapped the vtable and data pointers in the old and new classes. For all practical purposes, the old class is the new class, and vice versa. All purposes except one, that is: eq?. The old class maintains its identity, so that any code that references it, in a hash table for example, will see the same object, but with new state.

The class' identity is the same, but its state has changed. That's the key thing to notice here.

Now we mark the old class's data as being out of date, and the next time its instances check their class... what? Here we reach another stumbling block. The old class has already has new state, so it is already fresh -- meaning that the instance will think nothing is wrong. It could be that the instance was allocated when its class declared two slots, but now the class says that instances have three slots. Badness, this; badness.

So what really needs to happen is for instances to point not to the identity of their classes, but to the state of their classes. In practice this means pointing directly to their slots. This is actually an efficiency win, as it removes an indirection for most use cases. Comme ça:


figure five: instances actually point to class state, not class identity.

As we see in the figure, a well-known slot in the class holds the redefinition information -- normally unset, but if the class is invalidated, it will allow the instance to know exactly which version of the class it is changing from and to.


figure six: new equilibrium.

And finally, figure six shows the new state of affairs -- in which slot access has been redirected for all redefined classes, and all of their instances, transitively.

efficiency

All in all, this is quite OK efficiency-wise. Instance data is normally local, and class data is one indirection away. A redefined instance will have nonlocal data, but hey, not much you can do otherwise, without a copying collector.

There is one efficiency hack worth mentioning. Accessors, discussed in an earlier article, don't need to check and see if their class is up to date or not. This is because they are removed from the old class and re-added to the new one as part of the redefinition machinery.

summary

Redefinition is complicated, but pretty neat.

really, that's the summary?

Yes.

by Andy Wingo at November 09, 2009 02:16 PM

Thiago Sousa SantosTrying GStreamer at Windows

Since I've started working with GStreamer I had never tried it out on Windows and tonight I decided to try it out. Edward pointed me to the winbuilds and it took no more than pressing 'next' 4 or 5 times to have default applications (gst-launch, gst-inspect...) and lots of plugins. Easy enough.

That must be the reason it has been some time since I've heard complaints about installing/using GStreamer on Windows. I wonder if there are any other builds out there like these?

Thanks ylatuya!

by thiagoss (noreply@blogger.com) at November 09, 2009 01:26 PM

Zaheer Abbas MeraliN900 Youtube app

(Zaheer Abbas Merali)

At the end of last week, I put packages for flv and ffmpeg gstreamer plugins into maemo extras-devel for fremantle (the version of Maemo that ships in the N900). With those packages, the N900 can play flv files from youtube and elsewhere but there was no app making use of it except the built in media player which one would have to write a mafw plugin for the different sites. So on Sunday afternoon, after a good round of golf (albeit some really crappy short putts missed) I decided to try and write a youtube browser and player. After 20 minutes (and code to parse youtube stuff borrowed from Canola2), I had a start. It would get the top rated videos list from you tube and display them in a pannable area as a list of buttons. Tapping a button would play the clip with GStreamer’s playbin2.

Then I thought maybe the app could be more useful to others with a little work, I gave the app a name: zoutube. I gave the app a crappy icon (icon designers feel free to contribute a nicer icon) and added debian packaging stuff. I made the app show a list of YouTube’s categories as well as Recently Features, Most Viewed, Top Rated, Most Recent as the front screen before it showed the videos. The next features I plan are:

  • search
  • show full description
  • seek bar when playing
  • download
  • thumbnail of video

Please try it out, it is in extras-devel if you have it enabled, it will appear as zoutube in the App Manager on your N900 under Internet and Networking. Also feedback welcome and appreciated. Screenshots here (video not in player screenshot because screenshotting on N900 does not show accelerated video overlay):

Front Screen
Video List
Player

by admin at November 09, 2009 09:02 AM

November 08, 2009

Andy Wingooptionals, keywords, oh my!

(Andy Wingo)

OK! Where were we?

In my last dispatch, I talked about case-lambda in guile. The gist of it is, let procedures parse their own arguments, and they can do neat stuff like multiple-arity dispatch.

Also, neat stuff like optional and keyword arguments! Consider our my-write example from last time:

(define my-write
  (case-lambda
    ((obj port) (write obj port))
    ((obj)      (my-write obj (current-output-port)))))

It's a little silly, to write it this way. It's not essentially one procedure with two different bodies, it's one procedure with one required argument, and one optional argument. The optional argument defaults to (current-output-port).

So, as you would imagine, there is a better way to express this "design pattern": lambda*, and its sugary friend, define*.

In this case, we would simply define my-write like so:

(define* (my-write obj #:optional (port (current-output-port)))
  (write obj port))

So nice, so clear. Default values are only evaluated if the argument is missing. (It's a rare Python programmer that's not surprised about Python's behavior in this regard; but I digress.)

keyword args too

Optional arguments are good at allowing for concision and extensibility, but code that uses them can be confusing to read. Actually this is a problem with positionally-bound arguments in general.

I like how Carl Worth puts it: that nice prototypes can result in inscrutable code. His solution in C is to have function names encode their arities, but we can do better in Scheme, with keyword arguments.

So let's say we want to add a "detailed" argument to my-write. We can add a keyword argument:

(define* (my-write obj
                   #:optional (port (current-output-port))
                   #:key (detailed? #f))
  (if detailed?
      (format port "Object ~s of type ~s" obj (class-of obj))
      (write obj port)))

Invocations are really nice to read:

(my-write 'foo #:detailed? #t)
=| Object foo of type #<<class> <symbol> 8c4fca8>

(my-write 'foo (open-output-file "foo.log") #:detailed? #t)
; writes the same thing to foo.log

The second example gives an explicit port; and indeed, I am left wondering what it is, when I read it. Keyword arguments make for more readable code.

Keyword arguments also allow for better extensibility. But don't take it from me, take it from P. Griddy:

Most of the operators in Rtml were designed to take keyword parameters, and what a help that turned out to be. If I wanted to add another dimension to the behavior of one of the operators, I could just add a new keyword parameter, and everyone’s existing templates would continue to work. A few of the Rtml operators didn’t take keyword parameters, because I didn’t think I’d ever need to change them, and almost every one I ended up kicking myself about later. If I could go back and start over from scratch, one of the things I’d change would be that I’d make every Rtml operator take keyword parameters.

-- Paul Graham, from a talk he gave back when he didn't talk about startups so durn much

And, there's one more thing, which applies both to optional and keyword arguments: the default values are evaluated in the lexical context of their preceding arguments. So you can have a later argument referring to an earlier one. For example, Guile's compile is defined like this:

(define* (compile x #:key
                  (from (current-language))
                  (to 'value)
                  (env (default-environment from))
                  (opts '()))
  ;; wizardly things here
  ...)

See how env's default value references from? Awesome, yes? I thought so.

newness

So what's new about all this? Not much, semantically. Guile has supported lambda* and define* for more than 10 years. But now they are available in the default environment, and they are fast fast fast -- for the same reasons that case-lambda is faster now. There are special opcodes to process stack arguments into optionals, and to shuffle and bind keyword arguments, all without consing a single cell.

Also, now the toolchain knows about optional and keyword arguments, so that backtraces and printouts show them nicely. For example, my-write prints like this:

#<program my-write (obj #:optional port #:key detailed?)>

Ah, there is case-lambda*; though it is of dubious utility, given that it can only reasonably dispatch on the required and optional arity, and not on keyword args. But there it is.

In any case, I look forward to using lambda* more in the future, without speed trepidations. Just say no to rest arguments masquerading as optionals!

by Andy Wingo at November 08, 2009 12:33 PM

November 07, 2009

Andy Wingocase-lambda in guile

(Andy Wingo)

Oh man, does the hack proceed apace. I really haven't had time to write about it all, but stories don't tell themselves, so it's back behind the megaphone for me.

Guile is doing well, with the monthly release train still on the roll. Check the latest news entries for the particulars of the past; but here I'd like to write about a couple aspects of the present.

First, case-lambda. The dilly here is that sometimes you want a procedure that can take N or M arguments. For example, Scheme's write can be invoked as:

(write "Hi." (current-output-port))
=| "Hi."

(=| means "prints", in the same way that => means "yields".)

But actually you can omit the second argument, because it defaults to the current output port anyway, and just do:

(write "Hi.")
=| "Hi."

Well hello. So the question: how can one procedure take two different numbers of arguments -- how can it have two different arities?

The standard answer in Scheme is the "rest argument", as in "this procedure has two arguments, and put the rest in the third." The syntax for it is not very elegant, because it introduces improper lists into the code:

(define (foo a b . c)
  (format #t "~a ~a ~a\n" a b c))
(foo 1 2 3 4)
=| 1 2 (3 4)

You see that 1 and 2 are apart, but that 3 and 4 have been consed into a list. Rest args are great when your procedure really does take any number of arguments, but if the true situation is that your procedure simply takes 1 or 2 arguments, you end up with code like this:

(define my-write
  (lambda (obj . rest)
    (let ((port (if (pair? rest)
                    (car rest)
                    (current-output-port))))
      (write obj port))))

It's ugly, and it's not expressive. What's more, there's a bug in the code above -- that you can give it 3 arguments and it does not complain. And even more than that, it actually has to allocate memory to store the rest argument, on every function call. (Whole-program analysis can recover this, but that is an entirely different kettle of fish.)

The solution to this is case-lambda, which allows you to have one procedure with many different arities.

(define my-write
  (case-lambda
    ((obj port) (write obj port))
    ((obj)      (my-write obj (current-output-port)))))

implementation

You can implement case-lambda in terms of rest arguments, with macros. Guile did so for many years. But you don't get the efficiency benefits that way, and all of your tools still assume functions only have one arity.

Probably the first time you make a VM, you encode the arity of a procedure into the procedure itself, in some kind of header. Then the opcodes that do calls or tail-calls or what-have-you check the procedure header against the number of arguments, to make sure that everything is right before transferring control to the new procedure.

Well with case-lambda that's not a good idea. Actually if you think a bit, there are all kinds of things that procedures might want to do with their arguments -- optional and keyword arguments, for example. (I'll discuss those shortly.) Or when you are implementing Elisp, and you have a rest argument, you should make a nil-terminated list instead of a null-terminated list. Et cetera. Many variations, and yet the base case should be fast.

The answer is to make calling a procedure very simple -- just a jump to the new location. Then let the procedure that's being called handle its arguments. If it's a simple procedure, then it's a simple check, or if it's a case-lambda, then you have some dispatch. Indeed in Guile's VM now there are opcodes to branch based on the number of arguments.

So much for the VM; what about the compiler and the toolchain? For the compiler it's got its ups and downs. Instead of a <lambda> that just has its arguments and body, it now has no arguments, and a <lambda-case> as its body. Each lambda-case has an "alternate", the next one in the series. More complicated.

Then you have the debugging information about the arities. The deal here is that there are parts of a procedure that have arities, probably contiguous parts, and there are parts that have no arity at all. For example, program counter 0 in most procedures has no arity -- no bindings have been made from the arguments to local variables -- because the number of arguments hasn't been checked yet. And if that check fails, you'll want to show those arguments on your stacktrace. Complication there too.

And the introspection procedures, like procedure-arguments and such, all need to be updated. On the plus side, and this is a big plus, now there is much more debugging information available. Argument names for the different case-lambda clauses, and whether they are required or rest arguments -- and also optional and keyword arguments. This is nice. So for example my-write prints like this:

#<program my-write (obj port) | (obj)>

So yeah, Guile does efficient multiple-arity dispatch now, and has the toolchain to back it up.

Next up, efficient optional and keyword arguments. Tata for now!

by Andy Wingo at November 07, 2009 11:52 AM

Andy Wingodigital interfaces

(Andy Wingo)

I made some tomato and red pepper soup for lunch yesterday. Before I had a chance to eat it, the universe decided it still needed more red, and that I should try something stupid with a pocketknife. I sliced up my left forefinger and thumb pretty good.

This blog seems to be specializing in thoughts just before blood, so here it is: ah fuck, going to have to get stitches. I knew that in the first second.

Thankfully, there's a CAP (Centre d'Atenció Primària) in most neighborhoods, so after laying down on the couch to make sure I wouldn't faint, and grabbing chocolate from the cupboard, considering I hadn't yet eaten the soup, I walked the 10 minutes to the CAP, my hastily bandaged hand held high. People looked at me funny.

An hour and a half later, well, four stitches in the index finger, three on the thumb. But I'm ok.

* * *

I hear that some family of mine is going to these "tea party" protests. If you're not plugged into the States political scene, the deal is this: the Republican brand is broke, and everyone knows it. But there is so much anger at their base. So voila Republican anger without the Republican state trappings, a catchment of the neofascist tendencies in all of us, whipped up around a symbol: the idea that Obama is a foreign element, an outsider, not of us, coming to enslave us all.

One of my family writes, referring to the return of another from these "tea party" protests:

When you are released and your tracking anklet has been removed. . . what do you say we move to Montana and prepare for the movie Red Dawn? We don't have to paint Wolverine on the side of every Afghan or Obamian tank that we destroy, but we can live off the land, sleep under the stars and pee in overheated radiators. The enemy will be obvious out there. I remember Sesame Street. . . . which one does not look like the others. . . . got it. Always look for the red dot and the table cloth on the head.

This makes me so sad. And the thing that's really binding them together, even the less racist, is hatred of "Obamacare" -- the idea that one should be able to walk into a clinic, get treated well and kindly, and walk out, regardless of your employment status, without signing for anything, without paying anything, as I did yesterday, in this foreign land.

by Andy Wingo at November 07, 2009 10:08 AM

November 06, 2009

Moovida NewsThe Future of Music

If you’re a music fiend and want to be in the know without having to spend countless hours perusing music blogs and listening to uninspired podcasts, Moovida highly recommends wearehunted.com. It’s become ridiculously hard to stay on top of all the new talent since mySpace emerged, and if your day job’s not music, this site should become your reference point. It combines semantic search with aggregation technology (translation: it stalks music trends from Twitter, Facebook, P2P, etc.), so you don’t have to waste your time on streaming services’ often questionable suggestions.

Wish it were a Moovida Media Center plugin?

by Vober at November 06, 2009 11:50 AM

Thomas Vander SticheleDedicated separate Firefox windows

(Thomas Vander Stichele)

Dear intarweb,

here’s what I’d like to be able to do. I would like to start a completely separate Firefox window, in a separate process, with a given webpage. This process should be completely separate from my regular browsing, not take new links in its window when I click links somewhere else (usually they go to the most recently opened window), not crash when the regular firefox process crashes, and not bog down because my regular firefox goes to 100% CPU and beyond.

It seems to be hard to google for this idea; is it possible ?

by Thomas at November 06, 2009 09:59 AM

Thomas Vander SticheleBest post-sale screen ever

(Thomas Vander Stichele)

Just gave in to the geeky side of the force this morning and bought a DVD documentary about BBS’s. (the version I bought comes with a DVD full with BBS text files, ANSI art, and random crap.)

After buying, this is the screen I got:

I don’t think I ever got a chuckle out of what happened right *after* I forked over cash. Here’s to you, Bob!

by Thomas at November 06, 2009 09:24 AM

November 05, 2009

Bastien NoceraGet Moblin, get GNOME

(Bastien Nocera) If you were to install the new Moblin 2.1 somewhere, you'd be getting a gnome-bluetooth powered Bluetooth panel.

All the code lives upstream in the gnome-bluetooth module on master.

by hadess (noreply@blogger.com) at November 05, 2009 10:10 PM

Mirco MüllerStupidity of the day

(Mirco Müller)

I’m leaving for Texas, USA soon. Me being a German living in - guess - Germany, causes the need to apply for the US “Visa Waiver Program” using https://esta.cbp.dhs.gov (thanks again to Otto for reminding me *g*) these days. While clicking through and filling out the forms of the electronic variant of that “green sheet of paper” (the one you used to have to fill out on the plane prior to landing on US soil) I was greeted by this notice…


small_umlaut-failure-in-form_png.png

It’s almost 2010! Have the people, who implemented that web-interface, ever heard of Unicode or do they expect international travelers to not use anything but ASCII to supply their (usually non-english) names, which carry the high probability with them to not use ASCII characters only? For me it’s just the ü in my surname. I wonder what people with funkier names do, when they have to diverge from the correct name-spelling to something this ESTA-system accepts. Once they succeed there, I bet they have a hard time trying to convince the staff at customs, that they are really themselves, because the spelling of their name on the passport doesn’t even remotely match the spelling in the visa-waiver-form.

I once almost wasn’t let aboard a plane in Germany, because the travel-agency booked my flight on “Mueller”, but my passport says “Müller”. Is all that the legacy-fault of Cobol?

by MacSlow at November 05, 2009 06:28 PM