Akiva-Thinkpad | it was using some global that I could not find defined in the project | 00:00 |
---|---|---|
Akiva-Thinkpad | gerlowskija, have you been able to reproduce the bug? | 00:00 |
gerlowskija | The only recurrence-related code I found was in NewEvent.qml and EditEvent.qml, which makes me think that handling recurrence was all done in the plugin. | 00:00 |
gerlowskija | yep | 00:00 |
gerlowskija | out of curiosity, what was the bug you gave up on? Kindof intrigued now. | 00:01 |
Akiva-Thinkpad | gerlowskija, exactly. I was wondering if there was perhaps some project files not being listed in the qml project | 00:01 |
Akiva-Thinkpad | sec | 00:01 |
Akiva-Thinkpad | oh I think it was the bug about ... sheesh | 00:03 |
Akiva-Thinkpad | i remember | 00:03 |
* Akiva-Thinkpad keeps looking | 00:03 | |
Akiva-Thinkpad | https://bugs.launchpad.net/ubuntu-calendar-app/+bug/1359306 | 00:03 |
ubot5 | Ubuntu bug 1359306 in Ubuntu Calendar App "New Event - Selecting start time should update end time to be 1 hour ahead" [Wishlist,Confirmed] | 00:03 |
Akiva-Thinkpad | looks like someone took it over | 00:04 |
Akiva-Thinkpad | at least that is what I think it was | 00:04 |
gerlowskija | oh, that would be awesome to have done | 00:04 |
Akiva-Thinkpad | gerlowskija, I am curious though what his merge proposal looks like | 00:04 |
Akiva-Thinkpad | if he solved my issue, maybe it can give you a hint | 00:04 |
Akiva-Thinkpad | sec | 00:04 |
gerlowskija | makes sense. back in 5 btw. | 00:05 |
Akiva-Thinkpad | gerlowskija, https://code.launchpad.net/~twstd-dev/ubuntu-calendar-app/1359306/+merge/232942 ah yah - | 00:06 |
Akiva-Thinkpad | this diff makes sense | 00:06 |
gerlowskija | wow, surprisingly simple haha | 00:07 |
gerlowskija | and you said when you were looking at that, you were looking at functions in one of the components? | 00:10 |
Akiva-Thinkpad | gerlowskija, well I didnt know before about Date() ; that is something I just discovered the other day | 00:11 |
gerlowskija | oh, understood; I'm now JS-wizard either. What I'm actually wondering I guess is if you know how to recompile a plugin/component. Since it looks to me like the bug I'm looking at is an issue in the component, I'd like to add some debugging to the C++ code, and run the app with the modified plugin | 00:12 |
gerlowskija | s/now/no/g | 00:13 |
Akiva-Thinkpad | gerlowskija, interesting question... | 00:13 |
gerlowskija | But I have no idea how to rebuild a plugin like that. I was hoping you might know | 00:13 |
Akiva-Thinkpad | I like a challenge | 00:14 |
Akiva-Thinkpad | doing nothing anyways; lets both take a spin at this | 00:14 |
gerlowskija | ok, I'll dig back in and let you know if I came up with anything. | 00:16 |
gerlowskija | s/came/come/g | 00:16 |
gerlowskija | thanks for the help | 00:17 |
gerlowskija | I've been trying to build the qtorganizer5-eds plugin (bzr branch lp:qtorganizer5-eds)...maybe that's part of my problem, so I figured I'd mention it. | 00:21 |
mhall119 | anybody know how to delete a file from QML without resorting to a C++ plugin? | 00:24 |
Akiva-Thinkpad | mhall119, isnt that sort of thing supposed to be impossible? | 00:25 |
Akiva-Thinkpad | mhall119, I am pretty sure I made an ask ubuntu question about that some time back. | 00:25 |
mhall119 | Akiva-Thinkpad: it should be possible to do in the folder that my app uses for data storage | 00:25 |
Akiva-Thinkpad | mhall119, Ah interesting theory | 00:26 |
gerlowskija | mhall119: I know less than nothing about this, but can you delete it with Javascript? http://www.java2s.com/Tutorial/JavaScript/0600__MS-JScript/FileDelete.htm | 00:27 |
gerlowskija | oops, that was some MS specific thing...looks like you can't do that in JS, which makes sense. | 00:28 |
mhall119 | gerlowskija: that looks to be exposing ActiveX APIs over javascript, so that won't work for me | 00:28 |
gerlowskija | yeah, I got a little Google happy and forgot to look closely | 00:29 |
Akiva-Thinkpad | mhall119, http://askubuntu.com/questions/519375/anybody-know-how-to-delete-a-file-from-qml-without-resorting-to-a-c-plugin | 00:32 |
Akiva-Thinkpad | :) | 00:32 |
gerlowskija | Akiva-Thinkpad: trying to build on my utopic desktop gives me: http://paste.ubuntu.com/8219377/...looks like the original error message is complaining about not having the most up-to-date version of a package called "libecal" installed. | 00:38 |
Akiva-Thinkpad | hmmm? | 00:39 |
* Akiva-Thinkpad branches latest | 00:39 | |
gerlowskija | as far as I can tell I have the most recent libecal for utopic installed (at least according to this link: https://launchpad.net/ubuntu/utopic/+package/libecal-1.2-16) | 00:41 |
Akiva-Thinkpad | gerlowskija, did you install the -dev? | 00:42 |
Akiva-Thinkpad | bah apple wifi not letting me ssl :/ | 00:43 |
Akiva-Thinkpad | and the mall is closing | 00:43 |
Akiva-Thinkpad | brb as I move to the library | 00:43 |
Akiva-Thinkpad | gerlowskija, how goes the battle | 01:29 |
Akiva-Thinkpad | ? | 01:29 |
gerlowskija | you weren't kidding about the road-warrior thing! | 01:36 |
gerlowskija | And not well. I haven't made much progress. | 01:36 |
gerlowskija | I found references to a libecal-1.2-15 package with a version of 3.8 | 01:36 |
gerlowskija | but it doesn't look like it's available on recent-ish versions of ubuntu. | 01:37 |
gerlowskija | (instead we have libecal-1.2-16...note the 16 vs. 15) | 01:37 |
gerlowskija | I convinced myself that since 16 > 15, then maybe the version you and I have installed by default is actually a more recent version, but cmake just can't tell that. | 01:38 |
gerlowskija | tbh I think that's a lie I'm just telling myself. | 01:38 |
gerlowskija | I commented out the check from CMakeLists.txt and it looks like I get a little further, but I still get errors I'm not sure how to correct (I'll post a link, just a sec). | 01:39 |
gerlowskija | ugh, actually my laziness wins...its the same error as in: http://paste.ubuntu.com/8219377/ | 01:40 |
gerlowskija | just without the warning about the missing libecal package | 01:40 |
Akiva-Thinkpad | hrmmm | 01:40 |
gerlowskija | I'm starting to think that this plugin is dependent on the environment it'd find on a phone image. But I'm not sure. | 01:41 |
=== _salem is now known as salem_ | ||
Akiva-Thinkpad | gerlowskija, wait, are you just trying to compile calendar? | 01:42 |
Akiva-Thinkpad | -compile +build | 01:42 |
gerlowskija | no...I want to add debugging to one of the C++ plugins that the calendar uses: qtorganizer5-eds | 01:44 |
gerlowskija | or at least that's what I *think* I'm doing. | 01:44 |
Akiva-Thinkpad | gerlowskija, include <qDebug>? | 01:45 |
gerlowskija | what is that? | 01:45 |
Akiva-Thinkpad | gerlowskija, is this a qt project? | 01:45 |
Akiva-Thinkpad | erp | 01:45 |
Akiva-Thinkpad | is the code you are looking at | 01:45 |
Akiva-Thinkpad | is it c++? | 01:45 |
gerlowskija | yep. | 01:45 |
Akiva-Thinkpad | gerlowskija, yah qt has a great library called qDebug | 01:46 |
Akiva-Thinkpad | the syntax to use it is fairly easy | 01:46 |
Akiva-Thinkpad | qDebug() << "snakes" | 01:47 |
Akiva-Thinkpad | or | 01:47 |
Akiva-Thinkpad | qDebug("Snakes") | 01:47 |
gerlowskija | oh, cool cool. Sorry, I blanked for a minute. I'm using qDebug for writing my debugging info | 01:47 |
gerlowskija | but I'm getting these error when I go to recompile (with or without my added debug) | 01:48 |
Akiva-Thinkpad | ah | 01:48 |
Akiva-Thinkpad | so okay; this plugin; did you download the source for it, and are trying to compile it? | 01:48 |
gerlowskija | yep! | 01:51 |
gerlowskija | (back in 5) | 01:51 |
Akiva-Thinkpad | cool | 01:54 |
gerlowskija | (back) | 01:55 |
Akiva-Thinkpad | gerlowskija, whats the package? | 01:55 |
Akiva-Thinkpad | so I can grab the source | 01:55 |
gerlowskija | bzr branch lp:qtorganizer5-eds | 01:56 |
Akiva-Thinkpad | okay great | 01:56 |
gerlowskija | In the meantime btw, I started looking at a different bug, which also looks to me like an issue with the qtorganizer component. I feel like I'm going nuts and am just imagining these things | 01:57 |
gerlowskija | :-) | 01:57 |
Akiva-Thinkpad | ha ha | 01:58 |
Akiva-Thinkpad | ah and now I have fun | 01:59 |
Akiva-Thinkpad | -- package 'libedataserver-1.2>=3.8' not found | 01:59 |
Akiva-Thinkpad | mmmmm no I got errors in building | 02:02 |
Akiva-Thinkpad | worked out fine for me | 02:02 |
gerlowskija | worked out fine? so you got it to build? | 02:07 |
Akiva-Thinkpad | gerlowskija, yah no executable though, | 02:10 |
Akiva-Thinkpad | being that this is an api I gather | 02:10 |
Akiva-Thinkpad | gerlowskija, proof http://imgur.com/XJDXpij | 02:11 |
Akiva-Thinkpad | gerlowskija, sudo apt-get install libedata-cal1.2-dev should work | 02:15 |
Akiva-Thinkpad | that was the dependency I needed | 02:15 |
gerlowskija | ok, hmm. | 02:16 |
gerlowskija | so, when I ran this on the command line, I ran cmake in the base dir. It looks like you ran it in the organizer sub directory (or that's what the SDK did at least). Maybe that's what I'm doing wrong. Just a sec. | 02:17 |
gerlowskija | So dumb question, when you imported the repo into the SDK, what file did you open to bring in the project? | 02:19 |
gerlowskija | Akiva-Thinkpad: | 02:19 |
Akiva-Thinkpad | That is the joy of c++ and cmake; make a silly syntax error, and you are giving some benign error | 02:19 |
Akiva-Thinkpad | gerlowskija, after branching, I went to the parent folder of the branch | 02:20 |
Akiva-Thinkpad | and did | 02:20 |
Akiva-Thinkpad | qtcreator CMakeLists.txt | 02:20 |
Akiva-Thinkpad | I used the desktop environment to compile | 02:21 |
* Akiva-Thinkpad doesnt really understand this armh platform stuff. | 02:21 | |
* gerlowskija doesnt really understand anything apparently | 02:22 | |
gerlowskija | Still seeing the issue, but at least I learned about a new command..never seen that invoked from the command line before | 02:22 |
gerlowskija | I'm logging off..might be back in an hour or so. Thanks for the troubleshooting help! | 02:23 |
Akiva-Thinkpad | gerlowskija, just tried it today :P | 02:23 |
Akiva-Thinkpad | gerlowskija, yah don't worry I know the pain | 02:24 |
=== salem_ is now known as _salem | ||
=== chihchun_afk is now known as chihchun | ||
bzoltan1 | nik90_: with pleasure :) Sometimes we do good things too ;) | 03:53 |
dholbach | good morning | 06:52 |
=== wendar_ is now known as wendar | ||
justCarakas | wouldn't it be nice to be able to do some stuff like IFTTT ? | 07:51 |
justCarakas | I have that on my android phone, and it automaticly mutes my phone when I arrive at work and sets the ringtone back to 100% when I leave work | 07:52 |
justCarakas | but you can do all sorts of stuff there | 07:52 |
davidcalle | Morning all | 08:02 |
dholbach | salut davidcalle | 08:03 |
=== chihchun is now known as chihchun_afk | ||
=== chihchun_afk is now known as chihchun | ||
=== zsombi is now known as zsombi|afk | ||
=== chihchun is now known as chihchun_afk | ||
JamesTait | Good morning all; happy Another Look Unlimited Day! :-D | 09:20 |
dholbach | jdstrand, I wasn't quite sure if you just said "yeah, the approach makes sense" or "feel free to push" - in any case, here's the MP: https://code.launchpad.net/~dholbach/click-reviewers-tools/1364449/+merge/233088 :) | 10:22 |
t1mp | popey: do you know if I am missing packages for filemanager, or I need to set some env variable? I get this file:///home/tim/dev/ubuntu-filemanager-app/src/app/qml/filemanager.qml:20:1: module "org.nemomobile.folderlistmodel" is not installed import org.nemomobile.folderlistmodel 1.0 | 10:53 |
popey | t1mp: qtdeclarative5-nemo-qml-plugin-folderlistmodel | 10:54 |
=== MacSlow is now known as MacSlow|lunch | ||
t1mp | apt-get cannot find it E: Unable to locate package qtdeclarative5-nemo-qml-plugin-folderlistmodel | 10:55 |
t1mp | maybe this one, but I have it installed already: qml-module-qt-labs-folderlistmodel is already the newest version. | 10:56 |
t1mp | popey: ^ | 10:57 |
* t1mp trying to run filemanager on desktop | 10:57 | |
popey | on utopic? | 10:58 |
popey | works here | 10:58 |
popey | i apt-got it from the daily ppa | 10:58 |
nik90_ | popey: is there a script you use which would go get a branch, make a click package and install it on the phone? | 11:19 |
nik90_ | popey: designer wants to test some of my branches | 11:20 |
popey | nik90_: no, I'd just use click-buddy or spit a click out from qtc | 11:20 |
nik90_ | popey: but does click-buddy create a click for armhf arch? | 11:21 |
nik90_ | or does one need to use qtc explicitly? | 11:21 |
popey | well, that's what _I_ use. | 11:21 |
popey | or you could yank the click from jenkins? | 11:21 |
popey | oh, hang on, it wont have built for armhf will it ☹ | 11:22 |
nik90_ | yeah | 11:22 |
popey | ok, so yes, I'd be inclined to use an armhf chroot via qtc | 11:22 |
nik90_ | that's complicated. I will probably do what I do with you which is to share a dropbox folder and put the click package there | 11:22 |
popey | nik90_: oh, sorry, I'm not suggesting you get the designer to use qtc | 11:27 |
popey | i thought you were asking about what I do for you | 11:27 |
popey | yes, totally spam them with clicks | 11:27 |
nik90_ | yeah I am going to share the folder with the designer which has the clicks | 11:28 |
=== MacSlow|lunch is now known as MacSlow | ||
popey | k | 11:32 |
nik90_ | popey: when the designer tries phablet-shell it says "Job is already running: ssh" | 11:41 |
ogra_ | nik90_, and ? | 11:46 |
ogra_ | you dont like that it tells you that ? | 11:46 |
nik90_ | no it doesn't go into the phone then | 11:46 |
ogra_ | well, but thats most likely unrelated to that message | 11:46 |
ogra_ | nik90_, to debug shell scripts, change the "set -e" at the top to "set -ex" and store the output in a file | 11:47 |
nik90_ | it says | 11:47 |
nik90_ | ssh-keygen: /home/giorgioventuri/.ssh/known_hosts: No such file or directory | 11:48 |
nik90_ | ogra_: ^^ | 11:48 |
ogra_ | so he has no local ssh key it seems | 11:48 |
nik90_ | how does one create that? | 11:48 |
davmor2 | nik90_: seahorse would be the easiest on ubuntu | 11:49 |
ogra_ | yeah | 11:49 |
davmor2 | nik90_: new key ssh | 11:49 |
nik90_ | ok | 11:49 |
davmor2 | nik90_: infact File→New... and from the dialogue that pops up click ssh | 11:50 |
nik90_ | davmor2: in the dialog do I press "Create and setup" | 11:52 |
nik90_ | or "jsut create" | 11:52 |
nik90_ | ogra_: so in "seahorse", it shows that he already has a personal ssh key | 11:54 |
ogra_ | hmm, try touching /home/giorgioventuri/.ssh/known_hosts then | 11:55 |
nik90_ | ogra_: gventuri has that issue | 11:55 |
gventuri | ogra_: id_rsa id_rsa.pub ubuntudevice_0184e5d0b03696f2_id_rsa ubuntudevice_0184e5d0b03696f2_id_rsa.pub | 11:56 |
nik90_ | ogra_: that's the contents of his .ssh folder | 11:56 |
ogra_ | right, try touching the file above | 11:57 |
nik90_ | ogra_: which file? | 11:57 |
ogra_ | <ogra_> hmm, try touching /home/giorgioventuri/.ssh/known_hosts then | 11:57 |
nik90_ | ogra_: no I don't see the known_hosts? | 11:57 |
nik90_ | or may be you are referrign to the ubuntudevice-** file? | 11:58 |
ogra_ | type in: | 11:58 |
ogra_ | touch /home/giorgioventuri/.ssh/known_hosts | 11:58 |
ogra_ | then try phablet-shell again | 11:58 |
nik90_ | ha it works | 11:59 |
gventuri | ogra_: thanks! | 11:59 |
ogra_ | file a bug against phablet-tools please that thouch command should be added there | 11:59 |
nik90_ | I will do that. thnx | 11:59 |
ogra_ | thanks ... feel free to assign to me directly | 12:00 |
jdstrand | dholbach: done | 12:12 |
nik90_ | ogra_: bug 1364913 | 12:15 |
ubot5 | bug 1364913 in phablet-tools (Ubuntu) "phablet-shell spits out error ssh-keygen: /home/username/.ssh/known_hosts: No such file or directory" [Undecided,New] https://launchpad.net/bugs/1364913 | 12:15 |
ogra_ | thanks ! | 12:15 |
dholbach | jdstrand, thanks! | 12:53 |
dholbach | seb128, with the thumbnailer revert being landed, would it make sense to retry some of the MP test runs? http://people.canonical.com/~dpm/core-apps-sponsoring/ | 13:20 |
davmor2 | hey guys do we have a doc published anywhere on how to register an app with download manager? I had a quick google and couldn't see anything | 13:20 |
seb128 | dholbach, I guess so | 13:20 |
davmor2 | nevermind found it I was looking under released not development versions | 13:22 |
popey | dholbach: no | 13:25 |
popey | dholbach: jenkins needs some TLC from francis | 13:26 |
davmor2 | nik90_: can you confirm something for me please. Create an alarm, save it, click on the alarm change the sound, save it again, then let the alarm go off and see if it changed or not from the default? I basically think it is grabbing the setting from the first save and not editing it after. | 13:39 |
nik90_ | davmor2: sure let me try | 13:40 |
nik90_ | davmor2: its a bug | 13:43 |
davmor2 | Yay! | 13:43 |
nik90_ | lol | 13:44 |
davmor2 | nik90_: see how I think of you, I knew you were low on work and would love to do some debugging and fix some code ;) | 13:44 |
nik90_ | hehe | 13:45 |
nik90_ | davmor2: bug report pls | 13:45 |
brendand | davmor2, can you tag the bug with 'testcase exploratory' | 13:48 |
davmor2 | nik90_: https://bugs.launchpad.net/ubuntu-clock-app/+bug/1364949 | 13:48 |
ubot5 | Ubuntu bug 1364949 in Ubuntu Clock App "Editing alarm sounds doesn't actually change them" [Undecided,New] | 13:48 |
nik90_ | davmor2:thnx | 13:48 |
davmor2 | brendand: done | 13:49 |
rickspencer3 | o/ all | 13:55 |
rickspencer3 | mhall119, I'm planning a to hold a workshop next week with my loco on app development | 13:55 |
rickspencer3 | I recall that there was a wiki with some slides all set for it, but I can't find the wiki :( | 13:55 |
dholbach | rickspencer3, here are the materials for our app dev training: https://drive.google.com/a/canonical.com/#folders/0B2SKL58Ipf7eeEdpYW5SdVlUU3M | 13:56 |
dholbach | rickspencer3, I plan to have them all finished by the end of the week | 13:56 |
rickspencer3 | dholbach, here's where I am organizing my workshop, fwiw | 13:56 |
rickspencer3 | https://wiki.ubuntu.com/RickSpencer/UbuntuSDKWorkshop | 13:56 |
rickspencer3 | dholbach, I'll have a link to me deck there, so you guys can do what you want with it ;) | 13:57 |
dholbach | rickspencer3, they'll consist of 4 parts: 1) intro to ubuntu for devices, 2) get started (install sdk, what the emulator can do, etc.), 3) short intro to what qml looks like, our design building blocks, 4) workshop: write your first app (students to work on their own, ask teachers when issues arise) | 13:57 |
dholbach | rickspencer3, 1) and 4) are already in the docs folder I mentioned | 13:57 |
rickspencer3 | dholbach, perfect | 13:57 |
dholbach | rickspencer3, great, I'll take a look at yours as well | 13:57 |
dholbach | rickspencer3, let me know if you have comments :) | 13:58 |
rickspencer3 | dholbach, I'll def. start with your slides | 13:58 |
dholbach | rock on! | 13:58 |
nik90_ | davmor2: I think it is a indicator-datetime bug since I just outputted the alarm sound at the end of updating an alarm and it shows the correct alarm sound that was chosen | 13:58 |
rickspencer3 | dholbach, your rss reader looks perfect | 13:58 |
popey | rpadovani: mzanetti can we bump the reminders meeting to tomorrow? i have a clash? | 13:58 |
rickspencer3 | I'll use that and give you feedback on how it goes | 13:59 |
dholbach | rickspencer3, I had quite a bit of help from mhall119 with that one :) | 13:59 |
rpadovani | popey, tomorrow only morning or before 4.30 PM | 13:59 |
* mzanetti won't be here tomorrow at all | 13:59 | |
davmor2 | nik90_: feel free to reassign I'm sure charles is just as unbusy and desperate for extra work :D | 14:00 |
nik90_ | charles: bug 1364949 | 14:00 |
ubot5 | bug 1364949 in Ubuntu Clock App "Editing alarm sounds doesn't actually change them" [Medium,Confirmed] https://launchpad.net/bugs/1364949 | 14:00 |
davmor2 | I couldn't even type that and keep a straight face | 14:00 |
nik90_ | charles: seems like a regression | 14:00 |
nik90_ | davmor2: lol | 14:00 |
popey | rpadovani: mzanetti ok, how about in 30 mins? | 14:01 |
mzanetti | popey: I have my standup in 30. but 45 would work for me | 14:01 |
popey | hm, i have a clash | 14:01 |
mzanetti | haha | 14:01 |
mzanetti | how hard can it be :D | 14:02 |
popey | how about 16:30 UTC? | 14:02 |
mzanetti | ok | 14:02 |
popey | rpadovani: ^ | 14:02 |
davmor2 | popey, mzanetti: Midnight I bet neither of you are doing anything at midnight? | 14:02 |
nik90_ | davmor2: what does the explanatory tag indicate? Does it require a manual test update? | 14:02 |
davmor2 | brendand: ^ | 14:03 |
nik90_ | davmor2: I meant exploratory | 14:03 |
charles | davmor2, nik90_, :-) | 14:05 |
=== zsombi|afk is now known as zsombi | ||
brendand | davmor2, it's for our internal purposes | 14:06 |
rpadovani | popey, mzanetti maybe later today? | 14:06 |
davmor2 | nik90_: That is going to be how the issue was found I was just tatting with alarms so it was during exploratory testing. Testcase how ever would mean you need a manual or automated testcase adding for it I guess :) | 14:07 |
nik90_ | charles: so on outputting the alarm sound just after pressing the save button I notice that the alarm sound is the correct one. But what is being played is the default one | 14:07 |
davmor2 | charles: so if I create an alarm with a different sound it plays the new sound. So it is only edited ones that don't change the sound playing :( | 14:08 |
charles | nik90_, davmor2, sorry about my lag time; I'm also in an indicator-transfer discussion. could one of you two please confirm that the new sound's filename is saved in ~/.local/share/evolution/tasks/$foo/tasks.ics ? | 14:09 |
davmor2 | charles: sure give me 5 | 14:09 |
charles | davmor2, ty | 14:09 |
popey | rpadovani: is 16:30 UTC no good for you? | 14:11 |
rpadovani | popey, today? Yap, I miss the message | 14:11 |
popey | ok, lets do that then | 14:12 |
davmor2 | charles: it isn't changing, http://paste.ubuntu.com/8223844/ | 14:14 |
charles | davmor2, that's good to know! | 14:14 |
nik90_ | charles: same here | 14:15 |
charles | davmor2, the joke answer is that's good to know because it's not an indicator-datetime bug :-) | 14:15 |
charles | davmor2, the more serious answer is that it narrows down where the problem is | 14:15 |
nik90_ | :) | 14:15 |
charles | nik90_, davmor2, the next step would be for nik90_ to confirm that his app's going through the right motions of saving the modified event | 14:15 |
charles | nik90_, davmor2, if that's confirmed, then the problem is either in ubuntu-ui-toolkit or qtorganizer5-eds | 14:16 |
nik90_ | charles: before I call alarm.save(), I outputted the alarm sound property. | 14:16 |
nik90_ | charles: it shows the new chosen alarm sound. | 14:17 |
mzanetti | rpadovani: https://code.launchpad.net/~rpadovani/reminders-app/bottomEdge/+merge/231118 | 14:17 |
nik90_ | charles: which means that once save() is called, it is not setting it properly in the task.ics file | 14:17 |
nik90_ | charles: I could do some more debugging to confirm this | 14:17 |
charles | nik90_, please do so | 14:22 |
nik90_ | charles: hmm I suspect the issue is in the SDK since zsombi did some changes related to alarm edits ;D recently | 14:22 |
nik90_ | charles: but I will take care of this | 14:23 |
zsombi | nik90_: ?? | 14:23 |
nik90_ | zsombi: https://launchpad.net/bugs/1364949 | 14:23 |
ubot5 | Ubuntu bug 1364949 in Ubuntu Clock App "Editing alarm sounds doesn't actually change them" [Medium,Confirmed] | 14:23 |
davmor2 | nik90_: you might want to check what happens if you change the time too if you are doing a bit more digging | 14:24 |
zsombi | nik90_: ah, ok, that can be the toolkit thingie... it could be that the flag fro changing that wasn't set | 14:24 |
nik90_ | zsombi: to summarise, when the user edit a saved alarm and changes the alarm sound, it is not changed. | 14:24 |
nik90_ | zsombi: May I toss it over to the toolkit and tag it rtm14. | 14:25 |
davmor2 | nik90_: just incase it is the whole thing that isn't editable once set | 14:25 |
zsombi | nik90_: yup, I'll check it | 14:25 |
nik90_ | davmor2: what! | 14:27 |
nik90_ | davmor2: so changing other properties of the alarm doesnt work? | 14:27 |
davmor2 | nik90_: I haven't checked, I did say if you were digging a little bit more | 14:27 |
davmor2 | nik90_: I can have a quick look | 14:28 |
nik90_ | davmor2: in my testing, alarm time,day seems to change as expected | 14:29 |
nik90_ | charles: I just noticed that http://paste.ubuntu.com/8223955/ has two alarm sounds :P | 14:30 |
nik90_ | charles: but again has to do with the changes in the sdk | 14:31 |
=== fgallina is now known as lunch | ||
charles | nik90_, agreed wrt the sdk, but still that's useful information, make sure it's in the ticket :-) | 15:43 |
bzoltan | mhall119: nik90_: I have pushed a new Trusty QtC plugin backport of the today's release to the Tools Development PPA. This release contains the scope development support and the upcoming new adb policy support. It is an important release. Please bug me if you find anything wrong with it. If you are happy with that release then I will copy the packages to the SDK Release PPA. | 15:56 |
=== lunch is now known as fgallina | ||
nik90__ | bzoltan: ack | 16:08 |
=== alecu_ is now known as alecu | ||
=== nik90__ is now known as nik90_ | ||
nik90_ | mhall119: can you test the scope development support as I don't do scopes (yet) :P | 16:08 |
=== JamesTait is now known as Guest46019 | ||
nik90_ | bzoltan: so is this update already available on utopic since you mentioned trusty backport? | 16:09 |
renatu | gerlowskija, yes I am working on that :D | 16:09 |
=== JamesTai1 is now known as JamesTait | ||
=== davmor2_ is now known as davmor2 | ||
=== popey_ is now known as popey | ||
brendand | davmor2, nik90_ - did you see that alarms are going off 1 minute later than scheduled as well? | 16:22 |
* nik90_ tries that | 16:22 | |
davmor2 | brendand: mine went off at 17:00 | 16:22 |
brendand | davmor2, mine went off at 16:21, set for 16:20 | 16:23 |
* brendand tries again | 16:23 | |
popey | mine went off on time too | 16:24 |
nik90_ | brendand: mine went of on time as well | 16:25 |
brendand | next one did | 16:25 |
brendand | ah well | 16:25 |
nik90_ | brendand: was the first alarm scheduled a long time after the current time? | 16:27 |
nik90_ | brendand: it could be that when the phone is in sleep, time skips | 16:27 |
nik90_ | tsdgeos: hey, quick question when you open the clock-app in Catalan, do the translations show up? | 16:31 |
nik90_ | tsdgeos: I changed my phone language to italian just to test and rebooted the phone. But on opening the clock app no strings are translated | 16:32 |
bzoltan | nik90_: yes, the utopic version was released just few hours ago | 16:33 |
gerlowskija | renatu: cool. Quick question then if you have the time. Is there a way to run an app (specifically the calendar-app, which uses qtorganizer5-eds) against a modified version of the plugin, without installing the modified plugin across my whole system? | 16:33 |
nik90_ | bzoltan: cool I will test it there | 16:34 |
gerlowskija | renatu: or, rephrased, do you have a suggested way of testing changes in qtorganizer5-eds by running an app against it | 16:36 |
tsdgeos | nik90_: i get translations for almost everything yes | 16:48 |
=== seb128_ is now known as seb128 | ||
rpadovani | mzanetti, the modify works well, updated the branch | 16:57 |
renatu | gerlowskija, the plugin is loaded by qt, maybe you could try export QT_PLUGIN_PATH | 16:58 |
renatu | I never tried | 16:58 |
gerlowskija | oh, hmm. how do you test changes you make then? does qtorganizer5-eds have its own unit/integration tests? | 17:00 |
renatu | gerlowskija, I am creating the plugin manually: QOrganizerEDSEngine *engine = QOrganizerEDSEngine::createEDSEngine(QMap<QString, QString>()); | 17:15 |
mhall119 | bzoltan: I'll update my QtC and test it, will give you and zbenjamin feedback | 17:25 |
=== ybon1 is now known as ybon | ||
ahayzen | popey, balloons, are we still suffering jenkins outage? | 17:50 |
balloons | ahayzen, yep | 17:58 |
ahayzen | balloons, :( any eta or are you still battling? | 17:59 |
pmcgowan | mhall119, could you get a description on how dekko uses the custom url scheme delegation? is there some other way to accomplish this? | 19:21 |
pmcgowan | DanChapman, ^^ | 19:22 |
ahayzen | balloons, music-app seems to be running nicely so far in jenkins thanks for whatever you guys did to fix it :) | 19:22 |
* ahayzen waits patiently to see if it will fully pass :) | 19:23 | |
balloons | ahayzen, it appears we might be out of the woods | 19:26 |
ahayzen | balloons, \o/ ... i'm just checking which mps we would like to land before the next push to store with victor.... | 19:26 |
ahayzen | balloons, 'Finished: SUCCESS' :D | 19:28 |
mhall119 | pmcgowan: http://bazaar.launchpad.net/~dpniel/dekko/trunk-1/view/head:/src/Ubuntu/qml/MessageView/HtmlPart.qml#L41 | 19:35 |
mhall119 | Trojita core uses URLs like trojita-imap:// and such to load message parts | 19:37 |
pmcgowan | mhall119, wondering if there is another way to implement it which would be easier than providing this in oxide | 19:37 |
mhall119 | pmcgowan: possibly | 19:38 |
mhall119 | looking at this code, maybe just allowing an override of the QNetworkAccessmanager used by Oxide would do it | 19:38 |
pmcgowan | let me add that pointer to the bug | 19:39 |
pmcgowan | mhall119, thanks | 19:39 |
mhall119 | so it looks like 2 things are happening: | 19:41 |
mhall119 | 1) They have a custom QNetworkAccessManager that knows to query trojita core API for things like trojita-imap:// | 19:41 |
mhall119 | 2) A wrapper class to for QNetworkReply that I assume makes it more QML-friendly | 19:42 |
mzanetti | kenvandine: hi. quick question: I have images in my app I want to export. I know how create a source so others can import it, but can I actively push it to the gallery from my app? or having a list of things that could potentially handle it and let the user pick one? | 20:25 |
kenvandine | mzanetti, yup | 20:26 |
kenvandine | create a transfer and charge it | 20:26 |
kenvandine | basically add the ContentPeerPicker | 20:26 |
mzanetti | aha! | 20:27 |
mzanetti | missed it in the docs | 20:27 |
* mzanetti tries | 20:27 | |
kenvandine | with ContentHandler.Destination | 20:27 |
kenvandine | that will show peers that can open it | 20:27 |
mzanetti | bbiab :) | 20:29 |
mhall119 | kenvandine: I have the same question, actually | 20:30 |
mhall119 | so once you charge it, do you have to do anything else? | 20:30 |
kenvandine | nope | 20:30 |
mhall119 | also, what's the difference between a destination and a share? | 20:30 |
kenvandine | once it's charged, the destination app should get focus | 20:30 |
kenvandine | mhall119, technically none :) | 20:30 |
mhall119 | ok :) | 20:30 |
kenvandine | but... we make you choose one of the other so you can present it to the user differently | 20:30 |
kenvandine | but on the backend it does the same thing | 20:31 |
mzanetti | kenvandine: file:///home/micha/Develop/dronefly/app/components/ImageGallery.qml:158:5: created by hub | 20:35 |
mzanetti | kenvandine: as I saw you asking for feedback :) this could be a bit more verbose. took me a while | 20:35 |
kenvandine | ? | 20:35 |
kenvandine | oh | 20:35 |
mzanetti | kenvandine: doesn't that mean its registered as qmlRegisterUncreatableType? | 20:35 |
kenvandine | yeah, it could be | 20:35 |
kenvandine | yes | 20:36 |
kenvandine | which is that? | 20:36 |
kenvandine | paste the source | 20:36 |
mzanetti | ContentTransfer {} | 20:36 |
kenvandine | yeah... you can't do that :) | 20:36 |
kenvandine | the peer picker will give you a transfer | 20:36 |
mzanetti | yeah. figured by now. but could say "ContentTransfer can't be created this way. Get one from ContentHub" :) | 20:36 |
kenvandine | but yes... we could have a better message there | 20:36 |
kenvandine | yes | 20:37 |
* kenvandine fixes now | 20:37 | |
mzanetti | :) | 20:37 |
mzanetti | why does google always redirect me to sdk-1.0 docs... no wonder I totally missed the export api. /me notes down to check sdk version in url | 20:41 |
kenvandine | mzanetti, i proposed a branch :) | 20:43 |
kenvandine | "Not creatable as an object, please use ContentPeer::request()" | 20:43 |
mzanetti | ah. exactly what I needed. was still searching where to get it from | 20:43 |
mzanetti | thanks :) | 20:43 |
kenvandine | np :) | 20:43 |
mhall119 | kenvandine: is there a way to tell ContentPeerPicker not to show the app that initiated it? | 20:43 |
kenvandine | ContentPeerPicker has a selected signal | 20:43 |
mhall119 | kenvandine: my app is both an importer and exporter of images | 20:43 |
kenvandine | mhall119, no... sorry | 20:44 |
kenvandine | good idea though | 20:44 |
kenvandine | mhall119, file a bug :) | 20:44 |
kenvandine | that'll take a little more thought | 20:44 |
kenvandine | but we should be able to filter it out of the model automatically | 20:44 |
kenvandine | mhall119, i'm really wishing i had a way to open pdf files on my phone | 20:45 |
* kenvandine hides | 20:45 | |
mhall119 | kenvandine: https://bugs.launchpad.net/content-hub/+bug/1365148 | 20:46 |
ubot5 | Ubuntu bug 1365148 in content-hub "ContentPeerPicker shouldn't show the app that is using it" [Undecided,New] | 20:46 |
mhall119 | kenvandine: there's an app in the store for viewing PDFs | 20:46 |
mhall119 | it's quite nice | 20:46 |
kenvandine | mhall119, but does it show up in the peer picker for downloads? | 20:46 |
mhall119 | kenvandine: conveniently it can use the filemanager-app as a picker :) | 20:46 |
kenvandine | right... | 20:47 |
mhall119 | kenvandine: ah, I don't think so no | 20:47 |
kenvandine | :-D | 20:47 |
kenvandine | i was giving you an opening for making a jab :) | 20:47 |
mhall119 | it would be nice if filemanager-app was also a destination for ContentType.All | 20:47 |
mhall119 | ^^ happy :) | 20:47 |
mhall119 | kenvandine: is there a way in QML to delete files that I've imported via content-hub? | 20:48 |
kenvandine | not in pure QML | 20:48 |
mhall119 | :( | 20:48 |
kenvandine | mhall119, so if you don't choose a content store, the files won't persist | 20:50 |
kenvandine | but that doesn't help if you need them to live longer | 20:51 |
mhall119 | yeah, I want them to live longer, and let the user delete them from my app | 20:51 |
=== salem_ is now known as _salem | ||
mzanetti | kenvandine: does this make sense? http://paste.ubuntu.com/8226754/ | 20:59 |
kenvandine | mzanetti, so why not use the ContentPeerPicker? | 21:00 |
mzanetti | kenvandine: ? | 21:00 |
mzanetti | what does the content picker have to do with it? | 21:01 |
kenvandine | ContentPeerPicker shows the list of peers | 21:01 |
twstddev | nik90_, ping | 21:01 |
mzanetti | oh... contentpeerpicker | 21:01 |
kenvandine | what you did there would give you the default peer for share and pictures | 21:01 |
kenvandine | which i don't think exists | 21:01 |
kenvandine | not a "default" | 21:01 |
kenvandine | http://bazaar.launchpad.net/~ken-vandine/+junk/hub-exporter/view/head:/hub-exporter.qml#L409 | 21:03 |
kenvandine | mzanetti, ^^ | 21:03 |
kenvandine | a complete example | 21:03 |
mzanetti | i c | 21:03 |
mzanetti | thanks | 21:03 |
kenvandine | np | 21:03 |
nik90_ | twstddev: pong | 21:04 |
twstddev | nik90_, http://146.185.188.87/?lat=40.714270&long=-74.005970 | 21:05 |
twstddev | that should stay there, it's on popey's server | 21:05 |
nik90_ | twstddev: oh cool | 21:06 |
twstddev | nik90_, as well I had a look at the cpu high load issue in the clock app. You do a software accelerated animation, you basically create your own animation loop with 100 fps and rotate the image. I found that animator components should render on gpu, but honestly have not noticed much of a difference | 21:08 |
twstddev | probably on my vm it cannot initialise GL | 21:08 |
twstddev | so, the best probably make a one second tick | 21:09 |
twstddev | :) | 21:09 |
nik90_ | :P | 21:09 |
nik90_ | thats what we had at the beginning | 21:09 |
twstddev | you can check on the device | 21:09 |
twstddev | with RotationAnimator | 21:09 |
nik90_ | will do | 21:09 |
twstddev | documentation claims that should be hardware accelerated | 21:09 |
twstddev | not RotationAnimation, but RotationAnimator :P | 21:10 |
nik90_ | yup | 21:11 |
nik90_ | http://qt-project.org/doc/qt-5/qml-qtquick-rotationanimator.html | 21:11 |
nik90_ | fginther: I am getting mixed results on https://code.launchpad.net/~nik90/ubuntu-clock-app/conditionally-load-alarmmodel/+merge/232412 | 21:12 |
nik90_ | fginther: it says it passed Continous Integration but failed autolanding | 21:12 |
ahayzen | nik90_, same i just had one of the music-app landings explode | 21:13 |
nik90_ | hmm strange | 21:13 |
ahayzen | nik90_, yep :/ you can see it go green for a bit...then red ...then maybe green again? http://91.189.93.70:8080/job/generic-mediumtests-utopic/ | 21:14 |
fginther | ahayzen, one of your music-app landings failed due to an incomplete fix for the recent jenkins issue, I've reappoved the MP | 21:15 |
fginther | nik90_, looking | 21:15 |
ahayzen | fginther, oh cool thanks | 21:15 |
fginther | nik90_, I see one problem, the clock reboot branch job was still trying to merge those MPs | 21:17 |
nik90_ | fginther: oh the first time it failed, I waited an hour before top-approving again | 21:18 |
fginther | nik90_, well, there were two autolanding jobs being triggered simultaneously | 21:18 |
nik90_ | ok | 21:19 |
fginther | nik90_, the other problem is that the tests are not passing on a mako: https://jenkins.qa.ubuntu.com/job/generic-click-autopilot-runner-mako/472 | 21:19 |
nik90_ | fginther: that's a known issue..its due an upstream autopilot bug | 21:20 |
nik90_ | fginther: related to the datetime picker | 21:20 |
fginther | nik90_, ok | 21:20 |
nik90_ | although I thought we skipped it on the device | 21:20 |
fginther | the autolanding job for lp:ubuntu-clock-app have been running mako tests for a while now. When the project trunk was switched, it also meant it started running mako tests on the reboot branch | 21:22 |
fginther | nik90_, is that expected? | 21:23 |
nik90_ | fginther: hmm then that could indicate real failure | 21:23 |
* balloons reads | 21:23 | |
nik90_ | fginther: let me try with another branch. The tests in this MP failed initially on my laptop. But I fixed it, checked it locally and then pushed. | 21:24 |
nik90_ | fginther: and then I noticed jenkins passed it. But I did not check on mako | 21:24 |
balloons | nik90_, https://jenkins.qa.ubuntu.com/job/generic-click-autopilot-runner-mako/472/testReport/junit/ubuntu_clock_app.tests.test_alarm/TestAlarm/test_add_recurring_type_alarm_must_add_to_alarm_list_random_/ this does not look like the datepicker bug | 21:24 |
nik90_ | balloons: yeah, let me test on mako and see where the issue is | 21:25 |
nik90_ | balloons: does the instructions at http://www.theorangenotebook.com/2014/02/click-buddy-and-you-how-to-test-your.html still valid? | 21:34 |
nik90_ | balloons: I get errors that the custom C++ plugins like DateTime, Timezone are not loaded | 21:35 |
balloons | nik90_, http://developer.ubuntu.com/apps/sdk/tutorials/building-cross-architecture-click-applications/ is the definitive reference for building armhf binaries | 21:41 |
balloons | this is a rough version I did which contains info about how I build things: http://www.theorangenotebook.com/2014/05/building-cross-platform-click-packages.html | 21:41 |
nik90_ | balloons: ok so I build it that way and install the click package manually and then do phablet-test-run? | 21:42 |
balloons | nik90_, yea build and install it, make sure you can load it and it runs | 21:42 |
balloons | then you can run the tests however you feel | 21:42 |
nik90_ | ok | 21:43 |
balloons | I like using autopkgtest for this as it does everything you need. You can literally plug the phone in and hit the command and it runs | 21:46 |
balloons | it grabs depends, setups up ap, copies the tests, etc | 21:46 |
nik90_ | balloons: but I thought that didnt work for the new clock app | 21:47 |
balloons | what didn't work? autopkgtest? | 21:47 |
nik90_ | balloons: also when I install the click myself, would phablet-test-run grab the tests from /opt/com.ubuntu.clock folder? | 21:48 |
nik90_ | balloons: autopkgtest yes | 21:48 |
nik90_ | https://bugs.launchpad.net/ubuntu-clock-app/+bug/1355145 | 21:49 |
ubot5 | Ubuntu bug 1355145 in Ubuntu Clock App ""make autopilot" fails in autopkgtest" [Undecided,New] | 21:49 |
balloons | on that bug.. hmm.. However, it's not needed to run tests on the device. autopkgtest keys off the manifest file for a click | 21:50 |
balloons | nik90_, works for me; adt-run --click com.ubuntu.clock --- ssh -s adb | 21:50 |
balloons | ^^ that will run the tests for whatever version of clock I have installed on my device | 21:50 |
nik90_ | balloons: but where does autopkgtest grab the tests from? | 21:51 |
nik90_ | I just want to make sure I am runnign the latest tests and not some old trunk ones | 21:51 |
balloons | it reads the click manifest and grabs them. in your case, you should pass the local tests along so it uses those instead | 21:51 |
balloons | so, adt-run ubuntu-clock-app-local-folder/ --click com.ubuntu.clock --- ssh -s adb | 21:51 |
nik90_ | ah | 21:52 |
balloons | no worries, I have a post actually on promoting this a bit more.. I did an initial post when support landed, but things have gotten easier/better since | 21:52 |
balloons | it's come time to push folks to adopting it :-) | 21:52 |
nik90_ | hmm let me guess I need to try this on utopic since trusty doesnt have latest autopkgtest | 21:53 |
balloons | you can actually just grab the utopic deb, it works fine | 21:53 |
balloons | so, yes trusty is fine :-) | 21:53 |
balloons | http://mirrors.kernel.org/ubuntu/pool/main/a/autopkgtest/autopkgtest_3.4_all.deb | 21:53 |
balloons | a backport should be done.. we can bug pitti to do it :-) | 21:53 |
ahayzen | balloons, fginther (and others who helped) thanks for getting jenkins back up, all of the backlog of music-app has now landed \o/ thanks again :) | 21:54 |
balloons | good to hear ahayzen | 21:54 |
fginther | ahayzen, sorry for the mess | 21:54 |
fginther | ahayzen, and you're welcome :-) | 21:55 |
ahayzen | balloons, popey when u have a moment a store build of music would be appreciated (hopefully it will fix the krillin CI issues) | 21:55 |
popey | balloons: if you upload, I'll approve. | 21:55 |
balloons | popey, yep, trying | 21:55 |
ahayzen | #611 should be the latest | 21:55 |
balloons | I can't get reminders to upload, it keeps rejecting | 21:55 |
balloons | I hope music fairs better | 21:56 |
ahayzen | heh | 21:56 |
popey | rejecting how? | 21:56 |
balloons | I have trouble with the upload form.. it often stops, or fails validation | 21:56 |
popey | balloons: i can't download clicks to review, sound the beuno alarm! | 22:01 |
balloons | yikes! glad it's not just me | 22:05 |
balloons | nik90_, btw, https://people.debian.org/~mpitt/autopkgtest/README.click-tests.html should explain in more detail what I just said | 22:07 |
nik90_ | balloons: ok | 22:08 |
nik90_ | balloons: turns out it is a real failure on device :/ | 22:09 |
nik90_ | balloons: basically the clock app freezes when you try swiping the bottom edge up while the alarm database is loading...although it happens only in that branch. | 22:10 |
balloons | hmm,interesting | 22:14 |
=== daker_ is now known as daker | ||
popey | "There was an error connecting to the download server. Please try again later." | 22:23 |
ahayzen | balloons, u got a moment for a quick autopilot question? | 22:27 |
balloons | shoot | 22:29 |
ahayzen | balloons, when doing an assertThat to a property should there be lambda before it or can it directly go as the first parameter? (I'm just trying to tidy up more old code) | 22:30 |
ahayzen | balloons, so this is directly going to the qml property not to a helper method | 22:30 |
balloons | popey, ahayzen wahoo, music uploaded fine | 22:30 |
ahayzen | balloons, \o/ | 22:30 |
balloons | ahayzen, using eventually requires a function | 22:31 |
balloons | but otherwise you don't need lambda in an assert | 22:31 |
ahayzen | balloons, hmmm so doing self.assertThat(self.player.isPlaying, Eventually(Equals(True))) ? | 22:31 |
balloons | ahayzen, I would think that is just fine | 22:32 |
ahayzen | balloons, ok because before we were sometimes doing..actual_title = lambda: self.player.currentMetaTitle ... then self.assertThat(actual_title, Eventually(Equals(whatever))) | 22:32 |
balloons | does it complain? If so, you can construct something ofc | 22:32 |
ahayzen | balloons, so should that be able to move directly as the first parameter | 22:33 |
balloons | right | 22:33 |
balloons | I believe so.. but hey, python will yell if it's not true | 22:33 |
ahayzen | balloons, ok i'll try it.... i'm just trying not to make 'flaky' tests :) | 22:33 |
balloons | ahayzen, right.. either way won't be flaky, heh, it's syntax.. but making lambda functions needlessly should be avoided | 22:34 |
balloons | it's confusing | 22:34 |
ahayzen | balloons, exactly why i'm trying to remove them :) | 22:34 |
popey | balloons: do we need to go through and retry all the merges or has that been tried? | 22:38 |
balloons | popey, slowly but surely yes | 22:38 |
balloons | I don't want to overrun jenkins so I've been rebuilding the important ones | 22:38 |
balloons | feel free to do the same | 22:38 |
popey | balloons: fginther I'm getting 500 when trying to retry a build. | 23:24 |
popey | https://code.launchpad.net/~dpm/ubuntu-filemanager-app/desktop-i18n/+merge/230591 to http://91.189.93.70:8080/job/generic-mediumtests-utopic/1705/console | 23:24 |
gerlowskija | renatu: ping | 23:50 |
Generated by irclog2html.py 2.7 by Marius Gedminas - find it at mg.pov.lt!