Wednesday, April 20, 2011

Finishing Up the Project and Putting Together the Presentation

Inserting text into an actual Gwibber window is not looking very good. It appears that this method probably will not happen and it looks like my team and I will have to implement the alternative window we have created. This will limit the original functionality that we hoped for. Instead of users being able to choose which social networks they will be able to send song information to, they will have to send it to all networks they have configured in their Gwibber client. Also, unless we can fix it soon, user's may not be able to edit the text to personalize it before they send it. It's not what we hoped for but it will probably have to do for this project and later on in the future, I or someone else on the team can fix this.

With our project coming to a close, we are developing our presentation for our final product. For this my team and I have put together an outline of what will be discussed and have began a Prezi presentation. We will be discussing our initial project plan, our experiences, what we learned and then a demo of our final product.

This class has been a great experience and I have enjoyed this project very much. I can only hope that others who take this class will enjoy their experience.

Monday, April 18, 2011

Creating an Alternative Window for Social Extension

With all the attempts of loading text into a Gwibber Window epically failing, it was time to implement the backup plan my team and I came up with. Instead of using the Gwibber window provided by Gwibber developer Ken VanDine, we will just create and implement our own window that would do pretty much the same thing. The only difference would be that this window will only submit to the user's choice of Twitter or Facebook or both. If we have the time though we could probably implement all of the social networks that Gwibber supports, but for now Facebook and Twitter will have to do. To save us some time with creating a window to use, I found that MonoDevelop has a GUI designer for creating Gtk windows, so last night I spent a few hours messing around with the designer. It splits up the window class into a source code section and designer section. While you are designing the window in the GUI designer, it adds  the code to the source code side. If any action events need to be programmed, you can select an action event on the designer side and it will create a placeholder for it on the source code side. You can then add the code you want inside the event place holder. So far I have been able to create a window to look very similar to the Gwibber window, and it can load a current track and it will send to all the accounts that are configured in my Gwibber account. The next step is to allow the user to select which account they want to send it to, make the text editable and implement a character limit of 140 characters. This could serve to be a little bit of work, but it's doable.

Wednesday, April 13, 2011

Preloading Still a Problem

Since, last class I have not made any progress with the issue my team and I have had with preloading text into the Gwibber window. Ken VanDine, told me that I have to insert the text into the OnExposeEvent() function, but I'm not really sure about what method to use in order to insert that text. He wasn't very clear on that part and I'm very confused with how to implement text into that function. I've tried just including a string assigned to a variable, console writing and Pango Layouts. Nothing has worked so far. Brandon mentioned something about a way to manipulate the system clipboard as a method to get it into the Gwibber window. The only thing is actually getting the textual information into the actual system clipboard. If we can do that, then we can use a getClipboard () function that Brandon found in the Gwibber library. If neither of these methods gets us anywhere, then we will have to bite the bullet and create our own window which probably won't be that hard but our Gtk experience is limited. I'm still optimistic that a way will present itself though.

Tuesday, April 12, 2011

Working out the preloaded text problem

As the semester comes near an end, my team and I are still trying to figure out a way to load currently playing tack information into the Gwibber window for our social extension project. The problem we are running into is that the Gwibber library has not exact method for inserting text into the Gtk window. The Gtk-sharp window consists of a insertText() method for an Gtk.Entry object but the relationship between the Gtk-sharp classes and classes used used in Gwibber do not have a direct inheritance relationship. I emailed Ken VanDine, the creator of the libgwibber library, about our problem and he said that the C# wrapper does not directly have a way of doing this. He said the best bet was to override the expose event under the library and try inserting the text there. He didn't go into much detail beyond what exactly the expose event did, but all I can imagine is that it has something to do with exposing content. I'm still not exactly sure how to go about inserting text into this method override. I was able to override a method called OnExposeEvent() and all that did was return a boolean value with the original OnExposeEvent() method being returned. I of course am not even sure that is the right method he was talking about. I'm going to email him tomorrow and see if he can give me any more information about this method and what it does exactly. If using the Gwibber window does not work out, then we have a plan for creating our own message window. Hopefully it does work out, because using the Gwibber entry window would save us a lot of time.

Wednesday, April 6, 2011

Social Extension Now Opens Gwibber Window

Yesterday after class, I discussed with my team the method I found for extracting currently playing track information from Banshee and Brandon mentioned that he found another extension that was utilizing a right click menu and a pop up window just like we wanted to utilize. The name of the extension was LastFMFingerPrint and if I remember correctly it was used to find track information about a song by searching through LastFM. What we all ended up doing was taking parts of the code that we would need from the LastFM extension and implementing it into our extension's code. It took us the rest of class and even well after class to get everything to work right, but by the time 4 or 5 o'clock rolled around we had our extension's action showing up in the right click menu of all songs. We were really happy about that!

The core issue that we faced with getting our extension event action to show up in the right click menu had to do with an XML file in the LastFM extension. This XML file contained elements and attributes about where to add your action (in our case called ActionEntry) in the Banshee menus. This XML file was called in the code and probably parsed in order to properly place the action to the correct menu. What we did with this XML file was copy its contents, rename it "Social.xml", and alter some of the attribute values to fit our social extension. Once we altered that file and added it to a resources folder we created in our project, we were able to right click on a song and our action appeared in the menu.

After getting our action to show up in a right click menu, our group decided to call it a day. I went home and messed with the code a little more to see if I could get our Gwibber window to pop up upon clicking on our social action. I got it to work with in no time. All I did was take the Gwibber window code that we had in a separate file and created a new class for the Gwibber window in our social extension project. From there we have an action event method in the main social extension code that creates and instance of the Gwibber window class and calls a method to run the window when the social action receives an action event (in this case a mouse click). That was all there was to it and we are now almost caught up with our schedule. From, here we have to figure out how to load the track information into the Gwibber window, test it, write documentation for it, format the code to fit the Banshee coding standards and then submit it to Bertrand Lorentz for review. Yesterday was a very productive and a breakthrough of a day. I have more confidence that we now have a better handle on our project and we are learning everyday the inner workings of the Banshee project.

Monday, April 4, 2011

Extracting currently playing track information in Banshee

Last class, half of the team was out so it was just Shaun and I working on the project. Shaun was having Linux troubles as well as getting the Banshee software, Mono Develop and the Banshee Community Extensions branch  set up right. So, while I was assisting him with that I was also working on figuring out how our team would extract the track title, artist name and album title from a currently playing track. Before the class I had been struggling through every possible class in the source code and during the last class I figured out how to extract the information! I found reference to a TrackInfo object in the PlayerEngine sub class called CurrentTrack in the BaseTrackListView class. The actual reference looked like this:

current_track = ServiceManager.PlayerEngine.CurrentTrack;

After this reference into our Social extension skeleton code and extracted TrackInfo attributes such as DisplayTrackTitle, DisplayArtistName and DisplayAlbumTitle, I ran Banshee and had the information spit out onto a command line once I had a song playing, and it worked! You never know what you'll find just by digging around inside the source code. Even though I found this reference in the BaseTrackListView class, a search of the source code found that this reference is found in many other classes as well. The next step now will be to figure out how to load this information into a Gwibber window as well as getting the window to show up in Banshee.

Thursday, March 31, 2011

Progress on Social Extension

Last time, I met with my team and we discussed how we would extract audio track information to place in a Gwibber posting window. I came across a class called TrackInfo that gets all of this information, however when I tried to extract the information and post it on a command prompt during a currently playing song, It would give me unkown for the title, the artist and the album. So, I'm still unsure about how that is relating to a currently playing song. I found that the Wikipedia Extension in Banshee uses TrackInfo to collect artist information, but I have not been able to yet determine what they are doing differently form my team and I. We will spend today continuing to look into this matter. My strategy at this point is to keep looking at extensions that extract track information to find any similarities in information extraction as well as finding all classes where TrackInfo is used in order to see if there is a specific class for a currently playing song.

Monday, March 28, 2011

POSSCON Experience

POSSCON was a great experience in my opinion. I took the technical path on Thursday and checked out the talks by Chris Hinkley, John Mertic, and David Duggins. I found the talks of John Mertic and Chris Hinkley to be the most interesting. 

John talked about ways to successfully create and deploy PHP applications. His talk focused on making PHP applications deployable across multiple platforms, making them fast, making them simple but powerful and testing them. Since I am a beginner in PHP development and am interested in this type of software development, I found it very informative and worthwhile. He mentioned a few software engineering techniques that I recognized from taking CSCI 362. A great technique that he mentioned for creating PHP applications was "Abstract Code Design" with PHP. In terms of Databases, there are many database management systems out there and PHP does support a few of these DBMSs. With that thought in mind, he mentioned that PHP had different functions for accessing as well as querying these DBs and that they all return different values when implemented. Because of these differences in values, he said it is a good idea to create an abstract software level that deals with all of these different return values to make it work for any DB that you use. He applied similar techniques of abstraction for different servers as well. 

I had the opportunity to speak with him and he turned out to be a very nice guy. I asked him about his experience with creating the PHP Windows Installer and what sort of troubles he encountered when developing it. He said he had an easy time getting the installer to work with IIS servers but when it came to Apache, he said he had to fiddle with Apache .config files to get it to work right. So, he had a bit of trouble with the Apache server configurations. I also asked him if he had any advice for someone like me getting into PHP development. He said just stick with the points in his presentation and become really involved with a PHP open source project. We of course talked about other things but I did enjoy his conversation and he said I could contact him by email any time I had any questions.

Chris Hinkley had a great presentation on providing security for websites. He spoke about how most hacker attacks happen at the Web application layer and how to prevent attacks at this layer. When implementing security he recommended the following:
  • Choose a leading CMS platform
  • Stay up to date with core updates
  • Decent security plug-ins
  • Use a secure hosting provider 
  • Don't rely on network connection for security
  • Have Firewalls
  • VPN Access
  • SSL Certificates
  • Isolated Environment
Some of these things are common sense but they are all good to know. I also spoke with him afterwards to ask him some questions about using SSL certificates in securing websites. I told him I tried implementing on a while back with a form I had on a website and told him that it still kept sending the form data over unencrypted lines. I also told him I purchased one and it was implemented on the site, so I wanted to know if maybe I missed something. He said that I probably didn't include the certificate into the functionality of the form and that could be why it was happening. I then asked if he knew any places online where I could find some guides on how to properly set up SSL . He recommended that I look at NixCraft for Linux and that should give some step by step tutorials. I have not had a chance to look into NixCraft yet but I know I will be checking it out in the near future. He also said I could contact him via his email account as well.

I also saw David Duggins' talk about using different open source software for business start up but it was a lot  of stuff I already knew for what open source to use when getting a business started. 

The conference was a great experience and I sure took a lot from it. Next year I know I would like to go again.

Monday, March 21, 2011

Extension Progress

Last Thursday I met with my team and we discussed plans to get our extension repo branch compiled and running with Banshee. I already had the branch set up and running on my machine, so I assisted my team mates in getting the branch set up in MonoDevelop and in the Banshee software itself. All of my team mates ran into the same problem when trying to run the ./autogen.sh script under the Banshee-Community-Extensions branch. They all kept getting an error message stating that the package Banshee-1-thickclient could not be found. When I saw this message, it confused me because I did not experience this problem when I set up my branch. After trying to see if the package existed at all under Ubuntu's Synaptic Package Manager and online, I realized that my team mates were running the latest version of Banshee (1.9.5) and I was running version 1.9.4. I figured this had to be the problem, because that was the only difference in configurations that separated me from my team mates. We found out that my hunch was right. Brandon, my team mate, emailed the Banshee mailing list to try and find a solution to the team's dilemma. After getting a few threads back, we found out that it was a matter of versions. Since the update from 1.9.4 to 1.9.5, the community extension branch was not updated either. In the 1.9.5 version, the developers implemented the change our team did from Banshee-1 to Banshee. As a result of this change, the community extensions branch was not updated and thus was still searching for Banshee-1 instances when trying to compile. The developers of Banshee gave us some git repo commands to follow in order to resolve this problem and so the rest of my team mates will try their recommendations. When I update to 1.9.5, I too will follow the directions given by the developers.

Once everyone has the community extension branch up and running, we will then head to our next step of figuring out how to extract track information to place inside a Gwibber post. I believe this will be a bit of a tricky process because there seems to be no clear cut way to preload text into a Gwibber post box.

Wednesday, March 16, 2011

POSSCON Plans

With the POSSCON conference approaching, I had to make a decision about which speakers I wanted to meet with. After looking through the list of speakers a couple of times, I was still unsure about who I wanted to meet, so I went through the schedule to see what each speaker was going to discuss. After looking through the schedule and topics, I came across the three speakers I would like to meet with and talk with. Below is an outline of the speakers I want to talk with, what they are talking about, their times, some of the questions I will be asking and my plans on when to speak with them.


  • John Metric
    • Senior Software Engineer / Partner and Community Developer Liason, SugarCRM
    • Session 
      • Time: 1:15 PM - 2:00 PM, Thursday March 24
      • Topic: Developing Easily Deployable PHP Application
      • Time to meet with speaker: Lunch - 12:00 PM - 1:00 PM (Backup: 2:00 PM - 2:15 PM)
    • Questions
      •   When did you start working with PHP?
      •   I understand that you created the Windows installer for PHP. What challenges did you face in its design and development?
      • What was your first experience with open source?
      •   Do you have any advice for PHP developers who want to get the most out of their applications?
      • What types of applications have you developed over your career?
      •  Do you utilize any other web languages besides PHP?
  • Chris Hinkley
    • Senior Security Engineer at FireHost
    • Session
      • Time: 10:00 AM - 10:45 AM Thursday March 24
      • Topic: Web Hosting - Knocking out Application Layer & Open Source Threat
      • Time to meet with speaker: 10:45 AM to 11:00 AM (Backup: 3:00 PM - 3:15 PM)
    • Questions
      • What types of technologies do you use most often when dealing with security in web applications?
      • What open source projects have you used while working at FireHost? Do you contribute to any in your free time?
      • How did you go from developing websites to doing security engineering?
  • David Duggins
    • Open Source Evangelist and Long-time User
    • Session
      • Time: 3:15 PM to 4:00 PM, Thursday March 24
      • Topic: Starting and Running a Business on-the-cheap with Open Source
      • Time to meet with speaker: 4:00 PM - 4:10 PM
    • Questions
      • When did you start using open source software?
      • What open source software have you used in helping businesses with their start up phases? What made you choose these pieces of software over similar open source software?
      • Do you hold any type of degree in computer sciences?
      • What advice would you give to someone who wanted to start a business using open source software? 

I do hope that I get to speak with all of these speakers. My speaker of interest to talk with is John Metric because of his experience in developing PHP applications. Since I have an interest in programming PHP applications I would really like to talk with an expert. I'm excited about the conference and can't wait to talk with these speakers!

Monday, March 14, 2011

Social Extension Progress and Timeline Up

For the social extension project that my group and I are working on, I have the initial setup for the extension for the project and a Gwibber test window. Bertrand Lorentz, one of the Banshee maintainers, setup the skeleton of the social extension and posted it for us on the repo. However, the extension is not on the main repo. Bertrand said that there is a community extensions repo where all of the in progress extensions are kept. Once my team and I complete the extension, Bertrand will review it and then post it to the main repo for us. He also mentioned that with the approach of version 2.0 in April, that our extension probably won't be included until the following release.So, it may be a while before our extension becomes apart of Banshee. Once it does go into the next version after 2.0, it will feel very fulfilling to contribute something more than a bug fix.

Right now, I have the social extension skeleton running on Banshee. It was a little tricky to get it built at first because it was missing references from the actual Banshee project. To resolve this problem, I had to setup my references in MonoDevelop to reference the projects that were being imported in the social extension class. I have not put any code into the extension yet, because my team and I have not begun that stage yet, but we will get there eventually. 

The big hurdle that I accomplished so far in the project was getting the Gwibber test window to communicate successfully with certain social networks. I was having a problem for the longest time trying to get the Gwibber window to allow me to post to Facebook or Twitter. Every time I ran the window code, I would get a dialog box that allowed me to insert a status, but when I hit send, it only allowed me to submit the message locally on my machine. Today, when I was doing some more work with the Gwibber test window, it dawned on me that maybe I had to be logged into the Gwibber social client on my Linux machine in order for the Gwibber test window to work properly. Once I started the Gwibber software, added my Facebook and Twitter accounts and then ran the Gwibber test window, I was able to select which social network I wanted to post my message. After sending a test message, it successfully posted to my Facebook account. This was a big weight off my shoulders and it will be for the rest of the team, because we have been trying to figure this issue out for a while. With this problem out of the way, the only challenges that await us now are figuring out how to embed the extension into the software so that a currently playing song is able to be shared. 


Wednesday, March 2, 2011

Social Network Extension

Our team has decided to go with creating a social network extension for the Banshee music player. This extension would give users the ability to right click on a song that they are currently listening to and click on an option to share it on their social network of choice. Of course they would not share the audio with their friends, they would just share a message that would give some song info and a personalized message of what they are currently listening to. So for example, in Facebook the message would be a status post on the users profile. This extension idea was thought up by Bertrand Lorentz, a Banshee maintainer, but he does not have the time to create it, so he asked for someone else to take on the project. We told Bertrand that we would take on the project and he seemed very excited about us taking on the project. He also offered to do the initial set up of the extension in Banshee, so we told him that would be great if he could give us that boost.

Right now, we are all getting the libgwibber package configured on our computers and into our MonoDevelop environments, since this package is the key to communicating from Banshee to the social network of choice. Once we have that figured out then that'll be a big stepping stone in the project. However, depending on what setup Bertrand does, he may include the libgwibber package reference in the initial setup of the extension, so we may not have to worry about that aspect at all. I have not completely setup libgwibber in MonoDevelop yet, but I have come to the conclusion that my problems have to with my version of Ubuntu. I believe I have to update to version 10.10 in order to use a gwibber-gtk-sharp reference in MonoDevelop to test the libgwibber library. Once I have that updated and the gwibber-gtk-sharp package installed and referenced then I should be able to experiment with the libgwibber API. For those that do not know what libgwibber is, it is a package of the Gwibber software which is a micro blogging client for popular social networks such as Facebook, Twitter, etc.

I am very excited about this project and I cannot wait to see what this extension will do for the Banshee community.

Wednesday, February 23, 2011

TOS 7.2.2, 7.8, and 7.9 Excercises

Chapter 7 in the TOS textbook went over fixing bugs and then creating patches from those bugs. There were three exercises that the book walked through with patches and I will go through my responses to each exercise individually.

7.2.2

Section 7.2 of the TOS book dealt with explaining what a patch is, how to create one with out subversion and how to compare the change between an original file and a new file. In exercise 7.2.1 it walked through creating a patch for a Hello, World program written in c. It was pretty simple with the change from "Hello, World." to "Hello, World!". Once the change took place, it walked through the "diff" command with the -u flag in order to see the differences between the original hello world program and the patched one. Exercise 7.2.2 asked to use the diff command with out the -u flag to see the difference from the "diff -u" command. The differences that I found were that "diff -u" gave more information than just "diff", and it was easier to understand "diff -u". "diff -u" told me which file contained the old line using "---" and which file contained the new line using "+++". It also denotes what was changed inside the file by displaying the old line in the original code with a "-" and the new line with a "+". The "diff" command with out the -u flag did not give as much information. It gave the line number that was changed and it told the original line denoted with a "<" and the new line denoted with ">", but it does not tell you which file the lines are from so it can make it a bit confusing. I mean, for this example it is probably okay because it is just one line but for multiple changes it can probably get a little tough to read.

7.8

I'm guessing I did this one right. It asked to create a patch file that represented a new file with "foo" being the name of the patch file and the contents being "bar". So I created the patch file and put "bar" as the contents and then diffed the /dev/null file with the foo.patch file. My results were that foo.patch had the new line with "bar" and that /dev/null was empty. Again I'm not sure if I did this one right or not. The wording was a bit weird to me.

7.9

In this exercise, it walked through creating a patch for the "echo" command from the "coreutils" project.  They walked through how to change the code in order to make the "echo" command print sentences out in reverse and then output the "diff -u" of the old echo and the new echo into a patch file. Once I carried out all the necessary steps, I found that the code change they provided, did not reverse the sentence with the new "echo" command. Instead that command just repeats the first word in the sentence for each word in the original sentence. So for example:

original: is this reversed
echo command output: is is is

What I found, is that I did make an error in changing the code. for the line that says "fputs(argv[0], stdout);" I was supposed to replace argv[0] with argv[argc]. That would explain why the first word in my sentences would repeat. Once I made the correct change, the "echo" command reversed the sentence.

Wednesday, February 16, 2011

Bug fix progress

My team and I are taking the Banshee bug dealing with changing the file labeling from Banshee-1 to Banshee since version 2.0 of the software is approaching. Our bug report can be found here. We noted on the bug report that we would take the responsibility of taking on this task, since it is an easier, yet tedious, bug. We also asked for some assistance about how to approach it. We wanted to create a script at first and then submit that to the developers to run on the code in the repository, but they preferred that we submit the corrected code to them for review. They also gave us some helpful advice about which labels would be very easy and straightforward to relabel and which ones would be a little more difficult. The bug report activity can be found on our bug report page.

I have been in the process of relabeling the files and was able to relabel most of the files in the src folder with out running into any compile, install, or run problems. Some of the files in the src folder required root privileges to change them, so I figured I needed to proceed with caution in changing these files. So I took the approach of changing one file and then reinstalling to see what effects would occur. So I changed the first one and reinstalled. Banshee would not start up but when I went to go change it back, I could not find the file again because I did a new search for banshee-1 and it rid of the file because it was relabeled with banshee. Since, this was the case, I got rid of my source code and attempted to checkout and build from the source code on our team's repository. Some how the code in that repository does not want to compile and I'm not sure why. Brandon, my fellow team mate, said he was experiencing the same problem. So we will have to further investigate that matter, and if it comes down to it, we can place a new version of the source on it. Also we can use the code from the git repository and manipulate the newest version.

For now, I believe our team has to get together and figure out what exactly can be relabeled easily and what needs a little more thought before relabeling.

Wednesday, February 9, 2011

Choosing a Bug to Fix

My group and I have tried to come to a decision in the past week about what bug we would like to tackle for our first contribution to the Banshee project. The initial bug we were looking at was causing Banshee to crash due to a clean install setting the music library to point to the home directory of the user's operating system account. There was a work around to fix it via the command line, but the developers wanted a guard against this from happening. More information on this bug can be found on our wiki under Possible Contributions. We dropped this bug because we could not reproduce the bug and therefore we figured it may have been fixed.

The second bug we took a look at had to do with Banshee's search field. This field is used to find particular songs or albums using search terms such as rating, artist, song, etc. The problem there was that when searching for a particular term value, say rating, could contain no spaces in the term search. So for example "rating=5" displayed results while "rating = 5" produced no results. After finding where the string of the search box was being broken down and processed, we found that the parser was not designed to process spaces inside of terms. It could however process spaces outside of terms. So if one wanted to do a boolean search for both 5 and 3 star ratings one could do "rating=5 | rating=3" ( | representing OR operator) They would get all songs with a rating of 5 and 3. Notice that spaces are accepted between two terms and an operator. We spent a couple of hours trying to figure out how we could go about getting the parser to not process those spaces inside of a term, but we began to realize that this type of string parsing was a little more involved than we had hoped, so we dropped this bug.

I found a bug, that I was able to sort of fix and figured that it would be a great one to do. The problem here is that users were finding it annoying that when one double clicks on a song to play in a play list with a scroll bar present, the viewing pane would center the list around the currently playing song. The bug report can be viewed in a previous blog post called "Bug reproduction". I was able to fix the centering problem, but when a song would finish playing and Banshee moved to a song that was not in the current viewing pane, the song would play, but would not be viewable in the viewing pane. One would have to scroll down to view the currently playing song. This bug has been set up as a back up or a future project for our team, but if we never get to it then I'll probably end up fixing it myself.

We finally came to a bug that would be very easy for us to contribute to, but on the other hand would affect a lot of files since it is in the names and paths of a lot of files. The developers are wanting to change every instance of banshee-1 to banshee, because banshee-1 just denotes version 1 and since version 2 is growing near they would like someone to change all these instances. It'll probably be tedious work, but it's a great and easy start. To check out my group and I's report on our approach to this bug, then click here.

Monday, February 7, 2011

Bug Triage

Chapter 6.7 in the Teaching Open Software book talked about the triage of bugs in a bug tracker. The exercise asked to review the bugs labeled "NEW" and try to perform some triage procedures on the bugs. I searched through a big portion of the new bugs for the Banshee software to try and find some bugs to do some triage on, but all the bugs seemed to be triaged very well. Duplicates were marked accordingly, all the bug reports were well reported, severity was chosen properly and all had been replied to in some way or another. It appears that the developers are on top of things with doing bug triage.

Bug reproduction

I was sifting through the bug tracker and found a bug that was easy to reproduce. The bug occurs when you double click on a song to play it. When you double click on the song, in a list of songs where a scroll bar exists, the scroll bar will shift down to a position that places that song in the middle of the list, which is a real annoyance, when someone is trying to click through songs quickly. The moving of the list can really throw someone off. So, I checked with the 1.9.2 release and I was able to experience the exact same behavior. This seems like a bug that would not be too hard to fix. The bug report can be found here.

Creating a Bug Tracker Account in Bugzilla

Creating an account on Bugzilla was very straightforward and simple. In Bugzilla, you just have to click on the "New Account" link at the top of the page, and from there it will direct you to a page where it will ask you for your email address. Once you have given an email address, you will receive an confirmation email with a link to navigate to an account creation page. At the account creation page, you are given a few fields where you can enter your real name (optional) and the password you wish to use. Once you have completed all of that, you then just use your email and newly created password as a login.

Oldest Bug in Banshee

One of the assignments in the Teaching Open Source book was to find the oldest bug in my chosen open source assignment and write up a little summary about the bug and why it has not yet been resolved.

Since my project was Banshee, I did an advanced search in Bugzilla and checked for bugs starting at its creation year back in 2005. After a few searches, I found that the oldest open bug was dated back to October 22, 2007. To see the bug report, just click on this link.

The bug had to do with an explicit red tag showing up in iTunes next to songs that were added to an iPod by Banshee. The user was saying that they would sync their iPod up with Banshee and place Banshee derived songs onto their iPod. From there, they would sync their iPod to iTunes to find that all the songs they added from Banshee had this explicit red tag showing up. The user also stated that this problem does not occur when using the libgpod svn trunk r1733.

I have a couple of theories as to why this bug is still open on Banshee's Bugzilla list. My first theory is that since r1733 of the libgpod library does not experience this problem, then there was no need to fix something that has already been fixed by a library revision. Of course, the libgpod r1733 could be an older revision and the user could be complaining about a the newest libgpod revision, but the bug report is not specific about which revision is experiencing the problem.

My second theory is that since this red tag is being experienced in an piece of Apple software, the developers did not see the bug as something major and just let it be.

Wednesday, February 2, 2011

Ch. 5 Freeciv build

Chapter 5 in the Teaching Open Source textbook, the author walked through how to build the source code of Freeciv, which is an open source turn-based strategy game. As I am going through the author's walk through on building the code, I did not get past installing the dependencies because I experienced a few problems.

The first problem I came across was installing the atk (Accessibility Tool Kit) dependency. I found out later that it was not required, but once I installed it I noticed I was having problems opening new windows. When I clicked on something to open it, the task bar would notify me that it was opening, but after a few seconds the task bar notification would disappear and nothing would open. So, I decided that a restart might fix the issue. Once I restarted my machine, my Ubuntu would not load. It would just stay at the loading screen for several minutes, which isn't normal, so I had to uninstall Ubuntu and then reinstall it. I figured that the problem with it crashing on me was due to it not being updated, so the next time around I updated the system before initiating anymore dependency installs.

The next round, I had to install everything before the atk dependency, but this time since atk was optional I did not even bother with it. My next step was to install a dependency called Pango. While going through the install process for this package, I found that Pango required a backend called FreeType, so I had to go out and find this package and install it. Once I had it installed, I tried installing Pango again only to get the same message that FreeType was required to install Pango. So, I decided to open up a file in Pango to investigate further only to find that I have run into an Ubuntu crash again! It was the same problem as last time, so I decided that it was just too much trouble to keep going so I gave up with trying to get these dependencies installed.

So, from my whole experience I found that I had more trouble installing the dependencies than the author did. His dependency installs were all just single install commands from the terminal which turned out successful. Mine, on the other hand, were going out and finding the dependency tar balls online and installing from those since the packages could not be found in Ubuntu. Sometimes they would install in a breeze and sometimes they required other dependencies in order for the main dependencies to run!

I guess the lesson here is that in the real world of open source development,  building code can sometimes be a breeze and other times can be a throw your computer across the room experience. This will be the third time that my Ubuntu machine has crashed, so it looks like I'm going to have to start from scratch again...which is very annoying, by the way.

Monday, January 31, 2011

Rebuild of Banshee 1.8.0 to 1.9.2

I initially had built Banshee 1.8.0 from its source, but after a while I thought that it would be more beneficial to uninstall 1.8.0 and install the latest version, 1.9.2. I came to this decision because the new version has a lot more bugs to choose from, which would give my group and I more options to choose from. Our group chose a possible bug to correct and it has to do with Banshee crashing due to the Music source library being set to the home or file system directory in Ubuntu. After searching through the source code, I believe I have found where the problem may be occurring according to the bug report, but I'm not quite sure what part actually sets the default source for the library on a clean install. I will probably have to send an email to the developers and see if anyone can point me in the right direction. For now though, the code has been built successfully and my whole experience is listed on my team's wiki page. For this week, my plan is to discuss this bug with the developers, see if they can point me in the right direction, see if I can locate it and suggest a possible way to fix it.

Wednesday, January 26, 2011

Subversion Experience

As an assignment, we had to setup a subversion client on our machines and then either use that client to access a SVN repository that our instructor had setup for us or we could setup a web server on our local machines and create our own repository. For my svn client I went with the svn package that is run from the command line with the svn command in Ubuntu. From that point I did some experimenting with the class's SVN. I did not experiment too much with the repository, but I was able to check out the repository and from there look up information about files that were located within it.

After having some fun with that, I decided to setup my own personal repository on my Ubuntu machine. I found a tutorial on the web that walked through how to create your own repository and decided to use that. I utilized an Apache 2.2 web server and created an svn folder in my home directory with two subfolders. From there the tutorial walked me through some commands to execute in order to make that subversion folder an actual SVN repository. From there I edited some username and password info on some of the created files with in the two subfolders in order to create some authentication for external users. I then chose the svn protocol for my access to my repository, so access to a folder or file would be svn://svn/<folder>/<file>.

I have not had the chance to really dig down deep and experiment with SVN's features, but I will experiment more in a day or two.

Monday, January 24, 2011

A Warm Welcome Committee

Last week I wrote out an email on the mailing list stating my group's intentions on the Banshee project, our inexperience with an open source project as well as asking for a good place to start. I received a few emails from a few of the developers who pointed us in the right direction and also gave us a very warm welcome to the community.

Olivier Dufour pointed us toward the GNOME-Love Bug which is a site for those beginner GNOME project contributors. This site gave a lot of insight on how to proceed with contributing. It contains information about another IRC channel named #gnome-love as well as a mailing list for beginners. It also contains guidelines for code formatting, tutorials on languages such as C#, C++, Perl, Python, etc. as well as tutorials on the gtk+ and Glade 3 GUI libraries. The list of features goes on, but it is a great place to begin looking at because Banshee uses C# and the gtk+ library for the project.

Another Developer, David, pointed us to areas that we knew about from our initial research. He suggested that we should join the #banshee IRC channel, look at common questions and check out the bug list. Our whole group has covered this ground but it is still nice to get guidance.

The last developer to give us direction was one of the core developers, Bertrand Lorentz. He gave us a link to Gabriel Burt's talk about Banshee as well as a link to his own little idea for an extension that we could use. I have not checked out Burt's talk yet or the extension idea but if the idea is feasible for our group then I will add it to our list of possible contributions.

 At this point my group and I have received plenty of places to get started. Our report on the Banshee project and our list of possible contributions to the project are up on the wiki. Our report looks to be finished but we still need a few more ideas for our project. The idea that is up right now for the project is a guard against Banshee setting the music library to default to the home directory in Linux. There is a way to fix this from the command line but the developers are thinking that there should be a guard against this happening. That way users do not have to go through the command line process to fix it.

My next step in this project is to look more in depth at the code to get an understanding of C# and how it utilizes some of Banshee's third party libraries as well as to get an svn client and experiment with that a little.

Wednesday, January 19, 2011

Response to The Cathedral and Bazaar

     The Cathedral and Bazaar was a very interesting read. The author, Eric S. Raymond, incorporated his experiences with the success of open source code through his Fetchmail application. I enjoyed reading this article because all the numbered lessons were very insightful into the world of open source software development. Lessons such "Good progammers know what to write. Great ones know what to rewrite (and reuse).", ""Plan to throw one away; you will, anyhow."(Fred Brooks, The Mythical Man-Month, Chapter 11)", "When you lose interest in a program, your last duty to it is to hand it off to a competent successor.", "Release early. Release often. And listen to your customers." and Linus's Law, "Given enough eyeballs, all bugs are shallow."

     From the aspect of the lesson of "Good programmers know what to write. Great ones know what to rewrite (and reuse)." I find truth in that. Any programmer that is good can think of what to write and then write it themselves. From this they understand the code at hand and can then understand the bugs that come with it. The great programmers can take a piece of a program, analyze the code, understand it, rewrite it and then reuse that piece of a program for that particular program or another program. From this lesson I believe that greater skill come out of rewriting and reusing someone else's code rather than writing your own, in most cases.

     The second lesson I found to be interesting was ""Plan to throw one away; you will, anyhow."(Fred Brooks, The Mythical Man-Month, Chapter 11)". A programmer can tackle a problem when working with an open source project, but whether they fully understand that problem is another thing. If that programmer does not quite understand the problem the first time they come across it and implement a solution, then more than likely they will throw that solution away at least once and have a better grasp of the problem next time. Thus, implementing a solution the next time for the same problem will more likely be a better solution.

     Every body in the open source world strikes up an interest in a program; whether they are starting their own or contributing to another. Of course, sometimes over the time of a project, developers lose interest and do not wish to contribute any more to the project. In this case, it is better to hand it off to someone else than it is to let it die. If it is a project that will benefit users in some way, letting it die is probably the worst thing to do. Before reading this article, I would have been one of those developers who just let it die because if I lost interest in it then I would not take the time to pass it off to someone else. However, I guess if someone took interest in it before I let go of the project then I would pass it off.

     The idea of "Release Early. Release Often. And listen to your customers" is in my opinion a great idea! If you want your software to be successful release it as early as possible, that way users aren't waiting and waiting for the product. This way users can start using and testing it right away and report bugs back to you. While that is happening you can continue working on other features for the software while working out bugs as well. Bugs with this method are easier to fix, because there aren't thousands of lines of code to search through to find what's wrong and you aren't dealing with tons of functionality.

     Raymond's dubbed "Linus's Law" of putting more eyes on a project makes bugs look shallow is great. The more people you have with more backgrounds looking at code and bugs, then someone is bound to find a solution to it. After reading that lesson and before reading it from a large scale close source software project, I thought, "Why do more people on an open source project work better than a team on a close source project?". I found that answer with reading onward. In a closed source project, the more people you add, the later the project will be because all the developers talk with each other individually and try to implement things in smaller groups sometimes without consulting others. In the open source world all the co-developers report their solutions and problems to a small group of developers that then handle everything in a centralized manner. This makes me wonder why this open source method is not used in the closed source world?

     I found that this collection of essays really brought me into the open source world and how successful it can be. There were a lot of lessons that I will keep in mind when I'm working on software projects for this Banshee product and more projects to come.

IRC Traffic

     After returning from school, I was able to connect to the Banshee IRC channel and listen to the traffic that was incoming. When I logged in there wasn't any traffic except for people joining the channel as well as leaving the channel. But there was some traffic last night that was still on the chat board. It was between two users possibly about resolving some bug in the Banshee software. One user mentioned something about cargo-culting a setup file for something on the order of a thousand lines and the other user was impressed by how much that user put into the possible problem. Now, I was not familiar with the term of cargo-culting so I did a little search into the world of Google and found that it is a style of programming, but it really isn't the best style to use. From what I read it is a way of plugging code into a piece of software that does not serve any real purpose for that software. Apparently this tends to happen when someone who does not understand the code or the bug at hand. They pop in a piece of code just to see if it will fix the problem. This user apparently did this with a huge setup file which to me seems to be a very bad and ineffective way to fix a problem. Of course when it comes to open source projects, with different co-developers comes different methods which can be very good of a piece of software.

Successful Install on Banshee

     Last night after getting my IRC client to work and joining the Banshee mailing list, I built Banshee from it's source code on Ubuntu, since Windows is not quite supported yet. The documentation for building it was straight forward actually and is right on the website. The source code is kept in the Git SVN and it requires a few dependencies and libraries before actually being able to install it. While trying to install I came across trouble when actually going to run the build script called ./autogen.sh before running make and make install. I kept getting errors with the ./Configure script not being able to run, so I was checking the script code based on the errors I was receiving.

     The first error had to do with a line in the script code that was not being recognized as a command. When I looked that up it just needed to be commented out because it was plain text and not apart of the script code.
     The second error I received was to do with the Apple drivers not being supported, so it recommended a command to disable Apple support and that goe me a bit further.
      My third error came after disabling Apple device support. It had something to do with a constant with part of the name beginnig with GCONF. It was saying that the variable was not defined when it hit a conditional. So from there I did some searching about the error and tried some solutions that were suggested but nothing seemed to work. I then though to myself maybe I need to update Ubuntu, since I have run into install problems before due to outdated Ubuntu software. After that endeavor, I still had no luck so I decided to go back and make sure I had every dependency it required installed. I went through each of them one at a time until I found one that never did install. The one I though I had installed but didn't was the libgconf2-dev dependency. After I installed this dependency I tried installing again and was able to run ./autogen.sh without any problems. I then ran the make and make install commands and I came out with a successful install of Banshee.

NOTE: Since I disabled the Apple Support, I would not think it would support Apple Devices. Will have to look into that later and try it out with an ipod or something. Also, I need to check if that is a bug currently under Banshee.

After my music class this morning I decided to load all of the music I had from my Droid phone and create my Banshee music library. So I copied all my music into my Ubuntu Music folder and set my music library preferences to point to that music folder as a source. Once all my songs were loaded, I found that every song that was not of m4a format would play just fine. My initial thought was that Banshee did not support the m4a format, but after experimenting with it the next day, it decided to support the format. Every now and again the software will choose or not choose to play m4a format. Sometimes I have to restart the software in order for the m4a to play.

NOTE: I have that was not mpeg 4 format would play fine. I am wondering if maybe disabling apple support caused my mpeg 4's not too play or if that is just for the Apple devices itself? I'm thinking here that Banshee probably does not support apple media files just like almost every other media player, but the reason it takes Apple devices is because every apple device can support other popular formats other than m4a.

I will continue to look into bugs and play with Banshee some more to see what else I can find.

Joining an IRC and Mailing List

     Yesterday in class I began with finding a suitable IRC client in order to view and participate in Banshee's IRC channel. Oh, by the way my team did choose to go with the Banshee Media Player. I started out with installing Pidgin and from there I tried to create and IRC account that connected to Banshee's IRC server which is irc.gnome.org. I was having a lot of trouble with trying to connect to the gnome server with Pidgin. Another student from another team overheard my troubles and suggested I install XChat because it was an easier IRC client to use. So I installed XChat, created a user name, and searched for the gnome network in the list of networks supplied by XChat. What I found though is that by default, XChat does not contain the gnome irc channel network, so I had to add it to the list. Once I created that network with the correct IRC path, it still could not connect to the server. The classmate that assisted me with the XChat said he was able to connect to his server and view traffic. Of course, his group could be using another IRC network other than Gnome. I figured it had to do something with the school's network setup so I decided to try it at home. Later that night I tried it again and this time the client was able to connect me to the Gnome network, but I found you have to specify the actual channel under the created network because it could not find a designated channel. So after I edited my Gnome network with the #banshee channel tag under my favorite channels, it connected to the channel and I was able to view everyone who uses the channel. There was not too much traffic going on, so I will try it later tonight and submit another blog based on the traffic experiences. Since I am at school right now my IRC client will not connect.

     Also, after messing around with my IRC client last night I also joined the mailing list for the Banshee project. I have never joined one of these lists before so I did not know really what to expect, but so far this morning I have experience about four e-mails relating to Banshee bugs and questions. The one e-mail thread that I decided to follow was about a user who was looking for bugs under Banshee's bugzilla account relating to Windows. Right now, the developers of the Banshee project are working on getting the software to run well on Windows. One of the developers, Gabriel Burt replied to the user's thread with a link to all the bugs relating to Windows. I followed the link to see what bugs are currently open. From looking at the list there is a lot of work to do with the Windows bugs. Some of the critical ones I came across are:

  • Playing a song on Windows causes Banshee to crash
  • Crash on Win32
  • NowPlaying extension causes Banshee to crash on Windows
To go more in depth with one of these errors, I found some traffic on the crashing of banshee when a song plays. What was found in the traffic was that playing mp3 files threw an exception and caused the system to crash. On the other hand the .ogg format plays perfectly. Also, according to the traffic, on a clean install of Banshee on Windows, the only files that are able to play successfully are ogg, wma, asf, and flac files. These files are specified in Banshee's GStreamer PlayerEngine capabilities. So it appears that mp3 is not yet supported on the Windows side.

For the future I will continue to look into IRC traffic and look into other threads on the mailing list. I am still excited for this project and cannot wait to see what my group and I can do with it.

Friday, January 14, 2011

Choosing Top Three

On Thursday, all of the teams in class were assigned to start choosing their top three projects. We have to choose the three we want to do, rank them, and publish our findings of these three projects on our teams' wiki. My group has finally chosen a name and put up a wiki. We're the BandOfBoyz and we have a pretty sweet picture of all of us on our main page. You can check it out by visiting this link. Now to get back on track with our project selections. So far our team has chosen 6 projects and we are in the process of cutting that list in half by doing some research about each projects developer acceptability, architecture, the presence of a bug tracker,  the language of the code, build feasibility, and difficulty on how to contribute. You can view our choices so far on our wiki, but a few of our choices include Apache Lenya, phpMyAdmin, and Pidgin. As of right now, my choices are biased by the language each is written in. Right now my top three are Apache Lenya, phpMyAdmin, and Banshee, but my choices are subject to change after doing closer review of the rest of my group's choices. I can't wait to get one chosen and started!

Wednesday, January 12, 2011

1st Day of Class

The first day of class was nothing new. There was the going over of the syllabus and an overview of the class. Just about everybody from CSCI 362 is in 462, so there aren't really any new faces. I'm excited with the fact that we have a lot more FOSS choices to choose from this semester. We broke up into groups on the first day and my group is team 6 (A name is coming soon). I was very comfortable withe everyone in my group, because I know most of them already. I think the comfort level is the same through out the group and that is a big boost in  the team building process. We went over the team building exercise assigned and we breezed through that because it was the same exercise as the one given in 362. We assigned all the roles in our team and turned in our deliverable. For the time being we are thinking of a name for our group, getting our wiki up and running, and selecting our 3 choices for our FOSS project. I know this semester will bring about challenges, but I am optimistic and excited about overcoming these challenges.