Orbit and .Net Framework 2.0 part 2

Well, well, well
Here we go:
I got some free time the other day, so I decided to take a look and see if I could get Orbit working with the .Net Framework 2.0.
And I did!

Below are links to nightly builds of the latest branch of Orbit for .Net 1.1 and .Net 2.0:
Orbit Nightly 060504-1730 for .Net 1.1
Orbit Nightly 060504-1730 for .Net 2.0

There are glitches. These should be considered unstable builds (even though they run very stable here).

By the way, Win+Q opens Orbit with the tasks list instead of the regular root folder :)

Orbit and .Net Framework 2.0

This past week I got the hang of Visual Studio 2005. It's nice. Seems a little sluggish for me in relation to the 2003 version. But it's got some cool features. I particularly like the class diagram one :) If you ever wondered how the latest internal version of Orbit is architected, here's a glimpse of the UML for the exe file :)

(click to expand)

As for supporting the .Net Framework 2.0, I still have a few issues. Some are my fault (which I'm fixing) and some are Managed DirectX's fault. The DLLs aren't compatible with .Net 2.0. There are a few beta DLLs available... but I'd rather wait for the final versions, because the MDX libraries tend to change a LOT from each release.

Overall all good! I got into a research project at the federal university! I'm developing a molecular visualization program for them :D I'm making the renderers (D3D and OpenGL). We'll eventually pick OpenGL for linux support, but I wanted to see how much better D3D would be on Windows, so I'm building both! It's really cool! :D


Long time no post

Hello, everyone! It's been a long time since i posted anything :)
I've been very busy with university and some other side classes. But I still do some work on Orbit :) I plan on releasing a nightly build as soon as possible. But I have to get ready for bug reports and all :\
Anyway, Orbit got a Softpedia 100% CLEAN Award this week. Which is a good thing, because it proves to people that Orbit is not the infamous Orbit spyware :D
A little while ago, I got a Japanese language file from an user. I've yet to include it into the release or post it somewhere else so that people can get Orbit in Japanese too :)

For those curious: I've been having some OpenGL classes aside from my regular university classes :) OpenGL is nice :) I only know some basic stuff so far, but I'm getting somewhere :)

Update: You can get the Japanese (Nihongo) language file HERE. To install it, unzip it into your language folder in Orbit's directory. And the download packages have been updated :)


Remember when you used Orbit... and you opened tons of loops and it started going out of the screen?
Well... Not anymore! I've added a feature to Orbit that makes it know where it is and scale/move itself so it doesn't go off the screen. Looks nice! Looks solid. :)

In other news... It seems that my background rendering screwed up my timers for hiding (transparent mode) and open folders on mouse-over (all modes). It's gonna be fixed... It's gonna be fixed...


Hey! Yesterday I did some changes to the rendering process in Orbit. Previously I was using a Timer to trigger a frame rendering. Now I've introduced a background thread that triggers the rendering. So now Orbit is kinda multi-threaded when running. There are a few places where I use threading in Orbit, which I'm kinda happy about. Here's what we have:

- Application Thread (WinProc)
Main thread where all user input events and loading happens
- Rendering Thread
This thread is there just to call the Draw method. This allows me to update the screen gracefully while the app thread is busy with something else (like loading a loop)
- Thumbnails Thread
This is a intermittent thread. It exists only if the user has "Show Image Preview Thumbnails" in their config selected. It's a thread that's created for every loop that's loaded. It goes through the items in that new loop acquiring the thumbnails for items that support thumbnailing (Tasks and Image files). For some reason, on large folders, this thread is breaking and taking with it all thumbnail previews for the rest of the program lifetime. I have still to find out what it is. But generally, it works 100%.

And all of these threads coexist in various points of the program. With all these threads, Orbit ends up having a common base (the item registry) which can be simultaneously accessed and modified by three different threads earlier on this was quite confusing :) but now it's sorted :)
It's very common for the thumbnail and Rendering thread to share data. Like, everytime a thumbnail is acquired successfully in the thumb thread, it pops up an event (the item does, in fact) which changes a flag in the render thread demanding it to render the next frame (yes, Orbit only updates the screen if needed). I know it sounds pretty lame, but I'm quite happy about how it all works :)

Plus... With this background rendering... I was finally able to introduce loading indicators into Orbit (non transparent mode-only so far). So you know that Orbit's not dead :) and eventually, events get queued (clicking on one folder then clicking on another).
Aw well... Gotta study. Cheers!

Linked Lists & Optimizations

Well... What can I say? I got really bored at university yesterday... And decided to write a Linked Lists implementation for Orbit. I previously was using Arrays. So I basically had this huge array that got re-allocated with extra space to fit the extra loaded items or smaller when removing items. I thought the linked lists would be faster for that. Turns out I was kinda right. Turns out that linked lists are a bit faster for loading (for some reason, they aren't much faster. I thought I'd get a HUGE improvement... but not...)... but they're terribly slower for seeking! When I ran Orbit with about 650 items loaded, the array took 10 seconds to load them. The linked list took 7 seconds. But it turns out that once those items were loaded, the array implementation ran at 18 frames per second while the linked list implementation ran at 11 seconds per frame!

I was dazzled. But frankly, my linked list implementation wasn't the best. It could only seek forward. And only from the start of the list. I, then, decided to optimize the seeking. Enabled the list to seek forward and backwards. Then, unsatisfied with that (didn't even test :P), I made it so that list remembered the index and the node for the last sought position. This way, it can start seeking from whichever known point is the closest to the index it wants to reach (also relieves the load from sequential seeking - cause all it does is get the previous node and return the next node). Turns out that now the linked list implementation ran at 3 fps. That, in itself was a 3200% improvement :)

I started to think something was wrong. Turns out it was. My code that I used in Orbit was just fine for arrays. But not so much for linked lists. For every frame, I was iterating through the list about 422500 times. That can't be good.

I removed all those iterations. Now I believe I don't run the list over more than 5 times per frame. It was a nasty bug.
Bottomline? Now arrays runs at 50 frames per second with 650 items opened. The linked list implementation runs at 40fps with that same amount. I really don't know which one I shoulw keep. I personally like the linked lists cause I like the implementation and I have control over what's disposed or not (you can't dispose the now-unused array... you just let it linger and wait for the garbage collector to catch it :\). But you know... The array code is faster for rendering and the linked list code isn't that much faster to load... So I'm in a serious dillema.

I guess I'll be returning to the array code...

Some news

Hello, everyone! If anyone still visits this :P
Well... I wanted to say that lately, I haven't been coding at all. So Orbit hasn't moved much in the past 3 months. Quite dissapointing, yes... I'm sorry.
And as a direct result of that and lack of patience to work on, my other project - Lighthouse - has been shelved for an undertermined period of time. I do not know if I'll go back to it. When I started it, there weren't any tools like MSN Desktop Search or Google Desktop Search available. At the moment, I feel that my efforts would go in vain. So I'll just give it a break.

I've been feeling alright. But just haven't been in the mood for coding - Which I find very weird for my own standards, cause I love coding. Maybe it's just university getting to me :)


The Animaion Whore

I assume it! I am an animation whore! I love nice-looking animations and stuff. Hence I, yesterday, implemented a nifty little animation progression on items that support previews (Files on disk and Tasks) for video cards that can take it :P
I'm still seeing how I can make it so that every video card can do it. We'll see... We'll see...
Click here to download it.

Orbit rewrite

I think that the Orbit rewrite is almost done :)
Really! Yesterday I was able to finally break the largest class into two. Now the two halves contain 1475 and 1290 lines (before the rewrite started, the main class was 6000+ lines long). I'm happy I was able to do that. This means that now, Rendering and Direct3D initialization and Direct3D event handling is not done in the main class anymore.

Ironically, now the largest class there is is the Configuration window :P adding up to 2404 lines of code :P fun huh?
There is some localization needed to be done. Some of the new UI has to be coded to add multi-language support (the excluded tasks window doesn't have multi-language support right now). And I need to fix some of the old UI which has some parts which weren't really localizable (like the tray icon's tooltip and smaller things like that that I missed... silly me). Once I get those localization settings done, I'll contact the translators. While I wait for the translators to reply to my new strings of text to be translated, I'll prolly release a nightly build. Once that becomes final, we'll have a release. Possibly a little surprise for the devs too.

Orbit on issue 24 of C'T Magazine

That's right! I just received issue number 24 of C'T Magazine and Orbit's in it! Grab your issue right now!!!
Also mentioned is Avedesk by my fellow developer, Ave. I was surprised to find that we're on the same page!

I'm really happy about this! I'm showing everyone the small 1/4th of a page writing where Orbit's featured. Why? Cause this means a hell of a lot to me! It's the first time that something I did gets on a publication with such circulation! I'd like to thank the guys at C'T for that :)

What else can I say??
BIG THANKS to all my friends and everyone that supported Orbit!
If you ever need anything, just drop by and we'll have a beer ;)

Back to work

Well... I'm back to work. Can't mourn my not going into this college forever, can I? So, here's the update:
- I rewrote the Item class and broke it down into 12 classes/base classes. This made messing with Orbit item's tons easier.
- Due to the rewrite, this enabled me to add Window Exclusion customization capabilities to Orbit!

How does that look for an exclusion window? It shows all the excluded tasks, and lists Window Title and screenshot if the task is currently running. This helps out by showing the user in a clearer way what he's about to exclude. Unfortunately i can't take screenshots of non-running tasks :P. To exclude tasks, just open the tasks folder in your Orbit ring and right click the task and choose "Ignore this window" and it'll disappear. Any usability tips from my visitors?

And I'm not in...

Got the results this afternoon. Out of ~1200 people that tried for the 100 spots available, I made it being 180th... Bottomline? I'm not in. I might get in if 80 people gave up on their spots, though highly improbable that is. Aw well... next year I'm not trying anymore. I'll just stay at my current university.

It's over

Yesterday morning I did the last series of tests. I think I did pretty well. Actually doing 14 of the 16 Math3 questions is considered a big achievement. Let's see how many of those I actually got right :)

Results? Not for another week. Cause there's a composition part on the test. So it takes time for that to be corrected and graded. Now I have to wait.
Cheer for me guys!


106th place to go into 100 spots. That's my situation. I got a 7.4091 on the first part of the selection process. Now I gotta make sure I don't fumble on the 2nd part so i can get that grade a bit up. 7.6, 7.8 will do. But I need to rise the grade a bit. Or else I won't go in. 6 people... 6 people...

850 people... for 100 spots. I'm 106th. Cheer for me guys!

Edit.: Got my MuVo mp3 player stolen yesterday by the freaking night club valet parking guy. What's worse: Can't do anything about it! I can't belive this country. So disappointed that I was born in Brazil

Halfway through

Alright. This morning I did the last day of tests of the 1st phase of selection for my future wannabe college :)
I did well. Got 100% on Math, 80% in Portuguese/Literature, 87% in foreign language (which is English, for me), for example. I didn't check the other grades, though. I prefer to wait for the official results which should come up till the 6th. If I make it through the 1st phase (which seems - and I hope - I will), then there's the 2nd phase on the 12th and 13th. That's the hardest part. Where it narrows down only to formation specific knowledge: Math, Physics and Chemistry.
Wish me luck. Up till then, still studying 100% :)

Click here to see previous messages
Rate my devblog
Give my blog a rating

Security Tips
Protect yourself agains the Sasser worm! Get WindowsXP Service Pack 2

Message History
30/04/2006 to 06/05/2006
06/11/2005 to 12/11/2005
04/09/2005 to 10/09/2005
03/04/2005 to 09/04/2005
20/03/2005 to 26/03/2005
23/01/2005 to 29/01/2005
16/01/2005 to 22/01/2005
02/01/2005 to 08/01/2005
26/12/2004 to 01/01/2005
19/12/2004 to 25/12/2004
12/12/2004 to 18/12/2004
28/11/2004 to 04/12/2004
14/11/2004 to 20/11/2004
17/10/2004 to 23/10/2004
10/10/2004 to 16/10/2004
03/10/2004 to 09/10/2004
19/09/2004 to 25/09/2004
12/09/2004 to 18/09/2004
05/09/2004 to 11/09/2004
29/08/2004 to 04/09/2004
22/08/2004 to 28/08/2004

Other sites
Orbit Homepage
Enhanced Labs & Orbit Support Forums
Enhanced Labs

Disclaimer: All posts are provided "as is". All code snippets are provided for free use as long as credit is given.
2004 Lucas Mendes Menge