Hacking Banshee

Since syncing music to my Samsung Galaxy S3 doesn’t work with Linux (for the most part), I’ve constructed a method of transferring the music over ssh from my laptop to my phone using a cool little program called Unison. The solution is flawless and allows two-way syncing.

One problem, (or challenge depending on how you think about it), is that the playlists that are managed inside of Banshee Media Player on my laptop have to be exported individually and manually to a file when I want to transfer them over to my phone. Having a way to automatically export all of your playlists to some predefined directory would be very helpful for automating my music syncing. After some Googling it seems like no one has solved this problem yet.

I grabbed the Banshee source and started looking over its files associated with playlist exporting. Bingo! Shortly thereafter I found in the file Banshee.ThickClient - Banshee.Gui.SourceActions.cs the method OnExportPlaylist() which has the user interaction for exporting a playlist and the holy grail, the playlist.Save() method call.

The next logical step for me would be to figure out whether this functionality can be encapsulated into an extension, or if that’s not possible, a patch. I’ll definitely be following up on this.

Job Update and a Concurrency Rant

Well, it looks like the early bird catches the worm. After my roommates and I took this inconvenient online course introducing us to Carleton Universities Co-op program and multiple presentations and resume workshops later, I’ve finally done it. I’ve landed myself a prestigious 8-month co-op at ZDirect, a global company that produces hotel marketing automation software. Development is exclusively done in their downtown Ottawa site and sales offices are around the world.

Since Carleton’s Career and Co-op department uses a web-based job portal by Orbis Communications, and the fact that students like to procrastinate and leave everything to the last day that things are due, the résumé and cover letter uploading process has a flaw where if there are many users trying to concurrently upload their documents, this “document converter” would stall and not let you progress through the application process. My roommates and I started panicking and thinking of ways to fix it. One of my suggestions was to call up Carleton’s Computing Services (CCS) and order them a pizza in exchange for having them reboot the server. Unfortunately after giving CCS a call, they said the servers were managed by the Careers and Co-op department. Dead end there since it was already 9:30 pm and no one would be at the office.

I decided to compromise and find emails of hiring managers for my top 10 choices. Long story short, I emailed ZDirect that night, had an interview with them the very next day (that went very well), and got a phone call the day after with a job offer.

Lesson of the day: have a backup plan and design and test your concurrent systems very well!

A recent essay I read

Surveillance is the business model of the Internet, after all — and [the NSA] simply got copies for itself.

After multiple years of listening to Security Now mention Bruce Schneier for his security insights, I’ve finally subscribed to his Crypto-Gram newsletter. This is one of his many thought-provoking essays.

A Fraying of the Public/Private Surveillance Partnership

Building Eclipse C/C++ projects for 32-bit on a 64-bit system

In my systems programming course we learn various techniques of the C programming language. On multiple assignments we are provided code that only runs on 32-bit. I run Linux Mint 64-bit on my laptop, using Eclipse for my C/C++ development and the GNU toolchain to compile, which is an issue when the 32-bit C/C++ code is compiled by default for 64-bit. Valgrind is also unhappy since it cannot run the cross compiled 32-bit code (probably many other profiling tools encounter this as well).

This guide should work flawlessly on Ubuntu and its derivatives since Linux Mint is based upon Ubuntu and uses its packages.

I solved this problem by adding the -m32 tag to the eclipse compiler and linker settings, and installing the required 32-bit packages for my operating system.

Method

In eclipse

  1. Go to Project->Properties then click on Settings, which is under C/C++ Build
  2. Make sure that the current configuration that is selected is All Configurations
  3. Select the Tool Settings tab, select GCC C Compiler, if it isn’t selected already, and in the Command form change gcc to gcc -m32 to enable 32-bit compiling with GCC
    gcc compiler
  4. Do the same change of gcc to gcc -m32 on the GCC C Linker page, then click OK to save the settings
    gcc linker
  5. Make sure to clean the project so that previously created object files compiled with 64-bit GCC are removed, otherwise the build will fail. Go to Project->Clean… and either select Clean all projects or select Clean projects selected below, then selecting the current project (In my case it is comp2401a3). Click OK
    eclipse clean project

Required Packages

Installing the following packages enabled standard C/C++ library calls to work. If other libraries are used within the code, additional 32-bit packages might have to be installed. Installation via Linux Mint, based on Ubuntu, is via the standard apt-get install command.

apt-get install g++-multilib lib32gcc1 libc6-i386 lib32z1 lib32stdc++6
apt-get install lib32asound2 lib32ncurses5 lib32gomp1 lib32z1-dev lib32bz2-dev

This might also be required if the code still does not compile:

apt-get install ia32-libs-gtk

 Package for Valgrind

When running Valgrind on the 32-bit code the following error occurred.

valgrind: Fatal error at startup: a function redirection
valgrind: which is mandatory for this platform-tool combination
valgrind: cannot be set up. Details of the redirection are:
valgrind:
valgrind: A must-be-redirected function
valgrind: whose name matches the pattern: strlen
valgrind: in an object with soname matching: ld-linux.so.2
valgrind: was not found whilst processing
valgrind: symbols from the object with soname: ld-linux.so.2
valgrind:
valgrind: Possible fixes: (1, short term): install glibc’s debuginfo
valgrind: package on this machine. (2, longer term): ask the packagers
valgrind: for your Linux distribution to please in future ship a non-
valgrind: stripped ld.so (or whatever the dynamic linker .so is called)
valgrind: that exports the above-named function using the standard
valgrind: calling conventions for this platform. The package you need
valgrind: to install for fix (1) is called
valgrind:
valgrind: On Debian, Ubuntu: libc6-dbg
valgrind: On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo
valgrind:
valgrind: Cannot continue — exiting now. Sorry.

After adding the suggested package libc6-dbg, the error still occurred. Installing the 32-bit version of the package fixed the error:

apt-get install libc6-dbg:i386

Conclusion

As shown above, it can be troublesome to set up cross compiling of 32-bit C/C++ code on a 64-bit machine, but if the reward of programming in the native operating system is worth more than programming in a virtual machine or on another computer, then it is a worthy cause.


 Sources

Hello Again Internet

Past

This isn’t the first time I’ve had a personal website. The previous one started as a hobby of mine when I was nine and in grade 5. My inner geek found the internet fascinating and I wanted to be on it. The website was designed in the good ol’ FrontPage program by Microsoft. I packed the pages full of cool videos, game cheats, images and links, then shared my website with friends at school when we had computer class. I even went to the extent of designing a poster and putting it up in my classroom and in the computer lab.

As the years progressed I learned more about CSS, and web standards, allowing me to build a more “sophisticated” website. I emphasize the word “sophisticated” because all it was, was static html pages, barely utilizing a linked stylesheet, and later on, a static php website. In hindsight I couldn’t believe how big of a nerd I was, but more importantly, I had the drive and devotion to learn and apply myself towards a medium that many people of my age at that time didn’t even attempt.

Unfortunately a combination of me losing interest and not wanting to pay for the web hosting any more allowed the website to slip off of the internet at the beginning of 2009. The source files hopefully still reside on some hard drive in my parents house.

Even though the content and coding was primitive and limited, it got me interested in coding, bringing me to where I am today: a university student studying computer science.

Present

After having built up a portfolio of website and visual design work from previous jobs and school work, and the fact that I’ll be competing to be an intern at a company this upcoming summer is why I’m reclaiming a slice of the internet for myself.

I plan on including my CV and a portion of my portfolio on this website, as well as doing the whole blog thing, providing constructive commentary on topics that interest me, most likely in the spectrum of computer science.