/srv/irclogs.ubuntu.com/2016/03/11/#ubuntu-unity.txt

=== jzheng_afk is now known as jzheng
=== marcusto_ is now known as marcustomlinson
Saviqpstolowski, cimi, (how) can we test fixes for bug #1549056, bug #1424720 ?09:55
ubot5bug 1549056 in unity8 (Ubuntu) "content sharing cannot work in scopes" [Undecided,In progress] https://launchpad.net/bugs/154905609:55
ubot5bug 1424720 in unity8 (Ubuntu) "Add emblem to PreviewHeader widget" [Medium,In progress] https://launchpad.net/bugs/142472009:55
tsdgeosfirst you can't really09:55
tsdgeosyou'd need a scope that uses those09:55
tsdgeoswhich only the guy that reported the bug seems to have one09:55
cimiwe could learn chinese too :)09:56
tsdgeossecond same-ish09:56
tsdgeosbut tryPreviewHeader will show the difference09:56
tsdgeoson the phone itself i don't think there's scope using it either09:56
ciminote that the chinese guy said my branch works for him09:58
pstolowskii could quickly create a test scope which makes a picture 'sharable'09:58
pstolowskii already have a test scope project (Books scope) i use to test various new stuff ;)09:59
Saviqpstolowski, that'd be great to share with QA indeed10:00
pstolowskiSaviq, ok, will do it, is this needed right now or is later/Monday ok?10:01
Saviqpstolowski, asap would be good, or I don't land filters for you next week ;P10:02
Saviqpstolowski, it's for silo 64 testing ;)10:02
pstolowskiSaviq, you can be very convincing ;)10:02
pstolowskicimi, do i need a local image or http:// image uri to test https://bugs.launchpad.net/ubuntu/+source/unity8/+bug/1549056 proper?10:08
ubot5Launchpad bug 1549056 in unity8 (Ubuntu) "content sharing cannot work in scopes" [Undecided,In progress]10:08
pstolowskiSaviq, do you know^ ?10:10
Saviqpstolowski, both *should* work, no?10:10
pstolowskiSaviq, sure, just not sure if you want to test a specific case10:11
Saviqpstolowski, no, any would do10:11
cimipstolowski, any should work10:12
cimipstolowski, if is external, it will be treated as a URL iirc10:13
* cimi doesn't fully know contenthub10:13
pstolowskicimi, Saviq yes, we have that other bug about that, some apps don't deal with it10:13
zsombiSaviq: (proxy to mterry) the next UITK landing is already in testing phase in silo50 ( again :) )10:25
Saviqzsombi, yeah I pointed him at it10:25
zsombiSaviq: ok, thx :)10:25
tsdgeoscimi: if you have 10 mins can you test my last comment in https://code.launchpad.net/~josharenson/unity8/fix-over-eager-scope-swipe/+merge/288589 to check i'm not doing something horribly wrong?10:29
cimitsdgeos, as I said in the mail I am not sure it's the right fix10:30
tsdgeoscimi: i don't think it's the right fix either10:33
tsdgeosbut it's not that i can even see it being the console.log being printed10:34
cimitsdgeos, oh10:37
cimitsdgeos, it's in Shell.qml, you need to restart unity8 and grep for  unity8.log10:38
tsdgeoslol stupid10:38
cimilol10:38
cimi:)10:38
tsdgeoscimi: did i get that mail saying you don't think this is the right fix?10:44
dpmhi all - is there someone who could look at bug 1535058? It seems the unity 8 session has not been usable for a while, as apps crash upon start10:58
ubot5bug 1535058 in ubuntu-app-launch (Ubuntu) "applications close instantly when launched from the launcher or dash" [High,In progress] https://launchpad.net/bugs/153505810:58
cimimzanetti, status of  that bug?11:10
Saviqdpm, it works fine, just libstall libpam-cgm11:10
cimiSaviq, doesnt work for me11:10
cimiI can try again, maybe libpam received an update lately11:11
Saviqlibstall...11:11
Saviqdpm, there's a branch even, you might wanna poke ted/alecu to land it finally11:11
mzanetticimi, I think dednick fixed that... although I have seen another case of it happening. not sure if we have a fix for that too11:11
Saviqcimi, it does work, some caveats still to get it going, but it does work11:11
cimiSaviq, it didnt work last time I followed your steps, and didnt work too in austin when I gave my laptop to ted11:12
cimianyway, I will try again later11:13
Saviqcimi, where's the bug that says the fixes we know of are not enough yet?11:13
dednickhmmm?11:14
cimiSaviq, well the bug still says is not fixed,11:14
Saviqcimi, but it has a fix, and no one is working on it because it's assumed the fix fixes11:15
cimiSaviq, ok but "just install libpam-cgm" is not a fix11:15
cimidoesnt fix for some of us11:16
alecuSaviq, dpm: thanks, will remind ted to land it when he gets back next week11:16
alecuOh, so something else is needed?11:16
Saviqalecu, not that we know of11:16
Saviqcimi, please try again, check whether your cgmanager.service is "active (running)"11:17
Saviqthat you have libpam-cgm installed11:17
cimiSaviq, yeah, if it doesnt I'll try with ted branch11:17
Saviqcimi, ted's branch only adds a libpam-cgm dep11:17
cimiSaviq, last time I tried, cgmanager.service was "active (running)" but still apps were not running11:17
cimiah ok11:17
cimiCRAP :)11:18
cimitrying later, need to work now11:18
mzanettioh wait... that's the other one...11:18
mzanettiyeah, I think that was only some missing deps11:19
dpmSaviq, I had installedd libpam-cgm already11:29
dpmI tried several things in the comments, but none helped11:29
dpmSaviq, I was told to try with libpam-cgm and with libpam-cgfs (which I currently have installed). None of them fixed it11:30
dpmSaviq, as you're saying, the branch only adds the dep, but that does not seem to be the fix11:31
Saviqdpm, you on xenial? can you check if cgmanager.service is running? I don't know of any other issues with running apps (browser was dying, but that's gone now)11:32
dpmSaviq, I am on xenial. Last time I tried it was running, but I can double-check11:33
dpmhm that does not look good? http://pastebin.ubuntu.com/1534677711:34
pstolowskicimi, here is a scope you can use to test your fixes lp:~stolowski/+junk/scope-content_sharing (the binary is in click/ dir), can you give it a shot? i don't see emblem in the preview header though, perhaps i'm doing something wrong?11:41
pstolowskiSaviq, ^11:41
Saviqdpm, nope it doesn't11:41
cimipstolowski, let me read the code11:41
Saviqdpm, sudo apt install cgmanager11:41
Saviqpstolowski, you got silo 64 installed?11:42
dpmSaviq, I went through that a few weeks ago. The cmanager package does not exist11:42
pstolowskiSaviq, yes11:42
Saviqdpm, http://pastebin.ubuntu.com/15346801/11:42
* dpm reinstalls libpam-cgm instead of -cgfs11:42
Saviqdpm, c*g*manager11:43
dpmaha!11:43
dpmthanks11:43
dpmhm... "cgmanager is already the newest version (0.39-2ubuntu5)."11:43
dpmhttp://pastebin.ubuntu.com/15346808/11:44
cimipstolowski, first of all, do you have the branch installed?11:44
pstolowskicimi, i've the silo 64 installed11:49
cimipstolowski, also, is  sc::Variant("thumbs-up") enough to get the icon?11:49
cimiwhat does sc::Variant() do?11:50
cimiI might miss sth11:50
pstolowskicimi, it's just a string efectively. i asked you recently about icons wrt to social-actions, and you told me it was enough to get the icon from the theme ;)11:51
cimipstolowski, so the string should be "image://theme/thumbs-up"11:54
pstolowskicimi, ok... so maybe social-actions has the same issue and that's why i didn't see them?11:54
cimitry with sc::Variant("image://theme/thumbs-up")11:55
cimimmm might be11:55
cimiI will try now locally11:55
cimifor socvial11:55
Saviqpstolowski, can you please drop the changelog bump in lp:~stolowski/unity-api/filters-iface - we're doing that centrally now to avoid conflicts11:58
pstolowskiSaviq, ok11:58
cimipstolowski, I am not even sure we have thumbs up icon :)12:00
pstolowskicimi, we have12:00
pstolowskicimi, i hope it's mapped.. i did find svg on the phone12:00
cimipstolowski, thumb-up12:01
cimipstolowski, not thumbs12:01
pstolowskiouch12:01
cimi:)12:01
pstolowskidammit, just rebuild the click :/12:01
pstolowskicimi, ok, it works, i've rebuilt the scope. the placement looks a little bit weird though12:05
cimipstolowski, albert did that branch /me approved12:06
pstolowskicimi, anyway, please check your content sharing fixes and emblem in previews and you can give this scope to QA12:06
cimihttps://code.launchpad.net/~aacid/unity8/emblemInPreviews/+merge/28603812:06
pstolowskiSaviq, pushed unity-api changes12:07
Saviqpstolowski, tx12:21
=== alan_g is now known as alan_g|lunch
cimihey albert, you busy?13:10
tsdgeoscimi: me?13:23
cimitsdgeos, ahah yeah :D13:24
tsdgeoscimi: what do you need?13:24
cimitsdgeos, I struggle in debugging what is wrong with pawel scope for social actions13:24
cimitsdgeos, I am worried it might be a translation of social-actions to socialActions or something similar13:24
cimiI am confused13:24
cimitsdgeos, can you help me with that? https://code.launchpad.net/~stolowski/+junk/scope-social_actions13:26
tsdgeoscimi: so what do i need exactly?13:26
cimitsdgeos, understand what is wrong :)13:26
cimitsdgeos, http://paste.ubuntu.com/15347293/13:27
cimitsdgeos, this adds some debug on top of my branch13:27
pstolowskicimi, i need to add image://.. to that scope13:27
cimi~cimi/unity8/card-social13:27
cimipstolowski, is not only that13:27
cimitsdgeos, we are not in a rush, but I am confused...13:27
pstolowskicimi, ah, ok13:27
tsdgeoscimi: i mean which branches, scope,s etc13:27
cimitsdgeos, lp:~cimi/unity8/card-social13:28
tsdgeoscimi: or is there a silo?13:28
cimitsdgeos, silo 7113:28
cimitsdgeos, plus lp:~stolowski/+junk/scope-social_actions to hack on the test scope, and lp:~cimi/unity8/card-social for unity8 branch13:29
cimitsdgeos, I compile the scope, then I run with tools/unity-scope-tool ../deps/scope-social_actions/src/socialtest.pawelstolowski_socialtest.ini13:29
cimi(I have a deps folder inside my unity8 branch with his test scope)13:29
pstolowskicimi, i've just pushed updated icon names for that scope13:30
cimipstolowski, it looks like the model I am getting, cardData, is empty13:31
cimiI get there is a social-actions defined (social-actions and not socialActions too)13:31
cimitsdgeos, so first of all we dont seem to have components["socialActions"] but "social-actions"13:32
cimitsdgeos, second, cardData seems empty (and I don't know how we can easily print what's inside that in JS)13:33
tsdgeosJSON.stringify13:33
tsdgeosis your friend13:33
cimicardData["socialActions"] that is13:33
tsdgeoscimi: well if socialActions haas nothing and social-actions has, that is the problem, no?13:34
cimitsdgeos, one of the problems13:35
cimitsdgeos, not sure is just that...13:35
cimitsdgeos, it's one of the first scopes I touch that's why I am a bit confused and asked you if you can see what I am doing wrong... I might be restarting unity8-dash instead unity8, I might be doing something silly on a friday :))13:36
cimiso questions are, is unity8 or the scopes wrong? should be socialActions or social-actions on our side?13:38
pstolowskicimi, it's consistent with quick-preview-data (which works), and the implementation is identical in the shell-plugin13:43
cimipstolowski, looks like components["socialActions"] does not exist13:48
=== dandrader is now known as dandrader|afk
pstolowskicimi, re-flashing my phone to do some debug13:53
cimipstolowski, i do it from the pc13:53
pstolowskicimi, components is something tou create right? because you'd need to query the socialActions role from the results model to get actions13:54
pstolowskii mean the 'components' dictionary13:54
cimipstolowski,  I think the scope defines it13:56
pstolowskicimi, yes, in the category json definition there is a components mapping. but that's something you don't access directly13:57
cimiI think we parse that13:57
pstolowskicimi, you access this stuff trough resultsmodel roles, such as quickPreviewData or socialActions13:57
cimithen we create a sample card13:58
pstolowskiright you need to parse that13:58
cimiI dont think I understand totally how this works, I hope albert will clarify with a patch I can review :)14:01
pstolowskicimi, grepping for Albert's quickPreviewData, I only see it referencing cardData[...], not components14:02
mterrySaviq, https://bugs.launchpad.net/canonical-pocket-desktop/+bug/1543344/comments/714:02
ubot5Launchpad bug 1543344 in unity8 (Ubuntu) "scroll wheel too fast" [Undecided,Triaged]14:02
cimipstolowski, yeah can we see a scope using it?14:03
pstolowskicimi, sure14:03
pstolowskicimi, My Music14:03
tsdgeosyeah14:04
tsdgeosthe template part is with -14:04
tsdgeos./Dash/CardCreator.js:457:    var isAudio = template["quick-preview-type"] === "audio";14:04
tsdgeosso components is the same14:04
tsdgeosthe camelCasedOne is because of14:05
tsdgeos./unity/shell/scopes/ResultsModelInterface.h:88:        roles[RoleQuickPreviewData] = "quickPreviewData";14:05
tsdgeosso one thing is accessing the card data14:05
tsdgeosthe other is accessing the json14:06
tsdgeosdo i make sense?14:06
cimimmm yeah?14:06
cimitsdgeos, so we need to have components[social-actions] in cardcreator AND cardtool?14:06
tsdgeosif you access components yes14:06
tsdgeosit's always "social-actions"14:06
tsdgeosif you access cardData it depends on the mappoing that ResultsModelInterface has14:07
tsdgeosif it has any14:07
cimianyway /me lunch14:07
cimitsdgeos, if it takes you 5 mins to write a working patch, I understand better, otherwise I will try myself later no problem14:08
pstolowskicomponents mapping from category renderer is parsed by shell plugin, so shell plugin knows what to remap if neccessary. i don't think unity8 is interested in this14:08
pstolowskiquick-preview-type on the other hand is part of the template definition, that's why unity8 reads it14:08
pstolowskii think it's overcomplex14:13
=== alan_g|lunch is now known as alan_g
mterryltinkl, what's the new u8 keyboard branch that needed a review?14:19
ltinklmterry, https://code.launchpad.net/~unity-team/unity8/keymapSwitching/+merge/28876414:20
mterryltinkl, I thought switching was already in your other branches14:23
ltinklmterry, yeah... but it was dependent on the indicator, this one is not14:24
mterryah ok14:24
mterryltinkl, is silo 41 useful for testing this branch?14:25
ltinklmterry, yeah should be (if it builds)14:27
mterryltinkl, doesn't build now anyway (some weirdness with its clicks14:28
ltinklyeah14:28
mterryltinkl, I don't want to edit that silo  :)14:28
mterryltinkl, should I just manually build then?  I need silo 64 + the three kbdLayout branches?14:28
* mterry really wishes 64 would land :)14:29
ltinklmterry, you basically need https://code.launchpad.net/~unity-team/unity8/keymapSwitching/+merge/288764 and the branches listed in description14:29
ltinklmterry, oh and probably the unity-api stuff in: https://code.launchpad.net/~unity-team/unity-api/packaging/+merge/28614514:30
mterryltinkl, OK, but keymapSwitching is based off of silo 64's u8 branch.  Which probably depends on everything else in silo 6414:30
ltinklmterry, yeah...14:30
=== dandrader|afk is now known as dandrader
=== sdk_ is now known as sdk
mterryltinkl, why keep track of a separate activeKeymapIndex variable in AbstractStage.qml?14:52
ltinklmterry, to get the keymap index of the currently focused window, and to be able to switch the keymap at a central place (not depending on the loaded stage)14:56
mterryltinkl, but why do we need the keymap index of the currently focused window?  We overwrite it when it becomes focused with currentKeymapIndex14:57
ltinklmterry, to calculate the next/previous index14:57
mterryltinkl, but why not base that off of currentKeymapIndex?14:58
mterryltinkl, I understand the argument about switching stages though...  But the current code doesn't look like it pulls from window index ever (unless user presses meta+space, but by that time the window index will have been overridden)14:58
ltinklmterry, it does here: keymaps.indexOf(mainAppWindow.activeKeymap)15:00
mterryltinkl, right when setting activeKeymapIndex15:00
mterryltinkl, but we don't use activeKeymapIndex except when user presses meta+space15:00
mterryltinkl, and when a window becomes focused, we override its keymap with the currentKeymapIndex15:00
mterrySo it seems to me like we can do without activeKeymapIndex15:01
* ltinkl thinks again15:01
mterryltinkl, although I think you're right that we *want* something like it to save keymap across stage reloads15:01
ltinklmterry, yes that and... the main problem here really is, there's no method to _get_ the keymap of a surface15:02
ltinklmterry, Mir has only a setter15:02
mterryltinkl, so maybe we should save the index outside of the stage15:03
mterryltinkl, added some inline comments in the meantime15:03
ltinklmterry, we save the keymap (not the index tho) in the surface, so that switching stages should (and does) indeed work15:04
ltinklmterry, some of that logic might change when we get surface based WM15:04
mterryltinkl, but when switching to a new stage, currentKeymapIndex never gets updated.  It's at 0.  So because when we switch windows, we use currentKeymapIndex, it won't be saved properly15:05
ltinklmterry, current gets updated by the shortcuts15:06
mterryltinkl, and onMainAppWindowChanged might even fire right after stage construction?  not sure15:06
ltinklmterry, initially it's at 015:06
mterryltinkl, right.  But let's say I switch stages.  Then I switch windows (before pressing a shortcut)15:06
mterryltinkl, or if onMainAppWindowChanged fires during stage construction (possible, haven't tested), then it immediately gets overriden15:06
ltinklmterry, 0 meaning the user's first choice15:06
mterryltinkl, right right.  But let's say I'm in a desktop stage.  I've toggled to index 3.15:07
mterryltinkl, I unplug my phone, now I'm in phone stage15:07
mterryltinkl, currentKeymapIndex is now 015:07
mterryltinkl, and if I switch windows, the new window will get keymap 015:07
mterryltinkl, you might be able to fix this with a simple default binding of "currentKeymapIndex: activeKeymapIndex" that gets overridden when using meta+space shortcuts15:08
ltinklmterry, yeah ok, I'll test this shortly, after I get it to build again :)15:09
tsdgeospstolowski: is that silo usable at all?15:11
tsdgeosisn't giving me unity8 from the silo15:11
tsdgeosbut from the stable ppa15:11
tsdgeoshow old is it?15:11
pstolowskitsdgeos, needs rebuilding due to unity8 landings15:11
pstolowskijust force the version from silo for now15:12
pstolowskitsdgeos, you're talking about silo 71 right?15:12
tsdgeosyes15:13
davmor2mzanetti: question what is the name of the element in notes where you actually create the note and can it be added to the copy paste system in unity8 so you can paste stuff into a note?15:13
pstolowskirebuilding now.. i didn't rebuilt since we knew something is still broken in it15:13
tsdgeosyeah but it's kind of annoying to try to find what's broken when just getting to tes tit is hard15:15
tsdgeosbecause you don't get the things15:15
mzanettidavmor2, I've implemented copy/paste for notes half a year ago... but for various reasons that release never passed QA so far15:15
tsdgeosi've lost like 45 min trying to help you guys and i've still have nothing15:15
mzanettidavmor2, so yea... build trunk and you'll have copy/paste support15:15
tsdgeossince i can't get the things to even run against eachother15:15
pstolowskitsdgeos, fair enpugh15:15
davmor2mzanetti: oh so it was an app issue not copy/paste issue then15:16
mzanettidavmor2, well, it wasn't possible with uitk < 1.315:16
davmor2ah okay15:17
davmor2mzanetti: awesome will look forward to that it will make it easier to test copy paste from the browser then :)15:17
mzanettidavmor2, well... I kinda lost motivation on it tbh... so not sure what's going to happen with it15:19
tsdgeospstolowski: the click is outdated too15:19
* davmor2 hugs mzanetti till he likes it again15:19
mzanettiit kept on bouncing back from QA for really stupid reasons. after 3 months of trying I gave up15:20
pstolowskitsdgeos, my scope?15:20
tsdgeosyes15:20
davmor2mzanetti: :(15:20
tsdgeospstolowski: http://paste.ubuntu.com/15348018/15:20
tsdgeosno social-cards15:20
tsdgeosin the compiled .so15:20
tsdgeoseven the code has them15:21
tsdgeosssocial-actions i mean15:21
tsdgeos-s15:21
tsdgeosthat also made me lose quite a bit of time15:21
ltinklmterry, addressed your comments, will clean up the debug once I've verified it still works :)15:22
pstolowskitsdgeos, sorry... updating15:23
cimitsdgeos, I compile both the scope and unity8 locally, then I run the scope with unity-scope-tool15:27
tsdgeoscimi: you need the scope shell code too otherwise it won't work15:28
mterryltinkl, you might want to add a qmltest that switches stages, for that code path we talked about15:28
cimitsdgeos, yeah... I installed them too15:28
cimi(I think)15:29
* cimi checks15:29
ltinklmterry, yup, will likely move the test from desktop stage to shell15:30
pstolowskitsdgeos, updated click pkg in lp:~stolowski/+junk/scope-social_actions15:31
tsdgeoscimi: so i can give you some hints15:47
tsdgeosbut this needs really fixes to make it work15:48
cimitsdgeos, tx15:48
tsdgeossince you're using ListItems that you can't really use there15:48
=== dandrader is now known as dandrader|lunch
cimitsdgeos, I'm all ears16:06
cimior eyes16:06
cimi:)16:06
tsdgeoscimi: it's on the MR16:06
cimitsdgeos, oh great! some of the things were already in the patch I shown you16:07
tsdgeosmaybe16:07
cimitsdgeos, some are what I guessed but didn't want to :)16:07
tsdgeosi didn't check the patch since you said it was only to add debugging16:07
cimithe fields in CardTool16:08
cimiI thought we needed two indeed16:08
cimilet me try but thanks for now16:08
cimitsdgeos, scope works fine with this?16:08
tsdgeoscimi: no it doesn't since as said the qml component can't be created16:09
tsdgeosbecause of the use of ThinDivider in CardSocialActions16:09
tsdgeosi guess i can try removing that16:09
tsdgeosthen it complains16:10
tsdgeosimage:://theme/thumb-down16:10
tsdgeospstolowski: that is on you ↑ ?16:11
tsdgeoscan you fix it?16:11
pstolowskiuh, yeah16:11
tsdgeosMirv: ping16:14
Saviqpstolowski, cimi, where are we with the emblem/sharing? got a scope for me? :)16:23
cimiSaviq, we do have scopes yes :)16:23
cimilp:~stolowski/+junk/scope-content_sharing16:24
cimineed to test the sharing too16:24
mterryltinkl, ~unity-team/unity-api/kbdLayout doesn't actually bump its version number to 108, despite ~unity-team/qtmir/kbdLayout needing that version16:26
ltinklmterry, yup, that's in https://code.launchpad.net/~unity-team/unity-api/packaging/+merge/28614516:26
ltinklmterry, part of the silo16:26
mterryltinkl, guh, ok...  I was going off the list in https://code.launchpad.net/~unity-team/unity8/keymapSwitching/+merge/28876416:27
mterryltinkl, anything else?16:27
ltinklmterry, nope, don't think so16:27
cimiSaviq, I use your frankenstein silo?16:28
Saviqcimi, not ready yet16:29
cimiSaviq, oki16:29
Saviqcimi, oh wait what for?16:29
cimiSaviq, content sharing16:29
Saviqcimi, not frankenstein, under QA already :P https://requests.ci-train.ubuntu.com/#/ticket/99316:29
Saviqthere's a new frankenstein https://requests.ci-train.ubuntu.com/#/ticket/110516:29
cimiso many nice gifs in telegram16:30
cimiwe need to switch :)16:30
Saviqand don't you tell me it doesn't work :P16:30
SaviqI wanted a scope to show that it works, not one to show that it's broken :P16:30
cimiSaviq, so let me try :)16:32
cimipstolowski, did you try the sharing scope with silo 64?16:32
pstolowskicimi, no, sorry16:33
cimiSaviq, on the desktop, the content hub appears16:40
cimiSaviq, however I dont have handlers :)16:40
cimiSaviq, it shows though blue colors everywhere, looks like is broken too with uitk 1.316:40
Saviqcimi, yeah, there's a bug16:42
mterryjosharenson, so the greeter branches that need reviewing are all in that silo?17:37
Saviqmterry, yes17:43
=== alan_g is now known as alan_g|EOW
=== dandrader is now known as dandrader|afk
=== dandrader|afk is now known as dandrader
=== JanC_ is now known as JanC

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