How to modernize the appearance of DC++?

Most users who follow DC++ development may have noticed that recently the User Interface of DC++ has improved. Some modification is already visible in the current version, some of them can be seen in the currently developed version, and some of them is not visible in any form yet. So let’s see a few notes and ideas about what changed recently and what needs to be done to make the GUI even better.

Toolbar changes

A few versions ago a drop-down menu was introduced for the Favorite Hubs and Recent windows toolbar buttons which allow users to simply reach their frequently used hubs or users with only a single click. Also, the toolbar got brand new icons made by Radox and slowly more and more icons are appearing for menu items in the application. If you haven’t seen the new toolbar icons, you can check the screenshot below. Speaking of icons, I discovered two icons which needs to be revised in the near future:

  • The first is the “Follow last redirect” command which has an icon on the toolbar, but unfortunately I don’t get how the red and green arrows placed next to each other means “following redirection”, and I think most users are in the same situation, so maybe that one should be replaced. As an alternative, or an addition, the hub window could display a link after received a redirect attempt, so the user would see a “Click here to follow the redirection to adc://blahblah” instead of “Press the follow redirect button to connect to adc://blah”. The same could work to reconnect the hub after the user got disconnected.
  • The second icon is the “Notepad” icon which seems to be blurry on any other size than 16 px. Oh, did you know that you can resize the toolbar by right-clicking on it and selecting your desired size?

Close button on hub tabs

There were several ways to close a hub tab or private message previously: one could right click on the unwanted tab then select Close from the menu to get rid of the window. As an alternative, you could use the middle button of the mouse or clicking on the tab with the primary button of the mouse while holding down the Shift key. You could even write /close to the chatline. All listed method works, but for a general user, none of them is straightforward (maybe the right-click menu is the most easier to find). So the upcoming version of DC++ is going to have the desired close button which is a little red X on the active tab. This improves usability a lot. I’m using this for a longer time and finally I noticed that I don’t use the Shift+Click thing as often as earlier, so it’s a good move. Moreover, in the Settings you can choose between the old and new tab displaying method, so “hardcore right-clickers” are satisfied too.

Right now a little flickering is still visible when you move the mouse over the active tab, but I think that will be fixed soon.

Restructured Help menu

I always find annoying when I select a menu item somewhere and I find myself on a website without wanting to go there. The upcoming version solves this problem by creating a Links submenu in the Help for the different DC++-related websites. In the Help menu, there is a little thing to fix though: it states that “Help Contents” can be reached by pressing F1 which is unfortunately not true, since F1 is a context-sensitive help. So either the F1 shortcut should be removed from the menu or should be replaced with something which actually works, like Shift+F1 or something similar.

Aligning and unifying dialogs

DC++ has a lot of features so when the user uses the client, she or he meets a lot of different dialogs. If we are talking about a power user or an operator, then even more dialogs appear. The client should provide a consistent and modern look when it puts a dialog into the users’s face. Let’s see a common dialog:

Most operators and a lot of power users see a lot of this kind of dialog every day: you have a label, a line where you can put some text and two bottons: OK and Cancel. This one works perfectly and does exactly what you want. However, it would look much more better for the eyes if it would be not so crowded. This could be achieved by simply enlarging the spacing between the buttons and having a larger margin for the dialog itself so the spacing between the buttons and the dialog border would be larger.

How would a modified dialog look like? Let’s see an example! We all know the Settings dialog, it looks something similar to this:

We have a context-sensitive help on the bottom, a category list on the left and the remaining area is the one which changes from category to category, that contains the actual things which we can set. This one also works perfectly, however it does not look consistent nor clear. We could fix this for example the following way:

If you look carefully, only a very few things changed while we reached what we wanted: a better dialog. What is the difference between the two pictures?

  • The most important thing is that on the latter picture the items are 12 px far from the dialog border instead of the 2-4 px which was used on the original dialog
  • Also, the distance between different items is increased to 6 px (8 px for distance between buttons, but that can be achieved by using 6 px everywhere plus set an extra 1 px margin for each button
  • I previously described that there are three areas on the dialog. However, unfortunately all three look differently: the category list has a white background with no border, the help is a grey box with a 3D border and the configuration options has nothing but a few groups. To unify their look, we could set a simple flat border for all three parts. To achieve this, set a flat border for the category list, and also set a flat border for the help box. We also need to change the gray background of the help box to white so it would look similar to the category list. Finally, instead of putting the configuration options on the remaining area, we put a new panel to the empty area and set its border and background to the same style as the help box and the category list. Now we divided the dialog into three parts which look similarly. Finally, we put all configuration options, fields, checkboxes, etc. into that newly created panel. Since the modified spacing applies here too, it will look good.

Please note that the picture of the modified Settings Dialog is only a mockup and not an actual work yet, but I think it demonstrates that how big improvement can be achieved with such a little modification. I hope that DC++ will soon reach a point when it provides a consistent look for the users at all places. As you can see, in the past few months it has improved a lot, hopefully the improvements won’t stop here.

A sidenote that this blog post is already posted on my personal blog, so if you find this “on the Internet” more than once, that’s not an accident

Why you won’t need 0.702

As you may already noticed, DC++ 0.702 has already released. And I’m just writing a new post which cause Arne to kill me. But I have to inform you that DC++ 0.702 is still inappropriate for using. Or anything.

However, instead of blaming, I post here some bugs, which could be already known if we knew what the word “testing” means.

Take a look at your client. Open Public Hubs. Ah.. there’s a “Video” column. No problem, try to enter a hub with some videos (users) in it.. Let’s see the userlist: “350 Users, 9,46 Time“. So that 350 Users are sharing more than 9 “Time”? Ok, it can be solved easily: it seems the strings has some offset, which can be easily fixed in the upcoming version.

Go further. Close the Public Hubs window. Open it again. There’s no hubs in it. You need to refresh it to get the hublist again.

Do you have a fresh client? Enter to an ADC-hub then try to chat. You will fail. You can’t enter anything to the chat. Close your client then restart it. It will work. The trick? Delete DCPlusPlus.xml then start your client again. Enter some nick then connect to an ADC hub. Chatting will fail again.

Try to enable timestamps.. /ts.. the answer: [11:21] *** More data was sent than was expected.. Two characters is more than expected? Ok, just kidding, this is the same string-offset-bug which probably will be fixed soon.

As you may remember, the toolbar was quite ugly in previous versions of DC++ 0.7x. Now it’s pretty cool, which is definitely an improvement. However, some other windows looks ugly.. See this screenshot:

Open Finished Downloads or Finished Uploads. There are two files in it. file1.txt, file2.txt.

As an improvement, you can order the public hubs and the userlist now, however, there are no little triangles on the column headers, so you won’t see the direction of ordering and you will have no idea which column is it ordered from.

And still, the tooltips on the toolbar won’t work for you, neither the userlist or public hub filtering.

You don’t have to agree with me, but I found all those bugs just with a 10-15 minutes testing process. Everyone could done the same before releasing.

DC++ 0.701 crashes on startup?

It may happen that your freshly installed/downloaded DC++ 0.701 crashes as soon as you start it (or die without any error message, just it simply doesn’t start). This is caused by an unhandled exception which is going to be handled in the upcoming releases. To workaround this problem, create a Certificates folder in your DC++ installation directory.

Note that this workaround also won’t let your System Stability Index to drop :P

0.700 from the users’ point-of-view

Want your System Stability Index to fall? Then start using DC++ 0.700 :)

First.. What System Stability Index (SSI) is?

Windows Vista includes a great tool called Reliability and Performance Monitor. This collects data and creates reports about your system. Also, it has a so-called System Stability Index which is a number between 1 and 10 to show your system stability. This index is based on software and hardware failures occurs during the run of the operating system.

How DC++ comes to SSI?

When DC++ 0.700 released, I thought I was going to test it then write some blog posts on some sites about it, but lately I discovered Reliability and Performance Monitor and I thought this was going to tell everything about the stability of release.

Just check this graph:

Reliability and Performance Monitor

The highlighted date (10. 11. 2007.) is the day I tested DC++ 0.700 for 20 minutes.

Hm?

I know most bugs are discovered when a lot of users testing the software, but it has so many that it’s even unusable for using it as a secondary, testing client and they could be discovered by trying it out by a very small group of users (rather developers/testers).

I also know that this post may irritate some other people, but I think when releasing a software, we must ensure a minimal usability, since something which is called a “release” is intended for the users, not for testers.

How to generate CID taken?

Or rather, how not to generate CID taken?

I guess most of you already know that on ADC the clients are identified by their CID. Which means that two clients with the same CID cannot enter to the hub at the same time.

And a lot of hubowners, website maintainers, etc provide clients with some basic settings for download to ease the start for the users. Which means that you start a clean new client, set up some common things you’d like to (like a default nick, coloring, timestamp, add some hubs as a favorite etc.), then rar/zip the whole thing and put it on your website.

What happens if you do that? Since the clients your users are going to download includes the PID setting too, all users will have the same CID, so they can’t enter to the same hub while the other users are in, they are going to get “CID taken”; and I’m not sure that an inexperienced user can figure out what should he change in the settings to get rid of that.

So I ask anyone who distributes clients with some settings preset in them, edit DCPlusPlus.xml before publishing and remove the <CID>…</CID> from the xml. Or rather, distribute the clients without the xml file.

A footnote: you may notice that the settings xml contains a CID tag instead of a PID tag. That’s historical and haven’t changed yet, but that’s the PID. So please don’t distribute it otherwise everyone’s CID’s going to be taken.

Thoughts about an ADC-hubsoftware

As you might already know, on clientside, ADC does work more or less. You can chat, you can download, you can search, you can browse other user’s file lists. Sure it has bugs, but it works.

But what about ADC-hubs? There are several, but none of them are mature yet, it lacks services which nmdc hubowners already got used to. And there are differences which the developers need to think about. Well, I collected some of them. Not to be wise or whatever, just because I think someone shall start it :)

Ok.. Well, let’s see:

  1. Hubsoftware must ensure that the CID matches the PID and not allow users entering the hub if they couldn’t provide a valid CID for their PID
  2. Hubsoftware must not store, broadcast or make available anyone’s PID to someone else including hubowners and scripts too. This would weaken the security of the system. People should not use or install hubsoftwares which does this to protect their operators and users.
  3. It’s a good option to register users using their CIDs, but the hub should note the users that their registration will lost if they modify or lost their PID/CID. Moreover, it’s a good idea to store the last nick for every registration to disallow other users to connect and talk in the name of someone else while that other user is offline. This protects the users’ reputation.
  4. Filtering commands is the hub’s job, not the client’s. So hubs must ensure that regular users are not allowed to send mass messages to other users for example by adding a PM flag to their BMSG.

Sure there is a lot more, but I think it’s enough for now. Feel free to comment.

Design a site like this with WordPress.com
Get started