Armed with a text editor

mu's views on program and recipe! design

Cankiri 0.1 Posted 2006.07.29 23:21 PDT (#)

As if I didn't have enough other projects on my hands, I've just put enough finishing touches on Cankiri to release it into the wild licensed under the GPLv2. It came about after looking at Istanbul around version 1.2 and being disgusted with the limited features and overengineering in the code. Come on, you don't need two directories and at least five files for this functionality. Really. Since then both Istanbul and I have added screen area selectors and audio recording. I've got all my code in one 400 line file; Istanbul now spans many more files. Where this really shows: ls -l.

It's amazing how concise you can be with python once you know what you're doing. I hope you find Cankiri easy to use, as a single-file distribution leaves no room for documentation. Let me know what you think.

(All the jabs at Istanbul's code aside, I'm very grateful for the GStreamer plumbing I've been able to take and reapply. Since I've yet to really learn GStreamer, this has been critical for me.)

Categories: cankiri gstreamer python


Linux Toy @ 2006.07.30 19:58:


  我在阅读 Michael Urman 的 Blog 时看到其开发的 Cankiri,觉得非常实用,特介绍给大家。   Cankiri 是什么   简单地说,Cankiri 就像是一个屏幕录像机,它可以将你在桌面上的所有动态操作...

Cankiri 0.2 @ 2006.08.06 09:01:

I've just released Cankiri 0.2. It's not all that different from 0.1, as most of the changes are to improve the user experience by decreasing unnecessary clicks.


Jack Malmostoso @ 2006.07.30 11:36:

Hi there, I just tried your software and it works like magic. I have never tried Istanbul but I guess I'll stick with your Cankiri! No installation, just copy the file. Lovely. I hope it hits Debian as soon as possible! Btw: tried on Debian Sid pure64, AMD64, python-gst 0.10.4 (IIRC). P.S.: Your commenting system does not work in Opera... I can't "Save comment" after previewing it. None of your business I guess.

Michael Urman @ 2006.07.30 12:11:

Thanks; glad to hear it works out of the box! I'll take a look at the Opera thing when I get a chance, as it's my own implementation. A failure would surprise me because there's nothing Firefox specific about it. Perhaps you hadn't filled in all non-optional fields? No worries.

Duhr @ 2006.07.30 15:26:

I tried your program under Ubuntu 6.06. I can start it, but as soon as i click on the icon it says:

Traceback (most recent call last):
  File "./", line 185, in __button
  File "./", line 232, in toggle_recording
  File "./", line 314, in start_recording
    if self.query_save_options() != gtk.RESPONSE_OK:
  File "./", line 250, in query_save_options
    save.set_current_name(_("screencast-%s-%s.ogg") % (os.getlogin(),
OSError: [Errno 2] No such file or directory

Michael Urman @ 2006.07.30 17:20:

Hmm I have no idea what could be causing a OSError[Errno 2] around there. You could try changing the whole call to save.set_current_name("screencast").

Stefan @ 2006.07.30 17:54:

Hmm, I don't know if this is due to xgl/compiz, but the recording is actually way too slow, videos end up being 5 images in total while recording time was something like 20 seconds. I'll try with the old stuff soon...

Michael Urman @ 2006.07.30 18:04:

In my experience capturing data from X can be slow. I think various recent options help that, perhaps the "record" "Module" for X. Istanbul's FAQ also claims encoding overhead can be important, and suggests capturing a smaller area. The smaller area helps for either cause.

Stefan @ 2006.07.30 18:08:

Using Istanbul I can record fluest videos when first recording with a simple codec and then using theora afterwards. Maybe that would be a nice feature for cankiri as well.

Jack Malmostoso @ 2006.07.31 09:01:

Hi Michael, me again. I think I found a bug: if I start cankiri from the command line, it works fine. If I start it from the menu (using the exact same command) it hangs on the "configuring" state. Check it out:

Obviously I had to open two instances of cankiri, but it happens with the first too :)

I'll try again commenting. I think I filled up all the fields last time too, but you never know. It worked now. My bad, probably :)

Zaheer Merali @ 2006.07.31 09:53:

Hi Michael,

Maybe we should work together on Istanbul. The reason for having all these files is to make the code readable, and also make it easy to add new features.


Michael Urman @ 2006.07.31 17:23:

Jack, I can reproduce this behavior. It's probably throwing an exception and since it's not going to xsession-errors for me I'm going to have to work harder to find it. Worthy catch, and will necessitate a 0.2.

Zaheer, Feel free to take any of my code that you like back into Istanbul. I don't feel the complexity of the application space requires the hyper-generalization mindset and the over-modularization present in Istanbul. I suspect a little friendly competition will help us both come up with better features, until the most useful ones emerge.

Michael Urman @ 2006.07.31 17:47:

Ahah, OSError: [Errno 25] Inappropriate ioctl for device on the same line as Duhr's traceback. Time to retire os.getlogin() for os.environ.get("USER"). Fixed in svn.

Zaheer Merali @ 2006.08.01 13:39:

Michael, I respect your point of view. I am touched that you have put my name in the authors in the .py file. Also feel free to ask GStreamer related questions in the gstreamer channel on FreeNode irc.

Michael Urman @ 2006.08.04 11:50:

Here's the link I really wanted earlier, but wasn't available yet: Premature Generalization.

Of course in an application the size of either Istanbul or Cankiri, the detrimental effects will not be as pronounced as the example in the article. I still think it's a bad habit to get into.

bloodsk @ 2006.08.05 20:00:

I fail to use the function of capturing partial screen.There is only a frame displaying on screen which I can't move or expand when I choose "capture parial screen".I'm using ubuntu dapper.

Michael Urman @ 2006.08.06 09:04:

bloodsk, I'm not sure what's going on, but you're not the only one to report this. Could you follow up with more information about your window manager or other relevant X settings?