Home Home > Usability
Sign up | Login

Deprecation notice: openSUSE Lizards user blog platform is deprecated, and will remain read only for the time being. Learn more...

Archive for the ‘Usability’ Category

YDialogSpy Can Now Show Widget Properties

September 12th, 2008 by

Yesterday I wrote about YDialogSpy, the new interactive YaST dialog debugger. The plans for its future included showing the properties of the currently selected widget. Well, that future came much quicker than expected; it arrived late this afternoon:


(click for large versions)

(more…)

YDialogSpy: An Interactive YaST Dialog Debugger

September 11th, 2008 by

Programming a GUI version of “Hello, World” is easy in the YaST programming environment, no matter if it’s YCP (the YaST-specific scripting language), plain C++, Perl, Python, or Ruby.

But if dialogs become more complex, it can get demanding to make them look good and – equally important – to behave well as the user resizes dialogs:

The YaST UI (user interface) engine now features a new debugging tool to make life easier for developers: YDialogSpy. In the Qt version, hit the magic key combination

Ctrl-Shift-Alt-Y

and you will get a YDialogSpy window like this:

This shows the widget hierarchy of the original dialog as a tree. Clicking around in that tree, you can highlight the corresponding widget (and its child widgets) in the original dialog (move the YDialogSpy window to the side first):

This can also make widgets visible you normally can’t see such as H/VSpacing, H/VStretch etc., and it shows the extent of alignment widgets (left, right, top, bottom) as well as layout boxes (H/VBox):

Availability

yast2-libyui-2.17-9 or later
yast2-qt-2.17.8 or later

The Future

This is just a first version, of course. Future versions will get a “Properties” table that can show certain values of the current widget. Maybe there will also be some (very limited) editing capabilities.

Stay tuned.

Further Reading

http://en.opensuse.org/YaST/Development/Misc/YDialogSpy
(With original-size screen shots)

HOW TO: Remove the annoying KDE error “kio_media_mounthelper” when unmounting usb device

September 6th, 2008 by

With KDE3 and with some usb sticks or drives, could happen that if you try to safely remove them, with the classic right click –> safely remove, you’ll get an error from kio_media_mounthelper.

The error say that: The device was correctly unmounted but couldn’t be ejected

This is only a really annoying warn because the media has been unmounted so we can safely remove it, but how can we remove that?

I found the fix on Mandriva bugzilla (bug #39762)

The solution is really easy, is infact enought download that script (kdeeject)

Once the script has been downloaded do the following as root:

chmod +x kdeeject
mv kdeeject /opt/kde3/bin/kdeeject

now we will get that warn no more!

Just for knowledge, that script ask to hal if the device could be ejected, if not the media is only unmounted, if yes it is ejected too.

I hopes that to be usefull for lots.

Andrea 😉

Button Order in YaST: Trying to Make Peace with Both Worlds

August 28th, 2008 by

KDE and GNOME have different button orders. Like many desktop-related issues, this has been a subject of heated debates time and time again.

Where KDE uses something like this:

GNOME would use something like this:

Which one is right? Which one is wrong? There is no real answer to that; it will always be more a religious debate rather than an objective discussion.

YaST Button Order

So, which button order to choose for YaST?

For historical reasons, we used the KDE button order. But this has repeatedly started the same heated discussions as for KDE vs. GNOME, with the same results — which is, no tangible result, only something along the lines of “because we says so” (and didn’t you always hate it as a kid when mom or dad said that?).

YaST should not favour one of the major desktops over another. YaST should work well for all users. So, YaST should adapt to the environment it runs in.

YaST comes in different flavours. There is the graphical version: The YaST Qt UI (user interface) engine (Side note: The YaST Qt UI is not in any way KDE specific; Qt just happens to be a great toolkit for making graphical user interfaces, and KDE happens to use it, too. There is not one single line of KDE-specific code in the YaST Qt UI.).

There is also the text-based version, the YaST NCurses UI.

As an alternative graphical UI, there is also the YaST Gtk UI which uses the same widget toolkit (Gtk) as GNOME. That brings YaST closer to the GNOME crowd. At least, that’s the theory. Yet, that alone didn’t improve the situation in any way for this button order issue:

YaST dialogs are specified in a subset of the YaST-specific YCP scripting language. Those dialog descriptions include input fields, list boxes, headings, etc. as well as the logical arrangement of all those user interface elements (widgets, even though that term has seen a lot of misuse recently). And buttons, too, of course.

So, the arrangement of buttons was still fixed. The YaST Gtk UI couldn’t really do anything about changing that button order so it looked more GNOMEish.

This is now different. We introduced a new widget ButtonBox that abstracts exactly that. A YaST module developer now only specifies “there is a ButtonBox, this is where I put my buttons, and the ButtonBox will arrange them as appropriate”.

…for users…

So now it is possible for the first time to use the proper button order for each environment: GNOME button order for the Gtk UI, KDE button order for the Qt UI.

But there is more.

…for power users…

The Qt UI can now demonstrate the fact that it’s not KDE specific. It checks what environment it runs in and uses the appropriate button order: GNOME button order when running in GNOME and KDE button order for KDE (or other window managers).

It checks the $DESKTOP_SESSION and $WINDOWMANAGER environment variables to figure that out. But of course power users can still override that and set the $Y2_BUTTON_ORDER environment variable to “KDE” or “GNOME”.

…for YaST developers…

Of course, such a change doesn’t come over night. There is a very large amount of YaST code. I counted 69 .desktop files in my /usr/share/applications/YaST2 directory; that corresponds to 69 YaST modules. On my machine I have 432000+ lines of YCP code below /usr/share/YaST2 . Now try to figure out how many YaST dialogs that might be, and how many of them need to be converted to use that new ButtonBox mechanism.

Obviously, it’s a lot of stuff to change. So the change should not hurt the people doing the change more than it absolutely has to. Don’t forget, it’s not just working hours that have to be paid; it’s also working hours that can’t be spent on implementing other features or on fixing bugs. And any change (even more so changing code at so many places) means a possibility to introduce new bugs.

…trying to be smart…

So this ButtonBox mechanism was made to be smart, to re-use existing information (things that are already there in the code), to make good use of existing conventions.

In principle, using something like the ButtonBox means having to tell it which logical role each button has so it can be arranged according to the current button order’s conventions: Which button is the positive confirmation of a dialog (it might be “OK” or “Continue” or “Yes”, but it might also be someting like “Save” or “Print”), which one is the “safe escape” (“Cancel”, but sometimes also “No”), which one is the “Apply” button or the “Help” button, and which ones are just “other” buttons. Remember, YaST is being translated into some dozen languages, so just hard-coding the English button labels won’t do.

But we already have a mechanism that maps (translated!) button labels to function keys, and that mechanism does something similar: There is a list of commonly used button labels and what function key is to be used (in the NCurses UI) for them. For example, “OK”, “Continue”, “Yes”, “Next” all map to the F10 key, “Cancel” to F9, “Help” to F1.

Extending that thought some more, it makes sense to assume an “okButton” role for buttons that are otherwise assigned the F10 key, “cancelButton” for buttons that get the F9 key, etc.

Buttons in YCP each are assigned a widget ID. That ID is the “handle” by which a button is being referenced; this is what the YCP application receives when it is informed that the user clicked that key. When specifiying a layout with buttons, this looks (slightly simplified) like this:

UI::OpenDialog( 
    `VBox(
         `InputField(`id(`name  ), "Name" ),
         `InputField(`id(`street), "Street" ),
         ...
         `HBox(
               `PushButton(`id(`ok    ), "OK" ),
               `PushButton(`id(`apply ), "Apply" ),
               `PushButton(`id(`cancel), "Cancel" )
               )
         )
);

As shown in this example, a button with the “OK” role typically has an ID like `id(`ok), a “Cancel” button has `id(`cancel), an “Apply” button has `id(`apply). So this information is used, too, to figure out what role a button has.

Of course, there are still situations where the system needs to be explicitly told what button has which role: It’s hard to figure out in a generic way that a “Print” button or a “Save” button has the “okButton” role in a dialog. In that case, the YCP developer has to change the code to look like this:

`PushButton(`id(`print), `opt(`okButton), "Print" )

…the normal case…

But in many cases, the migration is as simple as replacing the `HBox() (the horizontal layout box) holding the buttons with `ButtonBox():

UI::OpenDialog( 
    `VBox(
         `InputField(`id(`name  ), "Name" ),
         `InputField(`id(`street), "Street" ),
         ...
         `ButtonBox(        // This is the only line that changed
               `PushButton(`id(`ok    ), "OK" ),
               `PushButton(`id(`apply ), "Apply" ),
               `PushButton(`id(`cancel), "Cancel" )
               )
         )
);

…taming the masses…

Just imagine doing only this little change in 432000+ lines of code – of course, only where such a `HBox() contains `PushButtons, not just blindly replacing all `HBoxes. And just changing it is not all there is to it; each dialog has to be tested, too. And that alone is not so trivial: A dialog might easily only be shown in very exotic cases, so the developers doing the test have to recreate each of those exotic cases just to see the dialog.

You see, masses of code are a dimension of complexity all of their own. Little things that look trivial to do gain a whole new meaning. Everybody can do this change in one or two places, but try to do it in someting as big as YaST — without introducing new bugs that would wreck other people’s system.

Yet, we do those kinds of changes, typically unnoticed by the user community. And those little things are what, if added up, make or break a system’s quality.

We don’t take such decisions lightly. But we felt that in this specific case (the button order) the gain would be worth the pain: Users should feel at home in the tools we provide. And having the buttons where you are used to is part of this feeling at home.

Further Reading

http://en.opensuse.org/YaST/Development/Misc/Button_Order

Get Read/Write support to external NTFS Hard Drives

August 21st, 2008 by

Hi Lizards, that’s my first post here! 🙂 so… Thanks for reading!

Well let’s start.

I Red lots of times that users have problems with NTFS usb hard drives. Of course i’m talking about read/write support and ntfs-3g.

Touch and works with /etc/fstab is not a nice idea, also because device name could change and a static mount point will be unusefull.

The solution is to write an hal rule. In this case, all we need is the following:

With you favourite editor create like root that file:

/usr/share/hal/fdi/policy/10osvendor/20-ntfs-config-write-policy.fdi

and past in it that lines:

 <?xml version="1.0" encoding="UTF-8"?> <!-- -*- SGML -*- -->
<!--
   Allow read/write mounting of external NTFS devices with ntfs-3g.
    /usr/share/hal/fdi/policy/10osvendor/
-->
<deviceinfo version="0.2">
  <device>
    <match key="volume.fstype" string="ntfs">
      <match key="@block.storage_device:storage.hotpluggable" bool="true">
          <merge key="volume.fstype" type="string">ntfs-3g</merge>
          <merge key="volume.policy.mount_filesystem" type="string">ntfs-3g</merge>
          <append key="volume.mount.valid_options" type="strlist">locale=</append>
      </match>
    </match>
  </device>
</deviceinfo>

than restart, as root, hal daemon with

hald restart

to make changes working.

If you want you could use my ntfs-3g package on my home repository

http://download.opensuse.org/repositories/home:/anubisg1/openSUSE_10.2/
http://download.opensuse.org/repositories/home:/anubisg1/openSUSE_10.3/
http://download.opensuse.org/repositories/home:/anubisg1/openSUSE_11.0/

it is always the last stable ntfs-3g released (right now is 1.2812) and include also the hal rule wrote before.

I hopes that to be usefull for lots.

Andrea 🙂

openSUSE TV

August 5th, 2008 by

Some may know about the Geeko’s Tube, I’m not so sure that many do though.  There has been for a while now tube.opensuse.org, this is the official repository of videos by openSUSE people.  All the video is in .ogg format, and as such will play straight out of the box regardless of whether users are purists/pragmatists/whatever.

There are several services out on the web that offer video streaming in flash, one that caught my attention is blip.tv.  So why is blip different to YouTube et al?  Well for starters they openly use Open Source (they’re not ashamed of it), they support multiple formats for uploading and playback, and they provide multiple mechanisms to get your shows out there.

After some consultation on the mailing lists and IRC, I have created an openSUSE channel on blip.tv – http://opensuse.blip.tv The aim is for videos by the openSUSE Community for the openSUSE Community can get uploaded there and reach a much wider audience.  There are only a few videos on there at the moment but the content will grow (I’m just having a few ISP issues over here :-/ ).  So what content is able to go on there?  The short answer is any, yes there are only a couple of catches: they must preferably be clean (remember the audience is varied from young to old), have an openSUSE twist (the whole reason for the channel).  At present there are a few screencasts and some presentations by community members at events (granted they’re all employees, but that doesn’t make them any less a member of our community).

Just to show some of the ways you can watch the channel:

Banshee (out of the box openSUSE 11.0 install)

Browser (again out of the box openSUSE 11.0 install)

Miro which you can download, just look here.

As the channel is syndicated via RSS you can subscribe to it using Banshee/Miro and it will automatically download the latest episode for you (sorry I haven’t tried in KDE, but I believe it should work).  You can also add the RSS feed into your preferred reader and pull the attachments from there.

I would be really keen on getting people’s feedback and also if people have content they would like to get on there.

Extract and Compress Right Click Menu on KDE4

July 12th, 2008 by

One of the functional menu that make my life more easier with KDE 3 are the Compress and Extract Menu. With this function, I could make an archive or extract zip file with Konqueror without opening Ark for manually extract or compress the file. Now, I enjoy the KDE 4 on openSUSE 11.0, with Kwin desktop effect and a lot improvement in various area, but I still missing the above menu.

How to add the similar function to KDE 4 so we could compress some file or folder, or extract a zip file both in Dolphin and Konqueror ? Here is the tips :

  1. Download the plugin here :
    http://www.kde-apps.org/content/download.php?content=84206&id=1&tan=96989998
  2. Open konsole / terminal
  3. Extract the plugin
  4. Go to the extract folder
  5. Copy all of .desktop file into /usr/share/kde4/services/ServiceMenus
  6. Copy the content of script folder into /usr/bin
  7. Test with dolphin or kde4

Compress and Extract

The above tips will make a system wide configuration. If you wish to make a local changes, just execute INSTALL_1.0.sh on the extract folder.

NOTE : The programs p7zip, bunzip2, bzip2, gzip, rar, unrar, tar, zip and unzip must be installed.

I don’t know if the function will be added into KDE 4.1 by default, but I hope so 😉

How to Make openSUSE 11.0 GM Live USB

June 20th, 2008 by

openSUSE 11.0 with tons of impovement has been announced on June 19, 2008. Since then it was a busiest day for me : setting up a local mirror providing iso image for openSUSE fans in Indonesia, arrange openSUSE 11.0 release party and preparing Indonesian openSUSE community regular meeting on Saturday, June 21, 2008. We have planned all of these since last month but I must updated the planning with latest news and preparation.

Beside the planning, I also read some comments that noticed me with problem regarding openSUSE LiveUSB tutorial. The tutorial used openSUSE 11.0 RC1 and the modified initrd as noticed on the tutorial doesn’t fit with the GM version.

(more…)

How to search more efficiently in Bugzilla with pybugz

June 19th, 2008 by

If you just want to search for bugs in Bugzilla, it’s (a bit?) painful: start the browser, type in the URL, insert your login and password and try to find out where to go. There is an easier way to do: pybugz for commandline lovers!

Thanks to Peter Poeml, get this very useful Python script from here. After you have installed it you need only two steps to configure it:

  1. Create a file ~/.bzuser and insert your Bugzilla login.

  2. Login into Bugzilla and insert your password. This creates the file ~/.bugz_cookie:

    $ /usr/bin/bugz-login

The script knows several subcommands, its interface is similar to CVS or Subversion. You can search, get, post, modify, attach and download an attachment, all with this utility. For example, if you want all bugs about “XML”, regardless of the product or component, you just type:

$ bugz search xml

That gives the following output:

 * Using https://bugzilla.novell.com/
 * Searching for 'XML'
 [ deleted a lot of lines ]

Maybe you want to narrow your search for KDE and specific products? No problem, here is an example:

$ bugz search KDE --product="openSUSE 11.0"
 * Using https://bugzilla.novell.com/
 * Searching for 'KDE' with the following options:
 * product = ['openSUSE 11.0']
113512 kde-maintainers Firefox in KDE - Only Uses GNOME Programs
170055 dmueller Firefox sets desktop background for Gnome under KDE
176179 kde-maintainers User can't edit properties for default notifications under KDE Storage Media and entries disepeared !
203548 sbrabec workrave-kde is an empty applet by default
[... and many more ...]

Of course, if you know the bug number you can retrieve it with:

$ bugz get 378240

and it will list all the details of the bug. Very useful! I haven’t tried the other subcommands yet, but I think they are also very convenient.

There are many more things to discover. So, when was your last time searching for bugs? 🙂

Making openSUSE 11.0 LiveUSB : The Easiest (and Fastest) Way

May 31st, 2008 by

LiveUSB desktop

In earlier post, I’m writing “How to build openSUSE LiveUSB with Kiwi” tutorial guide and thinking how to get same results with more easier tips. Another distro came with easy trick to make a bootable LiveUSB and I think openSUSE should be 😉 . Kiwi is a great tools for making openSUSE liveUSB, QEMU Image, VMWare Image, XEN Image and LiveCD Image but it would not fit with any situation.

I’ve search various topics and found some of them looks pretty interesting to try. After reviewing some tips, here is a tutorial guide to make openSUSE 11.0 LiveUSB with the easiest way :

BENEFIT

  1. Tutorial can be used on Linux or Windows
  2. Do not need to install openSUSE onto hard disk for making LiveUSB as it was with KIWI. Just download the LiveCD ISO image and a tools for make an extract of ISO content (7-zip on Windows and mount -o loop tips on Linux)
  3. Can used FAT 32 file system for interoperability (marketing hype 😉 ) and mobility of data. Flash disk could be accessing by various OS
  4. Simple, only need a few step
  5. Fast process, required a few minutes for copying ISO image and initrd process

(more…)