Sunday, November 23, 2014

How to run Guitar Rig 5 with Reaper on Arch Linux

Since I really like to fool around with my electric guitar and record stuff, this was one my reasons to dual-boot, but now it seems like I finally don't really need to anymore.
This short guide will tell you how you can get WineASIO to work with Reaper and Guitar Rig.

So one of the first things we need is wine.

                                     sudo pacman -S wine

Should do the trick. Then we also need the jack server and a frontend for it, the most popular is qjackctl.
                         
                                    sudo pacman -S qjackctl jack

Now run qjackctl to select your audio interface in the Setup screen. I have this dedicated guitar interface: http://www.behringer.com/EN/Products/UCG102.aspx

It's not the best, but it's cheap and works on Linux.

Be sure to set the sample rate and the buffer size correctly. I can get it down to 256 samples and to a latency of around 10 msec (on Windows it does go under that).

Add your user to the audio group with

                                   sudo usermod -a -G audio yourusername

And now you should be able to start the jack server from qjackctl

Next up we need wineasio, this has to be installed from AUR wineasio or wineasio-git.

For some reason, this didn't really work for me, so I compiled my own. You still need steinberg-asio though.

                                 sudo packer -S steinberg-asio

This will install asio.h into /usr/include/steinberg-asio/asio.h

(Normally you would get this from the Steinberg SDK, which you would get by signing up for a Steinberg Developer account)

Now if the AUR package didn't work for you, then you can download wineasio from here:

                                http://sourceforge.net/projects/wineasio/

And copy asio.h from the above location to the source tree. After which, as the README file says:

Do the following to build for 64bit Wine.
# ./prepare_64bit_asio
# make clean
# make -f Makefile64

Now that should result in wineasio.dll.so being built. Check the architecture with the following command:

[balazsbela@archlinux wineasio]$ objdump -f wineasio.dll.so |grep arch
architecture: i386:x86-64, flags 0x00000150:

All good, now copy it into /usr/lib64/wine/  (Assuming you use the 64 bit version).

Now we need to register it, so REAPER sees it.

                               wine64 regsvr32 wineasioa

This should result in the message: Successfully registered DLL wineasio.dll

Now run winecfg and check that the drive in the Audio tab is winealsa.drv and only that.

WineAsio is now installed!

So lets get Reaper from: http://www.reaper.fm/download.php

The instalation is straightforward, next next finish.

Now you can get the free version of Guitar Rig from here:

http://www.native-instruments.com/en/products/komplete/guitar/guitar-rig-5-player/download/


So download and install that, set the VST plugin folder in Reaper (start it with wine reaper.exe, it usually lives in ~/.wine/drive_c/Program\ Files/REAPER\ (x64)/)

Now Guitar Rig should appear when you add effects to a track and you should be able to use it.


This approach is not perfect, I still get some buffer underruns with my USB interface, there is also a way to use a realtime kernel, that would probably make it a lot better, but it works and it's good enough for now.

In case I may have forgotten something:

http://lkubuntu.wordpress.com/2014/01/09/how-to-set-up-wineasio/
http://forum.cockos.com/showthread.php?t=16786


It does show how wine has come such a long way, maybe now with the open-sourcing of .NET it will get even better.

Wednesday, December 25, 2013

2013 Wrap Up

Apparently, I managed to neglect blogging for almost an entire year.
But now, since 2014 is right around the corner, I think it's time to give an update.

It's been a very exciting and busy year that demonstrated that moving from Java web-development back to my C++/Qt roots has been a good decision. The project I have been working on is nearing completion, while I can not disclose many details of it, I can tell that it is something truly unique that has not been done before. Working with bluetooth, gps and embedded arm boards has proven to be a lot more fitting direction for me than Java web-development ever was and I definitely want to continue on the embedded side of things. Also C++ 11 (and soon C++ 14) comes with lots of exciting new features that move it closer to functional languages.
Another thing that I've learned this year is that web-development is also very important and my 1.5 years of Java enterprise were definitely not a waste, JavaScript is starting to show up in the weirdest places (http://creativejs.com/2013/08/tessel-a-javascript-programmable-micro-controller-board/) and I'm pretty sure that this trend will continue (emscripten, asm.js anyone ?).

Between working and my Master's degree I didn't really have too much time for personal projects this year, only a few minor commits in github and various educational projects, but I've already chosen my thesis project and I've already started researching it.

Also, it's a very strange feeling to see your 10th grade project on Linux Insider (http://www.linuxinsider.com/story/74828.html) after so many years. It has been at least 5-6 years and I'm seriously surprised it still works in modern distro releases (or Windows for that matter).
People still keep downloading it, which just shows the huge demand for this kind of app. It really makes me want to redesign it, rewrite it from zero, give it a very solid plugin based architecture and release a new version together with an SDK for third party devs (these were my plans all along). But I simply can not find the time to do it, especially not alone, and I have a bunch of ideas I would like to implement. So I guess it will have to wait. I am of course very sad about disappointing my users and I dislike the idea of abandonware, but I hope people understand that I have to prioritize.

One of the other changes that I've made this year is switching to Arch.
I've been using ArchLinux for more than half a year now and I am so satisfied with it that I've even bought a shirt (http://www.freewear.org/?page=show_item&id=FW0026 , the price also contains a donation to the project).

It's simple, reliable, has great KDE 4 support, rolling releases and just up-to-date enough to be stable (as in bleeding edge, without the risk of breaking). It's great for development environment and for daily use.
Huge kudos to the Arch devs. I will try to install Arch at my workplace too (we use Ubuntu now).

In terms of hobbies I've managed to work on quite a few musical projects this year, one of them is my personal musical project (on which we work with my girlfriend and with various session collaborators) , another was a full band, with regular band practice (but it didn't last for long) and another project on which I did mostly sound engineering related work (upcomming release).

That kind of wraps it up, I hope that the next year will be at least equally awesome.

Merry Christmas to you all and a Happy New Year!







Thursday, January 17, 2013

New year, new challenges

The new year brought a lot of change to my life. I have kind of returned to my C++/Qt roots. I've recently switched jobs, I've left enterprise java web development for C++ Qt development on embedded devices.
While using cutting edge web technologies with well organized and solid java frameworks is nice, I've received an e-mail on one of the mailing lists that a company in my hometown was searching for Qt developers, so I went to see what it's about. I'm currently working on a very interesting and challenging project with direct assistance/guidance/review from very good German engineers from KDAB, the leading Qt consultancy firm in Europe. I get to use ubuntu linux, git and the latest Qt 5. I'm finally putting the knowledge I've gained with my biggest projects to use. To familiarize myself with Qt5, before starting the job (and as a project for the university) I wrote an aggregator that takes articles from Reddit and Hacker news and shows them in the same list.

This showcases the capabilities of QML and webkit.

Check it out here: https://github.com/balazsbela/qgator

Monday, July 30, 2012

Thesis summary article and updates

As I promised, I'm posting the article about my license thesis that was presented at a local conference held by the two prominent faculties in Cluj (UBB and UT). I've won first prize in the category of UBB students and I would like to thank Siemens Romania for the laptop they've offered as a prize.

Here you can download the paper:

3D Software Visualization Tool for Enhanced Code Comprehension

If there is interest, I will post my entire thesis.

Other than that, I'm busy with work and I will be doing my Master's Degree in Software Engineering.That will keep me busy for another two years.


Monday, June 18, 2012

Symbion 1.0 Released


Symbion 1.0 was released on sourceforge, you can now download it at           http://sourceforge.net/projects/symbion/


Symbion was chosen as a name because the profiler attaches itself to the host program in a way that resembles symbiotic relationships in nature and also because the visualizer uses different interconnected nodes that form a mistletoe-like structure.

I finished writing my thesis today, I also wrote an article about Symbion which will be presented at a conference. I will post both online after they are presented.

Until then, I made a video demoing the new capabilities:


























Saturday, April 21, 2012

Source code browsing

I've implemented the source code viewing. Here's a screenshot:

You simply click a node, it turns orange and appears in the source code viewer, it also has some really basic syntax highlighting. With right click, you can expand nodes.You can also select expanded nodes for source code viewing. It also automatically scrolls near the function definition in the source file, the method name is also highlighted.

What I've been up to lately

Yes, it's been a year again and while writing yearly blogposts is not my intention, this is how it happened.

I've been busy.Now that I check my blog and see all the C++/Perl posts it may come as a surprise to some that I have a new job. For the last 8 months I've been working as a Java Developer at ISDC. We do enterprise web development, yeah, I know what you're thinking, but you're wrong. It's not boring at all, I've had the chance to work on some really interesting projects, one of them was recreating a simpler version of google earth using HTML5 and canvas and laying out some geographical data on it, it was a really interesting R&D project.Other than that it's still challenging, enterprise needs are very different from standard, traditional web application needs. What I like the most is, that we try to do things by the book, reviews are strict, business processes are a priority, our aim is quality.I feel like I'm a lot more disciplined coder.

So if work (part time, 20 hours a week), school (3rd year, final) wasn't enough to keep me busy, I've started to work on my thesis project.

Ever had the heart warming experience of maintaining a huge project you haven't worked on ? Thousands of modules, packages, classes of unfamiliar code. It's hard to decide even where to start. Well this is what my thesis project would like to address. Using the JVMTI a profiling agent attaches itself to the execution of a java program and gathers data about the execution. This data, for now, is limited to all the function calls that match a specific ruleset.This process is done using the ASM API, which lets you hook into the JVM class loading process, and rewrite the classes at runtime, before they are executed.

The gathered data is stored in a huge XML file and a 3D visualizer, written in JMonkey, reads it and allows you to visualize the callgraph, jumping to the relevant source-code portion. This allows you to execute a very simple use case and follow the execution path, without going through every detail a debugging process would force you to. You can give regular expressions matching the classes you would like to record, the rest is ignored. This lets you focus on your code.

The project is called Symbion (because of the Symbiosis-like relationship between the profiling agent and the profiled program). While it's heavily work in progress, you can check it out here: http://sourceforge.net/p/symbion/

I've attached a few screenshots below:

I've made an artificial starting node, so I won't have multiple trees.You can expand each function node and get what functions it calls. The source code display is not implemented yet.

I've taken a week off to work on this project, but it's not expected to be stable anytime soon.I'll have to defend my thesis in June,so it should be done by then.

Here's a pic of the profiler and the console, you can see each class that matched your rules.It's profiling a very simple application I had as homework for school back in the second year.

So yeah, this concludes my little adventure in software visualization.The finer details are yet to be dealt with.I hope it will be actually useful.

Saturday, March 12, 2011

Nokia Qt-Developers Contest

On a boring Friday afternoon I was just boarding the bus, coming home from the university when a friend of mine called me and told me about the Nokia Qt-Developers Contest organized by Nokia Romania.

We immediately established a team and went to the most silent pub we could find in Cluj for brainstorming.

The idea we ended up deciding on was my idea, inspired by looking at the ncmpc source code which I studied for building the 2d spectrum analyzer.

Basically the idea is to write a mobile MPD (Music Player Daemon) client. This is not special, there are many MPD Clients (MPC for simplicity) for every platform known to man. But MPD has http streaming and can basically stream your music back at you like a Shoutcast/Icecast radio station.

So our idea is to write a music player which lets you remotely control playback on your server and connect to the radio-stream and play it back, thus eliminating the need to store your huge N GB collection on a small memory card and leaving space for other stuff.
There are many technical problems with this idea, one is the data traffic cost, so you have to be on unlimited 3G data-plan or on a wireless connection (but these things are not as rare nowadays). The other is network latency (we need to carefully plan buffering) and also the effect on battery life.

So yeah, there are many challenges but if other projects could do similar things, it probably means it's possible and I have seen many great things happen under Qt.

I have already coded a working prototype , I am still battling Phonon because it doesn't really want to do what I tell it to, maybe I will rewrite the player part in QtMultimedia, we shall see.

I like this idea and I find it fun to code, mainly because I think it's relatively original (point me to a working implementation on a mobile platform if you think otherwise).

The other reason why I chose this idea is that it fits the spirit of Symbian and Nokia phones in general, since it targets as it's main audience the geeks, the power users, people who buy Symbian phones to connect through ssh to their server.
This is even more so in our days when Symbian is basically dead, Nokia abandoned it for Windows Mobile, so mainly the people who buy/have Symbian ^3 phones are developers/power users/geeks/business guys.

Even though this app doesn't seem very marketable for average users I believe there is a need for such a thing in the Symbian/Maemo/Meego/Android/Qt crowd.

Oh yeah, and now if we write it in Qt, the Android guys can use it too, thanks to a Romanian hacker named Bogdan Vatra.

I'm not sure that this is the most competitive idea on the list but feel free to vote for anything you like on this link.


Also this app would enable friends to connect to the same server and listen to the same song at the same time and also control playback.


So yeah, wish us luck! :)

Tuesday, March 8, 2011

Visualizing Music - Part 2

I've finally managed to fix the crash.It was quite an ugly race condition, the rendering thread wanted access to the same scene node as the music playback thread, it's not exactly clear where and why, it's hidden in the internals of Ogre, I guess.
Anyway, I've managed to fix it by locking on the same semaphore as used in the callback function in frameStarted() and unlocking it in frameEnded(). So it's finally working, thanks to my friend for pointing it out. Release comming soon.

Meanwhile, I've been experimenting a bit with perl, I rewrote the SDL Music Visualizer example to render a frequency spectrum (aka bars).
I found a nice module for doing the Fourier Transform, Math::FFT.

You can find the code here: https://github.com/balazsbela/Visualizer/blob/master/frequency.pl

And here's a screenshot:




All this in 210 lines of Perl. Perl is indeed awesome.

Friday, March 4, 2011

Visualizing music

Not long ago I came across this article: http://www.perl.com/pub/2011/01/visualizing-music-with-sdl-and-perl.html

Now, I'm no stranger to perl, I have used it before, mainly for socket programming and http requests, I knew it had various bindings for various libraries, but still this solution seemed elegant.

This gave me the idea to recreate this old xmms spectrum analyzer OpenGL plugin with Ogre3d.

I had two weeks vacation between semester 2 and 3 so I had time to study a bit of OpenGL to help me draw things in my (optional) Computational Geometry class.

So I read about the fast fourier transform and how to extract the frequencies out of the stream. I decided to use FFTW because it's fast and I came up with a solution to normalize the values (not sure if it's the best, but it works, if you have tips on how to do this more correctly I'm very eager to hear them).

I came up with this code:

https://github.com/balazsbela/OgreVisualizer



It works, it plays ogg files and visualizes them in 3d pretty well. The framerate is pretty good too.

There is one problem though, it crashes after a while,seemingly randomly, sometimes it
plays through the whole song without problems, sometimes it crashes at the half of the song.

I posted questions on Ogre3d forum, StackExchange GameDev section, Stackoverflow, but I have yet to read a good response.

Here's the main class: https://github.com/balazsbela/OgreVisualizer/blob/master/src/VisualizerApplication.cpp

Here's the backtrace:

balazsbela@darknet:~/workspace/OgreVisualizer/Release$ gdb OgreVisualizer core
GNU gdb (GDB) 7.2-debian
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i486-linux-gnu".
For bug reporting instructions, please see:
...
Reading symbols from /home/balazsbela/workspace/OgreVisualizer/Release/OgreVisualizer...done.
[New Thread 17705]
[New Thread 17702]
[New Thread 17703]
[New Thread 17700]
Reading symbols from /usr/lib/libv4l/v4l1compat.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libv4l/v4l1compat.so
Reading symbols from /usr/local/lib/libOgreMain.so.1.7.1...done.
Loaded symbols for /usr/local/lib/libOgreMain.so.1.7.1
Reading symbols from /usr/lib/libfftw3.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libfftw3.so.3
Reading symbols from /usr/lib/libSDL_sound-1.0.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libSDL_sound-1.0.so.1
Reading symbols from /usr/lib/libSDL-1.2.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libSDL-1.2.so.0
Reading symbols from /usr/lib/libSDL_mixer-1.2.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libSDL_mixer-1.2.so.0
Reading symbols from /usr/lib/libOIS-1.2.0.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libOIS-1.2.0.so
Reading symbols from /usr/lib/libstdc++.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libstdc++.so.6
Reading symbols from /lib/i686/cmov/libm.so.6...Reading symbols from /usr/lib/debug/lib/i686/cmov/libm-2.11.2.so...done.
done.
Loaded symbols for /lib/i686/cmov/libm.so.6
Reading symbols from /lib/libgcc_s.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/libgcc_s.so.1
Reading symbols from /lib/i686/cmov/libc.so.6...Reading symbols from /usr/lib/debug/lib/i686/cmov/libc-2.11.2.so...done.
done.
Loaded symbols for /lib/i686/cmov/libc.so.6
Reading symbols from /lib/i686/cmov/libpthread.so.0...Reading symbols from /usr/lib/debug/lib/i686/cmov/libpthread-2.11.2.so...done.
done.
Loaded symbols for /lib/i686/cmov/libpthread.so.0
Reading symbols from /usr/local/lib/libv4l1.so.0...done.
Loaded symbols for /usr/local/lib/libv4l1.so.0
Reading symbols from /usr/lib/libfreetype.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libfreetype.so.6
Reading symbols from /usr/lib/libSM.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libSM.so.6
Reading symbols from /usr/lib/libICE.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libICE.so.6
Reading symbols from /usr/lib/libX11.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libX11.so.6
Reading symbols from /usr/lib/libXext.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXext.so.6
Reading symbols from /usr/lib/libXt.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXt.so.6
Reading symbols from /usr/lib/libXaw.so.7...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXaw.so.7
Reading symbols from /lib/i686/cmov/libdl.so.2...Reading symbols from /usr/lib/debug/lib/i686/cmov/libdl-2.11.2.so...done.
done.
Loaded symbols for /lib/i686/cmov/libdl.so.2
Reading symbols from /usr/lib/libboost_thread.so.1.42.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libboost_thread.so.1.42.0
Reading symbols from /usr/lib/libboost_date_time.so.1.42.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libboost_date_time.so.1.42.0
Reading symbols from /usr/lib/libfreeimage.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libfreeimage.so.3
Reading symbols from /usr/lib/libzzip-0.so.13...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libzzip-0.so.13
Reading symbols from /usr/lib/libz.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libz.so.1
Reading symbols from /usr/lib/libsmpeg-0.4.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libsmpeg-0.4.so.0
Reading symbols from /usr/lib/libmikmod.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libmikmod.so.2
Reading symbols from /usr/lib/libvorbis.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libvorbis.so.0
Reading symbols from /usr/lib/libvorbisfile.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libvorbisfile.so.3
Reading symbols from /usr/lib/libFLAC.so.8...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libFLAC.so.8
Reading symbols from /usr/lib/libogg.so.0...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libogg.so.0
Reading symbols from /usr/lib/sse2/libspeex.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/sse2/libspeex.so.1
Reading symbols from /usr/lib/libasound.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libasound.so.2
Reading symbols from /lib/i686/cmov/librt.so.1...Reading symbols from /usr/lib/debug/lib/i686/cmov/librt-2.11.2.so...done.
done.
Loaded symbols for /lib/i686/cmov/librt.so.1
Reading symbols from /usr/lib/libdirectfb-1.2.so.9...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libdirectfb-1.2.so.9
Reading symbols from /usr/lib/libfusion-1.2.so.9...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libfusion-1.2.so.9
Reading symbols from /usr/lib/libdirect-1.2.so.9...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libdirect-1.2.so.9
Reading symbols from /usr/lib/libvga.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libvga.so.1
Reading symbols from /lib/ld-linux.so.2...Reading symbols from /usr/lib/debug/lib/ld-2.11.2.so...done.
done.
Loaded symbols for /lib/ld-linux.so.2
Reading symbols from /usr/local/lib/libv4l2.so.0...done.
Loaded symbols for /usr/local/lib/libv4l2.so.0
Reading symbols from /lib/libuuid.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/libuuid.so.1
Reading symbols from /usr/lib/libxcb.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libxcb.so.1
Reading symbols from /usr/lib/libXmu.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXmu.so.6
Reading symbols from /usr/lib/libXpm.so.4...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXpm.so.4
Reading symbols from /usr/lib/libjpeg.so.62...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libjpeg.so.62
Reading symbols from /usr/lib/libmng.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libmng.so.1
Reading symbols from /usr/lib/libopenjpeg.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libopenjpeg.so.2
Reading symbols from /lib/libpng12.so.0...(no debugging symbols found)...done.
Loaded symbols for /lib/libpng12.so.0
Reading symbols from /usr/lib/libIlmImf.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libIlmImf.so.6
Reading symbols from /usr/lib/libImath.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libImath.so.6
Reading symbols from /usr/lib/libHalf.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libHalf.so.6
Reading symbols from /usr/lib/libIex.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libIex.so.6
Reading symbols from /usr/lib/libIlmThread.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libIlmThread.so.6
Reading symbols from /lib/libx86.so.1...(no debugging symbols found)...done.
Loaded symbols for /lib/libx86.so.1
Reading symbols from /usr/local/lib/libv4lconvert.so.0...done.
Loaded symbols for /usr/local/lib/libv4lconvert.so.0
Reading symbols from /usr/lib/libXau.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXau.so.6
Reading symbols from /usr/lib/libXdmcp.so.6...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXdmcp.so.6
Reading symbols from /usr/lib/liblcms.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/liblcms.so.1
Reading symbols from /usr/local/lib/OGRE/RenderSystem_GL.so...done.
Loaded symbols for /usr/local/lib/OGRE/RenderSystem_GL.so
Reading symbols from /usr/lib/libGLU.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libGLU.so.1
Reading symbols from /usr/lib/libGL.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libGL.so.1
Reading symbols from /usr/lib/libXrandr.so.2...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXrandr.so.2
Reading symbols from /usr/lib/libGLcore.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libGLcore.so.1
Reading symbols from /usr/lib/tls/libnvidia-tls.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/tls/libnvidia-tls.so.1
Reading symbols from /usr/lib/libXrender.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXrender.so.1
Reading symbols from /usr/lib/libXcursor.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXcursor.so.1
Reading symbols from /usr/lib/libXfixes.so.3...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/libXfixes.so.3
Reading symbols from /lib/i686/cmov/libnss_compat.so.2...Reading symbols from /usr/lib/debug/lib/i686/cmov/libnss_compat-2.11.2.so...done.
done.
Loaded symbols for /lib/i686/cmov/libnss_compat.so.2
Reading symbols from /lib/i686/cmov/libnsl.so.1...Reading symbols from /usr/lib/debug/lib/i686/cmov/libnsl-2.11.2.so...done.
done.
Loaded symbols for /lib/i686/cmov/libnsl.so.1
Reading symbols from /lib/i686/cmov/libnss_nis.so.2...Reading symbols from /usr/lib/debug/lib/i686/cmov/libnss_nis-2.11.2.so...done.
done.
Loaded symbols for /lib/i686/cmov/libnss_nis.so.2
Reading symbols from /lib/i686/cmov/libnss_files.so.2...Reading symbols from /usr/lib/debug/lib/i686/cmov/libnss_files-2.11.2.so...done.
done.
Loaded symbols for /lib/i686/cmov/libnss_files.so.2
Reading symbols from /usr/lib/alsa-lib/libasound_module_rate_speexrate.so...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/alsa-lib/libasound_module_rate_speexrate.so
Reading symbols from /usr/lib/sse2/libspeexdsp.so.1...(no debugging symbols found)...done.
Loaded symbols for /usr/lib/sse2/libspeexdsp.so.1
Core was generated by `./OgreVisualizer'.
Program terminated with signal 11, Segmentation fault.
#0 0xb6dc563d in std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) ()
from /usr/lib/libstdc++.so.6
(gdb) bt
#0 0xb6dc563d in std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&) ()
from /usr/lib/libstdc++.so.6
#1 0xb73bb3c2 in std::_Rb_tree, std::less, Ogre::STLAllocator > >::_M_insert_(std::_Rb_tree_node_base const*, std::_Rb_tree_node_base const*, Ogre::Node* const&) ()
from /usr/local/lib/libOgreMain.so.1.7.1
#2 0xb73b5a52 in _M_insert_unique (this=0xb6157ea0, child=0xb616aff8, forceParentUpdate=false) at /usr/include/c++/4.4/bits/stl_tree.h:1182
#3 insert (this=0xb6157ea0, child=0xb616aff8, forceParentUpdate=false) at /usr/include/c++/4.4/bits/stl_set.h:411
#4 Ogre::Node::requestUpdate (this=0xb6157ea0, child=0xb616aff8, forceParentUpdate=false)
at /home/balazsbela/Downloads/ogre_src_v1-7-1/OgreMain/src/OgreNode.cpp:805
#5 0xb73b6a40 in Ogre::Node::needUpdate (this=0xb616aff8, forceParentUpdate=92)
at /home/balazsbela/Downloads/ogre_src_v1-7-1/OgreMain/src/OgreNode.cpp:789
#6 0xb73b5038 in Ogre::Node::setScale (this=0x1825c, scale=...) at /home/balazsbela/Downloads/ogre_src_v1-7-1/OgreMain/src/OgreNode.cpp:638
#7 0x0805d306 in VisualizerApplication::adjustNodes (this=0x9cd4808) at ../src/VisualizerApplication.cpp:236
#8 0xb6e867f0 in ?? () from /usr/lib/libSDL_mixer-1.2.so.0
#9 0xb6e8719a in ?? () from /usr/lib/libSDL_mixer-1.2.so.0
#10 0xb6ed9b0d in ?? () from /usr/lib/libSDL-1.2.so.0
#11 0xb6ee185e in ?? () from /usr/lib/libSDL-1.2.so.0
#12 0xb6f2e0bd in ?? () from /usr/lib/libSDL-1.2.so.0
#13 0xb6bc7955 in start_thread (arg=0xb198ab70) at pthread_create.c:300
#14 0xb6ca6e7e in clone () at ../sysdeps/unix/sysv/linux/i386/clone.S:130
(gdb)



I've had this bug for weeks, it's very frustrating.
It seems like Ogre keeps an std::set with the Nodes which need updating, this std::set is a Red Black Tree.

It instantly crashes once the node gets into the set at one point.
I used the sdl semaphores to make sure that the callback function does not call visualize multiple times, before the previous call finished.

I don't know what causes this crash. Maybe the std::set fills up from the frequent updating ? Maybe I should limit the framerate ?

I tried using a NodeListener to only update a node if the previously queued update operation finished, but since it crashes when it's placed in the update queue, not when it gets updated, it didn't help.


Relevant methods for the crash, snippets from Ogre3d 1.7.1 source code:


void Node::setScale(const Vector3& scale)
{
assert(!scale.isNaN() && "Invalid vector supplied as parameter");
mScale = scale;
needUpdate();
}



void Node::requestUpdate(Node* child, bool forceParentUpdate)
{
// If we're already going to update everything this doesn't matter
if (mNeedChildUpdate)
{
return;
}

mChildrenToUpdate.insert(child);
// Request selective update of me, if we didn't do it before
if (mParent && (!mParentNotified || forceParentUpdate))
{
mParent->requestUpdate(this, forceParentUpdate);
mParentNotified = true ;
}

}



typedef set::type ChildUpdateSet;

/// List of children which need updating, used if self is not out of date but children are
mutable ChildUpdateSet mChildrenToUpdate;




STL Set:

// insert/erase
/**
* @brief Attempts to insert an element into the %set.
* @param x Element to be inserted.
* @return A pair, of which the first element is an iterator that points
* to the possibly inserted element, and the second is a bool
* that is true if the element was actually inserted.
*
* This function attempts to insert an element into the %set. A %set
* relies on unique keys and thus an element is only inserted if it is
* not already present in the %set.
*
* Insertion requires logarithmic time.
*/
std::pair
insert(const value_type& __x)
{
std::pair __p =
_M_t._M_insert_unique(__x);
return std::pair(__p.first, __p.second);
}


STL Tree:

template
pair::iterator, bool>
_Rb_tree<_key,>::
_M_insert_unique(const _Val& __v)
{
_Link_type __x = _M_begin();
_Link_type __y = _M_end();
bool __comp = true;
while (__x != 0)
{
__y = __x;
__comp = _M_impl._M_key_compare(_KeyOfValue()(__v), _S_key(__x));
__x = __comp ? _S_left(__x) : _S_right(__x);
}
iterator __j = iterator(__y);
if (__comp)
{
if (__j == begin())
return pair(_M_insert_(__x, __y, __v), true);
else
--__j;
}
if (_M_impl._M_key_compare(_S_key(__j._M_node), _KeyOfValue()(__v)))
return pair(_M_insert_(__x, __y, __v), true);
return pair(__j, false);
}

template
typename _Rb_tree<_key,>::iterator
_Rb_tree<_key,>::
_M_insert_equal(const _Val& __v)
{
_Link_type __x = _M_begin();
_Link_type __y = _M_end();
while (__x != 0)
{
__y = __x;
__x = _M_impl._M_key_compare(_KeyOfValue()(__v), _S_key(__x)) ?
_S_left(__x) : _S_right(__x);
}
return _M_insert_(__x, __y, __v);
}



So yeah, this bug is a stubborn one.
If you would like to build the source code I will provide the instructions to do so, I also compiled it under windows, I have a build if you need it. If anyone has any idea how to fix the crash, I would be willing to donate beer :)).

For now, here's a screenshot:



Oh yeah, and you have full control of the camera, like in OgrePathfinder.

Friday, July 23, 2010

OgrePathFinder

I was always interested in graphics/game programming, so after an XNA/Blender workshop held at the faculty I've started to look into OpenGL programming.
I had a few adventures with OpenGL and SDL, GLUT and other tools meant to make life with OpenGL easier. I have studied a few mesh loaders (obj and md2), but I soon realized the limitations of this form of development.
Then I heard about Ogre3d, the Object-Oriented Graphics Rendering Engine.
So I've looked into their tutorials and started studying it. After a few Hello World- like applications I have decided to go more in-depth. I studied the topics of Scene Managers, Scene Graphs, Lights, Cameras, Animations and whatnot.

To put things in practice I've decided to write a simulation for my own implementation of the A* algorithm, written as an assignment at the university (from a list of problems, and we could choose the complexity of our solution).

Therefore, OgrePathFinder was born.
You can find the sourcecode and binaries (for Windows and Linux, since Ogre3d is cross-platform) at the Google code page:

http://code.google.com/p/ogrepathfinder/


Here is a youtube video demonstrating the application, complete with victory dance :




I have ported the Ogre Character sample from the Samples SDK to the Ogre3D wiki tutorial framework. Most of the resources (meshes, textures whatnot) are part of the Character sample. The only thing that I modeled in blender was the obstacle cube.


The movements are based on calculating the traveled distance with vectors and with checking their bounds at every frame, so the movement is framerate dependent. I also wanted to learn collision detection so I've added raycasting too.
You can see that the bounding boxes of obstacles in front of the character appear when touched by the ray. Raycasting is used to avoid walking in the front of an obstacle.
I've also included a smaller labyrinth. Just copy labyrinth.in.2 into labyrinth.in.


The motion is framerate dependent, all bound checks take place in the main render loop, so the character could take a wrong turn at some point, and think it arrived to the goal, but Ogre is only a graphics engine and I didn't use a physics engine like PhysX or Bullet.
The application seems to work well, but this is my first Ogre project, bugs may happen.

It could help beginners in learning Ogre.

Enjoy!

Monday, May 3, 2010

Introduction to Android



Now that the accepted GSoC projects were announced, I was informed that my proposal was not accepted.

The Maemo project got 87 proposals this year. Here you can find the list of accepted projects:



I asked my potential mentor (he commented on my proposal) about the reason my proposal was refused.

Valério Valério to me
show details Apr 26 (8 days ago)
Hello,
- Hide quoted text -


Bela Balazs wrote:
Hello.

I am sorry to waste your time. But I would like to ask why my GSoC proposal (http://socghop.appspot.com/document/show/user/balazsbela/maemotodo) was rejected.
I just want to know so that I can improve in the future. Please be very honest with me, I won't take it personally. I just want to know the reasons.
I understand that you got a lot a proposals and the places are very limited.
Just a few comments would satisfy my curiosity. What do you recommend for my next gsoc proposal.

Your proposal ranked 1/8 among the to-do application proposals, the simple reason was that we did not picked that project, otherwise your application would be chosen. I can't tell you what is in the private reviews, but is very positive.
From my side I can't point anything and would like to have you as student, due to your OSS background, but we can't pick all the projects :(.

Best regards,

Valério

Thank you very much.


So yeah, that's that. So many ideas in the idea list and only 10 projects get accepted.
I wish them good luck and may Maemo become competitive as soon as possible.
In the mean time I will spend my summer with learning new technologies.
One of these new technologies is Google's shiny new operating system: Android.

So I went ahead, installed the sdk, set up Eclipse and I've dived into Android development.
I wrote my own traditional Hello world type applications, the BMI Calculator.

Here are the images:

The message and the android image is changed according to the result, when Calculate is pressed.
I really like the development environment and the APIs seem cool. The designer is very limited though and I spent too much time searching trough the properties to get a design I'm satisfied with.

I hope they start supporting Qt soon, that would be awesome (since it would work on Maemo and other Qt supported platforms too). Still I don't know if this will be happening any time soon.
I miss signals and slots.

I'll continue to study Android development and if I get the hang of it, maybe I'll implement my GSoC proposal for the Android platform and publish it in the market.


Saturday, April 3, 2010

Playing around with Maemo

Since Nokia acquired Trolltech we all knew that something awesome would come out of it. The days of Symbian and other slow and unstable mobile operating systems are coming to an end.
The best showcase of the Maemo operating system is the Nokia N900. Shiiiiiiny.
Now every time a good phone comes out people can't help compare it to the so called iPhone.
I deeply despise that device, and don't get me started on it because you'll get a post which you won't have the time to read.
I really think that we shouldn't trade our freedoms for sparkling, dumbed down interfaces under the banner of usability.

I have often been praised for the Keep Things Simple and Clean approach I took when designing the interface of qOrganizer, now I don't believe it's the best I could come up with, but even my 55 year old father can use it and that must mean something.


So back to Maemo, as you can see , despite having a touch screen, the N900 has a real keyboard which is something I can respect after being frustrated by writing sms-es on a touch screen (even with vibration and noise as feedback, it's just not the same).

I don't know enough about Android to compare Maemo to it, but my friend has an Android phone and it's pretty cool.

I went ahead and installed the Maemo SDK. This is fairly easy on Debian, you can find some instructions here. The Maemo SDK was brought to my attention in an e-mail by a user who suggested that I should port qOrganizer to it, so I went ahead and installed Qt in Scratchbox and tried to compile qOrganizer but some classes are missing(like QSystray and Printing related classes).
The Maemo operating system is simply a debian based linux, installed from scratch.
The package manager is fully integrated in the phone and it handles debian packages, which you can install from the shiny App manager interface of the phone or from the Scratchbox command line using apt-get, like on any Debian based system.



It can run any Qt application, and it has a great interface for them called Hildon.
Here you can see my classic BMI calculator (it's like a hello world for me) running in the SDK (with no modification to the code at all).



So Maemo has the full awesomeness of Debian package management combined with the best tools used to write Desktop Linux applications on the embedded mobile platform. It already has many free applications and it's basically community maintained and open source (take that Apple!). Freedom and ease of use. Now we only have to wait for the price to drop.

On a related note I have been thinking about participating in Google Summer of Code and I checked the idea list of the Maemo project and I've found this:

Advanced To-do list Creating an advanced To-do list, with the ability to attach files, including audio recording, messages, emails, etc., linking multiple tasks and updating the priority of a task based on the time left maemo SDK, Qt

The current To-do lists in most Nokia mobiles are disappointing. These added functionalities could make one's phone their own 24 hr assistant

It's listed under easy, but hey I'm in my first year, and that doesn't mean that I can't expand on the idea and make it powerful and easy to use. I think this would suit me well and I'll be working on my idea description this week. We'll see how it goes.

Wish me luck!

PS: Happy Easter y'all!

University Experiences

For those of you who have just tuned in: I am currently a student in the second semester of the first year at the English section of Computer Science at Babeş-Bolyai University in Cluj Napoca.
I have found the second semester a lot more interesting than the first, we currently learn Object Oriented Programming (in C++) and programming under Unix (fork(),exec() that stuff), pretty basic stuff, but essential.
I had the illusion that I would have time for development in my free time this semester. Boy was I wrong. Although we learn basic stuff, there is always a lot of work to do. I have laboratory projects that have to be properly documented (some documentations reach 20 pages) every week. That basically keeps me pretty busy, but as an extra feature my timetable is pretty intense and keeps sleep deprivation at a constant level. But other than that, I like it and it keeps me interested, I only wish I had more time for my own ideas. I have detailed in my last post some ideas I would like to implement in qOrganizer, but it needs serious work. I recently turned 20 and I'm not the 10th grader who wrote that application in 2006 without having any real ideas about good coding practices and software design decisions anymore, so I guess waiting for some technologies to mature and make it into Qt doesn't hurt (I'm looking at you MySQL embedded).
Anyway, qOrganizer is usable in it's current form and I can always work on smaller projects just for the fun of it.

Qt is great, and it's not a secret that I'm a great fan of it, but sometimes it makes the most basic things like capturing right clicks in a QCalendarWidget unnecessarily difficult.
Read this to get and idea what I'm talking about.


Monday, December 21, 2009

A small update

Now that I have gained entry into my desired University, and I have found that it's just as time-consuming like the last year of high school. Anyway, the second semester seems easier and maybe then I will have the time and energy to concentrate on my projects and plans. I have many ideas regarding qOrganizer, but first of all I need to rewrite the whole codebase, because the current design lacks the flexibility needed to implement these features. If all goes well the new qOrganizer will provide a full API for an extension system to third party developers (anyone interested in writing a plugin for qOrganizer). I hope I can turn it into a platform, since ideas are many and developers are few (err one).
Anyway, a small thing that I could work on is the MySQL feature of qOrganizer under windows.
It has been brought to my attention that Qt for windows has no prebuilt MySQL plugin.
The truth is I've never noticed this, since it worked under linux (on which I do most of my development work), and SQLite worked under windows I just assumed it works by default.
Soon I learned this is not the case, so I went ahead and compiled my own QMySQL driver (after recompiling qt with mysql support and various tricks to compile qmysql with mingw). This was not an easy task and I hope that the developers from Nokia will find a way to make it just work in the future releases of Qt. But the point is that now it works.
If you need to use qOrganizer with mysql, go ahead and download the mysql enabled version.

Merry Christmas to everyone and a happy new year!

Wednesday, December 10, 2008

Net in KDE4 works finally

After a total recompile of Qt4, KDE4 apps can finally access the internet.
Too bad the weather plasmoid can't find my city :))

Monday, December 8, 2008

KDE4 got a lot better

After I installed Debian, I wanted a KDE4 desktop, just to play with it.
My first option would have been installing the kde 4.1.3 packages from the experimental repository. This would remove my kde3, which I wanted to avoid.
My other option would have been to use this tutorial to make a chroot environment in which I could install these packages without removing kde3.
I did this, it worked, but chroots aren't notorious about their comfort, besides KDE 4.2 beta was out. So I decided that I'll build the current SVN snapshot.
I followed this techbase article. But, you can use kdesvn. My friend, DjDarkman, has written a nice tutorial for Intrepid, although this one is good too.

After resolving many dependencies, getting optional packages, checking out from svn, stuff like that, I was ready to compile a subset of my choice of kde4 modules. Again, I have to give credit to Debian, most of the dependencies can be easily installed from apt and if you need something very new (like the last version of cmake), you can install it from the experimental repository.

After a few hours of compiling KDE4 was ready to use, it still needed some configuring and fine tuning though. Now it's up and running as my default desktop environment.
My desktop:

Dolphin is looking nice too:

As you can see, the look and feel of the desktop is very nice and professional, a bit mac like, but still original.
Mostly everything runs fast and smooth. The desktop effects are light years faster than compiz. They are very subtle, they don't attract my attention, but I'm sure I'd miss them if I would turn them off.
Amarok 2 looks very promising too.

I have some problems with kopete kde4, but it's better than the last time I tried it. It's too buggy for me. I did report some of those bugs. So ,for the time being, I'm using kopete kde3. I installed a nice kde4 like theme for kde3, so the apps blend in. Also, there is a nice theme for firefox. The gtk-qt engine takes care of gtk apps. So the desktop is pretty much uniform.

My biggest problem is that kde4 apps except kopete kde4, can't access the net.
I can ping google.com from konsole kde4, but amarok can't retrieve lyrics, the weather plasmoid can't get data from it's servers, gethotnewstuff can't access it's serverlist and krusader kde4 can't connect to my favorite ftp servers.
I tried asking everywhere on irc and it seems that only I have this problem.
I tried recompiling kdebase with the networkmanager backend, but no results.
I simply don't have net in kde4 apps (except a few of them). Not even in konqueror.
kde-devel@debian:~$ solid-network query status
solid-network(8683)/kdecore (KSycoca) KSycocaPrivate::openDatabase: Trying to open ksycoca from "/var/tmp/kdecache-kde-devel/ksycoca4"
solid-network(8683)/Solid (NetworkManager) NMNetworkManagerPrivate::fillNetworkInterfacesList: Got device list
solid-network(8683)/Solid (NetworkManager) NMNetworkManagerPrivate::fillNetworkInterfacesList: adding: "/org/freedesktop/NetworkManager/Devices/eth0"
solid-network(8683) Solid::Control::ManagerBasePrivate::loadBackend: Backend loaded: "NetworkManager"
solid-network(8683)/Solid (NetworkManager) NMNetworkManager::isNetworkingEnabled:
solid-network(8683)/Solid (NetworkManager) NMNetworkManager::isNetworkingEnabled: got state: 3
networking: is enabled
solid-network(8683)/Solid (NetworkManager) NMNetworkManager::isNetworkingEnabled:

As I saw in many cases, the net should work regardless of the network management backend in solid, so I guess that's not the problem.
I'm sure that I set kde to connect directly, without proxies.
I use pppoe, and the internet works in every non kde app, in konsole kde4 and in kopete kde4, so I have no idea what causes this problem.
Anyway, I'm sure it will be fixed till the release. But if anyone has any idea please leave me comments.

Yesterday, I decided that it's time I tried writing software with the KDE api.
So I headed to the kde techbase programming tutorials. After doing a few variations of the Hello World! application, I decided to write the application that I write every time I learn a new language/toolkit/api, the BMI calculator application. I used Qt-designer for the ui. I quickly familiarized myself with cmake and the guys from freenode #kde-devel helped me when I got stuck.
So here it is, along with the other BMI calculators, the KBMICalc application:

Top-left : Qt, top-right: Java (Eclipse RCP, SWT) , bottom-left: Java (Swing), bottom-right: KDE.


It is pretty nice for a first app, the KDE api is a great complement of the Qt toolkit.
The last year of high school is pretty rough on me, so I doubt I'll have time for any serious kde app. Also I would like to see how KDE4 works on Windows, it will be a very nice cross platform development framework.
So in conclusion, my faith in KDE4 is restored, I'm excited again about this project and I can't wait till January for a truly stable and functional release, aimed at the masses.


P.S. : Tomorrow I'll have an exam to obtain the Cambridge University Certificate in Advanced English (CAE), so wish me luck :).



Sunday, November 23, 2008

Shifting to Debian

Well, it has been a long time and no post. So I reckon it's time for an update.
Since I need a stable and usable system, I wasn't willing to upgrade to Kubuntu Intrepid. I heard a lot about Debian from friends and I knew that it's a great distribution, so I thought I'd give it a try.
I went to the site and downloaded the latest torrent for the testing DVD.
The installer was very friendly; I chose the expert gui mode.




It was simple and straightforward, it even allowed me to choose what modules to load. As an example, I could load a pppoe module to set up my networking.
It simply asked me if I wanted to install non-free software, I answered yes and it installed all the codecs and drivers I needed. No questions asked. No need to google forums to find out which packages to install to get my mp3 working.
It automatically detected my video card, installed the open source radeon driver and set up the optimal video mode. I was impressed.
It installed Gnome by default, but I downloaded the kde packages with one command from the Romanian Debian mirrors. In 4 minutes I had kde. Great.

I disabled the services I don't need and now it boots really fast.
KDE works better. I can see everyone's avatars in kopete (I couldn't under kubuntu), and even amarok works great (even with crossfading).
I was really happy with it.

I enabled the unstable (sid) repositories and installed qOrganizer with one command. Yes, there is a qOrganizer package in the Debian repository, and now Ubuntu has one too.

This is what my desktop looks like:



After I configured my system, I went on and compiled kde4 by hand from the SVN repositories. It wasn't hard and SVN is a lot better than the release.
But it's still not good enough for me (I'm too picky).

So, in conclusion, Debian rulz! :)

Sunday, October 26, 2008

KDE4 Mixed feelings

I've been keeping my eye on KDE4 for a long time and now that I heard that Kubuntu was adopting it as the default in Intrepid I was very curious.So I went on and downloaded the Kubuntu Intrepid RC live cd just to see if KDE4 was better on a fresh install.

I had the kde4 packages installed on my Kubuntu hardy since the first release and after every update I tried it to see if I would be able to use it daily.
I would like to point that this post is by no way a rant, I love KDE4 and I wish it was ready and everyone would be able to use it.I am also a long-time fan of KDE3, which I have been using from the first day I was introduced to Linux.

That said, I ran into some serious usability problems.I like the new kopete-kde4 interface and I can see from the shell that it has new long awaited features like the ability to block messages from outside the contact list (for which I wrote a patch once, because I needed it badly in 0.12).
But the kde4 version has serious bugs handling the Yahoo protocol.
Don't get me wrong, I don't like yahoo, but everyone I know uses it.If I could , I would make everyone use Jabber with SSL, but it's not my choice.
I need instant messaging really bad. The kde4 kopete is unable to retrieve avatars, sometimes status message and it takes and awful lot of time for it to recognize which of my contacts are online and even after it does, it shows it only partially.I didn't test the file sending, which is really important for me (it didn't work in kopete-kde3 either).

Just to make things worse the kde3 version of kopete has the exact same problems using the kde4 libs.I don't know what workaround kubuntu will provide for this, but I sure hope they fix it.Maybe it will get fixed when telepathy/decibel will be ready.
I'm afraid that issues like this will leave a bad first impresion about kde4 in the new users of Kubuntu Intrepid.Of course, I could just use pidgin, but thats not the point.

The new folderview plasmoid bothers me too.Of course it's innovative but it really misses any form of configurability.What bothers me most is that it doesn't preview image files on the desktop.I know, it's a minor issue, but I miss that feature.

On the positive side the new KDE4 has stunning animations and they all work seamlessly by default on my 5 year old ATI Radeon 9200SE.
I also like the look and feel of kde4, it's really friendly and everything is in the right place, it's really elegant and all but it the default theme reminds me too much of Mac OS X, with that aluminium-like look, so that will get changed (I don't like Mac or anything Apple, don't even get me started on it).

Overall, things have improved and maybe making it the default in Kubuntu 8.10 is just the radical action it needs to push kde4 in the right direction and make it as great (or hopefully a lot better) as it's legendary predecessor.

Saturday, September 27, 2008

qSslChat v1.1 Released

New qSslChat version :)

Changelog:

-Integrated link recognizing patch by Sydney Troz.Now it automatically recognizes links

and opens them (when clicked) in the default browser.

-Improved OpenSSL handshake options.Certificate errors are reported but ignored.

-Fixed a bug in the anticipating mechanism.

-Now the file-send dialog closes when the file is successfully sent.