Wallpapoz 0.4 is released June 12th, 2007

Actually this post is late 2 weeks. Wallpapoz 0.4 is released at 30th May. But every developer write a new post when he/she releases new version of software. So I think I need to write a post about new release of Wallpapoz. I just feel good for this release. This release represents my passion, my patience & my hard works. I started work on this release since July 2006. That is a long time. Off course, many things caused this happens. I had to finish my thesis and there were many things interrupt my schedule.

What amazed me that there are many people contributed for this release. There are five translations (Swedish, Japanese, Indonesian, French, and Spanish). One of the translator offer hosting for Wallpapoz website but there was an issue that I can not resolve. Wallpapoz has been packaged for Fedora 7. Wallpapoz has gone international!!

So will there be a new version of Wallpapoz (Wallpapoz 0.5)? I said most likely. I have couples of features needed to be implemented. Dual monitor support is the most important feature. But I need to have dual monitor before I can implement this feature. Panel applet, interface to load daemon of Wallpapoz in Gnome start up session are features that I think necessary to make Wallpapoz more superb.

What features do you think need to be implemented in future release of Wallpapoz? Write a new comment or email me.

It Is Working With Beryl Now March 12th, 2007

This three past days has been exiting days for me. I have successfully installed Beryl on my laptop. Yes, I still don’t have 3d driver but I can install Beryl with mesa. Beryl looks pretty cool. There is water effect when you point your mouse to icon in top panel. When you change the workspace (or viewport in Beryl terminology), there is a cube side changing effect. You can see the top of the cube with Ctrl + Shift + Up. There is big red diamond (or ruby?) picture. If you Ctrl + Shift + Up again, you will be in another workspace. In Beryl you have four workspaces. Each of them is representing one of the side of the cube. The top and bottom side is represented with big red diamond (or ruby?) picture. There is transparent effect in window too. You can shake the window (click and hold window titlebar and move the mouse around) like you shake the leaf. It will not be a perfect rectangular anymore. Off course you can add more workspaces in Beryl. But vertical workspaces is not working yet.

Back to Wallpapoz, I could test it. I check the workspace with other property of xprop. Workspaces in Beryl is a big screen actually. So one workspace in Beryl is a part of that big screen. Imagine you have 1024×768 screen resolution. Beryl give you four workspaces for default setting. The big screen has 4096×768 size. The workspace off course has 1024×768 size. Imagine the workspaces is showed in two lines. For example you have eight workspaces lined up in two rows and every row will have four workspaces. The big screen will have 4096×1536 size. You can get the big screen size from the _NET_DESKTOP_GEOMETRY(CARDINAL) property of xprop. Another property that is important is _NET_DESKTOP_VIEWPORT(CARDINAL). It tells you your position in big screen and you can get your workspace position from this property. If you are in the first workspace, this property will be 0, 0. If you are in second workspace, it will be 1024, 0 (assuming the first and second workspace is in one row). If you are in fifth workspace with eight workspaces split in two rows, it will be 0, 768. I think you get the idea. Checking these properties, I know where I am in Beryl. I have tested the daemon in Beryl. Yes, it is working.

Wallpapoz Development Is Coming Back Again March 9th, 2007

After vacuumed for a long time, I decided to wake up and do the wallpapoz development again. I have made the daemon part. Now the new wallpapoz has daemon so it can change your wallpaper on desktop based on your configuration created by wallpapoz gui. But I can’t make it work in Beryl because I don’t have machine capable running Beryl. This laptop that I use for developing wallpapoz and writing blogs has ATI video card (Radeon IGP 340M). I have not successfully installed the 3d driver on this laptop. To use Beryl you need 3d stuff. The other computer I have that have Nvidia video card which is easy to install 3d driver…. its motherboard is broken.

But the main barrier/problem I have developing this software is I don’t have much time. There is too much interruption. Later I will tell that story. But for now I am still trying to install 3d driver in this laptop.

The Gui Is Done December 4th, 2006

Enough said…. You can check the screenshot at the Wallpapoz screenshot page. The gui is improved a lot. I am really happy with this progress. The gui has many neat features. The obvious one is now you can add directory of wallpapers (recursive if you want!!!) into Wallpapoz. I have put menubar in Wallpapoz top side. There are more options in preferences dialog in this new version of Wallpapoz. You can choose to change wallpaper when the specified time passed but not when you change workspace. Not only that, you can choose how to display the wallpaper (tiled, zoom, scale, etc). You can cut, copy, and paste on Wallpapoz treeview widget. There is help contents menu item but not implemented yet.

So what’s now? Off course finish the remaining jobs. Write help documentation (oh, boring one!). Make translation framework so users can translate Wallpapoz into their languages. Then the important one, writing the daemon program.

Wallpapoz Is Back November 11th, 2006

After vacuum again, the development of wallpapoz is back. Until now, from svn repository, you will get the functional gui. It can import directory of image files (recursive too), the edit menu is complete except for preferences dialog launcher, image widget to show the wallpaper, combobox to choose how to display the wallpaper (zoom,scale,tile.etc) and…. ooops, only that. But the remaining jobs to the functional application are preferences dialog, implementing “how to display wallpaper” option in configuration file, and…. the hardest part, the daemon part. Until now, I don’t know how to catch event when user change workspace if user use compiz or beryl. Maybe I will do the polling algorithm for this problem. But I hope I will find the way to detect changes nicely.

I told my self that I will not use gui testing for wallpapoz application but a week ago after “got sick” by testing development style in rails virus, I tried to learn gui testing frameworks. The first one is dogtail. It is designed by python programming language and targeted to gnome/gtk+ application (other gui are supported too as long as it support accessibility feature). First I got issue that it take a long time to launch the gui application to be tested. Then I try to run application separately. The second issue was I could not figure out how to test whether some dialogs exists. I just want to test that if I click “About” menu item, it launch “About Wallpapoz” dialog. I have to use some dirty hack to check if the dialog exists. I use exception. To make it worse, the documentation is lacking. Here is the code if you curious.
from dogtail import tree, utils, config
import unittest
class WallpapozWindow(unittest.TestCase):
  def setUp(self):
    utils.run("python wallpapoz.py", timeout=3, dumb=True)
    self.wallpapoz = tree.root.application("wallpapoz.py")
  def testAboutDialog(self):
    # After clicking About menu item from Wallpapoz window, About dialog must appear
    self.wallpapoz.menuItem("About").click()
    try:
      about_dialog = self.wallpapoz.dialog("About Wallpapoz")
    except tree.SearchError:
      assert False
    # After clicking dialog close button, About dialog must dissapear
    about_dialog.button("Close").click()
    try:
      about_dialog = self.wallpapoz.dialog("About Wallpapoz")
    except tree.SearchError:
      assert True
  def testAddFilesDialog(self):
    # After clicking File -> Add Files menu item from Wallpapoz window, Add Files dialog must appear
    self.wallpapoz.menuItem("Add Wallpapers (Files)").click()
    try:
      add_files_dialog = self.wallpapoz.dialog("Choose Wallpapers")
    except tree.SearchError:
      assert False
    # select one wallpaper
    add_files_dialog.child('wallpaper', roleName='table cell').doAction('activate')
    add_files_dialog.child('arda.jpg', roleName='table cell').grabFocus()
    add_files_dialog.child("Add", roleName="push button", description="Add wallpapers").click()
    # After clicking dialog add button, Add Files dialog must disappear
    try:
      add_files_dialog = self.wallpapoz.dialog("Choose Wallpapers")
    except tree.SearchError:
      assert True
    # and the added files must present on treecel
    try:
      added_file = self.wallpapoz.child("/home/knight/wallpaper/arda.jpg", roleName="table cell")
    except tree.SearchError:
      assert False
  def tearDown(self):
    self.wallpapoz.menuItem("Quit").click()
if __name__ == "__main__":
  cfg = config._Config()
  cfg.__setattr__("searchCutoffCount", 2)
  cfg.__setattr__("searchBackoffDuration", 1)
  cfg.__setattr__("searchWarningThreshold", 2)
  unittest.main()

I got angry with this testing tool. So I tried to search another testing framework. There was another one, LDTP (Linux Desktop Testing Project). This was more worse than dogtail, at least for me.

selectmenuitem ('Wallpapoz', 'mnuHelp;mnuAbout')
The code above should click “About” menu item. But it didn’t in Wallpapoz. It did in another application, such as Gedit and Firefox. I could not figure out why. To make it worse, sometimes the it hanged for some function. Sometimes it hanged, sometimes it did not.

So I ditch it and back to dogtail and try to live inconveniently with it. After hours, I try to get sense how to test gui with dogtail. I could simulate this action: click File->Add Files menu item (it open file selection dialog), open certain directory, choose file and click add button. But I need 4 hours to learn this such simple thing! I still don’t know how to test whether the selection file is showing up in the treeview. Maybe I should intregate this testing tool with Wallpapoz gui class. But I think I need many many hours to learn dogtail until I really really understand and be able to simulate the whole thing you can do to gui application. That means delaying Wallpapoz development and I don’t like it. So… for this time, no gui testing. I realize unit testing is important in software development but sometimes you have to make priority. Wallpapoz is delayed too often.

So I decided not to use gui testing frameworks for developing Wallpapoz. Maybe later, after dogtail is getting matured or I have more time to play with these gui testing frameworks.

Implementing Change, Delete, Rename, Move Up September 14th, 2006

Ok, two days ago I make another revision into wallpapoz repository. I almost implement all the edit menu functions. The only one left is move down. But move down is similar with move up function. Well, that edit menu function only works for one selection of treeview. After implementing move down function I have to reimplement all edit menu functions for multiple selections on treeview. But that’s not hard, I think. My work has been delayed by learning delphi and pascal. I had to learn them because it is requirement in my colleague.

I have first comment on this blog, in wallpapoz category. The visitor asked me one feature to be implemented in next version of wallpapoz. It is “resize then tile” option for showing wallpaper desktop. It is useful for users who have multiple monitors. Speaking multiple monitors, I have wondered what it is like working with multiple monitors. I can see the benefit of programming with multiple monitors although I never try. Sometimes working with single monitor is frustating especially when you often look in api document.

Implementing Cut, Copy, Paste And Save Function & French Localization August 30th, 2006

I have put two french localization of wallpapoz in wallpapoz home page. I got these translation from wallpapoz users. They emailed me. Thank them. it’s funny to think that I got two french localization. French is the only localization I got. These translation are still for wallpapoz version 0.3. One of translator complained to me that the french sentences in gui button are over. You know, wallpapoz gui is in static size, can not be resized. Of course it can be set by Glade. But it is my fault that I did not internazionalise the software. But next version will be internazionaled by gettext, of course.

I have put another revision on svn server. This time, I have implemented cut, copy, paste treenode on treeview function (but it is limited on single node) and save button function.

On another news, I have decided not to use gui unit test (dogtail) on wallpapoz because I need to release this software as soon as possible. I have delayed it too long. I will implement the unit test on next release. I just don’t have time to learn this gui testing.

First Post Of Wallpapoz Category Blog August 26th, 2006

The reason I make this category is to force me to develop wallpapoz harder. Well, I planned to start developing new version of wallpapoz July 2006 but it delayed by FIFA World Cup. After that I learned about yelp to make help function in wallpapoz, i18n using gettext, Gnome HIG, and unit testing. That required a lot of time. I learned a lot of things. Then I worked for few days. Suddenly I got sicks and had to rest for few days. After that I got commercial project to work on. Weeks passed by and I still have not started yet again to develop wallpapoz. Start from this week, I have time to work this project on again. My idea is every time I have another feature implemented in wallpapoz, I make a new post in this category so people who curious about wallpapoz development can follow the progress.

Ok, that’s nice. But what about the first statement of this post, ”... force me to develop wallpapoz harder.” Back when I got commercial project to work on, I had time (not much, but enough) to work on wallpapoz. But I was lazy. So with this blog, I hope I am more motivated to develop wallpapoz harder.

My current progress is still in gui. I have successfully implement add directory with recursive option to wallpapoz gui. Then right now I am moving on to implement manipulation of treeview function (cut, copy, paste). But I am paralleling it with my effort to find answer how to make wallpapoz work with compiz. With compiz, you can have 3d effect on your desktop. But compiz make number of workspace to become one so wallpapoz is unusable. I have to deal with that issue.

I hope every week I will make a new post. So you may wonder when new version of wallpapoz is out. That is another reason to make wallpapoz category blog. I am afraid it will still take a long time to make a new release of wallpapoz. With this blog you can be assured that there will be progress every week. I have many things to implement. This is my todo list:

1. change pooling algorithm to using libwnck library in daemon,

2. have option to change wallpaper per time but not when you change workspace,

3. make it work with compiz (high priority),

4. have option how to display your wallpaper (zoom, scaled, etc),

5. internazionalitation,

6. have help window (using yelp),

7. have unit testing (using dogtail),

8. add directory of wallpapers (done),

9. etc.

To see how far wallpapoz has been through, just grab it with svn client:
svn checkout http://opensvn.csie.org/wallpapoz/trunk wallpapoz-0.4

Beware the gui is still not functional. You can give me feedback if you want. I promise to my self that I will work on this project for 4-6 hours per week.