Felipe Contreras

Personal blog of Felipe Contreras

Archive for the ‘Linux’ Category

git send-email tricks

with 3 comments

I recently found out a few awesome tricks for git send-email that have made my life much easier, so I decided to share them here ;)

First, git send-email is an essential tool in every git guru’s arsenal, as it’s the preferred way of submitting patches. All you need to do is generate your patches with git format-patch (preferably with a cover letter), and then use git send-email to send those patches inlined in a nicely formatted email thread with your MTA.

But do you know about the different threading formats, address-book queries, or the cc-cmd option? No? Well, let’s get started.

Read the rest of this entry »

Written by FelipeC

October 25, 2009 at 18:46

Posted in Development, Howto, Linux, Maemo, OpenSource, Planet

Tagged with ,

New project: gst-dsp, with beagleboard demo image

with 13 comments

It took me a lot more than I expected, but I finally managed to get the beagleboard booting and happy with the latest linux kernel (2.6.32-rc3), DSS2, and dsp-bridge driver.

And then I could run gst-dsp: a native GStreamer plug-in to access Texas Instruments’ DSP algorithms for OMAP3 platforms. Which marks the time for making a public release.

Here’s the video :)

The video playback is running on the beagleboard with gst-dsp and gst-omapfb (no X) with TI public DSP binaries; it’s a WVGA (800×480) MPEG-4 video. It’s not running as smoothly as I wanted; it seems the public binaries are a bit buggy, and there’s some problem with the dsp-bridge driver writing directly to the framebuffer, but at least it somewhat works :)

The video recording is done with an N900, official system (which uses gst-dsp ;) ), and the resulting video is ; 848×480 MPEG-4.

You can find the demo image for the beagleboard, along with instructions, here.

The kernel code is on gitorious; the important tag is v2.6.32-felipec1.

And gst-dsp is hosted on Google Code, although the git repository is actually on github.

The code wasn’t written from scratch, TI’s projects: tiopenmax and libbridge, helped a lot.

And of course many other people made the first release possible (see the shortlog at the end).

Enjoy ;)

Andriy Shevchenko (1):
      base: fix a crash on send codec data

Felipe Contreras (180):
      Initial commit
      Register dsp node
      Add README
      Fix and update copyrights
      Add ALLOCATE_HEAP and ALLOCATE_SN to dsp_bridge
      Add handy dsp_send_message
      dummy: use dsp_send_message
      Rename gstdsp.* to plugin.*
      Makefile: cleanup
      dummy: trivial clanups
      Add log utility
      Use log utility
      dmm_buffer: size_t improvements
      dmm_buffer: always unmap when freeing
      dmm_buffer: use getpagesize()
      dmm_buffer: alignment improvements
      dmm_buffer: add user_data field
      Add MPEG-4 video decoder
      README: update
      mp4vdec: trivial cleanup
      mp4vdec: send signal to output_loop
      mp4vdec: flush output buffers too
      mp4vdec: reset output port
      mp4vdec: extra check for null buffer
      mp4vdec: use atomic operations for status
      mp4vdec: use more atomic operations for status
      mp4vdec: send stop signal before
      mp4vdec: re-use comm buffers
      dmm_buffer: reorganize a bit
      dmm_buffer: add dmm_buffer_reserve
      dmm_buffer: allow to re-reserve memory
      dmm_buffer: allow re-mapping
      mp4vdec: trivial cleanup
      dmm_buffer: unmap before unreserving
      mp4vdec: re-use mappings for output buffers
      mp4vdec: convert flush condition to semaphore
      Remove cond.h
      Rename mp4vdec to vdec
      vdec: trivial cleanup
      vdec: trivial reorganization
      vdec: prepare for multiple algos
      vdec: move create_node to dsp_start
      vdec: start dsp node after getting the caps
      vdec: initial support for H.264
      vdec: add Juha to authors list
      README: update
      vdec: cleanup
      vdec: make dsp_thread static
      vdec: reorganize a bit
      New base class
      Add new video encoder
      base: handle more commands
      base: reorganize got_message a bit
      venc: improve jpeg args
      venc: send jpeg dynamic params
      base: cleanup setup_output_buffers
      base: remove unused buffer_count
      base: reorganize a bit
      base: add use_pad_alloc option
      base: free mapped buffers on dsp_stop()
      base: be more verbose on get_slot()
      README: update
      Makefile: check for missing symbols
      New utility gstdsp_register()
      base: detect dsp errors
      base: properly handle dsp errors
      base: post error in the bus
      base: extra check for status in outout_loop()
      base: free events array
      base: reinitialize state on NULL->READY
      base: use circular buffer for timestamps
      base: increase ts_array
      base: increase mapping cache
      dummy: reorganize map_buffer
      dummy: input buffers don't need alignment
      dummy: cleanup
      dummy: don't map buffers
      venc: increase framesize limit for jpeg
      base: add gstdsp_post_error()
      venc: allocate a buffer when framesize is unaligned
      base: decrease wait for events timeout
      base: more error messages
      base: re-initialize on READY->PAUSED
      base: don't panic on wrong status
      base: destroy node at the right time
      base: catch playback completed message
      base: possible memleak fixes
      vdec: send codec data for MPEG-4
      base: make map cache optional
      plugin: set more proper ranks
      vdec: add framerate workaround
      vdec: remove gstdsp_send_buffer()
      base: add create_node() vmethod
      base: add parsing facilities
      Add h263 parser
      parse: update framesize only when unset
      Random cleanups
      base: add support for stream params
      venc: add H.263
      venc: use h263 by default
      Reorganize encoders
      base: send codec data for all the codecs
      base: keep trying if parse func fails
      base: trivial cleanup
      Trivial cleanups
      log: don't display info level
      log: decrease log level for buffer allocs
      log: add pr_test
      base: rename array to cache
      base: rename 'buffer' to 'comm'
      base: event cleanup
      base: reorganize a bit
      base: assume output buffer is always there
      base: remove out_buffer, use port buffer
      base: store input buffer
      base: trivial cleanup
      base: flush ports on stop
      base: plug some possible leaks
      base: make map_buffer() more conservative
      base: trigger semaphore after buffer modifications
      base: re-use input buffer
      base: add port index field
      Add async queue
      base: allow multiple buffers
      base: allow child elements to configure the ports
      vdec: increase the number of buffers to 2
      venc: trivial fixes
      log: add missing include
      base: re-enable queues properly
      venc: decrease input buffer size
      base: wait for eos
      base: possible fix
      Initial MPEG-4 video encoder support
      gstdspvenc.h: preemptively add H.264 to the list
      base: add send_codec_data() helper
      vdec: use send_codec_data()
      vdec: extra checks
      Add skip hack
      Revert "venc: forcing mpeg4 I frame each i_frame_interval"
      venc: reorganize stream/dynamic params
      base: trivial cleanup
      base: properly set param virt addr
      Add param argument to buffer callbacks
      Add buffer argument to buffer callbacks
      base: add buffer recv_cb
      base: add check for end addr alignment
      vdec: fix extra unref for codec-data
      base: trivial cleanups
      Rename dmm_buffer_flush() to dmm_buffer_clean()
      base: fix memory read
      dmm_buffer: clean instead of flush
      dmm_buffer: add cache 'flush' function back
      Use more proper cache functions
      base: handle bad node termination
      base: make EOS alignment an option
      jpegenc: enable eos align
      venc: improve integer framerate calculation
      venc: fix bitrate calculation
      venc: cleanup bitrate calculation
      venc: remove jpeg from bitrate calculation
      venc: tweak bitrate calculation
      venc: trivial cleanups
      venc: add 'quality' field
      venc: calculate smaller buffer sizes
      Fix some static analysis warnings
      log: avoid pr_info when gst debugging is off
      base: remove use_map_cache
      Trivial cleanups
      Cleanup type registrations
      base: improve some compiler hints
      dmm-buffer: check cache flush size
      base: properly free node resources
      Create custom dsp_node_t
      dsp-bridge: store node heap ourselves
      dsp-bridge: store node msgbuf ourselves
      dsp-bridge: cleanup node_free
      base: copy buffers when appropriate
      base: remove unnecessary cache flushing
      venc: set rate-control to variable
      base: post critical error mesages to the bus

Hoseok Chang (1):
      venc: tune mp4v parms for better performance

Juha Alanen (5):
      vdec: set profile based on the frame size
      vdec: improve H.263 args
      vdec: initial support for WMV9
      venc: set profile correctly for H.263 and MPEG4
      venc: disable single scan output for JPEG encoder

Marco Ballesio (8):
      vdec: fix srcpad setup
      venc: rename mp4venc_stream_params
      venc: add mp4venc_out_stream_params
      base: use proper buffer length
      venc: forcing mpeg4 I frame each i_frame_interval
      venc: reordered mp4venc_args initialization
      venc: added bitrate computation formula
      venc: propagate keyframes properly

Mark Nauwelaerts (2):
      base: safer buffer allocation and freeing
      base: fix element ref leak

Miguel Verdu (2):
      venc: tune MPEG-4 parameters
      venc: tune MPEG-4 parameters for quality

René Stadler (3):
      base: fix thread leak
      base: advance timestamp pointer for empty output buffers
      base: don't use DSP flushing

Tim-Philipp Müller (1):
      base: unref unused output buffer when skipping output

Written by FelipeC

October 13, 2009 at 0:03

Ripary and linux 2.6.31

without comments

So codeswarm.rb has now been renamed to ripary and got some project hosting.

In order to celebrate I created a visualization of linux 2.6.31 development.

Here it is:

Next step is to figure out a way to render videos that don’t look so crappy on YouTube :(

Written by FelipeC

October 5, 2009 at 0:35

Who wrote Pidgin’s msn? Not who you think

with 32 comments

So, it looks like Pidgin developers have a little trouble believing that I’ve
contributed substantially to the msn prpl, so I decided to prove it once and
for all.

Read the rest of this entry »

Written by FelipeC

August 5, 2009 at 0:46

Posted in Development, IM, Linux, OpenSource, Planet

Tagged with ,

How msn-pecan fixed a 6 year old bug, how Pidgin didn’t, and stole the fix

with 59 comments

The bug we are talking about is the infamous switchboard timeout error which was very elusive, it happened randomly, and very often for some users in unknown conditions. Essentially you send a message, and after one minute you receive a notification telling you the message never arrived, after which you need to resend the message, and hope it will arrive this time.

Let’s see how the two projects approached this bug.

Pidgin

There have probably been many bug reports regarding this issue, but it’s very difficult to find old historic bugs in Pidgin’s new and old tracker. The modern version is reported in Pidgin’s tracker as #3330. There you can see people saying it happens a lot, that the priority should be increased, and many tickets were marked as duplicate. Developers however stayed in denial mode: they say it doesn’t happen to them, and then turn to the usual strategy: ask for irrelevant information such as a valgrind log, and to try again as it might have been magically fixed.

Then they try a simplistic workaround; re-send the message on failure. This doesn’t work on most cases, and even when it does, the message arrives more than 1 minute late. As usual, no developer did much else about the bug.

In the mean-time, Adium had many reports (2475, 2395, 6316, 6708, 6952, 7288, 9978, 11045, 11398, 11478) of the same bug. At this point something was very clear: it happens more often in OS X.

The interesting point is when Rasmus Hummelmose, an Adium user, logged to IRC to rant about the problem. He received the same response on both #adium and #pidgin; it’s a server problem, or it’s your slow connection, there’s nothing we can do. That didn’t convince him (it wasn’t true) and he effusively tried to explain that the issue was real and was affecting many users. He didn’t achieve anything more than upsetting the developers.

This is not the way to solve an important bug.

msn-pecan

The msn-pecan team on the other hand thought: hey, there’s a bug, and this guy can reproduce it, let’s fix it. I invited him to #msn-pecan. Rasmus was a bit reluctant; Why loose time with msn-pecan developers? Surely Pidgin developers must be capable enough to do the job. He changed his mind when I explained that the core parts of libpurple’s (Pidgin) msn were either developed or refined by me anyway, and therefore, Pidgin devs probably didn’t have the expertise required to identify this problem.

With that we started an endeavour to fix the problem through the weekend. I started by providing some infrastructure changes in order to visualize what was actually happening, Devid Antonio Filoni created Adium builds, and Rasmus tested, and provided feedback. We made some conjectures and discarded them with further testing and fixed some bugs along the way until we found a reliable way to reproduce: send a message, wait for 15 minutes of inactivity, and send another message.

After this is was clear that something bogus was happening with the network connection, but since we cannot fix all the elements involved, we implemented a simple fix: close the connection after 1 minute. That worked perfectly. Rasmus was happy, and we were too :)

That’s how you do it.

The stealing

Logically after our success, Rasmus decided to rub the fix on the face of Pidgin and Adium developers, after all, they were the ones that said it was not a bug. But they were not impressed.

However, Daniel Ljungborg (aka Dimmuxx) was interested in the fix, and in good faith I pointed the commit message that explains the issue in detail.

Then I find out Ka-Hing Cheung, a Pidgin developer, implemented the fix as I described, but thought it was OK to not thank anybody, explain where the fix came from, or mention the msn-pecan project, or any external source at all. We (Rasmus, Devid and I) spent a weekend of our free time working hard to identify, fix, and verify the issue, and if you read the commit message you would think they came out with the solution:

Author: khc@pidgin.im
Timeout switchboard connections at 60 seconds, should Fixes #3330 for most people.

That is plagiarism, pure and simple, and unfortunately, it’s not the first time.

Written by FelipeC

July 31, 2009 at 23:30

msn-pecan 0.1.0-rc1 ready for testing; on the way to the first serious release

with 6 comments

The next msn-pecan release started as 0.0.20 but there are so many changes that
it’s going to be 0.1.0. It is way more stable than 0.0.19 but we still would
like to do more extensive testing, so we are rolling a release candidate in
order to fix critical bugs that might be lingering. Hopefully it will be the
only release candidate before the actual release.

The aim of 0.1.0 is going to be our “first serious release”, that doesn’t mean
the previous releases were bad, it just means that we were never truly
confident about the code being delivered until now.

Compared to 0.0.19:

  • Timeout issues fixed (switchboard error)
  • Better offline messages receiving support
  • Offline message sending support
  • Reorganization of P2P code (less crashes)
  • Several crash fixes
  • Adium improvements
  • Performance improvements
  • Massive code reorganization

Special thanks for Devid Antonio Filoni, and Andrea Piccinelli who have been
very active fixing issues and making sure msn-pecan is rock-solid. Also Rasmus
Hummelmose who was essential in fixing the timeout issues, it wouldn’t have
been possible without his testing. Also thanks to the Pidgin developers (we
picked some patches), and many other contributors.

This is the list of issues fixed so far:

  • 37: Pidgin leaves handle on files after transfers
  • 82: Implement sending of offline messages
  • 117: Received offline messages are being cut
  • 138: Translation is not whole integrated from Launchpad
  • 144: Unable to chat after message timed out
  • 155: Pidgin crashes after connecting (using NTLM Authorization Proxy Server)
  • 156: msn-pecan crash in msg_ack() at cvr/slplink.c:321
  • 157: msn-pecan crash in msn_switchboard_can_send() at switchboard.c:779
  • 158: msn-pecan crash in msn_switchboard_free() at switchboard.c:262
  • 159: Pidgin crash when connecting to MSN
  • 161: 0.0.19 ubuntu package
  • 163: Translations not working on win32
  • 164: msn-pecan crash in pecan_contact_get_personal_message() at ab/pecan_contact.c:616
  • 170: Crash upon sign in
  • 171: crash when disabling account
  • 174: Windows 7 RC and Pecan
  • 177: Offline messages of blocked contacts should not be displayed
  • 181: Too many timeout messages
  • 183: msn-pecan should use audio:// links with pidgin 2.6.0
  • 184: already showed OIM message show again using another client
  • 185: Add support for receiving winks
  • 133: pidgin crashed with SIGSEGV in msn_message_destroy()
  • 154: Pidgin Randomly Crashes
  • 166: proxy authorization support missing
  • 153: User Adding Problems

The diffstat is huge:

44 files changed, 3423 insertions(+), 3116 deletions(-)

For the source tarball, win32 installer and maemo package check the usual location:
http://code.google.com/p/msn-pecan/downloads/list

And the Adium build is here:
http://code.google.com/p/msn-pecan/wiki/AdiumBuilds

So, start the testing! And please report back any issues :)

Here is the current list of pending issues for 0.1.0 final:
http://code.google.com/p/msn-pecan/issues/list?q=label%3Amilestone-0.1.0

Finally here’s the shortlog:

     6  Andrea Piccinelli
     1  Chris Stafford
     1  David Geary
    29  Devid Antonio Filoni
     1  Devid Filoni
     4  Elliott Sales de Andrade
   214  Felipe Contreras
     2  Mike Ruprecht

Written by FelipeC

July 19, 2009 at 16:04

Don’t underestimate Google Chrome OS, or Google for that matter

with 12 comments

This is somewhat a response to the post “Let’s all take a deep breath and get some perspective” which criticizes Google mostly on the basis of the “failures” of Android and Chrome. But also, everyone is talking these days about Google Chrome OS, and how it is a silly idea. Is that so?

Read the rest of this entry »

Written by FelipeC

July 16, 2009 at 12:19

libmtag-0.3.0: moved to git

with 2 comments

I finally managed some time to make another libmtag release. This is mostly tiding up the code, cleanups, new codestyle, building improvements and moved to github :D

Also some handy features:

  • strip tag: now you can remove say id3v1 tags while keeping id3v2 intact
  • get specific tag: similarly, you can retrieve only id3v2 information
  • get all: this function might is useful for some UIs, specify some callback, and get all the tags :)

I wonder why not so many people are using this, is there a better tagging library?

Any packagers interested?

Grab it while it’s hot :D

Written by FelipeC

July 3, 2009 at 17:23

msn-pecan 0.0.19 released, more stability and “now playing” support

with 6 comments

This is mostly a bugfix release that should make msn-pecan much more stable. Bug also brings some nice features such as “now playing” support.

Everyone is encouraged to update.

I’ve been busy with other projects so I have not been able to work as
much as I would have wanted, but all in all, this is a good release.

The features (thanks to Devid) include support for “now
playing” (ported from libpurple), and a new way to be notified when a
contact has deleted you (you’ll see on the conversation window). Also,
some issues in Adium were fixed, so we will probably roll an Adium
build with msn-pecan enabled.

I’ve updated my system so it might take a while before the win32
binaries are uploaded, anyone willing to take this one?

Download from the usual place at googe code.

Bugs fixed

  • 99 Unable to retrieve display pictures when invisible or logged as invisible
  • 109 Protocol priority
  • 120 Aliases not cleared properly
  • 133 pidgin crashed with SIGSEGV in msn_message_destroy()
  • 154 Pidgin Randomly Crashes
  • 135 russian translation doesn’t work

Enhancements

  • 140 Support for “Now Playing” status field
  • 129 Can’t verify installation, or uninstall
  • 124 Notify when deleted by a contact

Taks

  • 121 Make dbg package for the launchpad repo

Diffstat

105 files changed, 1295 insertions(+), 749 deletions(-)

Contributors to this release

Albert Cervin (1):
     po: update Swedish translation

Devid Antonio Filoni (14):
     Fix use_userdisplay option using Adium.
     Change PACKAGE to GETTEXT_PACKAGE.
     Translate msn-pecan also using Adium.
     Fix use server alias option
     Move utils/msgplustags.{c,h} to pecan_util.{c,h}.
     Update COPYRIGHT.
     Add PURPLE_STATUS_TUNE support and parse contacts's CurrentMedia.
     Update MsnClientCaps in msn.h.
     Add "Has Space" to get_info.
     Show "You are not in A's contact list" message opening a conv
window if needed.
     Set the passport also to session->user.
     ab/pecan_contact.c: cleanup.
     slp: destroy object at the right time
     po: update Italian translation

Elias Julkunen (1):
     po: update Finnish translation

Felipe Contreras (44):
     Cleanup login steps.
     Show up 'connecting' state.
     session: Cleanups.
     Trivial cleanups.
     Cleanup configuration stuff.
     session: Random cleanups.
     Remove bad Russian translation.
     cmdproc: trivial cleanup
     slpcall: avoid extra error cb call
     status: trivial cleanups
     status: improve "available" state mapping
     Trivial cleanups
     userdisplay: report failure
     Log general server notifications
     Makefile: add debugging symbols by default
     session: destroy ud manager after freeing slplinks
     contact: store pecan status instead of pidgin one
     Reorganize how bad statuses are handled
     notification: store user state
     contaclist: add function foreach_contact
     Get user displays when returning from 'hidden' state
     status: trivial cleanup
     contact: use "invisible" for the HIDDEN status
     Use pidgin mobile status only when offline
     Update copyright notices
     command: trivial cleanups
     command: remove unused refcount
     command: general cleanups
     contact: enable workaround for server aliases
     fix_purple: trivial cleanups
     fix_purple: rename purple_buddy_set functions
     Reorganize switchboard handling.
     Close the http node when not needed.
     Make sure the switchboard is not freed when it's still used by slplink.
     transaction: trivial cleanup
     transaction: add ref/unref
     Properly ref/unref transactions
     transaction: fix initial ref_count
     sb: set error properly
     Fix wrong memory access
     Optimize GType retrieval
     Fix SLP DATA message creation
     po: general translation updates
     Bump version to 0.0.19

Geoffrey Antos (1):
     slplink: fix buffer overflow vulnerability

Luís Neto (1):
     po: update Portuguese translation

Wei Hsiang Hung (1):
     po: update Traditional Chinese translation

Written by FelipeC

June 16, 2009 at 11:51

Posted in Desktop, IM, Linux, OpenSource, Planet

Tagged with , ,

Response to Christian Schaller — Google, the LGPL and software patents

with 2 comments

I read Christian Schaller’s post which says essentially that Google is evil because it’s using FFmpeg in Chromium and arguing the legality of it by using an unusual interpretation of LGPL. because Google is using an unusual interpretation of LGPL.

Let’s step back for a second and see this through the point of view of FFmpeg developers. Probably they, just like any other FOSS developer, just want to code kick-ass software, and the license (LGPL) is just a tool to make sure their software is not stolen, so if a company chooses to use FFmpeg, they must contribute the changes back.

Google is contributing back their changes, they are publicly available in their repo. So how could FFmpeg developers loose? Their code will be used in an amazing product, that they will probably use too, it’s a win-win situation. This subject was brought up on the mailing list and nobody complained; Chromium is not listed in FFmpeg’s hall of shame.

Now, is it legal? The only way to know is to bring the issue to court and see the resolution, but who will bring this to court? FFmpeg developers? No. Perhaps H.264 patent holders, but only in countries with wicked patent laws (USA), and who cares about them? If Google looses in court against H.264 patent holders, I wouldn’t consider it evil, quite the contrary.

And finally, Google lawyers said that what the FSF thinks about this movement is irrelevant… damn right! They wrote the license, so? FFmpeg choose the license, and FFmpeg can choose another license if they so wish, in fact, they can re-license to Google in any other license they see fit because they have the copyright. Of course there’s no need for that because LGPL works fine, and the explanation of Google lawyers is completely logical to me.

Personally I cheer the Google Chromium team for such a bold movement, and congratulate FFmpeg developers for making kick-ass software that might soon be even more widely used.

Written by FelipeC

June 13, 2009 at 11:05