Category Archives: General

Excited about Cockpit

So we had the DevConf conference here in Brno this weekend. One of the projects I am really excited about is Cockpit. Cockpit is a new server administration tool developed by Red Hat engineers which aims at providing a modern looking and userfriendly interface for your servers. There has been many such efforts over the years, but what I feel makes this one special is that it got graphical designers and interface designers involved, to ensure that the user experience is kept in focus instead of being taken hostage by underlaying APIs or systems. Too many such interfaces, be they web based or not tend to both feel and look clunky, for instance sometimes exposing features not because anyone realistically ever would want them, but because the underlying library happen to have a call for it.

Cockpit should also hopefully put the final nail in the coffin for the so called ‘server desktop’. The idea that you need to be able to run a graphical shell using X on your server adds a lot of pain with little gain in my opinion. The Fedora Server product should hopefully become a great showpiece for how nice a Linux server can be to use and configure when you have something like Cockpit available.

There was some nice videos showing what is already in Cockpit shown at the conference so hopefully they will be available online soon. In the meantime I recommend taking a look at the Cockpit web page.

A thank you to Google from Desktop Linux

We sometimes grumble a bit about Google in the community when they do things we feel are not generally helpful to the overall community. But I think we should be equally good at saying thanks when Google do great things. So thanks to our LibreOffice superstar Caolán McNamara I was made aware that Google has released two new open fonts along with Chrome. So what is so exciting about a new font you say?

Well one of them, called Carlito, is metrically compatible with the current MS default font called Calibri. You can get the font here. It is licensed under the OFL 1.1.

So for those wondering what metrically compatible means, I for sure did when I first heard the term, it basically mean that while the individual glyphs in the font doesn’t look like the Calibri font (that would not be legal), each individual letter has the same height and width as their Calibri counterpart. This means that if you import a document using Calibri into LibreOffice and you don’t have Calibri or a metrically compatible font installed, your document layout would change as the font LibreOffice would need to use instead have letters that might in general be slightly wider for instance. So with Carlito installed this will no longer be a problem, the glyphs might look a bit different, but you can be sure that the overall layout stays the same.

And for certain professions that can be crucial, for instance try speaking to the legal team of your company about them using LibreOffice and they are likely to tell you that they will only do that if they can feel certain that when another lawyer sends them a contract, the layout will not change when they view it, as such changes could at least potentially be the cause of a dispute over the meaning of a paragraph. (That worry was probably the main reason the legal profession stayed with Word Perfect for such a long time, when the rest of the world had moved on.)

So we are now going to get this new font packaged for Fedora and Red Hat Enterprise Linux so soon as possible, to make your productivity experience even better :)

So thank you Google, this is much appreciated!

Brno GUADEC Call for Papers!

I would like to give everyone a friendly reminder that Saturday the 27th of April is the official deadline for the GUADEC 2013 Call for Papers. So make sure to get your proposal submitted.

We hope to have a wide range of talks this year, including talks on related subjects such as Wayland and Multimedia, so don’t automatically assume that you will not get a talk approved because its not ‘pure GNOME’.

GUADEC this year will be in Brno in the Czech Republic, so I hope to see as many of you as possible here.

Open Source software and crowdsourcing

So thanks to crowd sourcing we are getting a lot of linux games coming out, titles such as Double Fine Adventure, Wasteland 2, Spaceventure, Project Eternity, Hero-U: Rogue to Redemption, Godus, Torment: Tides of Numenera,Arcade Racer and a lot more are all coming to the Linux platform thanks to crowdsourcing.

The question that one would want to answer is if crowd sourcing can work for open source projects creating useful software or other kind of tools. One project I am really hoping gets funded currently is Geary, the open source email client from the great guys at Yorba. Not that I personally are desperate for a new email client, I am a happy user of the Evolution email client, but I also know that email is a very personal thing for many people and an area where having different client offering different experiences might make a difference. Also proving that a non-profit outfit like Yorba can fund themselves through crowdsourcing is an important thing to demonstrate. So I have already pledged to Geary and I hope you will too.

They are not the only such project out there of course. Another project I have pledged to is the Phantom Open Emoji project which wants to create a full set of liberally licensed emoji/smileys covering the Unicode 6.0 set of over 800 such things. They only need to reach 25,000 USD in funding to create the full set, so I hope they can make that goal and we can then include support for these in Empathy.

The final project I want to mention is the OpenShot kickstarter. While I do think the best solution would be a GStreamer based one like PiTiVi for various reasons I am still happy that this kickstarter has reached is minimum funding goal already as it is does show success at funding open source development projects.

That said what strikes me is that the 3 open source projects above are all actually quite cheap, in the sense that the funding amounts they ask for are not high at all. And when you consider that games such as Torment reach 4 million USD in crowd sourcing funding one could wish that people would be a bit more prepared to bankroll open source projects. That said I guess just like games had their breakthrough moment with the Double Fine Adventure kickstarter, maybe open source development needs its own shinning star to lead the way. So if you haven’t already please pledge to one or more of the open source efforts above.

There will be more attempts of exploring this space though I am sure, I am even planning to be involved in one such effort myself, but more details on that later.

GStreamer Hackfest in Milan

As those of you following the GStreamer development mailing list or the GStreamer Google Plus profile know, we have been having a GStreamer hackfest in Milan over the last few days. We have 17 people here, all hammering away at our laptops or discussing various technical challenges sitting at a nice place called the Milan Hub.

A lot of progress has been made during these days with some highlights including work on fixing the use of Gnonlin with GStreamer 1.0, which is a prerequisite for getting PiTiVi and Jokosher running with GStreamer 1.0. Jeff Fortin, Thibault Saunier, Nicolas Dufresne, Edward Hervey, Peteris Krishanis and Emanuele Aina has all been helping out with this in addition to fixing various other issues in PiTiVi and Jokosher.

Sebastian Dröge has put a lot of work during the hackfest into providing the basic building blocks for doing hardware codecs nicely in GStreamer, and Víctor Jáquez has been working on making VAAPI work well using these building blocks, with the plan among other things to make sure you have hardware accelerated decoding working with WebKit. In that regards Philippe Normand has spent the hackfest investigating and improving various bits of the GStreamer backend in Webkit, like improving the on-disk buffering method used. Also in terms of hardware codec support Edward Hervey also found a bit of time to work a little on the VDPAU plugins.

Speaking of web browsers Alessandro Decina has been working on porting Firefox to GStreamer 1.0, he has also been our local host making sure we have found places to eat lunch and dinner that where able to host our big group. So a big thank you to Alessandro for this.

Wim Taymans has been working on properly dealing with chroma keying in GStreamer, improving picture quality significantly in some cases, in addition to being constantly barraged with questions and discussions about various enhancements, bugs and other challenges.

Edward Hervey has in addition to help out with GNonlin also been working on improvements in our DVB support and improving encodebin so that you can now request a named profile when requesting pads, the last item being a crucial piece in terms of allowing me to proceed with Transmageddons multistream support.

Stefan Sauer spent time on fixing various bugs in the GStreamer 1.0 port of Buzztard and a first stab at designing a tracing framework for GStreamer.

Arun Raghavan was working on various bugs related to Pulse Audio and GStreamer and also implemented a SBC RTP depayloader element for GStreamer.

Tim-Philipp Müller has been working on implementing a stream selection flag in order for GStreamer player to be able to follow any in-file hints about which streams to default to or to not default to for that matter.

As for myself I been mostly working on Transmageddon trying to get the multistream and DVD support working. Thanks to some crucial bugfixes from Edward Hervey and Wim Taymans I was able to make good progress and I have ripped my first DVD with Transmageddon now. There is still a lot of work that needs doing, both in terms of presentation, features and general robustness, but I am very pleased by the progress made.

transmageddon1
Title selection screen, needs a bit more polish, but getting there.

Transmageddon screenshot ripping a DVD
As you see above you can now choose to transcode to different codecs for each sound stream, or drop the streams you don’t care about. The main usecase for different codecs is to you a different codecs for surround sound as opposed to stereo or mono streams.

A big thank you to Collabora and Fluendo for sponsoring us with dinner during the hackfest.

Also a big thank you to Collabora, Fluendo, Google, Igalia, Red Hat and Spotify for letting their employees attend the hackfest.

Steam on Fedora – Lets get gaming!

As you probably already know Steam is now available for Linux. While it is currently officially only available for Ubuntu you can run it on Fedora too. Tom ‘Spot’ Callaway has made this yum repository available. So just put the .repo file you find there into your ‘/etc/yum.repos.d/’ directory and you should be able to do ‘yum install steam’. I been running this repository through the beta period and the games I tried so far works great. Crusader Kings 2 is my clear favourite so far.

A screenshot of Steam running on my Fedora 18 desktop –Screenshot of Steam running on Fedora

More hiring! Join the Red Hat desktop team and make a difference!

We are looking for some more people to join the Red Hat Desktop team. We have some flexibility on the tasks we need these new hires to do, so we are casting the net wider this time. We are open to candidates from anywhere in the world where Red Hat has an office. For the right candidate working from home is an option, but you would still need to live in a country where we have an office. That said candidates interested in joining the 500 people strong and growing team at the Brno office in the Czech Republic will be preferred, especially in cases where we have multiple candidates with similar skill levels.

We are looking for people who would be available to join Red Hat sometime this year, so if you are a student and graduating this summer you can still get in touch. We don’t have a hard list of requirements, but of course experience with any of the below items or similar will increase the likelihood of us being interested, and candidates with existing open source contributions will always be preferred over candidates who has never contributed to an open source project before.

  • GTK+/GNOME
  • C/C++/Python/Vala
  • OpenGL/Clutter
  • JavaScript/HTML5/WebRTC
  • X Windows
  • Touch screen technologies
  • GStreamer
  • D-Bus
  • LDAP/Active Directory

So if you want to join the worlds leading Linux company and help make the desktop rock, please send an email to Tyler Siprova who handles the hiring process for us in the Desktop team. She can be reached at tsiprova(at)redhat(dot)com. Be sure to refer to this blog entry in your email so she knows the context of your application. Be also be aware that I will be at the FOSDEM conference in Belgium in February, so if you are interested I would be happy to sit down with anyone interested to talk about the opportunities we have here at Red Hat, so if this is of interest be sure to request for such a meeting to be set up in your email to Tyler.

A Linux Game Changer?

So the Linux based Steam Gaming Console has been relased, or at least one version of it. It is called Piston and it seems quite nice looking.

Personally I think this device has a potential to truly transform the Linux desktop and gaming market. If this things takes off it could for instance make linux drivers the top priority for the makers for graphic chips. And people specalizing in gaming oriented high end PCs would also be likely to start offering those machines with Linux.

So I don’t know about you, but I will for sure buy one of these boxes when it comes out :)

Improved handling of files with multiple tracks in GStreamer

Thanks to Sebastian Dröge there is a new thing in GStreamer called streamid. It basically gives all streams inside a given file a unique id, making files with multiple streams a lot easier to deal with. This streamid is also supported by the GStreamer discoverer object. So once you identified the contents of a file with discoverer you can be sure to grab the exact stream you want coming out of (uri)decodebin by checking the pad for the streamid. The most common usecase for this is of course files with multiple audio streams in different languages.

From the output of Discoverer the stream id is really easy to get:
On the stream object you get out of Discoverer you just run a:

stream.get_stream_id()

On the pad you get from decodebin or uridecodebin the patch is a bit more convoluted, but not
to hard once you know how (there might be some kind of convenience API added for this at some point).

Before you connect the pad you get from the bin you attach a pad to it like this:

src_pad.add_probe(Gst.PadProbeType.EVENT_DOWNSTREAM, self.padprobe, None)


Then you in the function you define you can extract the stream_id with the parse_stream_start call as seen below:

def padprobe(self, pad, probeinfo, userdata):
       event = probeinfo.get_event()
       eventtype=event.type
       if eventtype==Gst.EventType.STREAM_START:
           streamid = event.parse_stream_start() 
       return Gst.PadProbeReturn.OK

I been using this code in my local copy of Transmageddon to start implementing support for files with multiple audio streams (also supporting multiple video streams would be easy, but I am not sure how useful it would be). Got a screenshot of my current development snapshot below, but I am still trying to figure out what would be a nice way to present it. The current setup will look quite crap if the incoming file got more than a few audio streams. Suggestions welcome :)

Transmageddon multistream  devshot
Transmageddon multistream development snapshot

Python and libcheese, the simple way of dealing with camera devices

GStreamer does assembling advanced video application quite easy, in fact so easy that even I can write such an application in Python :) What I have had a lot more issues with is understanding how to deal with things like USB cameras and such. Well luckily the developers of Cheese realized this and created libcheese to help. libcheese is today used by Cheese itself of course, but also by Empathy for its camera handling.

Since I been thinking about adding some kind of video recording support in Transmageddon I wanted to test libcheese from Python. Unfortunately there was no Python examples available anywhere online, so I had write my own example :)
With some pointers from David King I managed to put the following python code together.

import sys
from gi.repository import Gtk
from gi.repository import Cheese
from gi.repository import Clutter
from gi.repository import Gst
Gst.init(None)
Clutter.init(sys.argv)

class VideoBox():
   def __init__(self):
    self.stage = Clutter.Stage()
    self.stage.set_size(400, 400)
    self.layout_manager = Clutter.BoxLayout()
    self.textures_box = Clutter.Actor(layout_manager=self.layout_manager)
    self.stage.add_actor(self.textures_box)

    self.video_texture = Clutter.Texture.new()

    self.video_texture.set_keep_aspect_ratio(True)
    self.video_texture.set_size(400,400)
    self.layout_manager.pack(self.video_texture, expand=False, x_fill=False, y_fill=False, x_align=Clutter.BoxAlignment.CENTER, y_align=Clutter.BoxAlignment.CENTER)

    self.camera = Cheese.Camera.new(self.video_texture, None, 100, 100)
    Cheese.Camera.setup(self.camera, None)
    Cheese.Camera.play(self.camera)

    def added(signal, data):
        uuid=data.get_uuid()
        node=data.get_device_node()
        print "uuid is " +str(uuid)
        print "node is " +str(node)
        self.camera.set_device_by_device_node(node)
        self.camera.switch_camera_device()

    device_monitor=Cheese.CameraDeviceMonitor.new()
    device_monitor.connect("added", added)
    device_monitor.coldplug()

    self.stage.show()
    Clutter.main()
if __name__ == "__main__":
    app = VideoBox()

The application creates a simple clutter window to host the stream from the webcam. So when you run the application it should display the video from the system webcam. Then if you plug a second webcam into a USB port it will switch the video feed to that stream. Not a very useful application in itself, but hopefully enough to get you started on using libcheese from Python. You can find the libcheese API docs here, they are for C, but Python API from Gobject Introspection follows it so close that you should be able to find the right calls. And remember for figuring out exact API names ipython is your friend :)

P.S. You need Cheese 3.6 installed to be able to use libcheese with Python, this version which will be in Fedora starting with Fedora 18.