GSOC 2014 – 08/17 Update – Wrapup

Hello everyone! I’m Arian, a Computer Science student, one of the students accepted in the Google Summer of Code Program. This is my 9th (and last) GSOC update, and you can view my other GSOC posts here.

This week I’ve integrated ‘feedback messages’ into profiles, providing users a quick easy-to-access stream of details to their recent translations.

As you’re probably aware, last week, I’ve added the ‘feedback’ feature, allowing validators to give feedback to translations (such as pointing out a minor mistake). The feedback feature is nice, but is pretty useless if users aren’t informed of it.

Now, feedback and warnings appear on the user’s dashboard!

Along with recent projects is a list of recent feedback and warning messages, coupled with proper context and direct links to action for this problematic translations.

This new addition really brings the dashboard as an ‘action center’ to full circle!

Related Tickets: https://glotpress.trac.wordpress.org/ticket/335


So that’s a wrap for GSOC! It has all been a very fun and fulfilling experience to develop for Glotpress, knowing that the work is going be used by such an enthusiastic community, whilst also shaping me up with necessary experience to prepare myself as a developer in the real world.

Over the last few weeks, we’ve seen various additions to Glotpress, such as the User Dashboard, Email Notification Script, Public Profiles, User API and Wordpress Widget, a Reworked Installation Form, Feedback Messages, and other small changes.

As GSOC went on some setbacks were also faced, most notable of which is the two simultaneous typhoons that had left us with no electricity for a week. Resilience and hard work paid off, and I’m proud to have been able to complete the scope of the GSOC project, and then some.

Of course, all of this would not have been possible without my two mentors, Yoav Farhi and Marko Heijnen, who have helped me all through out the stages of development, from conception, to planning, development and debugging. These guys are the real brains that made it all possible.

So as GSOC closes, I just want to say, Thank you to all of you, for giving me such an experience and allowing me to contribute in the small way that I have. It has been a really amazing thing to have been able to help create something that is going to be used by the community we have here.


 

However, GSOC’s Hard Pencil’s down does not mean an actual ‘pencil’s down’! The beauty of Open Source is that those who are willing to contribute can, and I am actually planning to continue what I have been doing here – help make Glotpress more awesome!

So whilst GSOC’s end will mean I will no longer carry a GSOC participant moniker, I would be an OSS contributor!

So for everyone out there, just feel free to drop a comment for a feature request you think Glotpress would benefit from, and always remember that our developers always review your suggestions posted in the trac! Also keep posted, as I may still have a trick or two under my sleave 🙂

Thanks and Ciao~!

#gsoc

GSOC 2014 – 08/06 Update

Hello everyone! I’m Arian, a Computer Science student, one of the students accepted in the Google Summer of Code Program. This is my 8th update, and you can view my other posts here.

This week I’ve managed to streamline a bunch of code written in the past, culminating in small changes that serve to make development easier, such as proper error messages on Install Unit Tests.

The major addition for this week however, is the “Decline with Feedback” feature.

Related Tickets: https://glotpress.trac.wordpress.org/ticket/335

Sometimes people make mistakes. Take this very basic example of John Smith, who typed one s too many:

In John Smith’s hurry, he mistyped the correct translation, Glotpress, into Glotpresss!

Validators seeing these kind of mistake face a dilemma. While they could just reject the translation outright and add the correct translation themselves, this is not ideal sometimes, as that will involve fixing the translation and robbing the original translator’s credit that he/she deserves.

This is made more prominent by the profiles feature, which tracks user translation statistics among other things.

Decline with Feedback alleviates this problem, by allowing validators to still reject a translation, whilst providing proper context/instruction on how to fix it.

After rejecting and adding proper feedback, here is the view on Anon’s side:

While this example is fairly trivial, there are usecases where this feature can be especially helpful, such as explaining a non-evident grammatical error, or pinpointing words that are out of context.

The patch as it stands now shows the warning on the translation table. It will be even more useful once its integrated to profiles, allowing users to see a stream of feedback to their recent translations, as well as possibly receiving email notifications for it (opt-in option).

That’s it for this week. Thanks and ciao~!

#gsoc

GSOC 2014 – 07/28 Update

Hello everyone! I’m Arian, a Computer Science student, one of the students accepted in the Google Summer of Code Program. This is my 7th update, and you can view my other posts here.

This week I’ve made changes to previous features implemented, specifically, the Public Profiles and the Installation Script.

Related Tickets: https://glotpress.trac.wordpress.org/ticket/280https://glotpress.trac.wordpress.org/ticket/340

Most of the changes has been internal, setting up proper functions/API, and reconstructing the code flow to fallback to sensible defaults.

This week I also managed to add a small change: you can now view the validators of a translation set, with their names linking to their profiles!

The next weeks will be interesting, where general polish, closing down standing tickets in the trac, and more comprehensive unit tests to features added will be the main focus for development.

Thanks!

  • Those who have been tracking my updates may notice that I skipped a weekly update – this July the strongest typhoon to hit our country so far in the year yet, Typhoon Ramassun, has caused a wide area blackout. Our country was then consecutively hit again by Typhoon Matmo, rain and wind made stronger by the Southwest Monsoon. Because of the power interruption and general bad weather, I had been unable to properly update last July 21, and for this week too, but I will surely try to make up for it in the coming weeks! Thanks 🙂

#glotpress, #gsoc

GSOC 2014 – 07/15 Update

Hello everyone! I’m Arian, a Computer Science student, one of the students accepted in the Google Summer of Code Program. This is my 6th update, and you can view my other posts here.

This week I’ve reworked the install process for Glotpress.

Related Tickets: https://glotpress.trac.wordpress.org/ticket/280

Previously, installing Glotpress would insert a default admin, whilst having a WordPress table along with Glotpress required maintainers to use a php script to add admins.

Now we have an actual installation form, which asks for user data upfront instead of creating a default one, making the process easier and more user friendly. Note how it mirrors the WordPress Installation Form:

Install form

The form is straightforward, asking for a username, email, and password.

I’ve also begun on general polish for Glotpress, and started out with ticket 338.

As reported by zodiac1978, it is currently unwieldy to check if an untranslated string has a history of translations, clicking a row and its corresponding history link.

Related Tickets: https://glotpress.trac.wordpress.org/ticket/338

Now instead of showing a link in every set,  we remove the link and simply inform the user that it has no history of translations, minimizing clicks and time spent!

ss (2014-07-15 at 03.32.02)

That’s all for now. Thanks again, and ciao~!

#gsoc

GSOC 2014 – 07/07 Update

Hello everyone! I’m Arian, a Computer Science student, one of the students accepted in the Google Summer of Code Program. This is my 5th update, and you can view my other posts here.

This week I’ve added the API for Glotpress profiles. This basically allows the profile data to be used by other web applications.

The profile data can be accessed at //glotpressurl.tld/api/profile/profile-nicename. Let’s break up an example response when querying my username:

{
  "meta": {
    "user_display_name": "Secretmapper",
    "user_is_admin": true,
    "user_registered": "2014-05-05 03:00:29"
  },
  "total_strings": 123,
  "project_contrib_count": 14,
  "locale_data": {
    "Bulgarian": 116,
    "Afar": 4,
    "Akan": 3
  },
  "permissions": [
    
  ],
  "recent_actions": [
    {
      "set_name": "Rosetta | Bulgarian",
      "project_url": "\/projects\/rosetta\/bg\/default",
      "project_id": "7",
      "set_id": "13",
      "human_time": "3 days",
      "date_added": "2014-07-04 07:28:53",
      "count": 55
    },
    {
      "set_name": "Sample | Akan",
      "project_url": "\/projects\/sample\/ak\/default",
      "project_id": "1",
      "set_id": "25",
      "human_time": "1 week",
      "date_added": "2014-06-26 03:50:14",
      "count": 3
    },
    {
      "set_name": "Rosetta | Forums | Bulgarian\u00a0\u2192\u00a0ForumBulg",
      "project_url": "\/projects\/rosetta\/forums\/bg\/forumbulg",
      "project_id": "8",
      "set_id": "15",
      "human_time": "1 week",
      "date_added": "2014-06-26 03:49:55",
      "count": 2
    },
    {
      "set_name": "Sample | Sample 1 | Bulgarian",
      "project_url": "\/projects\/sample\/sample-1\/bg\/default",
      "project_id": "2",
      "set_id": "3",
      "human_time": "1 week",
      "date_added": "2014-06-26 03:08:15",
      "count": "3"
    },
    {
      "set_name": "Sample | Bulgarian\u00a0\u2192\u00a0My Translation",
      "project_url": "\/projects\/sample\/bg\/my",
      "project_id": "1",
      "set_id": "1",
      "human_time": "1 week",
      "date_added": "2014-06-25 15:29:24",
      "count": "33"
    }
  ]
}

Let’s break this data up quickly:

  "meta": {
    "user_display_name": "Secretmapper",
    "user_is_admin": true,
    "user_registered": "2014-05-05 03:00:29"
  },

A Meta subobject contains basic user properties.

  "total_strings": 123,
  "project_contrib_count": 14,
  "locale_data": {
    "Bulgarian": 116,
    "Afar": 4,
    "Akan": 3
  },

Then we have some aggregate properties like total strings and contributed project count.

locale_data on the other hand, is an object that maps locale names to the number of corresponding contributions of the user. So for example, we see here that I’ve contributed 116 strings to Bulgarian projects, 4 to Afar, and 3 to Akan.

"permissions": [
  
],

An array containing of translation sets the user approves. In this particular case there are no translation sets the user explicitly approves (note though that this user can, being an admin – admin users have blank permissions array in the API)

 "recent_actions": [
    {
      "set_name": "Rosetta | Bulgarian",
      "project_url": "\/projects\/rosetta\/bg\/default",
      "project_id": "7",
      "set_id": "13",
      "human_time": "3 days",
      "date_added": "2014-07-04 07:28:53",
      "count": 55
    },
    {
      "set_name": "Sample | Akan",
      "project_url": "\/projects\/sample\/ak\/default",
      "project_id": "1",
      "set_id": "25",
      "human_time": "1 week",
      "date_added": "2014-06-26 03:50:14",
      "count": 3
    },
    ...
  ]

A Recent Actions Array contains sets the user has recently contributed to, accompanied by corresponding metadata.

The API allows selective querying (i.e., ?filter=meta), enabling users to get only the data they need.

The creation of a public profile API allows for fancy stuff such as WordPress Widgets that queries recent actions of a user. Here it is in action on the default WordPress theme:

ss (2014-07-04 at 03.44.58)

Thanks and Ciao~!

GSOC 2014 – 06/30 Update

Hello everyone! I’m Arian, a Computer Science student, one of the students accepted in the Google Summer of Code Program. This is my 4th update, and you can view my other posts here.

ss (2014-06-25 at 09.15.32)

This week I’ve added Public Profiles. Now users can view user’s basic info like username and locale preference, recent projects, projects they validate (if any), etc.

Now that users have actual public pages, user names are now being linked when appropriate (such as Translated by:{{User}} in translation sets).

Next week’s addition would be the creation of an API of the profiles so that the data can be used by other applications.

Thanks and Ciao~!

#gsoc

GSOC 2014 – 06/21 Update

Hello everyone! I’m Arian, a Computer Science student, one of the students accepted in the Google Summer of Code Program. This is my 3rd update, and you can view my introductory and 2nd post here, and here, respectively.

This week’s new feature provides modicum, but albeit nice awards for all great translators out there – badges!

Related Ticket/s: https://glotpress.trac.wordpress.org/ticket/336

As you can see, we award translators based on:

  • Number of Translations (10, 50, 100 Approved Translations)
  • Being a Validator
  • Suggesting a Better Translation to an Accepted String
  • Suggesting the First Accepted String
  • Suggesting the Last Accepted String

Badge art are for the most part, placeholders, but I personally find them good enough for production! All of the art used for the badges are public domain (Kenney and Glitch), so for glotpress hosts out there, that means completely free and no need for credit!

Again, development has been on schedule, even a bit ahead! For the next week and a half, I’ll be adding the main avenue for user recognition in this project – Public profiles. Some of the things to be featured in one’s profile are:

  • Recent Translations
  • Projects user is contributing to
  • Projects validated by user
  • A powerful API for other applications

And a few more things in between. Public profiles open a new way for user interaction, where you can keep up with fellow translator’s actions around the site!

Again, thanks and Ciao~! Been a very exciting journey so far knowing you’re developing something that’s going to be used by a lot of people!

#gsoc

GSOC 2014 – 06/14 Update

Hello everyone! I’m Arian, a Computer Science student, one of the students accepted in the Google Summer of Code Program. This is my 2nd update, and you can view my introductory post here.

Previously, validators had no way of knowing if there are new strings waiting for approval; one had to check individual translation sets. The newest feature addition for this week fixes exactly that problem – an Email Notification Script for Glotpress Validators. When run, validators are emailed when there are waiting strings they can validate on translation sets they approve.

Related Ticket/s: https://glotpress.trac.wordpress.org/ticket/334https://glotpress.trac.wordpress.org/ticket/100

The email is simple enough, outlining number of waiting strings (number in parenthesis) and a link to the corresponding translation set.

For those hosting their own glotpress copies, the script is located at the scripts directory, along with other scripts. The script is simply passed to the php interpreter without any arguments (php scripts/notify-validators.php). You can then of course use a CRON job to automatically send out validation emails. Be sure to define your SMTP settings properly!

I also managed to add Unit Tests and Code Improvements to the previously added feature (Profile Project Shortcuts), properly separating template and logic code.

Related Ticket/s: https://glotpress.trac.wordpress.org/ticket/299

Schedule-wise, development has been pretty good! I was supposed to prettify the dashboard this week, but with that done, I’ll be working on a new exciting feature this week – Badges! We already have a list of badge ideas, awarding them based on approved translations, but definitely comment below if you have ideas for badges!

Thanks, and Ciao~!

#google-summer-of-code-program, #gsoc, #translation, #validators

GSOC 2014 Introduction

Hello everyone! I’m Arian, a Computer Science student. I’m one of the students accepted in the Google Summer of Code program, and my project will be Glotpress! I’ll be working on the UI improvements and Profiles, and I’m very excited on building something awesome this summer!

As it is right now, there’s not a lot much in Glotpress for user recognition, and this project aims to fix that. Here’s a short list of features to be implemented:

  • A powerful dashboard, giving you quick shortcuts to projects you’re contributing to.
  • Profile to facilitate stat viewing, such as word count, translation contributions, etc.
  • Badging system, earn badges and show them off your profile by translating a set amount of strings!
  • JSON API for user stats.
  • UI improvements, such as progress bar based ui, and links to translation set validators.

For those interested, you can view the complete, revised scope here: http://learninglabber.wordpress.com/glotpress-scope-revisions/


This week, I’ve managed to fully implement the user dashboard.

Related Tickets: https://glotpress.trac.wordpress.org/ticket/299, https://glotpress.trac.wordpress.org/ticket/329

As you can see we now have the basic stats present, such as the total strings translated and projects contributed to. The graph on the left shows translation statistics from the past week, which will hopefully encourage translators to keep up their translation streak!

The recent projects follow the traditional table Glotpress view, while using a more compact way of showing progress, a progress bar!

The user dashboard’s ui is starkly different from the initial proposal, but it’s current form works very well alongside the actual Glotpress ui; much more efficient than the previous designs that had a lot of unneeded whitespace.

Different reiterations of the ui

Development has been on schedule, and for next week, apart from improving the week’s code by adding Unit Tests and the like, I’ll be working on the notification system, which will hopefully be a big help to validators in knowing when they have new strings to accept/reject.

That’s all for now. Feel free to comment below if you have any questions or think of an idea for improvement, the scope implementation is very much dynamic!

#gsoc