Skip to main content

the avatar of Iterativo e Incremental
the avatar of Iterativo e Incremental

a silhouette of a person's head and shoulders, used as a default avatar

[gsoc] osc2 client – summary of week 11

Hi,

here’s a small summary of the 11th (coding) week. Last week I worked on
implementing the new commandline interface. While doing so I faced several
“issues”:

  • How to combine argparse and our oscargs url-like syntax?
    Basically we have to run our oscargs parser on the result which is
    returned by argparse.ArgumentParser’s parse_args method. The problem is
    that both parsers have a different “syntax” that is using a naive approach
    will lead to some redundancies (we specify the ui twice: one time for
    argparse and one time for oscargs). In order to avoid this we need some
    “interface” to which the oscargs syntax is passed and which configures
    the argparse parser accordingly.
  • How to support custom commands?
    We also have to provide an “easy” way to specify custom commands.
    Additionally it might be handy if existing commands can be enhanced
    (either by adding additional options etc. or by adding a new subcommand
    etc.). The best would be if the user simply drop his/her plugins in a
    specific directory and osc will scan this directory and use the new
    plugins/commands.
  • Specifying the ui programmatically is somehow confusing/cluttered. It would
    be much better if the ui can be specified in a more “declarative” way
    without the syntactic “overhead” (well that’s a bit exaggerated) which
    is needed to configure the parser. Additionally it would be nice to have
    a convenient way to specify a multi line description for a command
    (hardcoding the str into the source makes the code “harder” to read).

Finally I ended up with a small DSL which can be used to specify the
ui in a “declarative” way (the initial idea + syntax is taken from the
django framework (see [1])).

Example:
Assume we want to implement a request command which consists (for the
sake of simplicity) of 2 subcommands “list” and “accept”. This can be
specified like the following:


# file: osc/cli/request/ui.py

class Request(CommandDescription, OscCommand):
     """Show and modify requests."""
     cmd = 'request'

class RequestList(CommandDescription, Request):
     """List requests.

     By default open requests for a specific project or package will be
     listed.

     Examples:
     osc request list api://
     osc request list api://project
     osc request list api://project/package

     """
     cmd = 'list'
     args = 'api://project?/package?'
     opt_user = Option('U', 'user', 'list only requests for USER')
     opt_group = Option('G', 'group', 'list only requests for GROUP')
     opt_state = Option('s', 'state', 'list only requests with state STATE',
                        choices=['new', 'review', 'accepted', 'revoked',
                        'declined', 'superseded'], action='append')
     func = request_list

class RequestAccept(CommandDescription, Request):
     """Accept a specific request.

     ...

     """
     cmd = 'accept'
     args = 'api://reqid'
     func = request_accept

In order to add the request command it is sufficient to add an

     import osc.cli.request.ui

statement to the main cli module. This produces the following output:

marcus@linux:~/osc2/osc/cli> python cli.py request -h
usage: cli.py request [-h] {list,accept} ...

Show and modify requests.

positional arguments:
  {list,accept}
    list         List requests.
    accept       Accept a specific request.

optional arguments:
  -h, --help     show this help message and exit
marcus@linux:~/osc2/osc/cli>


and

marcus@linux:~/osc2/osc/cli> python cli.py request list -h
usage: cli.py request list [-h]
                           [-s {new,review,accepted,revoked,declined,superseded}]
                           [-G GROUP] [-U USER]
                           api://project?/package?

List requests.

    By default open requests for a specific project or package will be
    listed.

    Examples:
    osc request list api://
    osc request list api://project
    osc request list api://project/package

positional arguments:
  api://project?/package?

optional arguments:
  -h, --help            show this help message and exit
  -s {new,review,accepted,revoked,declined,superseded}, --state {new,review,accepted,revoked,declined,superseded}
                        list only requests with state STATE
  -G GROUP, --group GROUP
                        list only requests for GROUP
  -U USER, --user USER  list only requests for USER
marcus@linux:~/osc2/osc/cli>

How does it work?
First of all each class which defines a command or subcommand has to inherit
from class “CommandDescription”. If a subcommand is to be defined it also
has to inherit from the “parent” command (that is in our example “RequestList”
and “RequestAccept” inherit from class “Request” (which in turn inherits from
class “OscCommand” (from this class all toplevel commands have to inherit))).
In short: with the help of the inheritance hierarchy it is possible to define
a command <- subcommand hierarchy.

Note: actually the classes "RequestList" and "RequestAccept" only inherit
from "CommandDescription". The "parent" command base class is only needed
for a "marking" purpose (it is filtered out with the help of a metaclass
when the concrete class is "constructed" – I'll leave out the details for
now and may write a dedicated blogpost about it).

Now the remaining task is to define and implement the commands (note: we will
definitely not finish the project on the "suggested pencils down" date and
use the week until the "firm pencils down" date for coding…).

Marcus

[1] https://docs.djangoproject.com/en/1.4/topics/db/models

Here’s a small example how to modify an existing command:

# plugins/myrequestaccept.py
from osc.cli.description import Option
import osc.cli.request.ui

class MyRequestAccept(osc.cli.request.ui.RequestAccept):
     # add a new option
     opt_foo = Option('f', 'foo', help='foo option')

This leads to

marcus@linux:~/osc2/osc/cli> python cli.py request accept -h
usage: cli.py request accept [-h] [-f FOO] api://reqid

positional arguments:
  api://reqid

optional arguments:
  -h, --help         show this help message and exit
  -f FOO, --foo FOO  foo option
marcus@linux:~/osc2/osc/cli>

the avatar of Carlos Gonçalves

New domain and migrating data between Google Apps

Short version


  • If you can't reach me at my @cgoncalves.info, use @cgoncalves.pt from now on.
  • Google Apps doesn't allow one to switch a primary domain with an alias. Had to migrate all data by myself...


A not so short version

Holding the cgoncalves.info domain since 2007, I had it associated to a free Google Apps account ever since.
Recently FCCN (Fundação para a Computação Científica Nacional) decided well it was time to liberalize the .PT TLD to everyone and not just to companies or trademarked brands. Now for ~17€/year any individual can get a .PT domain, no bureaucracy in the way. Hurray!

I did take the opportunity and acquired the cgoncalves.pt domain. It's simple, elegant and somewhat represents pride of being a Portuguese citizen. This domain's just what was pending to fulfill, as of now, the digital image of myself.

With this new domain I could add it to my existing Google Apps account and make it an alias of cgoncalves.info. Although as I'm so existed and convinced I'll keep this new domain till my death, I gave a thought (2 seconds, if much) and concluded I should settle with the domain as the primary one instead of the rather deprecated cgoncalves.info. "So what?" you ask. Well... Google doesn't allow their Google Apps users to switch a primary domain with an alias! Best chance to accomplish this is to create a new Google Apps account associated with the .PT domain and migrate all data from one account to the other, including emails, filters, contacts, calendars, feeds, etc. Moving contacts, calendars and feeds is a trivial action but hundred of thousands of emails from years?! No fun...

Once migration completed, delete the cgoncalves.info Google Apps account and add that domain to the new account as alias was the goal to achieve.

Migrating emails

I started migrating emails between the two Google Apps accounts using the POP3 fetcher GMail provides. Yes, it take ages and only fetches up to 200 emails at a time, but that was the faster way I know. The fetcher automatically retrieves for messages at different rates from accounts and depends on previous mail fetch attempts (the less mail retrieved, the less frequency it will check for new mail). Frustratedly even with thousands of messages yet to get, the intervals were set longer and longer (sometimes to two hours!)... Enabling "Refresh POP accounts" lab ("Fetch messages from your POP accounts on demand by using the refresh link on to of the inbox") would cut the time between fetches but was no usable solution as it required human interaction by clicking on the gear icon now and then.

I also tried this script and threw one dollar (minimum donation amount required) to let me unlock the fixed 8 minutes interval and empower me to set it to a higher rate (down to 3 minutes). It was working like a charm and the migration process was flying fairly decently. BUT NO! OH NO! GMail stopped successfully retrieving messages and started emailing me an unnumbered "Message left on server" messages. Perhaps the daily quota has been reached, or not as it kept that way the day after. This POP3-me thing was running for now a full week and I still had many messages left to migrate. I was doomed!

With the POP3 process discarded there was just one option left and that I was battling to avoid: transfer from IMAP. Don't get me wrong, I love and use IMAP in all my accounts. The side of the coin is I'd have to perform the migration on my end and reached the first 500 messages transferred, only 1 message per second is synced. Imapsync was just the application suited to do the job. It detects duplicated emails and all, great! I installed it on my VPS (so I can't put my laptop to sleep at will) and ran it as follows:

#!/bin/bash
imapsync \
--host1 imap.gmail.com \
--user1 account@old-domain.com \
--passfile1 ./passfile1 \
--ssl1 \
--host2 imap.gmail.com \
--user2 account@new-domain.com \
--passfile2 ./passfile2 \
--ssl2 \
--authmech1 LOGIN \
--authmech2 LOGIN \
--useheader 'Message-Id' \
--useheader 'X-Gmail-Received'

File passfile1 and passfile2 contains the respective email accounts passwords (plain text). And voilá! It might take several hours/days but I didn't know (and still don't) no better solution. And remember, POP3 mail fetcher doesn't copy sent mail, but imapsync does! Win!

Back to Google Apps drama

At last with data migrated I let things stabilize for a couple of days before taking any further action. Next step was ensuring I did not depend anymore on my @cgoncalves.info Google Apps account: check! Logged into the Google Apps administration panel of the new domain and tried to add cgoncalves.info as an alias. It failed with something like "The domain is currently associated to another account". That was right, I still had to purge the former account before proceeding: done! Retried once again hoping I got lucky but no... "This domain name has already been used as an alias or domain". It seems I will have to wait up to seven days before I can add the .INFO domain as an alias.

Conclusion

Update my contact record on your address book and replace everything ending with cgoncalves.info to cgoncalves.pt. I promise I'll keep using this domain for decades, unless someone steps in with a bag full of money and buys me off to concede the ownership of the domain. Starting bid is 1000€. I mean it! :-D

a silhouette of a person's head and shoulders, used as a default avatar

Karma statistics available through Connect's API


In my previous post, I mentioned about allowing karma statistics to be available through Connect's API.  So, that is done. The method karma.details which requires a GET call, passing the username of the user, called only after authenticating with the api, returns user score in each respect, i.e score on fixinng bugs, making posts, tweeting, build service commits and wiki edits. It also returns user badge and the last karma update time of the user.


I plan to deploy the second version of the Karma plugin as soon as my mentor Michal Hrusecky, who is away currently, gets back. Also, if you have any ideas to give across or want to comment on how you liked or disliked the karma plugin, do leave a comment, I will work on it and improve it in the second version itself.


Next, I am starting off with the documentation. Hope to finish this asap, not much time left for the pencils down date. 

a silhouette of a person's head and shoulders, used as a default avatar

Announce: LDTP 3.0 - Linux GUI test automation tool


Highlights:

* Java / C# / VB.NET / PowerShell / Ruby are now officially supported LDTP scripting languages other than Python

New Features:

* Firefox have check / uncheck as actions for check box

New APIs:

* selectpanel
* selectpanelname
* selectpanelindex

Bug fix:

* Simplified the implementation verifyselect for combobox menuitem
* Fix QT related accessibility issue
* Bug#673931 - Python-ldtp has issues if the application calls an env or other program to run

Credit:

* Ubuntu QA team members (Dave Morley, Ara Pulido)
* VMware desktop QA team members
* Kartik Mistry (Debian package maintainer)
* Thanks to all others who have reported bugs through forum / email / in-person / IRC

Please spread the word and also share your feedback with us.

About LDTP:

Cross Platform GUI Automation tool Linux version is LDTP, Windows version is Cobra and Mac version is PyATOM (Work in progress).

* Linux version is known to work on GNOME / KDE (QT >= 4.8) / Java Swing / LibreOffice / Mozilla application on all major Linux distribution.
* Windows version is known to work on application written in .NET / C++ / Java / QT on Windows XP SP3 / Windows 7 / Windows 8 development version.
* Mac version is currently under development and verified only on OS X Lion. Where ever PyATOM runs, LDTP should work on it.

Download source / binary (RPM / DEB)

Documentation references: For detailed information on LDTP framework and latest updates visit


LDTP API doc / Java doc
Report bugs

the avatar of KDE at openSUSE

KDE SC 4.9 packages for openSUSE

The KR49 repo holds KDE SC 4.9 packages for openSUSE users. For information on how to update please refer to the openSUSE wiki.

UPnP support was disable for the KR49 packages since it causes lots of crashes (if Windows shares are present on the network) and seems unmaintained within KDE, i.e. no fix to look forward to.

Kudos

Packaging-wise kudos go to Todd, Nico and everybody else doing the packaging in KR49.  If you find any packages missing in KR49 compared to KR48 please submit them via the buildservice or  drop a note on the opensuse-kde mailinglist.

KDE-wise I would like to thank especially Laurent Montel who contributes a lot to fixing-up kmail2, including adding email backup and import functionality. András Manţia is another developer who helps to get kmail2 into shape and re-worked the filtering for 4.9.  (There are of course many more who contribute to KDE!) Since AFAIK both work for KDAB, it is good to see that there are still developers payed to work on KDE while most distros seem to overload their so called KDE-team with non-KDE stuff, resulting in little or no contribution to KDE and just enough time to get packaging done, if at all.

Things I noticed with KDE SC 4.9 so far

In dolphin one can now add extra information to the main view, i.e. next to each item. Actually a nice feature. The sad thing is that it only works for indexed folders. The user cannot know about this and is presented with lots of “-” below each icon instead of just not showing anything if there is nothing to show. Enabling the additional information will block dolphin’s GUI for some time proportional to the amount of items in the current folder. Indexing still has some issues, e.g. nepomuk re-indexes movie and some sound files after every log-in. On top of that instead of just checking the length etc. it reads the whole file, i.e. hundreds of MB just to  start all over again after the next log-in.

The places pane presents some new items, i.e. you can add searches to it. While some default searches do not seem to be of any use, i.e. e.g. just list all audio files or pictures from all over the computer, the time-related queries can be quite useful if you are willing to invest the GB needed to build up an index for 70 000 files.

Regarding mail loss, the bugs were unfortunately not fixed yet for online IMAP. There are two issues. a) You lose email if you move it to a local folder and the internet connection breaks down while kmail2 is still downloading the message. b) You also lose email if you pipe the emails in your imap folders through external apps such as bogofilter. For the latter a workaround exists. If you open the properties of the imap folders and enable “always retrieve full message” you will not lose emails because of piping unless a) kicks in.

Apper seems to become more stable. While it still suffers from a – let’s say – incomplete zypper backend for PackageKit on openSUSE, it lets PackageKit processes die within reasonable time and does not block zypper forever anymore.

the avatar of Efstathios Agrapidis

Η openSUSE 12.2 RC2 Έτοιμη για Τελική Δοκιμή

Σήμερα, το έργο openSUSE διαθέτει την 2η Υποψήφια προς Διάθεση της openSUSE 12.2 για ευρύτερο έλεγχο, με την τελική υποψήφια προς διάθεση να στοχεύεται κάπου στα μέσα Σεπτεμβρίου. Στις δύο εβδομάδες από την προηγούμενη υποψήφια προς διάθεση,  κατεύθασε ένας χαμός από διορθώσεις της τελευταίας στιγμής, κυρίως σε υψηλότερου επιπέδου πακέτα καθώς η βασική ομάδα πακέτων σταθεροποιήθηκε και κλειδώθηκε.

Κατεβάστε την

Κατεβάστε την από το software.opensuse.org/developer. Ως συνήθως, διατηρείται μια λίστα με τα πιο ενοχλητικά προβλήματα και μπορείτε να δείτε τη λίστα με τα σφάλματα (bugs) και/ή να αναφέρετε κάποιο στον Bugzilla. Συνεχίστε την ανάγνωση για λεπτομερή κάλυψη των αλλαγών και κάποια κόλπα και έξυπνες λύσεις για να τη δοκιμάσετε και να βοηθήσετε.

Βασικές αλλαγές

Σε μια αργοπορημένη αλλαγή στη διαστρωμάτωση της διάθεσης, αποφασίστηκε να μετακινηθούν πολλά από τα εγχειρίδια και τα βιβλία από DVD για την δημιουργία χώρου. Αυτά είναι πλέον κομμάτι του pattern ‘books’ το οποίο μπορεί να εγκατασταθεί ξεχωριστά.

Μικρότερες διορθώσεις χαμηλού επιπέδου έγιναν στο systemd, το kiwi, το clicfs και το udev. Το πακέτο για το kernel firmware και οι λίστες με τα PCI ID ενημερώθηκαν για να υποστηρίζουν το πιο πρόσφατο υλικό. Το GRUB2 είχα κάποιες διορθώσεις και μια ενημέρωση στο branding για την εμφάνιση από το τερματικό. Το Mesa ενημερώθηκε στην πιο πρόσφατη έκδοσή του.

Το βασικό σύστημα έλαβε κάποιες εκκαθαρίσεις στο πακέτο της εξορισμού ιεραρχίας συστήματος, συμπεριλαμβανομένης της αφαίρεσης των κουβαλιμένων συνδέσμων σε αφαιρούμενες συσκευές δίσκων από πολύ παλιές εκδόσεις του SUSE Linux, καθώς επίσης πολλές διορθώσεις στο bind, ενημερώσεις και μια διόρθωση ασφαλείας στο bash, βελτιώσεις στο systemd για το autofs και το rsync, το χαρακτηριστικό SSL του ntp διορθώθηκε, και ένα προφίλ για το colord προστέθηκε στο AppArmor. Ο NetworkManager έλαβε μια διόρθωση για να βελτιώσει τον έλεγχο πιστοποιητικών σε εταιρικά δίκτυα. Το Plymouth, η νέα οθόνη εκκίνησης στην 12.2, είχε ένα σπρώξιμο στην έλδοση και έλαβε πολλές μικροδιορθώσεις. Η υποστήριξη του IPv6 ενεργοποιήθηκε στον avahi.

Τα προνόμια στο Polkit χαλάρωσαν ελάχιστα για να επιτρέπουν σε όλους τους χρήστες να εγκαθιστούν ενημερώσεις, όταν έχουν κάνει επιτυχή είσοδο στο σύστημα. Πολλά λάθη στο zypp πίσω από το PackageKit που επηρεάζουν τη λειτουργία στο GNOME έχουν επιλυθεί.

Καθώς προκύπτουν ζητήματα ασφαλείας στις εκδόσεις λογισμικού που θα συνοδεύσουν την 12.2, εφαρμόζονται προληπτικά διορθώσεις. Αυτές συμπεριλαμβάνουν τις βιβλιοθήκες openjpeg και tiff. Οι libjpeg-turbo και libgadu έλαβαν μικρές ενημερώσεις έκδοσης, και οι καταρρεύσεις στις libimobiledevice και gphoto2 διορθώθηκαν. Το GPhoto2 επίσης έλαβε και τα τελευταία USB IDs για PTP κάμερες και συσκευές.

Η Mysql έλαβε μια σημαντική διόρθωση σε σφάλμα που προκαλούσε υπερβολική χρήση δίσκου σε ερωτήματα UPDATE, διορθώσεις ασφαλείας ήρθαν και στον apache2, η υποστήριξη του systemd διορθώθηκε στον tomcat, και τα postfix και kvm είχαν μικρές ενημερώσεις έκδοσης.

Οι διορθώσεις στο YaST ήταν σχετικά μικρές: τα εργαλεία για το bootloader είχαν κάποιες μικροδιορθώσεις για το GRUB2, συμπεριλαμβανομένης υποστήριξης για την προσθήκη ασφαλών παραμέτρων στον πυρήνα, και το εργαλείο ntp είχα κάποιες διορθώσεις συμπεριλαμβανομένης της εκκίνησης της υπηρεσίες όταν είναι ρυθμισμένη να ξεκινάει.

Ενημερώσεις στην πλατφόρμα ανάπτυξης ήρθαν και στον gcc, llvm, python (2) και php5. Η Python 3 ενημερώθηκε στην έκδοση 3.2.3.

Ο οδηγός γραφικών της Intel έχει ενημερωθεί στην έκδοση 2.20.0, ενεργοποιώντας τα υποσυστήματα SNA και GLAMOR, συμπεριλαμβάνοντας πολλές διορθώσεις στο προεπιλεγμένο υποσύστημα UA. Ένα κρίσιμο σφάλμα βρέθηκε και διορθώθηκε που προκαλούσε κατάρρευση του gnome-shell μετά την επαναφορά από την κατάσταση αναμονής ή την αναστολή.

Ο διαχειριστής οθόνης LXDE, lxdm, υπέστη διόρθωση αποτρέποντας την υπερβολική κατανάλωση CPU. Μια διόρθωση προστέθηκε στο εφαρμογίδιο ρολογιού του XFCE όπου προβάλλεται ένα αναδυόμενο ημερολόγιο και επίσης ενημερώθηκε το εφαρμογίδιο φόρτωσης δικτύου.

Στο KDE 3 διορθώθηκε το udisks2 ώστε να αποπροσαρτούνται κατάλληλα οι συσκευές όταν πιέζεται το πλήκτρο της φυσικής εξαγωγής μέσου.

Το KDE PIM είχε ένα μακρόχρονο σφάλμα διπλοεγγραφών αλληλογραφίας κατά τη χρήση τοπικού φιλτραρίσματος, και τα USB sticks προσαρτούνται με επιλογές flush αντί για async από το KDE Plasma Workshpaces, αποτρέποντας σφάλμα κατά την αποπροσάρτηση όταν μια μακρόχρονη εγγραφή είναι ήδη σε εξέλιξη.

Στο GNOME διορθώθηκαν πολλά πακέτα, συμπεριλαμβανομένων των inkscape, rhythmbox, Eye of Gnome, gnumeric, evolution, gnote, rednotebook, vinagre, virt-manager, texmaker, και gnome-screensaver. Το Gnome Shell ενημερώθηκε στην έκδοση 3.4.2 με πολλές διορθώσεις, η έκδοση gtk έφτασε στην 3.4.4 και το υποσύστημα υπηρεσίας λογαριασμών στο Gnome Online Accounts δέχθηκε πολλές βελτιώσεις. Tap-για-κλίκ και απενεργοποίηση του touchpad κατά την δακτυλογράφηση ορίστηκαν ως προεπιλογή.

Επιπρόσθετη μεταφρασμένη τεκμηρίωση προστέθηκε στο Gnucash.
Στο LibreOffice ενημερώθηκε στην τελευταία έκδοσή του και το artwork και το branding.
Τέλος, οι μεταφραστικές ομάδες δούλεψαν σκληρά και ενσωμάτωσαν στην 12.2 πολλές γλώσσες και οι προγραμματιστές διόρθωσαν πολλά σφάλματα στις μεθόδους εισαγωγής.

Βοηθήστε!

Θα αναρωτιέστε πως μπορείτε να βοηθήσετε. Μπορείτε να ξεκινήσετε δοκιμάζοντας. Κατεβάστε την τελευταία έκδοση RC από την διεύθυνση software.opensuse.org/developer και δοκιμάστε την στο σύστημά σας! Μπορείτε νε επισκεφθείτε την σελίδα με τα πιο ενοχλητικά σφάλματα για να δείτε εάν τα προβλήματά σας είναι εκεί και εάν δεν τα βρείτε, μπορείτε να δείτε μια λίστα από σφάλματα και/ή να δημιουργήσετε ένα νέο στο Bugzilla. Εάν το σφάλμα που βρείτε είναι σημαντικό, προσθέστε το στην λίστα με τα ενοχλητικά σφάλματα! Εάν είστε προγραμματιστής (ή θέλετε να γίνετε ένας!) υπάρχουν πολλά να κάνετε. Διορθώνοντας σφάλματα σε πακέτα είναι ένας πολύ ωραίος τρόπος να μάθετε τρόπους πακεταρίσματος (δείτε την τεκμηρίωση του portal πακεταρίσματος). Μπορείτε να διαβάσετε πως να το κάνετε αυτό εδώ, μέσω ενός απλού συνόλου βημάτων όπου στο openSUSE είναι γνωστό ως ‘BURP-ing’.

Εάν είστε ήδη προγραμματιστής στο openSUSE και θέλετε να ξεκινήσετε την προετοιμασία για την έκδοση μετά την 12.2 μην ξεχνάτε να βάλετε τα πακέτα σας στο αποθετήριο Factory ή να ξεκινήσετε να συντηρείτε κάποιο! Το αποθετήριο Factory έχει ήδη ανοίξει για ανάπτυξη, παρόλο που προς το παρόν προτιμάμε διορθώσεις για την openSUSE 12.2

Ευχαριστίες!

Θα θέλαμε να ευχαριστήσουμε όλους όσους εργάζονται για το openSUSE για να είναι τόσο εξαίσιο. Αν και εστιαζόμαστε στην 12.2, δεν υπάρχουν οι δέκα καλύτεροι συνεισφέροντες στο αποθετήριο factory αυτή τη στιγμή αλλά θα μπορούσαμε να δημοσιεύουμε αυτόν τον αριθμό πιο συχνά στο μέλλον 😉

Χαρείτε το!!

a silhouette of a person's head and shoulders, used as a default avatar

Karma rewards Wiki Edits


This my report of the work done in the past few days.


Another feature that has been added to the karma plugin is rewarding people on making Wiki edits. Karma fetches all wiki edits made by each user on Connect using their username and rewards them. Starting from the last 10 wiki edits, all are rewarded. For now there isn't any criteria to judge the significance of each wiki edit, because since openSUSE wiki is aimed at providing information regarding openSUSE and its distribution so each one is important to openSUSE and deserves to be rewarded.


During the past few days I also played with the existing karma widget a little, now it gives more information regarding the user's score, why a certain badge is awarded to you and what percentage of the maximum score is your score. I realized all these details wouldn't be of any use to others who are viewing your profile so I have segregated who sees what and made these details available only to the owner of the Karma.


After my mentor reviews the work done till now,  next I'll work on documentation and allow karma statistics to be available through Connect's API.  
a silhouette of a person's head and shoulders, used as a default avatar

Announce: Cobra 2.0 - Windows GUI test automation tool


 Highlights:

* Java / C# / VB.NET / PowerShell / Ruby are now officially supported LDTP scripting languages other than Python
* Approximately 130 APIs are compatible with Linux version of LDTP
* C# client is compatible with Mono .NET framework and we have tested it on Linux/Mac
* Identify object name based on automation id (window id, as per SilkTest users)
* i18n support
* CPU / Memory logging
* Remote test execution

New features:

* List / Tree item API's are added
* Scroll to the element if the respective pattern is enabled
* Added new characters in keyboard input
* Object lookup based on wildcard("?")
* Double click on allowed object's
* Added hyper link widget type under known objects

New APIs:

* getwindowsize
* simulatemousemove
* gettablerowindex
* getobjectnameatcoords
* onwindowcreate (Java/C# client)
* removecallback (Java/C# client)
* mouserightclick

Bug fixes:

* Taskbar is now identified as pane, rather than ukn
* generatemouseevent API now takes the optional argument, compatible with Linux
* Fixed a crash, if the window title has back slash
* Grabing focus on combobox element fails the object selection, removed the respective code
* Ignore special characters while searching object name
* Fix regexp in object lookup
* getcellvalue API now takes the optional argument, compatible with Linux
* Handle task manager menuitem, which worked slightly different than other menu
* Fixed listing sub-menus with a simplified method
* getcellvalue API now as the Linux version
* getchild API now returns appropriate output
* Fixed *window APIs to work with different types of window
* Fixed mouse left click on a text widget

Credit:

* John Yingjun Li (VMware) have contributed most of the code in this release. I really appreciate all his effort
* VMware colleagues
* Thanks to all others who have reported bugs through forum / email / in-person / IRC

Please spread the word and also share your feedback with us.

About LDTP:


Cross Platform GUI Automation tool Linux version is LDTP, Windows version is Cobra and Mac version is PyATOM (Work in progress).

* Linux version is known to work on GNOME / KDE (QT >= 4.8) / Java Swing / LibreOffice / Mozilla application on all major Linux distribution.
* Windows version is known to work on application written in .NET / C++ / Java / QT on Windows XP SP3 / Windows 7 / Windows 8 development version.
* Mac version is currently under development and verified only on OS X Lion. Where ever PyATOM runs, LDTP should work on it.


Download source / binary (Windows XP / Windows 7 / Windows 8)
System requirement: .NET 3.5, refer README.txt after installation

Documentation references: For detailed information on LDTP framework and latest updates visit http://ldtp.freedesktop.org

LDTP API doc / Java doc
Report bugs