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.