Category Archives: Uncategorized

Globaleaks 0.2 Alpha

Globaleaks 0.2 Alpha is out.

Globaleaks is an open source project aimed at creating a worldwide, anonymous, censorship-resistant, distributed whistle-blowing platform. It enables organizations interested in running whistle-blowing initiatives to setup their own safe zone, where whistle-blowers and recipients can exchange data.

2 Years ago I helped out with the development of Globaleaks 0.1. And although I am not active anymore, I really support the initiative behind it. Now with the HERMES Center for Transparency and Digital Human Rights backing it up, it has grown a lot and shaped up to be a very organized and thought through project.

TL;DR:

  • Full rewrite
  • More flexible and extensible
  • Linux ready-made system and network hardened installation
  • Written in python using twisted
  • New Frontend

Try it out:

Try out the demo. It is pretty straight forward.

Help out:

As young project, Globaleaks can use some help fixing bugs. Just head to the wiki and read through it. It is pretty straight forward, and explains the modules, security concepts and set up instructions.

Globaleaks already has Debian and Ubuntu ready packages. An easy way to help out is to set up a  PPA for us on Launchpad. :D

Get in touch:

You can contact the Globaleaks team at info () globaleaks org or on IRC on #globaleaks at irc.oftc.net

Here are some screenshots of the new frontend :D

Congratulation you are using Tor

Congratulations you are using Tor

Receiver selection page

Receiver selection page

The submission receipt

The submission receipt

Configuring a receiver

Configuring a receiver

Configuring a context

Configuring a context

GNOME Music: Reaching the end of phase one.

TL;DR

We can now browse our albums, artists and songs (no playlists yet) and play them :D

Details:

GNOME Music application development is reaching the end of phase one (out of three).

This phase consists of:

  • Set basic infrastructure (done)
  • Implement Grilo Querying (done) 
  • Implement Albums View (done)
  • Implement Songs View (done)
  • Implement Artist View (done)
  • Implement Playback support (done)
  • Clean up and port to Glade (in progress)

If you feel like hacking along please don’t mind to help out:

Thanks for everybody who has been helping out.

Thanks to Guillaume Quintard and the potential SoC students for posting to glade and fixing some of the UI issues. Also Vadim Rutkovsky started working on some unittests (which kicks ass).

And now to leave you with some screenshots…

Screenshot from 2013-05-05 10:09:16 Screenshot from 2013-05-05 10:09:45 Screenshot from 2013-05-05 10:10:32

 

 

GNOME Clocks… almost there, help needed

GNOME Clocks has been in the works for 3 months now almost.  It is an implementation of the designs prepared by the GNOME Designers (see https://live.gnome.org/Design/Apps/Clock)

Together with Allan Day, we are mentoring the awesome Emily Gonyer for her SoC project as well as our free time superhero Eslam Mostafa. One of the nice (non-techie) things about GNOME Clocks is that it allowed us (the mentors) to identify patterns of healthy communication between designers and developers (I will be preparing a post about this soon).

The project is in a more or less good development state… Here are some screenshots of the current status.

Clocks view

Alarm view

Timer & Stopwatch views

We have been hanging around #gnome-clocks for a bit to make the development environment protective and focused for our new devs. Now I think we can move forward. You can find the code at http://git.gnome.org/browse/gnome-clocks

It is all written in python so it should be easy to just jump in and contribute to a “core app” for GNOME. We need some help with our bugs and most help with autofoo and hosting on jhbuild. So if you are up for it you can find me or allan on #gnome-design & #gnome-clocks and files bugs at https://bugzilla.gnome.org/buglist.cgi?quicksearch=product:%22clocks%22+

Have a nice weekend :D

A peek behind the Journal

After some silence, our research brain and user experience visionary Thorsten Prante is getting vocal again. For those of you who don’t know: he is mentoring Stefano’s current GSoC revamp of the activity journal.

In his post GSoC 2012 – Journal! Revamp!, he provides a nice list of example echos of the activity journal across the web from past to present before he goes on to explain why “in this project, beyond adding new features and types of activity footprints, we’re introducing a new way of showing the Activity Journal to its users.”

Zeitgeist: Playing with Berkeley DB

While doing some scaling optimization the Zeitgeist team decided to give Berkeley DB a try. But porting from SQLite to Berkeley is not easy. However thanks to the Berkeley SQL API porting one can use the SQLite queries. All we did was change the Makefile and add a new vapi (which is a straight copy of the sqlite3.vapi but with dbsql.h as a referenced header instead of sqlite3.h).

The results are not good though. But maybe its because we need to optimize the queries a bit more. Nevertheless you will find the code on freedesktop under the branchname berkeley tonight.

If you like a challenge, try to optimize the Berkeley optimization yourself, but be aware this is not for beginners and it may break you DB.

To build it make sure you get Berkeley db (on Debian and Ubuntu):

  • sudo apt-get install libdb-sql-dev
Get the latest Zeitgeist trunk code and create a new branch:
Download the following patch and apply (make sure you replace path to patch):
  • git am –signoff < /path/to/patch

Download the following vapi and place it into:

  • cp /path/to/vapi /usr/share/vala/vapi/dbsql.vapi
Configure and compile Zeitgeist:

  • sh autogen.sh –prefix=/usr/ –disable-fts && make

Now run it and make sure you are NOT using the default datapath:

  • ZEITGEIST_DATA_PATH=/home/seif/.local/share/zeitgeist-bdb/ src/zeitgeist-daemon –replace –log-level=debug –no-datahub

you will find a generate_events.py script in the zeitgeist tools folder as well as other benchmarking scripts. Feel free to poke around.

Zeitgeist scalability & efficiency bootcamp results

As Trever blogged yesterday, the Zeigeist team has been busy with tweaking the DB and the engine. During that process tools and benchmarks have been developed to make the tweaking and testing more interesting. Trever will be blogging about that tomorrow so make sure to check his blog.

Our end goal is  trying to scale the engine to be able to handle a few billion events just as fast as it can handle a few hundred thousand. While we are not there yet we managed to have some pretty nice stable results for the first iteration. A lot of results show more than 100% speed enhancement. In other words a lot of queries from our standard benchmarks now consume more than 50% less time to execute. Here are some graphs of our benchmarks.

Green indicates the 0.9 release

Yellow indicates the new trunk

Most notable performance enhancement is querying Zeitgeist with a specified timeframe (from data x to date y).

 

Same queries with an open timeframe also improved

 

We also have a copy of the Synapse queries benchmarked

The queries here are typical queries used to extract info from Zeitgeist. So right now the team is really happy with the initial results. For Synapse on my local DB (over a year old), all my synapse queries perform under 0.08 seconds. We still can get more out of this. The trick here was improving our indexes and our sql query generator.

Next month we will be going through another iteration.

 

 

On first interactions with open source communities…

I think it is safe to assume that as an open source project, striving to grow our community, we should make first interactions of new contributors with us a pleasant one.
So when commenting on a new contribution or attempt, we should try to either say something positive or don’t say anything.

  • If the contribution is  not useful then sugar coat you criticism. Because while the contribution might be bad, the person who did the contribution showed initiative to help out. We need to harvest this momentum and help integrate the person into the community.
  • If the contribution is useful then praise the developer. Making him feel useful. I learned from Lydia Pintscher to not only praise good contributors, but grant them autonomy to play around. This would allow them to master their craft, which will lead to them feeling like they have a purpose to stay.

What do you think?

GNOME Shell face-lift extension

I decided to prototype an extensions based on Jimmac’s mockups. I still need to fix some minor issues and add animations. It is not perfect yet and is a bit different from the original design:

  • Applications Icon is on the top of the bar instead of the bottom (seemed more comfortable for me)
  • Searchbar is centered (I think it was Hylke Bons who told me to do that a while back)

but I am still working on it and hopefully can upload it to extensions.gnome.org soon, so we can get feedback! I will leave you with some screenshots and a video for now…

One year Zeitgeist sponsorship by Collabora

This month Collabora has been sponsering zeitgeist for one year, here is the story about how that came to be and what happened during that year.

How I got in contact with Collabora?

I met Rob McQueen, Phillippe Khalaf, Sjoerd and some from the Telepathy team during Gran Canaria Desktop summit. I needed help with an idea (Teamgeist) and a couple of months later I was introduced to Youness Alaoui (until this day I consider a very good and close friend) as well as Sumana Harihareswara (from whom I learned a lot about organizing).

How I got sponsored?

Collabora saw Zeitgeist as a promising technology and observed the development for a while. They wanted to leverage it in GNOME more. After I tried to do some work on GNOME Shell last year, I was approached by them and they offered to sponsor my work, integrating Zeitgeist into GNOME as well as work on Zeitgeist. They also put two of their developers, Abner Silva and JP Whiting, to work on the Zeitgeist Qt bindings for a while.

What I did during the year?

I mainly get sponsored for working on Zeitgeist and related stuff for GNOME and KDE  (development, bug fixing and specs definition). Some of the things I worked on were:

  • Zeitgeist extensions for GNOME Shell: The purpose of the extensions is to integrate some Zeitgeist experience into GNOME Shell. The experience comes in form of three extensions (you can grab the source from here)
  • Jumplists: Displays the recently/most used files used with the apps  displayed in GNOME Shell. The extension has been uploaded to extensions.gnome.org

  • Journal: Zeitgeist based activity-history journal as a gnome-shell overview tab. It allows you to access you files via GNOME Shell and sorts them for you in chronological order. The extension has been uploaded to extensions.gnome.org

 

  • Search: Makes the Shell search via Zeitgeist and and categorize the results better. I will upload it to the extensions website when the highlighting issue is fixed.

  • Activity Log Manager: Due to popular demand we needed to hack on a privacy tool. Along side Manish Sinha, JP Lacerda, Stefano Candori and Siegfried Gevatter, we developed ALM. It is a graphical user interface which lets you easily control what gets logged by Zeitgeist. It supports setting up blacklists according to several criteria (such as application or file types), temporarily stopping all logging as well as deleting recent events. ALM will be seeing deeper integration into Ubuntu and hopefully GNOME too soon. You can grab the code from here.
   
  • Gedit Dashboard: Michal Hruby’s idea during the hackfest has become reality, after Hylke Bons and I spent almost a month working on it from scratch. The idea was to have a “Google Chrome”-like dashboard for gedit as well as a quick search. The patient and kind Gedit folks helped me clean up the code and now its part of gedit-plugins. This is my favorite plugin for gedit now. You can get it from http://git.gnome.org/browse/gedit-plugins.

  • libqzeitgeist (now maintained by the amazing Trever Fischer): libqzeitgeist was developed by Abner Silva and JP Whiting. It allows easier development for KDE apps. It is used in Trever’s plugin for KDE Activity Manager to push events directly into Zeitgeist. Trever is now maintaining the library and added QML support. You can find the work here.
  • Zeitgeist Engine: Of course since all the previous work is powered by Zeitgeist we had to work on getting Zeitgeist better and better. They sponsored my development and maintenance with the team for the 0.7 and 0.8 series and  backed up our GNOME sponsored hack-fest. The biggest accomplishment was done when we ported Zeitgeist to Vala, resulting in less memory consumption and much better start-up times.
  • Epiphany Zeitgeist History (under development): I am working on patching Epiphany to use Zeitgeist as it main storage for History and “Frecency Search”. The Epiphany guys already have a history rewrite branch in which I am sneaking in some code to replace their SQLite back-end. In the end its less code then what they have :P
  • Gtk-RecentManager (worked on designing the API with Federico, Siegfried and Michal Hruby): One of the tasks that emerged during the Desktop Summit was replacing the Gtk.RecentManager logic (which has some flaws). We started designing and discussing the issues at hand on LGO. Implementation is now being done by Siegfried and Federico.

What is next?

Collabora currently also sponsors Siegfried Gevatter for his work on Zeitgeist since last March. I will be trying to do some more GNOME related work. Currently I am trying to work on prototypes for the GNOME Design team to help them evaluate their designs. I will also be experimenting with some internal Zeitgeist algorithms stuff soon. I don’t really know what is next. But I hope we can go further into integrating more with GNOME applications and becoming a blessed GNOME module.

Fun fact?

I used GAJ to write down my Zeitgeist development hours for Collabora. Pretty helpful tool. I can tell how long a file was open and how many times I modified it.