Accessibility in Moonlight

An important milestone happened on Friday, February 26: Mono Accessibility 2.0 was released. It’s important because all applications running on Moonlight 2.0, or greater, will be accessible from now on.

Accessibility?

If you are not familiar with this word, Accessibility, it might mean nothing to you and, probably, you will need a more formal definition:

Accessibility is a general term used to describe the degree to which a product, device, service, or environment is accessible by as many people as possible. Accessibility can be viewed as the ability to access and possible benefit of some system or entity. Accessibility is often used to focus on people with disabilities and their right of access to entities, often through use of assistive technology.” Wikipedia

You have interacted with Accessibility in real life, even if this is your first time reading this word. Have you seen those tiny bumps on the floor when taking the subway? Wheelchairs ramps or the dots on elevator buttons? Have you heard that noise, like beeping, when crossing the street? Have you noticed the audio jack in some ATMs?

These are real life examples of Accessibility. Accessibility in software is similar, it’s basically the degree of interaction between your software and people with temporal or permanent disabilities. People who can only use the keyboard or the mouse, people with low vision, blind people or people with hearing disabilities. All of them will be able to interact and use your application only if it’s accessible. That’s why Accessibility is important.

Accessibility and Moonlight

Microsoft Silverlight is web application framework for building media experiences and rich interactive applications for the Web. Moonlight is an open source implementation of Silverlight. Besides providing a rich experience for the web, applications running on Moonlight are now available for people with disabilities, allowing them to interact and use these applications. The interaction between these new applications and existent Accessibility Technologies (ATs), such as screen readers, is the same. All existent ATs are reused, it’s like interacting with any other desktop application. ATs in GNOME should work right now without any change and, if any change is required, it will help to provide a better integration with this framework.

Implementation

Moonlight Atk Bridge

Refer to Accessibility Architecture for a detailed explanation of the complete architecture.

In both Accessibility implementations, Silverlight and Moonlight, Microsoft UI Automation is used for interacting and exposing data of UI elements of the application. These data are used by ATs to access and manipulate those UI elements. Properties such as visibility, sensitivity or interaction, are exposed by Automation Peers (also known as Automation Providers), along with Automation Patterns to indicate the type of interaction in the control, for example: accepting selection or allowing clicking. There’s always a relation one to one, one Automation Peer and one Control. The properties are available to ATs through the information exposed by the UIA/Atk Bridge module. This module is loaded by the Moonlight application to interact with ATs. It keeps a tree of Atk objects to represent every UI Automation element in the Moonlight application.

The interaction between ATs and Moonlight applications is like this:

  1. An AT requests information about the Moonlight control in Firefox.
  2. Firefox asks Moonlight this information.
  3. Moonlight uses the A11yHelper to load the UIA/Atk bridge module and returns the root accessible, it represents the control’s Automation Peer: WindowAutomationPeer.
  4. From now on, new AutomationPeers will be mapped, one-to-one, to an Atk.Object. All data requested by an AT will be accessed through the associated Atk.Object, and this one will return information contained in the AutomationPeer.

If you are curious you can checkout the sources to see the final implementation:

  • Moonlight: important bits located in class/System.Windows/System.Windows.Automation.Peers/ and class/System.Windows/Mono/A11yHelper.cs.
  • Moonlight UIA/Atk Bridge: implementation located in MoonAtkBridge/.

How do I install it?

Before installing, make sure Assistive Technologies is enabled, then add the Mono UIA repository (see Downloading) and follow the instructions (taken from Installing):

  1. Install the updated xulrunner package from the above repositories. (This is required until Firefox 3.7 because of bug #480317)
  2. Install Novell Moonlight with Accessibility Support for 32 bit or 64 bit.
  3. Install Novell Moonlight Accessibility Extensions
  4. Restart Firefox
  5. Enjoy!

Useful links

Shorten URL: http://bit.ly/9vR5QPshorten url

Tasque 0.1.9!

Yes! Your favorite task management application is back. Tasque v0.1.9 was released today!. New features include:

  • Support for Mono >= 2.6
  • Customizable color highlighting in tasks.
  • Hiveminder improvements
  • New translations
  • And more!

See the announce email to get more information.

Get it while it’s hot!

Screenshots?

Tasque 0.1.9   Tasque Preferences

More here!

Where to get?

More information?

Shorten URL: http://bit.ly/ahqNtdshorten url

Parallel Development Environments? Pulque!

¡Quiero pulque!

By Claire L. Evans / CC BY-ND 2.0

This is an updated version of Multiple Parallel Mono Environments.

What is Pulque?

Pulque is a collection of applications written in Ruby and Bash scripting to maintain parallel development environments.

Why does Pulque exist?

Three reasons:

  1. I need to keep multiple versions installed of the same software,
  2. I need to know what Version Control System is used by the software, and the most important
  3. I want to keep myself sane.

At work, I have to interact with different open source projects, most of them use Subversion and Git, but some others use Bazaar and Mercurial. Keeping track of the current parallel development environment and the VCS used by the software is exhausting.

You spend time focusing on something that shouldn’t be that important:

  • Managing your parallel environments and,
  • Keeping track of the VCS used by the software

Is easy to get confused when interacting with the repository, for example, executing svn update when the software is stored in a git repository. Is silly, but it happens. Unless you are using an IDE that support Multiple Parallel Development Environments you will need the terminal to configure and build your projects.

Pulque helps you maintaining parallel development environments by:

  • Printing in the bash prompt the name of the parallel development environment and the type of the VCS, this information is updated depending on the working directory,
  • Defining aliases to the default commands used to configure and build the software project, to always prefix your projects using your parallel environment, and
  • Showing a failure or success alert when the command finishes.

Installing and using Pulque

Follow the instructions in INSTALL, or if you are using openSUSE 11.2:

OneClick Install
Click here to drink Pulque!

Don’t forget to add the function pswitch to your .bashrc. Bash will autocomplete your environment name when using TAB TAB.

function pswitch {
  source /usr/bin/__pswitch $1
}

Read the USING file to understand how to use Pulque in the daily basis. If you find something weird or interesting please create an issue to fix it.

Colophon

According to Wikipedia: “Pulque, or octli, is a milk-colored, somewhat viscous alcoholic beverage made from the fermented sap of the maguey plant, and is a traditional native beverage of Mexico.

Shorten URL: http://bit.ly/ay65poshorten url

MonoHotDraw Commands

english — Tags: , , — @ 23:46

Here’s a small example about the commands implementation on the MonoHotDraw framework.

Update your repository and execute:

make && mono dbapplication.exe

Be aware this a preview implementation, there a lot of bugs to be fixed related to those new commands.

ER Diagramming

english — Tags: , , — @ 06:53

Entity-Relation example

To remember old days.

Mental note

english — Tags: , , — @ 01:19

Every time I turn the Nokia 770 on to play (develop, test latest code and so on) it takes me time to remember how to become root… now, to avoid this:

$ sudo gainroot

By the way, there’s an updated mono for maemo (1.2.5), let’s play a while. If anyone cares, my current sources.list is the following:

#maemo:name Mono for Maemo
deb http://go-mono.com/maemo mistral user
#maemo:name mg
deb http://mg.pov.lt/770 mistral user other
#maemo:name maemo-hackers
deb http://maemo-hackers.org/apt mistral main
deb http://repository.maemo.org/extras/ mistral free
deb http://repository.maemo.org mistral free non-free
deb http://eko.one.pl/maemo mistral user

Compare

english — Tags: , , — @ 21:41

Do you see any difference?

using GLib;

namespace Cairo
{
public class Rectangle
: Object
{

public Rectangle (construct double X, construct double Y,
construct double Width, construct double Height)
{
}

public double X
{
get;
set construct;
}

public double Y
{
get;
set construct;
}

public double Width
{
get;
set construct;
}

public double Height
{
get;
set construct;
}

public static bool Equals (Rectangle rectangle, Rectangle other)
{
return rectangle.X == other.X && rectangle.Y == other.Y
&& rectangle.Width == other.Width && rectangle.Height == other.Height;
}

public static bool NotEquals (Rectangle rectangle, Rectangle other)
{
return !(Rectangle.Equals (rectangle, other));
}
}
}

First is C# code, second is Vala code. Object oriented GObject syntax.

Use:

valac --pkg=cairo Rectangle.vala

Then:

gcc `pkg-config --libs glib-2.0 --cflags glib-2.0` -I . Rectangle.c -shared -o rectangle.so

enjoy

I can’t hear!

Uncategorized — Tags: , — @ 04:45

Great weekend, both my sisters and I spent two days of fun, going to different places on Saturday and Sunday.

Summary: arrived to Mexico City at 05:00, ate breakfast and then went to the amusement park (all day there), after eating on Sunday we went to the concert!.

BTW, MCR has a great show, they played the best of their last two albums, people went crazy… both boys and girls screaming, I barely can hear.

The Black Parade 2007   The Black Parade 2007

Playing!

english — Tags: , , — @ 22:21

I haven’t used my Nokia 770 very often, I don’t have any particular reason but time, my plans for this great gadget are:

  • Implement some kind of API for drawing recognition, of course using it on the Nokia 770 will be so hard due to memory limits, but those limits are also so inspiring for me, less resources, more effort, more learning.
  • Implement an application for using Tom Limoncelli’s system, to improve my time.
  • Play with maemo-sharp and mono for arm.

I’ll be so busy next days and the days after those.

nokia 770

Doing scp for executing my tests is the faster way to copy files into Nokia 770 IMO.

MonoHotDraw: Clock

english — Tags: , , — @ 20:47

Since past month, I’ve working on the MonoHotDraw documentation to learn about its internal API. Learning MonoHotDraw is not that difficult, I recommend you to read a little about Design Patterns for a better and faster MonoHotDraw’s API understanding, however if you have already read GoF’s Design Patterns you are ready to go!

While documenting I decided to implement an example including the most important features already implemented on MonoHotDraw to draw an interactive widget figure. Inspired on the GNOME Journal’s analog clock I decided to implement the analog MonoHotDraw clock.

Clock sample

The preview is here:

This sample lead me to find the invalidation-region bug. Checkout the code from SVN and have fun.

Next Page »
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2004-2010 Mario Carrion | powered by WordPress with Barecity