/srv/irclogs.ubuntu.com/2014/01/27/#ubuntu-desktop.txt

=== m_conley is now known as m_conley_away
=== Zdra is now known as xclaesse
darkxstpitti, hi05:14
darkxstpitti, DMB meeting is tonight, can you get to my endorsement today? thanks...06:13
pittiGood morning06:17
pittidarkxst: sorry, doing right now; I had a ton of work to finish on Friday06:17
darkxstpitti, ok, no problem06:18
pittidarkxst: done06:37
pittidarkxst: many thanks for your work! I hope you get accpeted, but with that many +1s it shouldn't be a problem :)06:37
darkxstpitti, thanks06:44
darkxstpitti, any idea why autopilot fails to introspect gnome-shell properly? I can't even find any code that is gtk specific?06:45
darkxst(essentially it only picks out the top-level containers, and no children)06:46
pittidarkxst: not off-hand, I never tried it with gnome-shell; my first idea would be that the thing you want to inspect is using clutter widgets instead of GTK?06:46
darkxstpitti, yes06:46
darkxstbut the clutter widgets are still gtk no?06:47
darkxstpitti, walters (upstream) is very interested in having installed tests for gnome-shell06:49
darkxstright now all they have is screenshots of the test VM06:49
pittidarkxst: I'm not sure; I thought clutter had its own set of widgets06:49
darkxstpitti, yes they are unique widgets but still derived from Gtk, atleast as far as I can tell06:51
pittihmm; as long as it's a GtkWidget derivative it ought to work06:51
pittiit does some extra stuff with ATK which most probably won't work for clutter, but that shouldn't break the tree completely06:52
darkxstpitti, tree is broken, it only picks up the top-level widgets like metaWindow06:57
pittidarkxst: I briefly looked at gnome-shell now07:08
pitti  GObject07:09
pitti   +----GInitiallyUnowned07:09
pitti         +----ClutterActor07:09
pitti               +----07:09
pittiStWidget07:09
pitti                           +----StButton07:09
pittidarkxst: so, I don't think that's GTK07:09
pittie. g. ./js/ui/workspace.js uses those clutter widgets07:09
darkxstpitti, how would I teach autopilot about clutter?07:12
pittidarkxst: it'd need to grow a new backend similar to libautopilot-gtk, which knows how to introspect a widget tree and export it over D-BUS07:13
pittiso, quite some work07:13
darkxstoh I see07:15
pittilib/GtkNode.cpp does most of that  magic07:15
pittii. e. it uses things like gtk_container_get_children() and atk_object_get_n_accessible_children(), iterates over their properties, and exports them to D-BUS07:16
pittiI guess an autopilot-clutter should be fairly similar to autopilot-gtk, as at least the property stuff ought to be very similar07:16
pittibut the tree iteration will be different in clutter07:16
pittimight actually be easier to merge it into -gtk and also support ClutterActor classes07:17
darkxstyeh I suspect that would be the best solution07:18
Laneymorning09:02
Laneyhappy monday ;-)09:02
pittihey Laney, good morning09:04
pittiLaney: and happy birthday!09:04
seb128heyl Laney pitti09:05
seb128oh, happy birthday Laney!09:05
pittiça va seb128 !09:05
seb128pitti, très bien, et toi !09:05
* seb128 reads https://lists.launchpad.net/elementary-dev-community/msg02948.html (elementary picking up shotwell to maintain it by forking it...)09:06
Laneythanks pitti seb128 \o/09:06
Laneymmm, yeah, saw that09:06
Laneynot sure of the logic behind calling it a fork and doing the rename09:07
Laneybut more development will be good09:07
seb128they don't want to use the GNOME infra and didn't want to deal with moving it our from there it seems09:07
seb128well, I wonder what it means09:07
seb128which one should we use?09:07
* seb128 writes email09:07
Laneyyorba should shut down shotwell @ gnome if it is dead09:08
mlankhorstmorning09:08
Laneyalso09:09
Laneyimage builds are all broken09:09
Laneyhttp://people.canonical.com/~ubuntu-archive/livefs-build-logs/trusty/ubuntu/latest/livecd-20140127-amd64.out09:09
seb128still/again?09:09
seb128how is unity-control-center ending there?09:10
Laneyhmm09:11
Laneyhttp://people.canonical.com/~ubuntu-archive/germinate-output/ubuntu.trusty/rdepends/unity-control-center/unity-control-center09:13
LaneyDepends: dconf-gsettings-backend | gsettings-backend, libc6 (>= 2.2.5), libglib2.0-0 (>= 2.37.3), liburl-dispatcher1 (>= 0.1), bluez (>= 4.36), unity-control-center | gnome-control-center | ubuntu-system-settings, gnome-bluetooth | ubuntu-system-settings09:13
seb128bah, wifi stopped transfering datas without disconnecting, I was writing an email to the Daniel/Jim and didn't notice before my IRC timedout09:20
seb128hum09:32
seb128https://twitter.com/yorbajim/status/42689432906432512009:32
seb128so it's a real fork09:32
seb128weird09:32
Laneyyup09:33
=== vrruiz_ is now known as rvr
=== MacSlow is now known as MacSlow|lunch
dpmhi Laney, quick question: is there a way for an app to invoke the system settings app and show its accounts page? E.g. it'd be nice for the Reminders app if there is no account configured to have a "Configure Evernote account" button that would launch system settings and the accounts dialog12:16
Laneydpm: You'll need to ask mardy (or the code) about that one, but it's possible in general to open settings:///system/online-accounts and pass some parameters12:18
dpmawesome, thanks Laney12:18
Laney?foo=bar&something=stuff12:18
Laneywhich online-accounts could deal with, to do what you want for example12:19
dpmI'm not sure if mardy is around, do you happen to know of an app that makes use of it so I could have a look?12:19
LaneyNone of our panels do that yet AFAIK12:19
dpmok, no worries, I'll try to find out more, thanks!12:20
Laneyalso he was active earlier so seems to be aroudn12:20
dpmok12:21
Laneydpm: Looks like it might be supported already12:21
LaneyI see "pluginOptions" in the code12:21
Laneytry ?provider=<someprovider>12:21
dpmnice!12:22
seb128mpt, is the "Checking for updates" on https://wiki.ubuntu.com/SoftwareUpdates?action=AttachFile&do=get&target=phone-settings-updates-checking-none.png using normal labels (style, size, etc)?12:32
seb128same for https://wiki.ubuntu.com/SoftwareUpdates?action=AttachFile&do=get&target=phone-settings-updates-unavailable.png12:32
=== MacSlow|lunch is now known as MacSlow
seb128Laney, btw I saw your ping about the a-s work, we just need to land stuff together ... did you get any feedback from the telepathy app team on whether they are fine with the changes?12:42
Laneyseb128: hmm, no, should I ping there?12:43
LaneyI was hoping for a code review - it doesn't need to land now (but can, as it still sets the old keys)12:43
seb128Laney, I guess it wouldn't hurt to ping (boiko?) for a code review (or did you want somebody from desktop to review it)?12:44
Laneyi'll request a review12:44
seb128hum, it doesn't need to land ... what was needed to land in sync?12:44
seb128the schemas package and u-s-s?12:44
Laneyye12:45
Laneybecause of Breaks and Depends12:45
seb128ok, I'm adding that to my to-test-list12:45
Laneyty12:46
seb128thanks for the reviews on my mps btw ;-)12:46
Laneyno worries!12:46
LaneyI forgot how to do the bidirectional GSettings stuff properly :(12:46
seb128    GSettings {12:47
seb128        onChanged: {12:47
seb128...12:47
seb128?12:47
LaneyI think Binding { target: myCheckBox property: "checked" value: gsettings.myThing }12:48
larsuI don't think you need to do the binding thing...12:48
Laneywhy not?12:48
seb128Laney, http://bazaar.launchpad.net/~system-settings-touch/ubuntu-system-settings/trunk/revision/41112:48
Laneyhmm12:49
larsuLaney: I was under the impression you only need that when you can't specify the binding in the object definition (because the object was defined elsewhere, or in c++)12:50
larsuso CheckBox { checked: settings.myThing } should be enough12:50
larsuand then onChanged in the settings object for the other way around12:51
larsusadly :/12:51
Laneylarsu: It gets unbound chen you change it12:51
Laneywhen12:51
larsuwhen you change what? The value?12:51
Laneywhen you click on it12:51
larsuhuh... why?12:51
* larsu tries out12:51
Laneyit becomes like 'checked: true' and then toggling it externally in GSettings doesn't update it any more12:51
LaneyIIRC12:52
larsubah, qmlscene is not working12:53
* larsu hates the qtdeclarative packaging mess12:53
=== gatox is now known as gatox_bbl
larsuso ... `qmlscene` searches in /usr/lib/$TRIPLET/qt4/bin12:56
Laneyseb128: Ahh, I see12:59
Laneythat diff doesn't have enough context12:59
Laneybut that's an alright example12:59
=== gatox_bbl is now known as gatox
seb128Sweetshark, hey14:03
Sweet5harkseb128: ho14:04
seb128Sweetshark, how are you?14:04
mitya57larsu: Install qt5-default14:05
seb128Sweetshark, I saw your email, no need to ask for proposed blocks, you can do it yourself by tagging a bug (see https://lists.ubuntu.com/archives/ubuntu-devel-announce/2013-October/001068.html for the details)14:05
Sweet5harkseb128: pretty fine for being surrounded by four redhat guys in this room ;)14:05
seb128Sweet5hark, haha ;-)14:05
Sweet5harkseb128: we should use systemd, or so I heard14:06
seb128Sweet5hark, rrrrright ;-)14:06
larsumitya57: thanks :)14:06
Sweet5harkseb128: thanks, block-proposed done.14:09
seb128Sweet5hark, is that really a blocker issue? how is the debugging going?14:09
Sweet5harkseb128: Just checking. I assume the root cause is the (partial) use of gcj done by rene.14:11
seb128larsu, did you get any update from Mark on https://bugzilla.gnome.org/show_bug.cgi?id=692931? he attached a slightly modify patch, do you know what's next?14:25
ubot2`Gnome bug 692931 in Printing "The list of printers should be searchable/sortable" [Enhancement,Unconfirmed]14:25
larsuseb128: no... let me comment on the bug14:26
seb128larsu, danke14:32
seb128attente, hey15:02
kenvandinemdeslaur, thanks for that xchat-gnome revert... that scrolling problem was driving me nuts!15:03
mdeslaurkenvandine: yes!15:03
seb128kenvandine, hey! indeed that was annoying (that and the unity integration being buggy/unread messages not being cleaned leading to segfaults)15:04
kenvandinesegfaults? i hadn't seen that15:04
seb128for me the unread messages count would get out of sync15:05
seb128e.g it would stay on e.g 1 #ubuntu-desktop while I had nothing unread in xchat-gnome15:05
seb128selecting the indicator entry then would make x-g segfault15:05
attenteseb128, hey15:05
seb128attente, hello, how are you?15:05
attenteseb128, i'm well, and you?15:06
seb128attente, I'm looking at the spell checking ... do you know if they plan to not support using a spell checking language which is different from the active layout?15:06
seb128attente, I'm good, thanks15:06
attenteseb128, i'm not sure, but the more i think about it, i'm not sure the design makes sense15:08
attenteseb128, to be able to enable multiple spell checking languages at a time i mean15:08
seb128attente, why not?15:09
seb128attente, I've always french and english enabled on my desktop since I use both every day15:09
attenteoh. sorry, i didn't think of that15:11
seb128;-)15:11
attentelet's ping bfiller15:11
seb128attente, ok, I'm fine if they/you change the feature, but in that case the design should be updated15:12
attenteseb128, ok, but you're right, it shouldn't be removed15:12
seb128attente, yeah, let's just keep the UI there and not displayed, until we have a working backend15:13
attenteseb128, sure15:13
seb128attente, thanks15:14
seb128attente, hum, "ASSERT failure in QList<T>::operator[]: "index out of range", file /usr/include/qt5/QtCore/qlist.h, line 462"15:15
seb128attente, that's on my desktop, I guess it's not handling well the case there is no osk installed/running?15:16
attenteseb128, hmm..15:18
Laneyzzzzzzpandazzzzzzz15:19
didrocksseb128: hey! (in meetings), just wanted to know if there is something I can demonstrate as a MP for the CI bootcamp?15:23
didrocksseb128: I'll push the button to show people how it works, but if you can file a request with a line, that would be sweet!15:24
seb128didrocks, sure15:25
didrocksseb128: thanks, sorry for the late notice :)15:25
seb128didrocks, no worry, I wanted to do a landing today anyway15:25
didrocksgreat!15:25
seb128Laney, did you want to ack https://code.launchpad.net/~seb128/ubuntu-system-settings/storage-use-ubuntushape/+merge/203301 ?15:26
Laneyok15:26
seb128Laney, so I can sneak it in this landing15:26
seb128Laney, thanks15:26
seb128didrocks, CI train table updated15:27
seb128attente, I also get those warnings "g_settings_get: the format string may not contain '&' (key 'active-language' from schema 'com.canonical.keyboard.maliit'). This call will probably stop working with a future version of glib.15:28
seb128"15:28
seb128(that's a desrt thing)15:28
didrocksseb128: excellent, thanks!15:28
seb128didrocks, yw ;-)15:28
attenteah, thanks seb12815:29
seb128didrocks, did you have a good trip btw?15:29
didrocksseb128: yeah, uneventful, everything was fine, thanks!15:29
seb128great ;-)15:29
Laneydid you get the train?15:29
Laneythe TGVs are quite nice15:30
didrocksyeah, TGV until Disney15:32
didrocksand then Eurostar15:32
* Laney loves the TGV jingle15:33
Laneysncf15:33
larsuseb128: those are very easy to fix (I put that warning in recently)15:43
larsuoh, attente seems to be on it already...15:43
seb128larsu, I'm pondering patching the warning out before release, it's creating log noise/spam for issues than are not real ones (at least not for this cycle)15:46
seb128larsu, but yeah, we can as well fix easy stuff on the way meanwhile ;-)15:47
LaneyI'd rather gather the 'spammy' issues and fix them15:48
larsuseb128: spam as in lots of messages from single apps? If so, can I convince you to take a patch that only shows the warning once per running app?15:48
Laneyif you turn off the warning then break the functionality it comes out of the blue15:48
Laneyit effectively removes the deprecation period15:48
seb128Laney, well, as said "before release", the same way we turn apport launchpad reporting off the week before release15:49
seb128larsu, no, rather I found like half a dozen apps throwing those warnings on my system and I'm using a very small portion of the archive15:49
larsubut people developing their apps on a stable ubuntu won't get the warning, then15:49
larsuand I really think they should. That's why I put it in in the first place...15:50
seb128choices are15:50
seb128- spend time fixing non user visible issues to not have the log spam, in detriment of spending that time on user visible issues15:51
seb128- have some log spamming, with the IO/wakeup issues it creates15:51
seb128- turn off the warnings15:51
larsuseb128: https://bugzilla.gnome.org/show_bug.cgi?id=692931 is committed to master. Thanks for the ping15:51
ubot2`Gnome bug 692931 in Printing "The list of printers should be searchable/sortable" [Enhancement,Resolved: fixed]15:51
seb128larsu, thanks \o/15:51
seb128well, anyway, glib warnings are not a big issues, it's more annoying than anything else15:52
larsuI'm all for option (2). How many apps are we talking about?15:53
seb128I've no idea, and I'm not sure if we can archive grep for those?15:53
seb128could be 10 like it could be 10015:53
seb128glib has some thousand rdpends15:53
larsuhm, 113 occurences in ~/.cache/upstart for me...15:54
larsuseb128: grep "g_settings_get.*&" should get the vast majority of cases15:55
seb128larsu, http://codesearch.debian.net/search?q=g_settings_get.*%2615:56
larsuhm, okay. Maybe I was a bit quick there :/15:57
larsuthe '&' must be between double quotes15:57
larsuhttp://codesearch.debian.net/search?q=g_settings_get.*%22.*%26.*%2215:57
LaneyBAD GNOME-TERMINAL15:58
larsuya...15:58
Laneythat's all I have if I grep my logs15:58
seb128seems it's the main offender indeed15:59
seb128u-s-s has one issue but attente is on it15:59
larsuseb128: has been fixed in g-t: https://git.gnome.org/browse/gnome-terminal/commit/?id=d8d71e0c1e7a8fb723becaa270334171e6730fc216:02
seb128Laney, ^ want to have a look at backporting that?16:02
Laneycould do in a bit16:03
larsuLaney, seb128: it's also on 3-10: https://git.gnome.org/browse/gnome-terminal/commit/?h=gnome-3-10&id=ac62dbbda2630d1d963d399317d59cf7b78dc7f216:03
seb128larsu, danke16:04
jcastrohey kenvandine16:05
jcastroI am seeing this in trusty: https://bugs.launchpad.net/ubuntu/+source/indicator-datetime/+bug/79345016:06
ubot2`Launchpad bug 793450 in indicator-datetime (Ubuntu) "Calendar doesn't show today's date until opened a second time today" [Medium,Confirmed]16:06
jcastroshould I reopen or make a new one or ... ?16:06
kenvandinejcastro, new bug16:08
jcastrokenvandine, can you help me put it on whatever radar you guys use? :)16:09
kenvandinejcastro, i don't follow the indicators very closely anymore, seb128 ^^16:09
didrocksseb128: mind if I remove the 3rd MP?16:10
seb128didrocks, :-(16:11
didrocksthere is an unicode error for me, will fix it16:11
seb128didrocks, unicode error?16:11
didrocksyeah in the command message16:11
didrockscommit*16:11
seb128didrocks, you mean the mp triggers a bug?16:11
seb128didrocks, or did I screw up something?16:11
didrocksthere is a bug16:11
seb128didrocks, but sure, drop it, we can do another round later16:11
didrocksI need to fix it :)16:11
didrocksok ;)16:11
seb128ok16:11
didrocksthanks!16:11
seb128no worry16:11
seb128yw ;-)16:12
seb128jcastro, talk to charles_16:12
jcastrocharles_, hi!16:12
seb128but I think it's on the LTS backlog16:12
charles_hi jcastro16:12
charles_oo, I picked up an underscore over the weekend16:12
=== charles_ is now known as charles
jcastroyeah so I think I have this: https://bugs.launchpad.net/ubuntu/+source/indicator-datetime/+bug/79345016:12
ubot2`Launchpad bug 793450 in indicator-datetime (Ubuntu) "Calendar doesn't show today's date until opened a second time today" [Medium,Confirmed]16:12
jcastrobut in general, when I click on the datetime indicator, the highlight over the day is never correct16:12
jcastroat first I thought, ok whatever, minor bug, but this week I scheduled something incorrectly due to the widget so I was hoping to put it on someone's radar16:13
ali1234yeah the calendar always has whatever day i booted selected16:13
ali1234it's always done that since it was created afaik16:14
jcastroand sometimes it's like the date from 2 weeks ago16:14
ali1234well i reboot about once every two weeks, so yeah16:14
ali1234currently it says 17 jan here, and i have 9 days uptime16:14
jcastroeventually it gets the right day, but then it comes back wrong after a boot or suspend.16:14
seb128jcastro, I'm going to make sure we fix it before the LTS ;-)16:15
ali1234if i select a different day it always remembers that day and keeps it highlighted16:15
jcastroseb128, is there anything you need from me? Still need a new bug or ?16:15
jcastroseb128, any wart/bug is acceptable in the calendar _except_ the wrong date. :)16:16
Laneythe text at the top is right :P16:17
ali1234yes, it is. just the highlighted day is wrong16:17
jcastroyeah16:17
charlesjcastro, what's going on there is that the calendar doesn't know to snap to today's date when the menu is popped down16:17
jcastrobut the highlight is orange on the day, it's impossible to miss.16:17
ali1234why does it even let you highlight a day?16:17
charleswhen we decoupled from GTK+ we lost the ability to know when the popdown is happening, so we need to replace that with something else16:18
seb128jcastro, no need of new bugs/info no, it's a well known/understood issues, we discussed it a few time, it just needs somebody to sit down and fix it16:18
jcastroali1234, yeah I don't get that either, why it allows me to click on any day and highlight it.16:18
jcastroseb128, awesome, thanks!16:18
ali1234also why does it flicker weirdly when i click on a day?16:19
seb128ali1234, oh, yeah, it shifts on the left and right again it seems16:20
seb128let's hope charles has some bugfixing time before the LTS ;-)16:20
ali1234tried to screen record the flicker but it happens too fast16:21
seb128ali1234, it's more visible if you display the week numbers on the left16:22
seb128(the setting is not picked dynamically btw)16:23
ali1234is that in the control panel? because i can't use that16:23
charlesseb128: this particular bug isn't so much a datetime bug as it is u-p-s or ido16:24
charlesseb128: datetime is just where it becomes visible16:24
seb128ali1234, yes (and gsettings)16:24
seb128charles, the menu is reconstructed when the selection change?16:25
ali1234looks like it. the whole menu disappears for like 1 frame16:25
charlesindirectly, yes. selection change re-queries EDS for an updated appointment list starting from the new selection point16:25
charlesthat's done async16:25
charleswhen that query comes back, we rebuild the appointments section of the menu16:26
charlesseb128, (to be pedantic: ...actually in the BMRIROT the appointment section doesn't get rebuilt unless the new set of appointments actually differs from the old.)16:27
seb128charles, nice, I already like the BMRIROT ;-)16:27
seb128charles, do you want people to test that branch or do you prefer to work a bit more on it before that happens?16:28
charlesseb128: it should be ready for you to poke around by  my EOD16:30
seb128charles, great, I'm going to give it a try tomorrow then16:30
charlesseb128: right now there are merge conflicts from the unity panel changes that landed last week and I'm getting everything sync'ed16:30
charlesseb128: after that...yes, testing would be much welcomed16:30
seb128k16:30
seb128added to my todolist16:31
charles\o/16:31
seb128;-)16:31
charlesI should be careful what I wish for ;-)16:31
ali1234what is u-p-s btw?16:34
ali1234oh wait, unity-panel-service16:34
ali1234i'm not actually using that, but if it requires changes to the xfce equivalent we'll need to make them16:35
chrisccoulsonqengho, are the builds in https://launchpad.net/~canonical-chromium-builds/+archive/stage ready to test and go out?16:49
qenghochrisccoulson: test, yes.16:49
chrisccoulsonqengho, cool, thanks16:49
qenghochrisccoulson: I don't have "go" from #webapps yet.16:49
chrisccoulsonheh16:49
qenghoHaving decent ARM builders is *so so so* nice.16:50
chrisccoulsonqengho, who gives you the go from webapps btw?16:50
charlesjcastro, ali1234, seb128: wrt the calendar date bug, https://bugs.launchpad.net/unity/+bug/793450/comments/3116:50
ubot2`Launchpad bug 793450 in Indicator Date and Time "Calendar doesn't show today's date until opened a second time today" [Medium,Triaged]16:50
seb128charles, thanks16:52
seb128chrisccoulson, hey, are you going to look at firefox/arm|ppc|ppc64 in trusty or do you need help there?16:53
* chrisccoulson hides16:54
seb128lol16:54
chrisccoulsonseb128, for arm64, a patch got uploaded whilst i was away, but it got dropped again because it was never checked in to bzr16:54
qenghochrisccoulson: alex-a usually.16:54
chrisccoulsonseb128, but the patch is absolutely huge, has no owner, no upstream bug and hasn't had a review from anybody in any case16:55
chrisccoulsonit needs somebody committed to maintaining a nearly 100kB patch, and driving it upstream :)16:56
seb128chrisccoulson, well, we need to get the trusty version updated one way or another16:56
chrisccoulsonfor ppc / ppc64, i've no idea16:56
chrisccoulsonwe should just disable it on those architectures. even if it builds, it'll be virtually unusable without a jit16:56
seb128chrisccoulson, it worked on other series for ppc, is that a toolchain issue? can we build with old gcc?16:56
seb128or that16:57
chrisccoulsoni've not looked at the ppc failure16:57
seb128chrisccoulson, do you think you can do that in the next weeks or do you need help?16:57
chrisccoulsonthe same applies to arm64 as well really - we might get it to build but with no arm64 assembler in the jit it's going to be completely unusable16:57
chrisccoulsoni don't think i'll have much time in the next couple of weeks, and i'm sprinting next week too16:58
seb128chrisccoulson, ok, thanks for the summary, I'm going to see if I can find anyone to help there16:59
chrisccoulsonthanks16:59
seb128night17:41
=== gatox_ultra is now known as gatox
=== m_conley_away is now known as m_conley
dpmoh, Laney, forgot to say earlier on, happy birthday! :)17:53
Laneythanks dpm!17:55
=== alan_g is now known as alan_g|EOD
=== m_conley is now known as m_conley_away
=== mjohnson15_2 is now known as mjohnson15
=== mjohnson15_2 is now known as mjohnson15
=== balloons is now known as Guest72010
=== rylinaux_ is now known as rylinaux

Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!