Today I needed to implement “human sort” for a list of distributions we support in the Open Build Service. I wanted to sort them alphabetically but at the same time the newest ones at the top. I ended up with the following code:
Nifty, right? :-) The idea is simple. I use the sort_by function which pre-computes the values that are later compared. I replace some special values like “Factory” or “_SP”, because I want “Factory” to be the newest (100 is higher than any other openSUSE version) and “11_SP1” to behave exactly like “11.1”. Then I split the key using the “” delimiter and turn any string in form “digit” or “digit.digit” to float number. I change the sign, because I want versions to be sorted in the reverse direction. Good thing is that Ruby operator <=> works on arrays also, so I’m done with key modifications and the sort does the rest …
PS: I used |key,val| in sort_by block because I want to use this function also to sort hashes by their key. This way it works both for arrays and hashes with any further modifications.
I’ve set a git repo on Gitorious and also built the package in my home:prusnak project. If there will be interest from our GNOME Team, I will create a submit request to some GNOME devel project and Factory as well.
If you don’t know this yet, you have to install the gnome-shell-extension-yast-status-menu and then either logout and login or press Alt+F2 and type “r” (which will restart gnome-shell).
The number between user@host and the current working directory is the exit status of the most recently executed command (or pipeline). This is great because you don’t have to type echo $? everytime you want to find it out. The __git_ps1 magic will print git branch name if you are inside of the git repository. Furthermore it will add special characters indicating the state of the repo: % - untracked files present, + - new files added, * - some tracked files changed, $ - there is something in the stash (see git stash --help). Pretty cool, right?
Yesterday we were replacing old chairs in our Prague SUSE office with the brand new ones. We got a wicked idea to stack the older ones into the Boosters’ Office and have a virtual bus ride for a few minutes. Our colleague Michal Kubecek and his camera were ready as usual so he quickly took a photo of us enjoying the ride:
Later I had some time to practice my 1337 GIMP skillz and created a motivational poster for your viewing pleasure. After Geeko Bus and Geeko Tram I give you without further ado the “openSUSE Spacebus!”:
Credits: bus photo CC BY-NC by yewenyi, space photo CC-BY by Sweetie187, spacebus photo CC BY-NC by me
If you want to add the YaST menuitem as well, just follow these simple steps (as root):
patch -p1 < gnome3-statusmenu-yast.patch
Now you have to restart GNOME Shell (press Alt+F2 and enter “r” command) and you can enjoy the new menu item. :-) Remember, the changes will be lost next time you reinstall the gnome-shell package.
I already contacted Frederic and Vincent about the patch and they are still looking for the best way how to integrate YaST with the rest of the system, so stay tuned. :-)
PS: Andy found an interesting bug. For him, the item was added but clicking on it did nothing. Solution was found by Frederic - just install the missing gnome-menus-branding-openSUSE package.