A few weeks ago I have noticed a lot of traffic on the Psycho website. A quick look at referring sites showed me that it’s all coming from the Gnome page of Google Summer of Code ideas. Some kind soul has mentioned Psycho in the mind mapping proposal. Turns out that increased traffic on my website was the only positive outcome of that proposal. For some reason it was not picked us as SoC project. That was one of the things that made me decide to seriously get back to work on Psycho. It’s haunting me all the time anyway so I can just as well put the constant thinking about it to a good use and get into a usable state. As a part of that resolution I have decided to spend at least an hour a day hacking. We’ll see how that goes. The important thing is that I have also decided to rewrite the whole thing, although rewrite is probably not the best word here. It would mean that something valuable was already written… :-) Anyway, I’m starting from scratch and that should provide me with some additional motivation as I have a lot of new ideas that I’m going to be very eager to try.
- Complete separation of data and its visual presentation.
Last time round the main object (Topic) was based on Gtk.Widget which didn’t really make a lot of sense. Even though it was using the MVC framework the data was still tightly coupled with the with. That will change and thanks to that it should be possible to write different frontends, not necessairly based on Gtk.
- Mind map widget as a separate Gtk# library.
The first reason for that is the same as above but there are some additional benefits. I’ll try to make that library usable for others so maybe someone will be able to use it in some other projects. A mind map is an amazing way of visualizing all sorts of data so someone may find it useful. Beside it I was inspired by the amazing work that Aaron Bockover has done on his ListView widget and Banshee in general.
- Using MonoDevelop and Linux as primary development environment.
I decided that it’s time to put my money… er… my freedom, where my mouth is. I’m complaining about being stuck on Windows all the time and still I’m choosing to use it when nobody forces me to. Of course the biggest factor here is the amazing progress happening in MonoDevelop which actually makes it possible.
- Using Git for local source code management.
Well, just being trendy here… I’m using Git-svn to communicate with the Google Code SVN repository. I’m actually playing with it so much that most of my commits have around 2 lines. It’s better to commit too often than not often enough, right?
- Supporting Mono.Addins right from the start.
That’s just something that I’m considering right now. It would be cool to enable other people to easily enhance Psycho’s functionality, but first I need learn how to do it. I guess it should be easier if I start doing that right from the start of the rewrite.
OK, so as you can see I have a lot of plans and I certainly didn’t abandon the project. As usual, some help would be nice. I have a lot of questions and doubts that someone experienced could easily answer. Without those answers I’m wasting a lot of time and I get very frustrated sometimes not being able to progress as fast as I would like to. So, if you were going to mentor a project for Google SoC but it wasn’t accepted, I could really use your help. Especially if you know a thing or two about Gtk(#) and cairo. Please.
Recently I have been seeing a lot of dark themed screenshots and I think I could get used to that. But you know what I could get used to even easier - not coming to the office every morning to start my Windows machine. Somebody put me out of that misery, please…
Click the image for a full size screenshot.

Amazon selling DRM-less mp3
Good on ya, Amazon! I have gone straight in and bought an Elvis Costello’s album (which I highly recommend) with songs that I already owned on CDs but didn’t bring them over from Poland. It will be nice to listen to them again. I have paid US$8.99 for 22 songs which is a lot of bang for a buck… In order to download the whole album you’ll have to install the Amazon mp3 Downloader - currently available for Windows and Mac with a Linux version coming soon. After songs are downloaded they are automatically imported into iTunes and are ready for upload to the iPod. Theoretically the service is limited to US but it’s not verified otherwise than by a zip code matching to a state. So, if you’ve ever seen fabulous adventures of Brandon and Brenda, you’ll have no problem coming up with a zip code that you can easily match with appropriate state. Anyways, seems like Apple will have to rethink their ugly monopolistic strategies. Cool stuff…
My progress with leukemia
Well, if you look at my results it seems like I haven’t got it any more. Of course it’s not that simple. The Philadelphia chromosome is still there and if I stop taking drugs it screw my blood picture back again. The only real way to get completely cured is getting a bone marrow transplant, but that is not really possible at the moment. But the drug works fine and hasn’t got any really sever side effects. From what I noticed so far I’m getting tired very quickly. Usually around 2 p.m. I am so sleepy that I have problems keeping my eyes open. Also, if I don’t eat enough before taking the drug I feel pretty sick, but that is easy to avoid. The problem is that a lot of food together with a constant feeling of being tired doesn’t really improve my fitness.
Immigration stuff
I have finally decided that I haven’t got much energy to spare and decided to get a lawyer and allow him (in this case her) to get it sorted for me. It’s going to cost a bit but at least it’s one monkey off my back. That should give me some peace of mind. I hope it’s worth it because if I get kicked out I’ll find myself in a real financial black hole - with no income and a lot of things to pay for.
Hacking on Psycho
Yes, I’m back to it. Again… Currently I’m working on a style manager and at the moment I’m writing it as a separate application. After I figure out how exactly I want it to work I’ll plug it into the rest of the project. I just wish I wasn’t so tired in the afternoon so I could focus a little better and do some more work.
CAD on Linux
This is something that, because of my job, interest and education, I really care about. That topic appears here and there (and even here - btw, some really stupid comments here) from time to time and then disappears without any constructive result. In my opinion this whole thing boils down to two separate issues. No proprietary CAx (CAD/CAM/CAE) system running on Linux (Solaris, BSD, whatever) being one of them and no free and open source CAx that could replace (not even remotely) proprietary applications on the other side. Big dry desert and no hope for rescue. On top of that there is one more battle to lose. DWG seems to be the standard format for CAD data. Everyone who wants to exist in CAD has to work with DWG. Now, rumor has it that Autodesk has DWGx file format in works. Basically CAD equivalent of Office Open XML. The problem is that there is no ODF in CAD, so if Autodesk decides to standardise it they will have a much easier job then MS with OOXML. OK, enough about that for today. I think that I have a long post about it coming pretty soon…
Update:Â
Seems like Amazon has done something to restrict mp3 downloads to US only. I get a “geographic problem” message when I try to download anything.
On Saturday, I finally managed to migrate Psycho repository from Novell Forge SVN to Google Code SVN. It took a couple of hours and a lot of server errors and so on but it’s done and that’s what counts. So if you’re interested you can check out the source code using that command:
svn checkout http://psycho.googlecode.com/svn/trunk/ psycho
I’ve completed that migration using the SVK tool. SVNSYNC somhow didn’t want to work for me. The only issue with the final result is that it looks like all commits (all staggering 194 of them :-) ) have been done on the same day. Well, I can live with that. At least I have all the history. I’ll probably write a short HowTo for other people who want to get away from Novell Forge and land in Google Code repository.
Since MonoDevelop supports Visual Studio solutions I decided to check in the solution files as well. So now, if you check out the code you’ll get the full Visual Studio project that you can easily compile and run. No, I still didn’t get my head around an actual build system. I’ll worry about that when the application is ready for shipping.
Wow! Two reasons to count the day as a nice one
the first person (except me) managed to display the map
So far a few people got to the Outline View but nobody was actually able to display the map and that is a kind of important in mind mapping software.
the first external contribution to Psycho
Just a few lines of code but no contribution is neither too big nor too small. That one was very nice as it fixed a problem that I couldn’t figure out the cause of (what a sentence).
Anyway, Manuel is guilty of both. Thanks again.

Finally a png file
Originally uploaded by piotr zurek.
As of yesterday I can finally produce a nice png drawing of my map. The next thing I will have to complete ASAP is Styles functionality and Property View that will allow modifying looks of each topic separately. I wish there wasn’t Christmas coming so that I had no distractions from working on Psycho. It gets more and more usable and I think that the first actual release is coming in around 6 months. I’ll try to produce a Road Map - of course as a mind map.
Every once in a while a day like yesterday happens and I feel like shooting someone in the knee to share my pain! I’ve spent the last few days trying to figure out how to get the DrawingArea scroll nicely inside a ScrolledWindow. With absolutely no luck of course. I realize that I’m lacking basic knowledge so I looked for some examples all over the web. It’s probably bread and butter for anyone with Gtk+/Gtk# experience, but apparently it doesn’t make it well documented. Seriously, Gtk# and “well documented” should not be used in the same sentence. If there is somebody (Novell?) who cares about adoption of Gtk# for cross-platform development, they should put some effort into making it all more approachable.
On the other hand - PyGTK examples were poping up everywhere. Maybe I started learing the wrong language…
Anyway, that’s what my problem looks like
…before scrolling:

… after scroling:

… and after re-exposing:

All suggestions highly appreciated…
So, the problem with slow drawing was indeed my fault. The calculation of every topic’s position was repeated through all previous topic on all higher levels. Now I calculate it just once for every topic and I can draw hundreds of topics in a blink of an eye. Another small step forward and I can already see a few more places for improvement.
So, it’s all coming together quite nicely, but the problem with the speed of drawing is killing me. I’m (almost) sure that it’s not a cairo related memory leak. I .Destroy() everything I can. It must be just something with my drawing procedures that iterate back and forth through the tree. Obviously I don’t do it in the most effective way. The problem is I don’t know many ways… I definetely need some help. Anyone, please!

I’ve got an ugly memory leak somewhere in drawing procedures. At the moment I draw four elements: background, topic frame, topic text and connections between topics. Background is fine - there is not much I could have done wrong there. Topic frames and texts are slow to draw but they are far more responsive then connections. Drawing connections for more then 20 topics takes 30-40 seconds. That’s crazy. Any ideas how to hunt that leak down?