Open Source Software (OSS) Usability


■   How to improve OSS usability

■   How to create GUIs for OSS


             Gia...
Usability?

  What about Open Source Software (OSS) usability?

 ■   OSS is sometimes software developed from programmers
...
What we have to work on?
 It's now clear that it's necessary to improve OSS usability aspects, but what we
 have to work o...
What we have to work on?
 ■   Some words if you want to develop for the Operating System (you are
     mad or you have rea...
Code Development

 Tools of many types and different difficulties:

 ■   Text editors + compilers (for example Emacs + gcc...
Importance of GUIs

 If you want to develop usable applications you have to care
 about GUI (Graphical User Interface) dev...
GUI Development
 How to develop a GUI?

 ■   You have to use graphical libraries
 ■   They contain functions useful to cre...
Before starting...

 The following part is important in that it
 presents the various alternatives among
 which you can ch...
GTK+ and QT libraries
 ■   The most famous graphical libraries are GTK+ and QT, on which are
     based respectively Gnome...
GTK+ and QT libraries
 You could write your code using these libraries in different
 ways:
 ■ Write directly in C/C++: thi...
GTK Example: ”Hello world”
 As example, let's see a little program written by using the GTK without any
 binding, so using...
GTK Example: ”Hello world”
 Now, let's see the same program written in Python, thanks to the
 Python binding, called PyGTK...
GTK Example: ”Hello world”
 Now, let's see the same program written in Perl, thanks to the Perl
 binding:
 #!/usr/bin/perl...
Glade in action
                                                                   You can see here Glade in
             ...
QT Example: ”Hello world”
 As example, let's see the ”Hello world” little program written by using the QT
 libraries witho...
QT bindings and QT Designer
 ■   Like for GTK, for QT there are also bindings for other languages, such as PyQT, which
   ...
A step further...wxWidgets
 ■   What about the execution of the programs written with the GTK/
     QT libraries on the ot...
A step further...wxWidgets
 ■   wxWidgets is a free cross-platform toolkit written in C++.
 ■   It lets developers create ...
A step further...wxWidgets
 ■   wxWidgets don't make you write your programs in C++,
     since (like for GTK and QT) ther...
A step further...wxWidgets
 Here you can see what using wxWidgets means:




 The same application (BitWise) was developed...
WxWidgets vs FLTK
 ■   An alternative to wxWidgets is FLTK (Fast Light ToolKit), which
     does the same things
 ■   From...
What about Java?
 Java could be a good solution for cross-platform applications:
  ■ Powerful object-oriented language
  ■...
What about .NET / Mono ?
 ■   .NET is a technology created by Microsoft with the objective to give a
     new meaning to p...
What about .NET / Mono ?
 ■   The green part represents the .NET Framework, the
     central part of .NET technology. It p...
What about .NET / Mono ?
 ■   The code you write in different languages is compiled in IL (Intermediate
     Language), si...
What about .NET / Mono ?


 ■ ASP.NET and Web Services allow you to
   create web interface to .NET applications, by
   ma...
What about .NET / Mono ?
 What about Visual Studio .NET ?
 ■ Development tool that contains a rich set of productivity
   ...
What about .NET / Mono ?
 Visual Studio .NET in action:




Giacomo Fazio - 2009             28
What about .NET / Mono ?
 .NET is without any doubt a great technology, but it's “Windows-
 centric”:
  ■ .NET Framework a...
What about .NET / Mono ?
 Mono:
  ■ Open Source .NET implementation, created to run on different Operating Systems and
   ...
What about .NET / Mono ?
 Mono objectives:




Giacomo Fazio - 2009            31
What about .NET / Mono ?
 Mono structure:




Giacomo Fazio - 2009            32
What about .NET / Mono ?

 Mono compatibility with .NET:
 ■ Runs .NET portable executables on Linux, that
   is you can de...
What about .NET / Mono ?
 MonoDevelop in action:




Giacomo Fazio - 2009            34
What about .NET / Mono ?
 So what are the conclusions?
  ■ .NET is a great technology and Mono is a great .NET open source...
What about .NET / Mono ?
 ■   Microsoft encourages Mono and tries helping it, but not so much, its
     objective seems to...
No ideas on what to work?
 Now you have to choose a project. If you have no ideas on what to work, you
 could simply look ...
How to work...
 ■   Follow the usability principles you studied or, if you didn't
     study them, simply follow logic and...
How to work...
 ■   You can use, as model, a corresponding program which already
     exists on other operating systems, s...
Some examples
 ■   Some projects have been done with success from
     some Computer Engineering students at the Universit...
Some examples: Cellwriter
 ■   Grid-entry natural handwriting input panel.
 ■   As you write characters into the cells, yo...
Some examples: Cellwriter
 ■   However, no support for different user profiles: if user A uses
     the program after havi...
Some examples: Cellwriter
 ■   In the Group 1's implementation, profiles management is at first hidden and must be
     ca...
Some examples: Cellwriter
 ■   Another limitation of Cellwriter is in the virtual keyboard, since it comes only
     with ...
Some examples: Mouse Gestures
 ■   A mouse gesture is a way of combining computer mouse movements
     and clicks which th...
Some examples: Mouse Gestures
 ■   About the 1st scenario, for Microsoft Windows there are some commercial programs
     s...
Some examples: Mouse Gestures
 ■   Student 1 decided to work on wayV (for the Operating System scenario) and on
     Mouse...
Some examples: Mouse Gestures
 This is the result:




         Sensiva Symbol Commander                wayV


 The user c...
Some examples: Mouse Gestures
 Work done on the extension ”Mouse Gestures” in Mozilla Firefox, chosen among the
 others be...
Some examples: Mouse Gestures
 Result:




Giacomo Fazio - 2009            50
Some examples: Mouse Gestures
■   Student 2 worked instead on xgestures
    (for the Operating System scenario) and
    on...
Some examples: Mouse Gestures
 Work on the extension ”All-In-One-Gestures” in Mozilla Firefox.
 Some gestures:



        ...
Some examples: VNC
 ■   Graphical desktop sharing system that uses the RFB protocol to
     remotely control another compu...
Some examples: VNC
 Since this is a new project and not a modification of an already existent one, the two students could ...
Some examples: VNC
 Other screenshots showing the options windows:




Giacomo Fazio - 2009                              55
And now?




              Other ideas ?


Giacomo Fazio - 2009          56
Upcoming SlideShare
Loading in …5
×

Opensource Software usability

1,762 views

Published on

How to improve Open Source Software (OSS) usability
How to create GUIs for OSS

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,762
On SlideShare
0
From Embeds
0
Number of Embeds
103
Actions
Shares
0
Downloads
22
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Opensource Software usability

  1. 1. Open Source Software (OSS) Usability ■ How to improve OSS usability ■ How to create GUIs for OSS Giacomo Fazio 2009 1
  2. 2. Usability? What about Open Source Software (OSS) usability? ■ OSS is sometimes software developed from programmers for other programmers, so with emphasis on functionalities and performance, rather than on usability. ■ But something is changing and usability importance grows more and more day after day (ex. OpenOffice) ■ Meetings that focus on OSS usability and on how it can be important to increase adoption of free technologies are more and more frequent ■ However, not so much has been done till now... Giacomo Fazio - 2009 2
  3. 3. What we have to work on? It's now clear that it's necessary to improve OSS usability aspects, but what we have to work on? The aspects on which it's possible to work to improve usability can be various and on different fields, the choice is up to you, to your skills and to your interests: ■ Operating System ■ Applications ■ Frontends and GUIs for existing ”command line” applications ■ Configuration files for existing applications ■ Foreign languages translation You have two possibilities: ■ Start a new project: if you think to develop a software that does something which no other software does (or does but in a bad way), start your project. A new project could also be a GUI for a program which works only from command line. ■ Give your help to an already existent project: since there are already many projects which are still ”work in progress”, or simply which could be improved, maybe it is more worth to help an already existent project than to start a new one Giacomo Fazio - 2009 3
  4. 4. What we have to work on? ■ Some words if you want to develop for the Operating System (you are mad or you have really good skills ;-)):  Simply forget Windows and everything related to Microsoft, since Microsoft != OSS, so all the software is closed-source and you can neither see nor work on it  With Apple Mac OS X, you have some possibilities to work on Darwin, the Operating System on which Mac OS X is based, since it's open source (there are really nice projects, like PureDarwin, GNU-Darwin, Fink and MacPorts)  The best choice could be GNU/Linux, completely free and open- source, so if you want to help development you're welcome  Anyway, working on the Operating System doesn't necessarily mean working on the kernel or on the lowest layers, you could work on higher layers ■ Configuration files and translation in foreign languages don't need any further explanation. ■ Creation of new (and usable) applications, modifications to existing applications, creation of frontends, all of them involve development, not only for the code, but also for the graphical interface. Giacomo Fazio - 2009 4
  5. 5. Code Development Tools of many types and different difficulties: ■ Text editors + compilers (for example Emacs + gcc), just the things you really need ■ IDEs (for example Eclipse, Anjuta, Kdevelop, Code::Blocks, NetBeans, etc.), they will help you with syntax highliting, auto-completion, automatic indentation and by automatically calling compilers and debuggers Giacomo Fazio - 2009 5
  6. 6. Importance of GUIs If you want to develop usable applications you have to care about GUI (Graphical User Interface) development: ■ GUI development is crucial for usability ■ You can make simple a not user-friendly application by developing a good GUI ■ Usability of your application can change a lot depending on the GUI ■ Some ”difficult” applications with lots of parameters can present more GUIs, usually with labels ”simple” and ”advanced”. Giacomo Fazio - 2009 6
  7. 7. GUI Development How to develop a GUI? ■ You have to use graphical libraries ■ They contain functions useful to create the graphical interface with the widgets present in it (buttons, checkboxes, textboxes, etc.) ■ You can use them while writing your code, some IDEs have a visual approach for GUIs, allowing you to ”design” your GUI and helping you in writing the realted code ■ There are lots of graphical libraries and toolkits ■ So we will concentrate on this aspect and see the various alternatives, of course the open source ones. ■ In particular, we will deal with the case in which you have to develop applications and GUIs for Linux ■ Since open-source means also multi-platform, we will see also some toolkits that make this aspect possible Giacomo Fazio - 2009 7
  8. 8. Before starting... The following part is important in that it presents the various alternatives among which you can choose to develop your program. Remember that: ■ The choice is completely up to you if you start a new project ■ If you're working on a already existent project you usually have to follow the maintainer's directions and continue his work using the same tools he used Giacomo Fazio - 2009 8
  9. 9. GTK+ and QT libraries ■ The most famous graphical libraries are GTK+ and QT, on which are based respectively Gnome and KDE desktop environments. ■ GTK+ are C librairies, while QT are C++ ■ GTK+ or QT? The choice is up to you.  Once many people said QT were simpler to handle and were better documented than GTK, but they were not so free as GTK, since the situation of their license was more complicated  However now Trolltech (QT producer) was bought by Nokia, that released it with LGPL, the same license used by GTK  New QT4 seem to look better if used in a ”non-native” system and seem to have improved their ”cross-platforms” abilities  The question is open on the web, you can look here ■ Anyway, you must have the libraries installed in your system, if you use Gnome you have already Gtk, while if you use KDE you have already QT libraries, but you might have to install other packages for development (on GTK/QT websites you can find the latest sources that have to be compiled on your system, but usually there are packages on your distribution that make this step a lot easier) . For further info, Google is your friend ;-) Giacomo Fazio - 2009 9
  10. 10. GTK+ and QT libraries You could write your code using these libraries in different ways: ■ Write directly in C/C++: this choice will give you control on every aspect, but in the same time it could be quite difficult ■ Use one of the existent bindings, which allow you to write your code in other simpler languages, such as Python, Perl, PHP, Java, Ruby on Rails, Ada, etc. ■ Use ”layout designers” (for example Glade for GTK+ libraries or QT designer for QT libraries), which allow you to design easily the GUI of the program Giacomo Fazio - 2009 10
  11. 11. GTK Example: ”Hello world” As example, let's see a little program written by using the GTK without any binding, so using C: #include <gtk/gtk.h> int main(int argc, char *argv[] ) {    gtk_init(&argc, &argv);    GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);    GtkWidget *label = gtk_label_new("Hello World");    gtk_container_add(GTK_CONTAINER(window), label);    gtk_widget_show_all(window);    // The main event loop    gtk_main();    return 0; } You can save it as ”hellogtk.c” and compile it with the command gcc ­o hellogtk ­g ­O2 ­std=c99 `pkg­config ­­cflags ­­libs gtk+­2.0` hellogtk.c Now you can run it with the command ./hellogtk Giacomo Fazio - 2009 11
  12. 12. GTK Example: ”Hello world” Now, let's see the same program written in Python, thanks to the Python binding, called PyGTK: #! /usr/bin/env python import pygtk import gtk class wnd (gtk.Window):    def __init__(self):      gtk.Window.__init__(self)      l=gtk.Label("Hello World")      l.show()      self.add(l) w=wnd() w.show_all() gtk.main() You can save it as ”hellogtk.py” and run it with the command python hellogtk.py This is only to show PyGTK in action, for bigger programs you gain a lot from using Python instead of C, you can do the same things but with less and simpler code Giacomo Fazio - 2009 12
  13. 13. GTK Example: ”Hello world” Now, let's see the same program written in Perl, thanks to the Perl binding: #!/usr/bin/perl use strict; use warnings; use Gtk2 '­init'; exit main(); sub main {    my $window = Gtk2::Window­>new();    my $label = Gtk2::Label­>new('Hello World');    $window­>add($label);    $window­>show_all();    Gtk2­>main();    return 0; } You can save it as ”hellogtk.pl” and run it with the command perl hellogtk.pl Other GTK bindings are present for other languages: for example GTKmm is the one for C++, really well realized. Giacomo Fazio - 2009 13
  14. 14. Glade in action You can see here Glade in action: look at all the controls and functions that Glade provides to the user (window, button, label, radio button, checkbox, textbox, etc.). In the center you can see the GUI while it is created, in this case the project is ”a web browser”. Glade also allows you to define events (for example clicks on buttons) and associate to each of them a signal handler which calls a callback function. At the end everything is saved as a XML file, which could be imported in your program, which could be written in C or using one of the several bindings described before (ex. PyGTK). So graphical interface and code are separated, and this is usually a good thing. Giacomo Fazio - 2009 14
  15. 15. QT Example: ”Hello world” As example, let's see the ”Hello world” little program written by using the QT libraries without any binding, so using C++: #include <QtGui> int main( int argc, char* argv[] ) {   QApplication myapp( argc, argv );   QLabel* mylabel = new QLabel( "Hello world" );   mylabel­>show();   return myapp.exec(); } You can save it as ”helloqt.cpp” and compile it with the command gcc ­o helloqt `pkg­config ­­cflags ­­libs QtGui` helloqt.cpp Now you can run it with the command ./helloqt Giacomo Fazio - 2009 15
  16. 16. QT bindings and QT Designer ■ Like for GTK, for QT there are also bindings for other languages, such as PyQT, which allow you to program in an easier way. ■ And of course there is a ”GUI designer”, QT Designer, released together with the QT libraries by the producer Trolltech: Giacomo Fazio - 2009 16
  17. 17. A step further...wxWidgets ■ What about the execution of the programs written with the GTK/ QT libraries on the other Operating Systems? (Of course we are talking about applications which don't use functions strictly related to the operating system) ■ GTK and QT produce applications which are ”quite” cross- platform : it's sufficient that you download the libraries in the version for the operating system in which you want to use the application! (no need to use the version for development, only a lighter one needed for execution, you can find further info in the libraries website) ■ The look-and-feel will be good, but not so similar to native applications (even if QT is better than GTK for this aspect): ■ A solution could be to use wxWidgets (once known as wxWindows) Giacomo Fazio - 2009 17
  18. 18. A step further...wxWidgets ■ wxWidgets is a free cross-platform toolkit written in C++. ■ It lets developers create applications for Win32, Mac OS X, GTK+, X11, Motif, WinCE, and more, using only one codebase ■ Unlike other cross-platform toolkits, wxWidgets applications look and feel native. This is because wxWidgets use the platform's own native controls rather than emulating them ■ In fact, for developing programs with wxWidgets you have to download the libraries from the website, but you won't find only a file, libraries are different depending on your system (wxGTK for Linux, wxMac for Mac OS, wxMSW for Windows, etc.), each one using the libraries of the system, that of course have to be installed on your system (for example, to use wxGTK you must have GTK installed) ■ It's also extensive, free, open-source, and mature ■ Exhaustive documentation ■ Other features: debugging facilities, OpenGL integration, database integration, support for many compilers, network programming, multithreading ■ What about performance? Rare and usually not noticeable performance penalty if compared to use of ”normal” toolkits (GTK, QT, Win32, Cocoa, etc.) Giacomo Fazio - 2009 18
  19. 19. A step further...wxWidgets ■ wxWidgets don't make you write your programs in C++, since (like for GTK and QT) there are bindings for lots of other languages (wxPython, wxPerl, wxBasic, wxRuby, wxAda, wxJava, even wx.Net!). ■ wxPython seems to be a very mature binding, almost everyone encourages its use instead of the original wxWidgets. ■ There are also several IDEs which include GUI designers (for example wxFormBuilder, Code::Blocks, DialogBlocks, etc.) . ■ There's also a GUI designer like Glade, whose name is, of course... wxGlade :-) Giacomo Fazio - 2009 19
  20. 20. A step further...wxWidgets Here you can see what using wxWidgets means: The same application (BitWise) was developed using wxWidgets, you can see how it looks respectively on Linux, Windows and Mac OS X. Amazing, isn't it? Giacomo Fazio - 2009 20
  21. 21. WxWidgets vs FLTK ■ An alternative to wxWidgets is FLTK (Fast Light ToolKit), which does the same things ■ From wxWidgets wiki I found this comparison (is it completely true?):  wxWidgets has a more mature OO design.  FLTK is more light-weight, whereas wxWidgets is more full- featured (wxWidgets supports networking, printing, etc. while FLTK has limited or no support for these things)  FLTK actually has more elaborate, different widget types.  FLTK's modified LGPL license is more restricting than wxWidgets license, although it does provide exceptions for static linking.  Light IDE called FLUID for GUI design ■ On the website http://www.atai.org/guitool/ you can find a comparison among many graphical toolkits Giacomo Fazio - 2009 21
  22. 22. What about Java? Java could be a good solution for cross-platform applications: ■ Powerful object-oriented language ■ C-like syntax ■ Born with the objective to be cross-platform: programs are compiled in an intermediate language, called ”bytecode”, which can be executed in every OS through a JVM (Virtual Machine) ■ Graphical toolkits, like Swing, not related to the graphical libraries of the system ■ Good solution...but:  usually slower than the alternatives  often plain look and feel  look and fell different from the OS's one ■ A possible solution: SWT, the latest graphical toolkit that uses native widgets...Java seems to have still much to say :-) Giacomo Fazio - 2009 22
  23. 23. What about .NET / Mono ? ■ .NET is a technology created by Microsoft with the objective to give a new meaning to programs development. ■ It involves applications and web services. ■ This is .NET architecture: C++ C# VB Perl J# … CLS (Common Language Specification) Visual Studio .NET Visual Studio .NET ASP .NET Windows Web Forms Web Services Mobile Internet Toolkit Forms ADO .NET and XML Base Class Library CLR (Common Language Runtime) Operating System Giacomo Fazio - 2009 23
  24. 24. What about .NET / Mono ? ■ The green part represents the .NET Framework, the central part of .NET technology. It provides:  Base Class Library: comprehensive set of facilities for application development that can be used by any .NET language (collections, string, I/O, etc.)  ADO .NET and XML: it's the data access layer, which uses XML. ADO .NET is the technology used to connect to databases  ASP .NET and Windows Forms: used to develop web services and GUIs ■ .NET Framework features can be used by applications, that can be written in many programming languages (C#, C++,VB .NET, Python, Perl, etc.). ■ Different parts of the same application can be written in different languages: CLS is a set of specifications that all languages and libraries need to follow to ensure interoperability among them Giacomo Fazio - 2009 24
  25. 25. What about .NET / Mono ? ■ The code you write in different languages is compiled in IL (Intermediate Language), similar to Java bytecode, that is executed in a software environment called CLR (Common Language Runtime) ■ CLR doesn't interpret IL, instead each function is compiled at runtime through a JIT (Just In Time) compiler, which generates native code. ■ But why using CLR and so compilation in two steps and not the usual compilation? To have interoperability: a code written in .NET and compiled to IL in a certain platform, can be used in another platform without caring about the CPU differences and the different Operating System (the important is that it implements CLR). ■ Of course, Microsoft released CLR only for the various versions of Windows and for its Xbox 360, so interoperability...but not outside Microsoft! ■ However, Microsoft submitted CLR and IL specifications to both ECMA and ISO for standardization, making them available as open standards, so real interoperability (on Linux for example) is not helped, but not forbidden. We will return on this aspect later. Compilation Also called Code Assembly Source Language Code Compiler MSIL Metadata (.EXE or .DLL file) Execution Before installation or the first time Native JIT each method is Code Compiler called Giacomo Fazio - 2009 25
  26. 26. What about .NET / Mono ? ■ ASP.NET and Web Services allow you to create web interface to .NET applications, by making application functionalities remotely accessible through standard XML-based protocols ■ So .NET wants to be a platform for development of client-server and distributed applications Giacomo Fazio - 2009 26
  27. 27. What about .NET / Mono ? What about Visual Studio .NET ? ■ Development tool that contains a rich set of productivity and debugging features ■ Supports managed and unmanaged applications ■ Supports C#, C++, VB.NET, etc. ■ Many useful tools and wizards ■ Windows Forms Designer ■ ASP.NET Web Forms Designer ■ Web Services support ■ SQL Server integration with ADO.NET and XML Visual Studio .NET is not part of the .NET Framework. It's not necessary to build or run managed code, in fact the .NET Framework SDK includes only command line compilers, but it's the best and the simplest way to develop .NET applications Giacomo Fazio - 2009 27
  28. 28. What about .NET / Mono ? Visual Studio .NET in action: Giacomo Fazio - 2009 28
  29. 29. What about .NET / Mono ? .NET is without any doubt a great technology, but it's “Windows- centric”: ■ .NET Framework and compilers are free, but Microsoft created them only for Windows ■ C#, CLR and IL were standardized and released as open standards for interoperability, but only among Microsoft Operating Systems ■ Some parts, like ASP .NET, ADO .NET and Windows Forms are closed. ■ Visual Studio .NET is only for Windows, too Solution: the Mono Project!!! Giacomo Fazio - 2009 29
  30. 30. What about .NET / Mono ? Mono: ■ Open Source .NET implementation, created to run on different Operating Systems and architectures ■ Has its class library, composed by .NET compatible classes and its own classes ■ Has its implementation of CLR (ECMA compatible), C# compiler and JIT compiler ■ Runs on various OSs:  Linux, Mac OS X, FreeBSD, Solaris, Windows, Nokia/Maemo ■ Runs on various architectures:  32 bit (x86, s390, SPARC, PowerPC, ARM Family)  64 bit (x86-64, s390x, Itanium) ■ Legal, since Microsoft released CLR, IL and C# as open standards ■ Supports lots of languages (also C#) ■ Supports also:  ADO.NET and XML  Windows Forms (not fully, uses graphical toolkits of the system in which it's executed)  ASP.NET (thanks to the webserver XSP or the Apache plugin mod_mono)  Web Services ■ Other GUI cross-platform features:  Gtk# (bindings for Gtk toolkit, allowing to develop applications using Gtk+ libraries)  libglade# (Glade integration, allowing to load Glade output XML files)  Cocoa# (for Mac OS)  wx.Net (use wxWidgets from Mono, to develop applications that will have native look and feel on the OS where they will be executed) ■ Provides MonoDevelop, Visual Studio .NET counterpart!!! ■ Always in active development Giacomo Fazio - 2009 30
  31. 31. What about .NET / Mono ? Mono objectives: Giacomo Fazio - 2009 31
  32. 32. What about .NET / Mono ? Mono structure: Giacomo Fazio - 2009 32
  33. 33. What about .NET / Mono ? Mono compatibility with .NET: ■ Runs .NET portable executables on Linux, that is you can develop your application in .NET, compile it and run the obtained .exe (IL language) on Linux, with the command mono myapp.exe ■ Compiles .NET applications to portable executables, with the command mcs myapp.cs and you can run the obtained .exe both on Linux and on Windows Giacomo Fazio - 2009 33
  34. 34. What about .NET / Mono ? MonoDevelop in action: Giacomo Fazio - 2009 34
  35. 35. What about .NET / Mono ? So what are the conclusions? ■ .NET is a great technology and Mono is a great .NET open source implementation, since the new version 2.2 supports most of .NET features But there are some ideological aspects which caused and keep causing flames. In fact, some people think Mono is bad because Microsoft is exploiting it as a ”poor” and limited implementation of .NET, useful to spread .NET technology and make people pass to the original one, enforcing so Microsoft's monopoly instead of breaking it; other people say it's not right to always see Microsoft as evil. I think the truth is in the middle as usual and I don't want to take a position, anyway you can't avoid caring about some aspects: ■ Mono tries to implement .NET technology which is spreading more and more and which Microsoft keeps expanding and improving, so Mono will always offer a subset of functionalities that will work worse or at most the same way as the original ones. ■ Mono is legal in that it's a free implementation of CLR, IL and other things which Microsoft released as open standards but, in order to obtain compatibility with Windows Forms and for other things, Mono contains some parts whose ”freedom” is ambiguous, and ambiguous can become dangerous... Giacomo Fazio - 2009 35
  36. 36. What about .NET / Mono ? ■ Microsoft encourages Mono and tries helping it, but not so much, its objective seems to be to make Mono as powerful as sufficient, but not as the original .NET. ■ This is proved by the fact that Microsoft made ”open” only some parts of .NET, keeping ”closed” the other parts; if Microsoft really cares about other platforms compatibility, why doesn't it release a version of .NET Framework for them and let Mono be only MonoDevelop and other bindings like GTK# and Cocoa#? You can make your considerations and choose by yourself... Anyway, from a practial point of view, .NET/Mono can make the difference especially for distributed applications, but using such an enormous technology for a simple application or a GUI can make it too heavy or slow, so it's better to concentrate on easier (and also less ambiguous ;-)) alternatives, that's why you should consider using the alternatives I proposed before, that is GTK/QT or wxWidgets. Giacomo Fazio - 2009 36
  37. 37. No ideas on what to work? Now you have to choose a project. If you have no ideas on what to work, you could simply look at your Linux distribution and at your DE (KDE, Gnome, etc.), you'll surely find some programs that could be improved in one or more aspects or some tools that need a GUI or have it but have to be improved. If you don't have ideas yet, here you have some OSS repositories on the web, you could get there an idea for a project on which you might work: ■ SourceForge.net (http://sourceforge.net) ■ Freshmeat.net (http://freshmeat.net) ■ Launchpad (https://launchpad.net) ■ Google Code (http://code.google.com) ■ GnomeFiles (http://gnomefiles.org), repository of software which needs Gnome to work ■ GTK-Apps.org (http://gtk-apps.org), repository of software which doesn't need Gnome to work, but only the GTK+ librairies ■ KDE-Apps.org (http://kde-apps.org), repository of software which needs KDE to work ■ QT-Apps.org (http://qt-apps.org), repository of software which doesn't need KDE to work, but only the QT librairies Giacomo Fazio - 2009 37
  38. 38. How to work... ■ Follow the usability principles you studied or, if you didn't study them, simply follow logic and good taste :-) ■ There are lots of websites dealing with usability principles to follow while working, on Gnome and KDE websites, for example, you will easily find these sections ■ If you decided to work on an existent project, go to the program's website and download the latest version, of course the sources, since you will have to work on those files; moreover try to contact the project's maintainer and explain your idea (for a big project there's often a group of persons working on it), you might have support and feedbacks on what you do. ■ Even if you're starting a new project, tell about it on the web, you might receive many useful feedbacks ■ Use the force, Luke ;-) Giacomo Fazio - 2009 38
  39. 39. How to work... ■ You can use, as model, a corresponding program which already exists on other operating systems, such as Microsoft Windows, or better, Apple Mac OS X Leopard ■ We all know Windows...unfortunately... ■ What about Mac OS X Leopard? How can I have it?  If you own a Mac, your problem is already solved  However some people were able to create Mac OS X Leopard ”special distributions” (iPC, iATKOS, Kalyway, JaS, etc.) that are patched to work on ”normal” PCs, they can be installed side by side to your existent operating systems, but don't ask me where to get them!!!  The best alternative is probably to have Mac OS X in a virtual machine, so you can look at it while working on your OS; this is possible through a patched version of KVM (see the ”Projects” section of http://alex.csgraf.de and http://d4wiki.goddamm.it/index.php/Howto:_Mac_OSX_on_KVM) and remember you must own an original copy of Mac OS X ;-) Giacomo Fazio - 2009 39
  40. 40. Some examples ■ Some projects have been done with success from some Computer Engineering students at the University of Catania. ■ Till now, almost all of them worked on already existent projects, but it could be possible to have new ideas and invent other things. Fantasy has no limits! ;-) ■ The projects are related to the following technologies:  Cellwriter  Mouse Gestures  VNC Giacomo Fazio - 2009 40
  41. 41. Some examples: Cellwriter ■ Grid-entry natural handwriting input panel. ■ As you write characters into the cells, your writing is instantly recognized at the character level. ■ Website: http://risujin.org/cellwriter/ ■ Graphical interface with a panel divided in cells. ■ In each cell the user can write a character (letter, number, etc.), which will be recognized by the engine, following the training info stored in memory ■ The user has to do a brief training phase before using the program: he has to write each character some times, so the engine can ”learn” his way of writing it ■ Cellwriter has a really impressive accuracy. ■ Many languages are supported. ■ When the user has entered a text, he can send it to a focused application by pressing Enter. ■ A virtual keyboard with the US layout is present Giacomo Fazio - 2009 41
  42. 42. Some examples: Cellwriter ■ However, no support for different user profiles: if user A uses the program after having done the training phase and then user B wants to use the program, he has to remove user A's info and then do again the training phase. ■ Moving and restoring user's info each time is not a practical solution ■ So the first project is a user profiles manager, that solves the problem in a practical way, allowing each user to create, use, modify and delete his own profile ■ 2 implementations of the project, developed by 2 different groups:  Group 1: Simone Palazzo and Luca Palazzo  Group 2: Marco Borzì and Silvio Cirrone Giacomo Fazio - 2009 42
  43. 43. Some examples: Cellwriter ■ In the Group 1's implementation, profiles management is at first hidden and must be called by the user if he wants to use it. ■ This choice is due the fact that the application is often used by only a person, so in that case the program is easier to use, because an unrequested feature is hidden. ■ If the application is instead used by more persons, in such a way it's not practical to use the profiles management. ■ The Group 2 adopts the opposite behavior ■ Anyway, in both the implementations, it is possible to choose if hide or show the profiles management Giacomo Fazio - 2009 43
  44. 44. Some examples: Cellwriter ■ Another limitation of Cellwriter is in the virtual keyboard, since it comes only with a US layout. ■ The 2nd project wants to solve this limitation, by adding the support to the most used layout, such as French, Spanish, Italian, German, etc. ■ Pierpaolo Guglielmino is about to finish working on it. Cellwriter is a program that has an existing GUI written using the GTK libraries directly in C, without any RAD application: so the groups that worked on it had to code directly in C. You've been warned ;-) Giacomo Fazio - 2009 44
  45. 45. Some examples: Mouse Gestures ■ A mouse gesture is a way of combining computer mouse movements and clicks which the software recognizes as a specific command ■ Mouse gestures can provide quick access to common functions of a program ■ They can also be useful for people who have difficulties typing on a keyboard ■ For example, in a web browser, the user could navigate to the previously viewed page by pressing the right mouse button, moving the mouse briefly to the left, then releasing the button. ■ Two different scenarios for gestures:  Use them into the Operating System, so in almost every application  Use them in the web browser, especially to navigate through the webpages, to open new tabs, etc. Giacomo Fazio - 2009 45
  46. 46. Some examples: Mouse Gestures ■ About the 1st scenario, for Microsoft Windows there are some commercial programs such as Sensiva Symbol Commander and StrokeIt, which work well and with a good set of useful gestures ■ And what about Linux? The alternatives could be wayV and xgestures, but they have to be well configured... ■ About the 2nd scenario, web browsers already have the support (Opera) for mouse gestures or can have it through extensions (Mozilla Firefox), but work on their configurations could be useful... ■ So the project about Mouse Gestures has 2 targets: 1) Choose a program between wayV and xgestures and configure gestures in it to make it as similar as possible to Sensiva Symbol Commander: so the user who comes to Linux won't have difficulties in using gestures as he did in Windows. 2) Try the extensions for Mozilla Firefox that implement mouse gestures, choose the best and then optimize its configuration by adding new gestures or modifying the ones already present, taking ideas also from the gestures present in the other extensions or in the other browsers like Opera; the target is therefore to optimize as much as possible gestures in the browser Mozilla Firefox ■ 2 implementations of the project, developed by 2 students:  Student 1: Francesco Abate  Student 2: Barbara Orto Giacomo Fazio - 2009 46
  47. 47. Some examples: Mouse Gestures ■ Student 1 decided to work on wayV (for the Operating System scenario) and on Mouse Gestures (for the web browser scenario) ■ wayv uses a configuration file called wayv.conf, in which each gesture is defined and a particular action is assigned to it ■ Gestures are defined ”graphically”: each one is a matrix of 0, in which there are some 1 which represent graphically the gesture you have to do with your mouse. Here you have an example: Look at the picture on the left: a gesture is defined (in the matrix of 0s a N is drawn using 1s) and then the action is defined (play a predefined sound and send the keys to create a New document) Giacomo Fazio - 2009 47
  48. 48. Some examples: Mouse Gestures This is the result: Sensiva Symbol Commander wayV The user coming from Windows can now use gestures in a similar way on Linux, too Giacomo Fazio - 2009 48
  49. 49. Some examples: Mouse Gestures Work done on the extension ”Mouse Gestures” in Mozilla Firefox, chosen among the others because it allows oblique directions, so possibility to create more gestures if compared to the other extensions. The drawback of using oblique directions is that the engine sometimes doesn't interpret correctly the direction, for example confuses a / with a | Giacomo Fazio - 2009 49
  50. 50. Some examples: Mouse Gestures Result: Giacomo Fazio - 2009 50
  51. 51. Some examples: Mouse Gestures ■ Student 2 worked instead on xgestures (for the Operating System scenario) and on All-In-One-Gestures (for the web browser scenario), based both on the same engine, which doesn't allow oblique directions. ■ The idea behind this choice is that it's better to write a more complex gesture using only vertical and horizontal directions, than writing a simpler gesture The configuration is with oblique directions, but that can be ”misunderstood” by the engine. ■ xgestures uses a configuration file called .gestures, in which each gesture is defined in a simple way: simply writing the directions and the action after them. Here you have an example: Giacomo Fazio - 2009 51
  52. 52. Some examples: Mouse Gestures Work on the extension ”All-In-One-Gestures” in Mozilla Firefox. Some gestures: Funzione Gestures History Back Left History Forward Right Reload Document Up-Down Stop Loading Left-up Open new tab in Foreground Up Duplicate Tab Down-Up-Down Previous Tab Up-left Next Tab Up-right Close all other tabs Right-left-down-up-right Close document Down-right Giacomo Fazio - 2009 52
  53. 53. Some examples: VNC ■ Graphical desktop sharing system that uses the RFB protocol to remotely control another computer. ■ The VNC server is the program on the machine that shares its screen, while the VNC client (or viewer) is the program that watches and interacts with the server. ■ VNC by default uses TCP ports 5900 through 5906, each port corresponding to a separate screen (:0 to :6) ■ Platform-independent — a VNC viewer on one operating system may connect to a VNC server on the same or any other operating system. ■ Multiple clients may connect to a VNC server at the same time. ■ Many implementations, both commercial and open source. Example: TightVNC, the most used implementation in Unix OSs. ■ Many viewers with good GUIs, but no GUI for servers ■ So the project in this case is to develop a GUI for the TightVNC server ■ It was done by Giovanni Altamore and Giuseppe Moscato and it was called Py-TightVNC Giacomo Fazio - 2009 53
  54. 54. Some examples: VNC Since this is a new project and not a modification of an already existent one, the two students could do their choices about the graphical libraries and the programming language to use. So the GUI was created through Glade, which gave a XML file as output, included then in the code used to control the functional aspect. The functional part was coded in Python, thanks to the binding PyGTK. From the following pictures you can see how it is simple to control creation and killing of the desktops. Giacomo Fazio - 2009 54
  55. 55. Some examples: VNC Other screenshots showing the options windows: Giacomo Fazio - 2009 55
  56. 56. And now? Other ideas ? Giacomo Fazio - 2009 56

×