| *** reldan has joined #openstack-freezer | 00:07 | |
| *** reldan_ has joined #openstack-freezer | 00:24 | |
| *** reldan has quit IRC | 00:24 | |
| *** reldan_ is now known as reldan | 00:24 | |
| *** memogarcia has quit IRC | 00:45 | |
| *** reldan has quit IRC | 01:04 | |
| *** openstack has joined #openstack-freezer | 05:57 | |
| *** szaher has quit IRC | 05:58 | |
| *** szaher has joined #openstack-freezer | 06:58 | |
| *** szaher has quit IRC | 07:02 | |
| *** openstack has quit IRC | 07:28 | |
| *** openstack has joined #openstack-freezer | 14:08 | |
| *** daemontool has quit IRC | 14:12 | |
| *** daemontool has joined #openstack-freezer | 14:14 | |
| *** reldan has quit IRC | 14:22 | |
| openstackgerrit | Fabrizio Vanni proposed openstack/freezer-api: fix db_init number of replicas https://review.openstack.org/250408 | 14:24 |
|---|---|---|
| *** vannif has joined #openstack-freezer | 14:24 | |
| daemontool | vannif, is this critical https://review.openstack.org/#/c/250408/1 ? | 14:30 |
| Slashme | Yes | 14:31 |
| Slashme | And we need to backport id | 14:32 |
| Slashme | s/id/it/ | 14:32 |
| daemontool | well... we need to do that fast then... | 14:33 |
| *** reldan has joined #openstack-freezer | 14:43 | |
| openstackgerrit | Merged openstack/freezer-api: fix db_init number of replicas https://review.openstack.org/250408 | 14:57 |
| Slashme | Backport change, please approve: https://review.openstack.org/250426 | 15:02 |
| openstackgerrit | Memo Garcia proposed openstack/freezer-web-ui: General dashboard enhancements https://review.openstack.org/249845 | 15:05 |
| openstackgerrit | Merged openstack/freezer-web-ui: General dashboard enhancements https://review.openstack.org/249845 | 15:17 |
| daemontool | all: after branching liberty, I'm going to add as voting the dsvm gate job on the 3 repos | 15:20 |
| *** daemontool has quit IRC | 15:31 | |
| *** samuelBartel has joined #openstack-freezer | 15:34 | |
| *** daemontool has joined #openstack-freezer | 15:39 | |
| *** jonaspf has quit IRC | 15:42 | |
| *** daemontool has quit IRC | 15:44 | |
| *** daemontool has joined #openstack-freezer | 15:48 | |
| Slashme | Backport change #1 for the freezer-web-ui : https://review.openstack.org/#/c/250460/ | 15:55 |
| *** jonaspf has joined #openstack-freezer | 15:58 | |
| Slashme | Please approve | 15:59 |
| daemontool | m3m0_, let's try to have 2 different persons to approve, unless there are catastrphic events | 16:00 |
| m3m0_ | guys are you ready for the meeting? | 16:01 |
| daemontool | yes | 16:01 |
| m3m0_ | #startmeeting openstack-freezer 26-11-2015 | 16:02 |
| openstack | Meeting started Thu Nov 26 16:02:05 2015 UTC and is due to finish in 60 minutes. The chair is m3m0_. Information about MeetBot at http://wiki.debian.org/MeetBot. | 16:02 |
| openstack | Useful Commands: #action #agreed #help #info #idea #link #topic #startvote. | 16:02 |
| openstack | The meeting name has been set to 'openstack_freezer_26_11_2015' | 16:02 |
| m3m0_ | All: meetings notes available in real time at: https://etherpad.openstack.org/p/freezer_meetings | 16:02 |
| m3m0_ | daemontool, you are first | 16:02 |
| daemontool | ok | 16:02 |
| daemontool | I've been doing mainly code reviews | 16:02 |
| daemontool | started to reintegrate | 16:03 |
| daemontool | the block based incremetnal | 16:03 |
| daemontool | to mster | 16:03 |
| *** ffresh has joined #openstack-freezer | 16:03 | |
| daemontool | I think we'll have it for mitaka, | 16:03 |
| daemontool | stretch goal for liberty | 16:03 |
| daemontool | I need to modify the mission statement for freezer in openstack/governance | 16:04 |
| daemontool | enable the dsvm gate jobs in the 3 repos as voting | 16:04 |
| daemontool | and as soon as we can | 16:04 |
| daemontool | do the branching for liberty | 16:04 |
| daemontool | there's a discussion going on on the openstack-dev ml | 16:04 |
| daemontool | for stable branching | 16:04 |
| m3m0_ | what about having the need for 2 cores to approve a commit? | 16:04 |
| daemontool | we might have to change | 16:04 |
| daemontool | our branches name | 16:05 |
| daemontool | m3m0_, yes, I think that make sense | 16:05 |
| daemontool | even more for stble branch | 16:05 |
| daemontool | 1 eng give +2 and one give +A | 16:05 |
| daemontool | allthogh we need to devine | 16:05 |
| daemontool | define | 16:05 |
| daemontool | how to manage urgent situation | 16:05 |
| daemontool | like hotfix, security patches | 16:05 |
| daemontool | and something that is really critical | 16:05 |
| daemontool | I think on that case one eng can give +2+A but at any rate | 16:06 |
| daemontool | the same person that submit the patchset, shouldn't approve his/her own code | 16:06 |
| m3m0_ | I agree on those special sitations but still we have several cores at the same time available | 16:06 |
| m3m0_ | oh yeah thats for sure | 16:06 |
| m3m0_ | not even in remote cases | 16:07 |
| daemontool | yep. Other than that, I need to create a asap the openstack/python-freezerclient | 16:07 |
| daemontool | repo and also the openstack/freezer-specs | 16:07 |
| daemontool | so we can put our specs ther like other projects are doing | 16:07 |
| m3m0_ | how long will it take? | 16:07 |
| daemontool | creating the repo is fast | 16:08 |
| daemontool | splitting the code I don't know | 16:08 |
| daemontool | but we need to do that for Mitaka for sure | 16:08 |
| daemontool | I also have the perception | 16:08 |
| daemontool | that we are not writing bp | 16:08 |
| daemontool | like before | 16:08 |
| daemontool | even for simple tasks | 16:09 |
| daemontool | that's important | 16:09 |
| daemontool | as if there's a new contributor | 16:09 |
| daemontool | that want to start with easy things | 16:09 |
| daemontool | now it's difficult | 16:09 |
| m3m0_ | you are correct there, should we start giving -1 if a bp is not present? | 16:09 |
| daemontool | yes | 16:09 |
| daemontool | jenkins should give -1 | 16:09 |
| daemontool | bp or bug | 16:09 |
| daemontool | also | 16:09 |
| daemontool | I think we need to add in the wiki | 16:10 |
| m3m0_ | #action every commit have to have bp or bug associated with it | 16:10 |
| daemontool | #agreed | 16:10 |
| daemontool | we need to add to the wiki | 16:10 |
| daemontool | probably who's mainly working on something | 16:10 |
| daemontool | that help us to organize etter | 16:10 |
| daemontool | better | 16:10 |
| m3m0_ | do you want to do that? | 16:10 |
| daemontool | as i.e. m3m0_ can write the bp for web ui | 16:10 |
| daemontool | vannif, can write bp for api | 16:11 |
| daemontool | and so on | 16:11 |
| daemontool | so if there's someone that looks for someone on some specific component | 16:11 |
| daemontool | we have the guy/girl right there | 16:11 |
| daemontool | just a thought, not sure it make sense or not | 16:11 |
| m3m0_ | it makes a lot of sense | 16:12 |
| daemontool | each one of us should be responsible/accountable for one component | 16:12 |
| m3m0_ | altough I'm not so sure if everyone has to have knowledge of all the components | 16:12 |
| daemontool | exactly | 16:12 |
| daemontool | that's also one of the reasons | 16:13 |
| daemontool | also... | 16:13 |
| daemontool | we need to thing, what we can do | 16:13 |
| daemontool | to involve more people in the project | 16:13 |
| daemontool | we need to be more | 16:13 |
| m3m0_ | how can we do that? | 16:14 |
| daemontool | I don't know | 16:14 |
| daemontool | events | 16:14 |
| daemontool | meet up | 16:14 |
| daemontool | talks | 16:14 |
| daemontool | sessions | 16:14 |
| daemontool | and so on | 16:14 |
| daemontool | like the one you wanted to do at pycon | 16:14 |
| daemontool | that things helps a lot | 16:14 |
| daemontool | things is | 16:14 |
| daemontool | that now it's not very easy to start contributing on freezer | 16:15 |
| daemontool | we need to make that more simple | 16:15 |
| m3m0_ | let's first start with the bp, wiki and roadmap | 16:15 |
| daemontool | ok | 16:15 |
| m3m0_ | so that way at least new people will have an idea on what they can contribute | 16:15 |
| m3m0_ | it's not like they will be bound to that path but its a good starting point | 16:16 |
| daemontool | yes | 16:16 |
| daemontool | yep | 16:16 |
| daemontool | we need to document things like | 16:16 |
| daemontool | if you want to add a new storage media, do this this and that | 16:17 |
| daemontool | if you want to add a new application aware backup touch here and here and there | 16:17 |
| daemontool | web ui the same | 16:17 |
| daemontool | api the same | 16:17 |
| m3m0_ | I completly agree on that point, even for us sometimes is difficult to modify code :P | 16:18 |
| daemontool | question is, in the new company where I'm going... if there are people interested (and there will be) | 16:18 |
| daemontool | where should tey start? | 16:18 |
| daemontool | s/tey/they/ | 16:18 |
| m3m0_ | read the roadmap | 16:18 |
| daemontool | how can we make thigns easy for new comers | 16:18 |
| daemontool | yes | 16:18 |
| daemontool | that ok | 16:18 |
| daemontool | even coming on irc | 16:18 |
| daemontool | and reading all the docs | 16:19 |
| m3m0_ | yes of course | 16:19 |
| daemontool | and play with devstack | 16:19 |
| daemontool | that's documented | 16:19 |
| daemontool | but how to be orientated | 16:19 |
| daemontool | within the code | 16:19 |
| daemontool | that's the difficult part | 16:19 |
| m3m0_ | I will suggest that new people start documenting stuff (boring I know but useful) | 16:19 |
| daemontool | yes | 16:19 |
| daemontool | so that's all from me | 16:19 |
| m3m0_ | inline comments will be perfect | 16:19 |
| daemontool | yes | 16:19 |
| m3m0_ | once we have the bp in place | 16:20 |
| m3m0_ | and the specs | 16:20 |
| m3m0_ | will be easier | 16:20 |
| daemontool | yes | 16:20 |
| m3m0_ | ok, thanks daemontool | 16:20 |
| daemontool | each one of us | 16:20 |
| m3m0_ | please let us know when the repos are available | 16:20 |
| daemontool | should probably spent 20 minutes every week | 16:20 |
| daemontool | writing bp of things that we need have to be improved | 16:20 |
| daemontool | small or big | 16:20 |
| daemontool | ok | 16:20 |
| m3m0_ | I did this template | 16:21 |
| m3m0_ | https://blueprints.launchpad.net/freezer-web-ui/+spec/template-blueprint | 16:21 |
| m3m0_ | is quite specific to the ui | 16:21 |
| m3m0_ | but can be implemented for the whole project | 16:22 |
| daemontool | m3m0_, we just said the same engineer doesn't give +2 +A if there's not +2 already by some different engineer | 16:22 |
| daemontool | https://review.openstack.org/#/c/250474/ | 16:22 |
| daemontool | :) | 16:22 |
| daemontool | ok | 16:22 |
| m3m0_ | hahahaha I was under preasure :) and those changes are only backported to kilo :P | 16:22 |
| daemontool | even more in kilo | 16:22 |
| m3m0_ | but won't happen again :P | 16:22 |
| daemontool | to modify stable/kilo | 16:22 |
| daemontool | or any stable | 16:22 |
| daemontool | we need to have 2 or more people | 16:23 |
| daemontool | ok | 16:23 |
| m3m0_ | do you have anything more to say daemontool? | 16:24 |
| *** szaher has joined #openstack-freezer | 16:24 | |
| daemontool | m3m0_, nope all good | 16:25 |
| m3m0_ | thanks a lot :) | 16:26 |
| m3m0_ | vannif, you;re next | 16:26 |
| vannif | thanks mr chairman | 16:26 |
| vannif | besides some code reviews and quick fixes, I've been looking to the user point of view | 16:27 |
| vannif | that means | 16:27 |
| vannif | the BaaS aspect | 16:27 |
| vannif | so. backup of cinder volumes, ephemeral volumes, VMs | 16:28 |
| vannif | and how to make it usable from the ui for a "normal" user | 16:28 |
| vannif | I'm also messing with screen recordings and video editing to record some demos | 16:29 |
| m3m0_ | perfect | 16:29 |
| vannif | in particular, the first would be the backup and restore of mysql on the control plane | 16:29 |
| m3m0_ | BTW have you think about including elasticsearch as a mode in freezer? | 16:29 |
| vannif | the type of demo we have been presenting from time to time | 16:29 |
| vannif | you mean, backing up of elasticsearch besides mysql ? | 16:30 |
| m3m0_ | yes | 16:30 |
| vannif | no. I think that postgres and oracle have precedence | 16:30 |
| vannif | but that's my idea | 16:30 |
| m3m0_ | not so sure about this, at least we should have a way to backup ourselves | 16:31 |
| m3m0_ | daemontool Slashme any thoughts? | 16:31 |
| ffresh | maybe elasticseaarch is easy to backup | 16:32 |
| *** memogarcia has joined #openstack-freezer | 16:32 | |
| ffresh | at least freezer stuff | 16:32 |
| *** daemontool_ has joined #openstack-freezer | 16:32 | |
| m3m0_ | as long as we can flush the data shouldn't be that difficult | 16:33 |
| reldan | Actually elasticsearch is more like swift. You can setup as many replics as you want | 16:34 |
| m3m0_ | so, should be worried about that? | 16:35 |
| *** daemontool has quit IRC | 16:35 | |
| reldan | I don’t know actually. In case if we have possiblity to lose all replicas with hdd. and it is criticall data - it have sense to have backup | 16:36 |
| *** memogarcia has quit IRC | 16:37 | |
| reldan | https://www.elastic.co/guide/en/elasticsearch/guide/current/backing-up-your-cluster.html | 16:37 |
| reldan | But I suppose just file level backup of elasticsearch isn’t best option | 16:37 |
| m3m0_ | let's think about this further | 16:39 |
| m3m0_ | vannif do you have anything more to say? | 16:39 |
| vannif | no | 16:39 |
| vannif | thanks | 16:39 |
| m3m0_ | cool, thanks a lot | 16:39 |
| m3m0_ | reldan you are next | 16:39 |
| reldan | Thank you m3m0_ ! | 16:39 |
| reldan | I have an amazion pull request, please review it - https://review.openstack.org/#/c/247840/ | 16:40 |
| reldan | Today we had a discussion with m3m0 about parallel backup | 16:40 |
| m3m0_ | all, please review this https://review.openstack.org/#/c/247840/ | 16:40 |
| reldan | I really believe everyone should take a look and say his opinion | 16:41 |
| m3m0_ | and as we agreed, the next iteration should have a way to continue storing the backups even if one or more than one but not all storages fails | 16:41 |
| reldan | m3m0_ is right, next thing will be policies / new version of metadata (we should discuss format) | 16:42 |
| m3m0_ | do you want to setup and irc or local meeting when you are ready for discussion? | 16:42 |
| reldan | Because now we can have a lot of containers / ssh-usernames / ssh-ports in one config file and we should show result accordiingly | 16:42 |
| daemontool_ | I think you can have a local meeting, came up with something written | 16:44 |
| daemontool_ | and organize a meeting | 16:44 |
| reldan | I would to prefer have a review first and answer any questions about this pull request. In this case everyone will have understanding how it works and will be able to have his own opinion | 16:44 |
| daemontool_ | publicly | 16:44 |
| daemontool_ | even asking feedback on openstack-dev | 16:44 |
| m3m0_ | what do you mean about "show result accordiingly"? | 16:44 |
| reldan | I mean result of execution. Now if we have only one storage we are binary - backup success / backup fail or restore success /restore fail | 16:45 |
| reldan | After having different plicies it may be | 16:45 |
| reldan | Backup success (storage1 success, storage2 success, storage3 fail) | 16:45 |
| m3m0_ | yep yep I agree with that | 16:45 |
| m3m0_ | please all review the parallel backup commit | 16:46 |
| m3m0_ | reldan do we have test case scenarios for this? | 16:46 |
| reldan | Now I have only one policiy - one fails - all fails. But I’m going to add one success - all success policy | 16:47 |
| reldan | And it is an open question - how I should inform user | 16:47 |
| reldan | That some storages are failed, some are succeed | 16:47 |
| reldan | And what does it mean | 16:48 |
| daemontool_ | reldan, that's what we discussed in the past | 16:48 |
| m3m0_ | logging.warning? | 16:48 |
| daemontool_ | ? | 16:48 |
| daemontool_ | policy for multiple storage | 16:48 |
| reldan | Yes, let’s say we have policy | 16:48 |
| reldan | different - but we should define output format for task | 16:49 |
| reldan | before policices it may be - failed/succeed | 16:49 |
| daemontool_ | yes write down a few lines bp | 16:49 |
| daemontool_ | so we can elaborate on that | 16:49 |
| reldan | now it may be succeed for 3 storages, failed for 1 | 16:49 |
| m3m0_ | agree with daemontool_ | 16:49 |
| reldan | Agree | 16:49 |
| reldan | But please review my request ) | 16:50 |
| reldan | Thank you | 16:50 |
| daemontool_ | reldan, yes it takes a bit of time | 16:50 |
| daemontool_ | to review it, try it | 16:50 |
| daemontool_ | with different scenarios | 16:50 |
| daemontool_ | I'll do my best to test and review it tomorrow | 16:50 |
| *** daemontool_ has quit IRC | 16:51 | |
| reldan | Thank you, please give me any feedback not only about bugs in my code, but also any comments about approach/architecture are were appreciated | 16:51 |
| reldan | It’s all from my side | 16:51 |
| m3m0_ | thanks reldan | 16:51 |
| *** daemontool_ has joined #openstack-freezer | 16:51 | |
| reldan | Thank you! | 16:51 |
| m3m0_ | Slashme anything on your side? | 16:52 |
| Slashme | I want to do some updates on the wiki | 16:52 |
| Slashme | And work a few demo to put on youtube | 16:52 |
| m3m0_ | cool, that really great | 16:53 |
| daemontool_ | Slashme, brilliant | 16:53 |
| Slashme | I was thinking: freezer-intro / freezer-install / freezer-cli /freezer-web-ui | 16:53 |
| Slashme | Also please review : https://review.openstack.org/#/c/243021 | 16:53 |
| m3m0_ | are we going to have french, italian, russian and spanish subtitles? | 16:53 |
| Slashme | That's all from my side | 16:53 |
| Slashme | m3m0_: good idea for subtitles | 16:54 |
| m3m0_ | jajaja I'll do the russian ones | 16:54 |
| daemontool_ | lol | 16:54 |
| Slashme | :) | 16:54 |
| daemontool_ | there's something I think we should do... | 16:54 |
| vannif | I'll manage the arabic :) | 16:54 |
| daemontool_ | we need to write in the commit message | 16:54 |
| daemontool_ | why we are doing that | 16:54 |
| m3m0_ | agree at least a short description of why, what and how | 16:55 |
| daemontool_ | we need to think about api v2 | 16:55 |
| daemontool_ | when why what in it | 16:55 |
| daemontool_ | yes | 16:55 |
| m3m0_ | so, all. | 16:56 |
| m3m0_ | after this commits, every single commit has to have a bp or a bug, and a meaningful commit message | 16:56 |
| m3m0_ | otherwise will get -1 by default is that ok with everyone? | 16:56 |
| daemontool_ | yes | 16:56 |
| daemontool_ | ++ | 16:56 |
| Slashme | #agreed | 16:56 |
| daemontool_ | #agreed | 16:57 |
| m3m0_ | http://cdn.meme.am/instances/65275854.jpg | 16:57 |
| m3m0_ | cool, does anyone have anything to say? | 16:57 |
| daemontool_ | samuelBartel, hi | 16:58 |
| daemontool_ | m3m0_, lol | 16:58 |
| m3m0_ | we are running out of time | 16:59 |
| m3m0_ | thanks everyone | 16:59 |
| reldan | Thank you! | 16:59 |
| m3m0_ | #endmeeting | 17:00 |
| openstack | Meeting ended Thu Nov 26 17:00:00 2015 UTC. Information about MeetBot at http://wiki.debian.org/MeetBot . (v 0.1.4) | 17:00 |
| openstack | Minutes: http://eavesdrop.openstack.org/meetings/openstack_freezer_26_11_2015/2015/openstack_freezer_26_11_2015.2015-11-26-16.02.html | 17:00 |
| openstack | Minutes (text): http://eavesdrop.openstack.org/meetings/openstack_freezer_26_11_2015/2015/openstack_freezer_26_11_2015.2015-11-26-16.02.txt | 17:00 |
| openstack | Log: http://eavesdrop.openstack.org/meetings/openstack_freezer_26_11_2015/2015/openstack_freezer_26_11_2015.2015-11-26-16.02.log.html | 17:00 |
| daemontool_ | thanks m3m0_ | 17:00 |
| openstackgerrit | Merged openstack/freezer-api: Add support for properties that span across all action of a job https://review.openstack.org/243021 | 17:07 |
| *** samuelBartel has quit IRC | 17:33 | |
| *** reldan has quit IRC | 17:44 | |
| openstackgerrit | Fabrizio Vanni proposed openstack/freezer-api: change default value for number of replicas https://review.openstack.org/250508 | 17:49 |
| openstackgerrit | Merged openstack/freezer-api: change default value for number of replicas https://review.openstack.org/250508 | 18:01 |
| *** daemontool_ has quit IRC | 18:34 | |
| *** openstackgerrit has quit IRC | 18:49 | |
| *** vannif_ has joined #openstack-freezer | 18:58 | |
| *** jonaspf has quit IRC | 19:01 | |
| *** vannif has quit IRC | 19:01 | |
| *** emildi has quit IRC | 19:01 | |
| *** Jokke_ has quit IRC | 19:01 | |
| *** epheo_ has quit IRC | 19:01 | |
| *** smekel has quit IRC | 19:01 | |
| *** ffresh has quit IRC | 19:01 | |
| *** Slashme has quit IRC | 19:01 | |
| *** emildi has joined #openstack-freezer | 19:02 | |
| *** Jokke_ has joined #openstack-freezer | 19:05 | |
| *** openstackgerrit has joined #openstack-freezer | 19:11 | |
| *** ffresh has joined #openstack-freezer | 19:11 | |
| *** Slashme has joined #openstack-freezer | 19:11 | |
| *** Slashme has quit IRC | 19:14 | |
| *** epheo_ has joined #openstack-freezer | 19:14 | |
| *** smekel has joined #openstack-freezer | 19:14 | |
| *** Slashme has joined #openstack-freezer | 19:18 | |
| *** Jokke_ has quit IRC | 19:26 | |
| *** emildi has quit IRC | 19:27 | |
| *** Jokke_ has joined #openstack-freezer | 19:29 | |
| *** vannif_ has quit IRC | 19:39 | |
| *** reldan has joined #openstack-freezer | 19:39 | |
| *** vannif_ has joined #openstack-freezer | 19:39 | |
| *** emildi has joined #openstack-freezer | 19:48 | |
| *** reldan has quit IRC | 20:14 | |
| *** reldan has joined #openstack-freezer | 20:24 | |
| openstackgerrit | Memo Garcia proposed openstack/freezer: Initialize freezer-scheduler with insecure mode https://review.openstack.org/250528 | 20:26 |
| *** Slashme_ has joined #openstack-freezer | 20:53 | |
| *** Slashme has quit IRC | 20:57 | |
| *** openstackgerrit has quit IRC | 21:06 | |
| *** openstackgerrit has joined #openstack-freezer | 21:07 | |
| *** reldan has quit IRC | 21:36 | |
| *** reldan has joined #openstack-freezer | 21:38 | |
| *** reldan has quit IRC | 21:56 | |
| *** memogarcia has joined #openstack-freezer | 22:00 | |
| *** reldan has joined #openstack-freezer | 22:00 | |
| *** reldan has quit IRC | 22:37 | |
| *** smekel has quit IRC | 22:51 | |
| *** nullvariable has quit IRC | 22:51 | |
| *** nullvariable has joined #openstack-freezer | 23:39 | |
| *** memogarcia_ has joined #openstack-freezer | 23:47 | |
| *** openstackgerrit has quit IRC | 23:47 | |
| *** openstackgerrit_ has joined #openstack-freezer | 23:48 | |
| *** openstackgerrit_ is now known as openstackgerrit | 23:48 | |
| *** memogarcia has quit IRC | 23:54 | |
Generated by irclog2html.py 2.14.0 by Marius Gedminas - find it at mg.pov.lt!