/srv/irclogs.ubuntu.com/2017/03/08/#ubuntu-release.txt

=== santa is now known as Guest43778
=== JerryKao is now known as JerryKao_QTR
-queuebot:#ubuntu-release- New sync: gnome-dvb-daemon (zesty-proposed/primary) [1:0.2.91~git20170110-2]05:37
-queuebot:#ubuntu-release- New binary: graywolf [amd64] (zesty-proposed/universe) [0.1.4+20170307gite1bf319-1] (no packageset)06:27
-queuebot:#ubuntu-release- New binary: graywolf [ppc64el] (zesty-proposed/universe) [0.1.4+20170307gite1bf319-1] (no packageset)06:27
-queuebot:#ubuntu-release- New binary: graywolf [i386] (zesty-proposed/universe) [0.1.4+20170307gite1bf319-1] (no packageset)06:27
-queuebot:#ubuntu-release- New binary: graywolf [s390x] (zesty-proposed/universe) [0.1.4+20170307gite1bf319-1] (no packageset)06:27
-queuebot:#ubuntu-release- New binary: graywolf [arm64] (zesty-proposed/universe) [0.1.4+20170307gite1bf319-1] (no packageset)06:28
-queuebot:#ubuntu-release- New binary: graywolf [powerpc] (zesty-proposed/universe) [0.1.4+20170307gite1bf319-1] (no packageset)06:28
-queuebot:#ubuntu-release- New binary: graywolf [armhf] (zesty-proposed/universe) [0.1.4+20170307gite1bf319-1] (no packageset)06:28
-queuebot:#ubuntu-release- Unapproved: accepted cgroup-lite [source] (precise-proposed) [1.1.6]07:06
-queuebot:#ubuntu-release- Unapproved: accepted cgroup-lite [source] (xenial-proposed) [1.11ubuntu0.16.04.1]07:07
-queuebot:#ubuntu-release- Unapproved: fwupdate (zesty-proposed/main) [8-3 => 9-1] (core)07:41
-queuebot:#ubuntu-release- Unapproved: fwupdate (zesty-proposed/main) [8-3 => 9-1] (core)07:41
-queuebot:#ubuntu-release- Unapproved: fwupdate (zesty-proposed/main) [8-3 => 9-1] (core)07:41
-queuebot:#ubuntu-release- Unapproved: fwupdate (zesty-proposed/main) [8-3 => 9-1] (core)07:42
-queuebot:#ubuntu-release- Unapproved: signon-ui (xenial-proposed/main) [0.17+16.04.20151125-0ubuntu1 => 0.17+16.04.20170116-0ubuntu1] (kubuntu, ubuntu-desktop) (sync)09:25
ginggswould an archive admin please take a look at removals in LP: #1653238 and LP: #1636259 ?10:19
ubot5Launchpad bug 1653238 in pbseqlib (Ubuntu) "Please remove binaries no longer built from source" [Undecided,New] https://launchpad.net/bugs/165323810:19
ubot5Launchpad bug 1636259 in fftw3-mpi (Ubuntu) "Please remove fftw3-mpi" [Undecided,New] https://launchpad.net/bugs/163625910:19
apwginggs, normally those show up and get removed automatically10:59
apw(NBS binaries)10:59
ginggsapw: even if it is only on certain architectures?11:08
apwginggs, oh that likely nt11:09
-queuebot:#ubuntu-release- New: accepted graywolf [amd64] (zesty-proposed) [0.1.4+20170307gite1bf319-1]11:54
-queuebot:#ubuntu-release- New: accepted graywolf [armhf] (zesty-proposed) [0.1.4+20170307gite1bf319-1]11:54
-queuebot:#ubuntu-release- New: accepted graywolf [powerpc] (zesty-proposed) [0.1.4+20170307gite1bf319-1]11:54
-queuebot:#ubuntu-release- New: accepted graywolf [s390x] (zesty-proposed) [0.1.4+20170307gite1bf319-1]11:54
-queuebot:#ubuntu-release- New: accepted pagein [arm64] (zesty-proposed) [0.00.03-1]11:54
-queuebot:#ubuntu-release- New: accepted pagein [i386] (zesty-proposed) [0.00.03-1]11:54
-queuebot:#ubuntu-release- New: accepted pagein [ppc64el] (zesty-proposed) [0.00.03-1]11:54
-queuebot:#ubuntu-release- New: accepted graywolf [arm64] (zesty-proposed) [0.1.4+20170307gite1bf319-1]11:54
-queuebot:#ubuntu-release- New: accepted graywolf [ppc64el] (zesty-proposed) [0.1.4+20170307gite1bf319-1]11:54
-queuebot:#ubuntu-release- New: accepted pagein [armhf] (zesty-proposed) [0.00.03-1]11:54
-queuebot:#ubuntu-release- New: accepted pagein [s390x] (zesty-proposed) [0.00.03-1]11:54
-queuebot:#ubuntu-release- New: accepted graywolf [i386] (zesty-proposed) [0.1.4+20170307gite1bf319-1]11:54
-queuebot:#ubuntu-release- New: accepted pagein [powerpc] (zesty-proposed) [0.00.03-1]11:54
-queuebot:#ubuntu-release- New: accepted pagein [amd64] (zesty-proposed) [0.00.03-1]11:54
tjaaltoncould and archive-admin remove resteasy from zesty, it's bug 1662654 again12:57
ubot5bug 1662654 in resteasy (Ubuntu) "Please remove tomcat 8.5 from zesty-proposed" [Undecided,New] https://launchpad.net/bugs/166265412:57
tjaalton*an12:57
tjaaltonand zesty-proposed of course12:57
-queuebot:#ubuntu-release- Unapproved: tftp-hpa (trusty-proposed/main) [5.2-7ubuntu3 => 5.2-7ubuntu3.1] (desktop-core, ubuntu-server)13:01
-queuebot:#ubuntu-release- Unapproved: tftp-hpa (yakkety-proposed/main) [5.2+20150808-1ubuntu1 => 5.2+20150808-1ubuntu1.16.10.1] (ubuntu-desktop, ubuntu-server)13:01
-queuebot:#ubuntu-release- Unapproved: tftp-hpa (xenial-proposed/main) [5.2+20150808-1ubuntu1 => 5.2+20150808-1ubuntu1.16.04.1] (ubuntu-desktop, ubuntu-server)13:01
ginggsthanks apw! pbdagcon,pbalign,blasr,pbseqlib all migrated now13:17
-queuebot:#ubuntu-release- Unapproved: accepted software-properties [source] (xenial-proposed) [0.96.20.6]13:22
-queuebot:#ubuntu-release- Unapproved: accepted software-properties [source] (yakkety-proposed) [0.96.24.7.1]13:24
jbichabdmurray: can we ignore that bug 1660063 might not be completely fixed?13:25
ubot5bug 1660063 in chrome-gnome-shell (Ubuntu Xenial) "chrome-gnome-shell crashed with SIGSEGV in ffi_call_unix64()" [Medium,In progress] https://launchpad.net/bugs/166006313:25
-queuebot:#ubuntu-release- Unapproved: accepted unattended-upgrades [source] (xenial-proposed) [0.90ubuntu0.4]13:33
-queuebot:#ubuntu-release- Unapproved: accepted unattended-upgrades [source] (yakkety-proposed) [0.92ubuntu1.3]13:34
-queuebot:#ubuntu-release- Unapproved: accepted ktp-text-ui [source] (xenial-proposed) [4:15.12.3-0ubuntu2]13:36
-queuebot:#ubuntu-release- Unapproved: accepted apt [source] (xenial-proposed) [1.2.20]13:44
-queuebot:#ubuntu-release- Unapproved: accepted wget [source] (xenial-proposed) [1.17.1-1ubuntu1.2]13:52
-queuebot:#ubuntu-release- Unapproved: accepted simple-image-reducer [source] (xenial-proposed) [1.0.2-3ubuntu0.16.04.1]13:56
tjaaltonarmhf binaries of openmw should be removed, the new version doesn't build and old one is blocking mesa14:01
apwtjaalton, "doesn't build" do we know why ?14:15
tjaaltonapw: it doesn't build on debian either and doesn't seem upstream is too busy fixing it14:16
apwtjaalton, i would say file a removal request for that, so we have all the details in one place14:22
tjaaltonokay14:26
-queuebot:#ubuntu-release- Unapproved: snapd (trusty-proposed/universe) [2.23~14.04 => 2.23.1~14.04] (no packageset)14:30
-queuebot:#ubuntu-release- Unapproved: snapd (xenial-proposed/main) [2.23 => 2.23.1] (desktop-core, ubuntu-server)14:30
-queuebot:#ubuntu-release- Unapproved: snapd (yakkety-proposed/main) [2.23+16.10 => 2.23.1+16.10] (desktop-core, ubuntu-server)14:31
-queuebot:#ubuntu-release- New source: ukui-menu (zesty-proposed/primary) [1.0.0-0ubuntu1]14:35
tjaaltonapw: bug 167112914:44
ubot5bug 1671129 in openmw (Ubuntu) "remove armhf binaries for openmw to unblock mesa" [Undecided,New] https://launchpad.net/bugs/167112914:44
* apw will review those snapd's once they pass testing in yakkety14:47
jbichayou can remove ukui-session-manager/zesty 1.0.0, we are reuploading as a regular (non-native) package14:53
jbichaand the older gnome-games-app/zesty14:56
jbichafrom the new queue14:56
-queuebot:#ubuntu-release- New source: ukui-session-manager (zesty-proposed/primary) [1.0.0-0ubuntu1]14:57
cyphermoxhi, could someone from the release team please review my FFe? https://bugs.launchpad.net/ubuntu/+source/nplan/+bug/167049516:46
ubot5Ubuntu bug 1670495 in nplan (Ubuntu) "[FFe] netplan with forward-definition support" [Undecided,New]16:46
bdmurrayjbicha: looking17:26
bdmurrayslangasek: Could you fully phase chrome-gnome-shell for yakkety?17:34
bdmurrayrbasak: I believe the SRU team discussed in Sevilla using Incomplete more as a way of quickly conveying information about the status of an SRU e.g. setting the systemd task to Incomplete in bug 1649931.17:37
ubot5bug 1649931 in systemd (Ubuntu Xenial) "systemd-networkd needs to ensure DNS is up before network-online.target" [Medium,Incomplete] https://launchpad.net/bugs/164993117:37
bdmurrayrbasak: This way I don't have to scroll all the way through the report to read you comment about the testing being incomplete.17:38
bdmurrayAnd also using it for items in the -proposed queue that might be missing a test case or whatever.17:38
rbasakbdmurray: sorry. I must have forgotten that. I had noticed you were using it. I'm happy to do that every time I make a comment if that's the consensus?17:42
rbasak(if the comment is blocker I mean)17:42
bdmurrayrbasak: I didn't mean to come across as saying you were not doing something. Its possible you weren't in the room at the time! I think we should make it the consensus. ;-)17:43
bdmurrayslangasek: I think you are the one who said we should use Incomplete more...17:43
rbasakI don't like overloading the status like that, but pragmatically if that communicates it better then I'm fine with it.17:45
jbichabdmurray: the chrome-gnome-shell update is still in yakkety-proposed17:46
rbasakSeparately, I have been planning to propose a script auto-comment when there are autopkgtest failures, asking the SRU driver to check and tag the bug with autopkgtest-false-positive or something like that, and then having pending-sru not treat those as green unless the tag exists.17:47
rbasakSimilarly, perhaps we could have an sru-blocked tag instead of using the Incomplete status? Only a suggestion; I'm happy to follow the consensus.17:47
jbichabdmurray: it's blocked because you removed the verification-done tag17:48
bdmurrayjbicha: While that's true it won't matter if an AA fully phases it.17:50
jbichabdmurray: I think we're miscommunicating; the SRU team has not accepted it from -proposed yet because it's not verification-done17:51
bdmurrayrbasak: I believe robru is close to having autopkgtest results emailed to uploaders so two notifications might be a lot. Although, I guess having it on the public record (the bug) would be good.17:51
robrubdmurray: I'm close to having stuck package notifications emailed out. autopkgtest results not included.17:52
bdmurrayjbicha: oh, i can read now. 8.2ubuntu4 not 8.2ubuntu317:53
robrubdmurray: also the email gets sent after the package is stuck for a day17:53
jbichabdmurray: thanks18:08
bdmurrayjbicha: yep, sorry for being slow!18:09
jbicharbasak: could you look into accepting chrome-gnome-shell and ubuntu-gnome-meta for trusty,xenial,yakkety even though it's not aged 7 days?18:09
jbichathe SRUs were slowed down because of the trouble getting new packages into -updates, but Firefox 52 was released yesterday18:10
jbichato clarify, chrome-gnome-shell have been accepted into xenial and yakkety but trusty is still needed and u-g-meta for all 3 releases18:19
rbasakjbicha: I'm finished for the day now, sorry. Ping me tomorrow if nobody else manages to look please?18:38
* rbasak is half asleep already :-/18:38
jbichaok thanks18:40
zulcan someone reject horizon 9.1.1 from the queue as well please19:12
slangasekbdmurray: chrome-gnome-shell phasing done19:17
apwzul, from where ?19:18
zulapw: sorry xenial-proposed19:19
slangasekbdmurray, rbasak: I don't recall if I proposed incomplete for incomplete testing, but that seems not-unreasonable to me19:20
bdmurrayslangasek: ah, my notes do lean more towards incomplete SRU information not verficiation19:23
-queuebot:#ubuntu-release- Unapproved: rejected horizon [source] (xenial-proposed) [2:9.1.1-0ubuntu1]19:25
apwzul, ^19:26
zulthanks19:26
Laneyrobru: Hey. I'll do a final pass over your MP tomorrow. Any chance you could provide a commit in another branch or something to log what it would do (who it would email for which excuse) instead of emailing so that I can do a dry run?20:03
robruLaney: yeah i made this branch which prints out packages/versions/email addresses instead of sending anything.: https://code.launchpad.net/~robru/britney/+git/britney2-ubuntu/+ref/email-dry-run20:04
Laneyconvenient20:05
Laneydoes that end up in the normal log?20:05
robruLaney: well, I *assume* stdout is captured in the normal log...20:13
robruLaney: confirmed, self.log() is just a wrapper around print() anyway, so yeah, it'll be the same log20:14
Laneyrobru: ok then, thanks20:18
robruLaney: so what's the plan? you'll just copy that commit to snakefruit and we can look at the log? ;-)20:20
Laneysomething like that20:21
-queuebot:#ubuntu-release- New source: ukui-screensaver (zesty-proposed/primary) [1.0.0-0ubuntu1]20:56
robruslangasek: gaughen: Laney: Ok I tried it locally and came up with this list of people to email: http://paste.ubuntu.com/24141582/ This is about 1/10 of the emails I was expecting, not clear to me if my attempt at setting up the britney env locally has failed, or if 90% of the stuff stuck in proposed is really auto-syncs that would not be emailed.21:05
gaughenlooks like slangasek will get a lot of email21:07
robruhehe21:07
robruI'm running it again with more verbose logging and it does look like there's a lot of stuff that qualifies for a mail but has nobody to mail (so, auto syncs)21:08
slangasekrobru: why do I get emailed for orthanc-webviewer?  Did I do something manual there?21:08
slangasekpossibly a manual sync to override the autosync behavior of not reintroducing removed packages21:09
robruslangasek: yeah, lp api is blaming you, likely a manual sync.21:09
robruslangasek: gaughen: http://paste.ubuntu.com/24141654/ this is more in line with my expectations21:16
robruslangasek: so should I send that email and you can roll it out? ;-)21:18
slangasekrobru: "more in line"> what changed?21:19
robruslangasek: it printed the stuck packages that won't be emailed about, so I can see there's more than 37 stuck packages.21:20
slangasekrobru: and I understood that Laney was on top of this for deployment21:20
robruslangasek: going by excuses, I was expecting 370 emails, so when I saw only 37 I was surprised, thought maybe I was missing a chunk of packages somehow. but there's just a bunch that don't get emailed.21:20
slangasekok - so you didn't change anything about who would get mailed, just showing more stuck packages21:21
robruyeah21:21
-queuebot:#ubuntu-release- New source: ukui-control-center (zesty-proposed/primary) [1.0.0-0ubuntu1]21:45
Laneyrobru: that doesn't seem to have a "Stuck" line for every excuse21:55
robruLaney: it should be only if daysold >= 121:56
Laneye.g nautilus, gobject-introspection, openstack-doc-tools, systemd not mentioned21:58
robruhmmmm21:59
bdmurrayslangasek: Do you think that bug 1654008 which has tens of thousands of incidences is worth SRU'ing given that something is wrong if int(time.time()) is greater than 2147483647?22:03
ubot5bug 1654008 in update-manager (Ubuntu Zesty) "/usr/bin/update-manager:OverflowError:/usr/bin/update-manager@117" [High,Triaged] https://launchpad.net/bugs/165400822:03
bdmurrayslangasek: It does prevent them from using update-manager, but we'd also need to SRU update-notifier which uses the launch-time key.22:04
robruLaney: ok I'm running it again with maximum raw data dump just so I can inspect what's going on...22:04
Laneynod22:05
slangasekbdmurray: it would fix it so that anyone whose dconf value isn't /yet/ broken will be saved future(heh) pain, right?22:06
bdmurrayslangasek: afaict can tell the dconf value can't be broken because it doesn't fit in the range of allowed values. the test case is faketime to the future and update-manager crashes trying to write the value.22:13
robruLaney: ok so what I'm seeing is that nautilus has excuse.is_valid = True, which doesn't make a lot of sense, but that's why it's not in the list of things to be emailed.22:13
bdmurrayslangasek: but it'll fix anybody whose clock is wrong22:13
robrusame with g-i22:13
robruLaney: same with all four packages that you mentioned.22:14
slangasekbdmurray: ok; that seems worth an SRU to me then22:14
bdmurrayalrighty22:15
robruLaney: slangasek: seems that maybe excuse.is_valid isn't especially trustworthy? I can change the algo to ignore that value and go just by daysold if you think that makes sense.22:15
Laneyrobru: I'm not sure - if slangasek doesn't know then you could ask nthykier for advice maybe22:18
LaneyMight be that it's not being set to false in some circumstances, and that could possibly be a bug22:18
slangasekrobru: what are you looking for out of excuse.is_valid?22:18
robruLaney: it's possible those ones are being rejected by britney after my policy is inspecting them22:18
robruslangasek: the code as it exists does not send mails when excuse.is_valid is True, however Laney pointed out four packages that are stuck for over a day, excuses says "Not considered", but they have excuse.is_valid = True at the time my policy runs.22:19
slangasekrobru: "is_valid" means that it is a candidate according to update_excuses, it does /not/ mean that it will migrate22:20
slangasekrobru: so you should not key on excuse.is_valid22:20
robruslangasek: ok, will fix, thanks22:20
slangasekrobru: great :)22:20
LaneyHmm?22:20
LaneyI don't understand that statement22:21
slangasekLaney: "is_valid" means "valid candidate"; but things can be stuck because they increase uninstallibility - i.e. anything that needs update_output.txt to debug22:21
robruLaney: which22:21
LaneyThe policy is supposed to email for things that are not candidates on excuses isn't it?22:21
-queuebot:#ubuntu-release- New source: ukui-desktop-environment (zesty-proposed/primary) [1.0.0]22:21
LaneyOr you want to email for transitions too?22:22
slangasekLaney: AIUI we want to email for any package that is wedged in -proposed, including those that are wedged because of other packages22:22
Laneymmkay22:22
slangasekperhaps there should be different aging times for the two cases?22:22
robruslangasek: britney gives daysold as an int unfortunately, so unless your idea is 1 day and 2 days...22:23
slangasekrobru: I don't understand22:23
robruslangasek: I'm not sure what you mean by different aging times, but the grantularity I'm working with is integer days.22:24
LaneyHe's saying that something can be 'valid' but still blocked, and that maybe we might want to have a different daysold threshold in that case22:25
slangasekwhat Laney said22:25
slangasekdays are a unit of time22:25
robruyeah. So I'm saying that would be 1 or 2, but I'm not able to do 1.5 or 0.5.22:25
slangasekyes, that's fine22:26
LaneySeems like a good idea to me22:26
robruslangasek: ok so what are you saying then? 1 day if is_valid == False, 2 days if is_valid == True?22:26
LaneyBut that puts you back in the position that is_valid is (maybe) wrongly False for some things22:26
robrubut at least then it's just 2 days until you get your email instead of never getting an email22:27
slangasekI am not specifying a particular number of days here22:27
-queuebot:#ubuntu-release- New sync: genwqe-user (zesty-proposed/primary) [4.0.18-2]22:28
slangasekI am saying that if the package has is_valid == True, we might want to wait "longer" before sending mail, but not specifying how long that should be22:28
robruslangasek: ok that's fine if you want that, we should figure out what that number is so I can finish this.22:28
LaneyFor systemd it should be is_valid = False because it's rejected by the autopkgtest policy, and your one runs after that22:28
slangasekLaney: do you have an opinion what the number should be?22:28
LaneyI think that's worth debugging22:28
slangasekright22:28
Laneyslangasek: Umm, not a hard one - probably something like 5?22:29
LaneyIt's hard to generalise for all transitions22:29
slangasekLaney: that was the number I was thinking of22:29
LaneyUsually a "few"22:29
slangasek;)22:29
slangasekrobru: 522:29
robruok22:29
robruI'm just generating the report for what emails would be sent when ignoring is_valid. that information will still be useful, once it finishes I'll make it use a dynamic daysold cutoff.22:30
robruslangasek: Laney: http://paste.ubuntu.com/24142092/ ok, there they all are: 142 emails and 400 stuck22:41
jbicharobru: gnome-software 3.22.6-0ubuntu1 isn't stuck22:44
robrujbicha: did it just migrate? I have stale indexes I'm working with locally.22:45
jbichayes it just migrated but it also was only uploaded a few hours ago22:45
robrubut but22:46
robrujbicha: britney seems to think daysold > 122:46
robru>= 1 I mean22:46
robrujbicha: I don't know what to say about that, I only inspect excuse.daysold, I didn't change the way britney calculates it.22:48
-queuebot:#ubuntu-release- Unapproved: accepted nagios-plugins-contrib [source] (yakkety-proposed) [16.20151226ubuntu0.16.10.1]22:49
robruslangasek: Laney: ok I changed it to use a cutoff of 5 days when is_valid == True, and 1 day for is_valid == False. Merge pls?22:50
jbichaif it's going to email me about gnome-software, maybe you should bump the day from 1 to 222:50
-queuebot:#ubuntu-release- Unapproved: accepted nagios-plugins-contrib [source] (xenial-proposed) [16.20151226ubuntu0.16.04.1]22:51
robrujbicha: https://launchpad.net/ubuntu/+source/fwupdate-signed/1.13 this upload was 15 hours ago but still shows as 0 days old.22:52
-queuebot:#ubuntu-release- New binary: ubuntu-wallpapers [amd64] (zesty-proposed/main) [17.04.0-0ubuntu1] (ubuntu-desktop)22:53
robrujbicha: I think something goofy is going on with my local indexes, I don't think it's going to email people for things migrating in hours.22:53
jbichais it possible your index is from that weird time while gnome-software was migrating?22:53
robrujbicha: I just downloaded the index a few hours ago and have been running on it since, so yeah22:54
jbichaI'm thinking of the gap when https://launchpad.net/ubuntu/+source/gnome-software will not show the package in either zesty-proposed or zesty while it's being published22:55
robrujbicha: actually gnome-software shows here as is_valid = True which means it'd get the 5 day threshold anyway22:56
robrujbicha: no it was definitely in -proposed when I downloaded it otherwise it wouldn't be being inspected.22:57
robruslangasek: where should i send the announcement email to?23:16
slangasekrobru: it should go to ubuntu-devel-announce23:20
robruslangasek: is now a good time?23:21
slangasekrobru: no reason not to AFAICS; does the mail just tell people that they'll "soon" start receiving emails?23:21
slangasekit'll sit in the moderation queue anyway until a list admin looks at it23:22
robruYeah23:22
naccrobru: nice feature!23:52
robrunacc: thanks23:52
robruGet ready for the deluge!23:53
naccrobru: although the email address in your above paste for me is not my contact address23:53
naccrobru: it is one of my two linked addresses23:54
naccrobru: but not my preferred one for lp23:54
robrunacc: it's what's on your gpg key. I'm unfortunately unable to query lp for preferred addresses23:54
naccrobru: ah i see23:55
naccrobru: that's interesting -- do you need to be logged in for that?23:55
robrunacc: yeah it needs to be logged in, which snakefruit does have credentials for, but the code is python3 and snakefruit is very old, so it only has lplib for py2. So we're unfortunately stuck with anonymous lp access for now.23:56
naccrobru: totally understood, i've had to do sort of similar things for the importer at times (as to what is visible anonymously)23:57
robruAt some point snakefruit can be updated to xenial and then this code can be ported to py3 lplib23:57

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