[Metalab] code bounty (Free software, C++)

Lars Dɪᴇᴄᴋᴏᴡ 迪拉斯 daxim at cpan.org
Thu Jan 20 19:49:59 CET 2011


X-Post: luga, metalab

Ich habe diese Aufgabe ursprünglich für jemanden geschrieben, der sie nicht 
angegangen ist. Daher werfe ich sie mal in die Öffentlichkeit, mal sehen, was 
so draus wird.

----

I commission you with the task of some bug fixing and feature development in 
the Free software [SCIM](http://www.scim-im.org/). In order to tackle these, 
you need the C++ development toolchain for SCIM and optionally some knowledge 
about RPM spec files and the [openSUSE Build service]
(https://build.opensuse.org/).

If you're interested, please write back for any questions, clarifications, 
negotiations. I promise to support you during the task as much as I can, 
especially setting up SCIM is difficult for people who never used any input 
method before and are not familiar with the concept.

Milestone 1
===========

Problem description
-------------------

SCIM does not play well together with the already existing different [input 
method Compose](http://en.wikipedia.org/wiki/Compose_key), a feature in [X]
(http://x.org/). The reason is that SCIM needs to have these environment 
variables set in order to work:

    > env|sort|ack -i scim
    GTK_IM_MODULE=scim
    QT_IM_MODULE=scim
    XMODIFIERS=@im=SCIM

However, Compose ceases to work when they are set; so a user must decide at 
application start which input method he wants to use. As a workaround, SCIM 
ships with own implementation if Compose. However, **its [data tables]
(https://scim.svn.sourceforge.net/svnroot/scim/scim/trunk/src/scim_compose_key_data.h) 
are out of date**, e.g. typing `Compose` `.` `.` in SCIM results in `·`; but 
as of now typing `Compose` `.` `.` should normally result in `…`, and 
`Compose` `.` `-` in `·`.

Inchstone 1a
------------
Get the [current Compose file]
(http://cgit.freedesktop.org/xorg/lib/libX11/plain/nls/en_US.UTF-8/Compose.pre) 
from the X Git repository. Write a script - preferably in Perl - that massages 
it into the required header file format. Make it work with an [installed 
Compose file](file:///usr/share/X11/locale/en_US.UTF-8/Compose), too. The 
deliverables are the script and the new header file.

Inchstone 1b
------------
Compile SCIM with the updated data table. The deliverable is a working 
demonstration, it must exhibit the correct behaviour as outlined in the 
problem description.

Inchstone 1c
------------
Send an email to the SCIM development mailing list with your changesets, or a 
link to them. The deliverable is evidence that you did so.


You can skip the last inchstones in this milestone and forfeit half this 
milestone's bounty money.


Inchstone 1d
------------
Sign up for Build service, branch your SCIM package off the [M17N project]
(https://build.opensuse.org/package/show?package=scim&project=M17N), apply 
your changesets and build scim packages for 11.3 in both i586 and x86_64. The 
deliverables are scim RPMs from your home project which installs on my 
openSUSE systems and which exhibit the correct behaviour as above.

Inchstone 1e
------------
Send an email to the openSUSE M17N mailing list with your changesets, or a 
link to them, and a link to your 1d deliverables. The deliverable is evidence 
that you did so.

Milestone 2
===========

Problem description
-------------------
The Compose emulation in SCIM sucks because it needs to be constantly updated 
to follow upstream X. Also, it just deals with a single Compose file, whereas 
the real Compose feature allows user customisation in a `$HOME/.XCompose` 
file. Example:

    include "/usr/share/X11/locale/en_US.UTF-8/Compose"
    # If include directive is missing, the directives below
    # completely replace the system default compose table.
    <Multi_key> <asciitilde> <exclam> : "̃" U0303 # COMBINING TILDE ACCENT

Typing `v` `Compose` `~` `!` then results in `̃v` additionally to the ones 
provided by the system compose table.


Inchstone 2a
------------
Replace the Compose emulation with something better which exhibits the 
behaviour of the real Compose feature. It must avoid a separate hard coded 
data table that can fall out of date so easily, instead either tie into the X 
development files as dependency, so when scim is built, it uses a reasonable 
fresh copy from X; or even hook into the installed live copy of the Compose 
file. Either way, it must also respect the custom user file if it exists. 
Recompile SCIM with your changesets. The deliverables are the changesets, and 
a working demonstration, it must exhibit the correct behaviour as outlined in 
the problem description.

Inchstone 2b
------------
Send an email to the SCIM development mailing list with your changesets, or a 
link to them. The deliverable is evidence that you did so.


You can skip the last inchstones in this milestone and forfeit half this 
milestone's bounty money.


Inchstone 2c
------------
Same as 1d.

Inchstone 2d
------------
Send an email to the openSUSE M17N mailing list with your changesets, or a 
link to them, and a link to your 2c deliverables. The deliverable is evidence 
that you did so.

Payment
=======

Personally in cash immediately upon verification of completion of each 
milestone, 20€ for full Milestone 1, and 80€ for full Milestone 2. I can come 
to the Metalab during the evening on half a day's notice in order to meet you.

Hints
=====

SCIM runs conceptually on top of X. In practice it consists of a number of 
modules, a pluggable backend that does the real work of creating characters 
from user input, and a frontend UI for tweaking the settings and a tray icon 
with floating palette for character candidate selection. I use the frontend 
skim for KDE.

    $ /bin/ps -AH --forest -o args | ack s[ck]im
    /usr/lib64/scim-1.0/scim-launcher -d -c kconfig -e all -f socket --no-stay
    /opt/kde3/bin/skim --np skimplugin_scim --display :0.0 -c socket -d --no-
stay
    /usr/lib64/scim-1.0/scim-helper-manager
    /usr/lib64/scim-1.0/scim-launcher -d -c socket -e socket -f x11

I'm afraid the [software architecture is not documented](http://www.scim-
im.org/wiki/documentation), for example those daemon programs don't even have 
a man page. What I can tell you comes from my own observation as a user. 
`scim-launcher` and `scim-helper` are spawned by `scim -d`, which is launched 
from `/etc/X11/xim.d/scim` at a user's X session start-up. `skim` is a regular 
desktop application, which I've set up to run when my KDE session starts. skim 
communicates with the backend via a socket.

These are the minimum packages I have installed that are necessary to do 
useful work in Chinese, Japanese plus the Compose key.

    $ rpm -qa | ack s[ck]im | sort
    scim-1.4.7-174.1.x86_64
    scim-anthy-1.2.7-5.1.x86_64
    scim-devel-1.4.7-350.4.x86_64
    scim-m17n-0.2.2-235.1.x86_64
    scim-pinyin-0.5.91.20060705-272.1.x86_64
    scim-pinyin-skim-0.5.91.20060705-267.3.x86_64
    scim-qtimm-0.9.4-278.1.x86_64
    scim-tomoe-0.6.0-23.1.x86_64
    skim-1.4.5-263.2.x86_64
    skim-scim-anthy-1.2.2-213.3.x86_64

To contact me in real-time when email is too cumbersome: 
<irc://irc.freenode.net/metalab>, <xmpp:daxim at jabber.metalab.at>
I am usually online on workdays during the daytime.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 198 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.metalab.at/pipermail/metalab/attachments/20110120/84c3e75c/attachment.sig>


More information about the Metalab mailing list