*** sriram has joined #openstack-zaqar | 00:02 | |
openstackgerrit | Masaki Matsushita proposed openstack/zaqar: Validate UUIDs (Message ID, Client UUID, Claim ID) before the driver sends it. https://review.openstack.org/164671 | 00:24 |
---|---|---|
*** ericksonfgds_ has joined #openstack-zaqar | 00:33 | |
*** reed has quit IRC | 00:39 | |
*** achanda_ has quit IRC | 00:48 | |
*** ericksonfgds_ has quit IRC | 00:54 | |
*** exploreshaifali has quit IRC | 01:20 | |
openstackgerrit | Masaki Matsushita proposed openstack/zaqar: Validate UUIDs before the driver sends it https://review.openstack.org/164671 | 01:51 |
*** achanda has joined #openstack-zaqar | 02:27 | |
*** chandankumar has joined #openstack-zaqar | 02:51 | |
*** achanda has quit IRC | 02:52 | |
*** echevemaster has quit IRC | 03:05 | |
*** echevemaster has joined #openstack-zaqar | 03:05 | |
*** boris-42 has quit IRC | 03:12 | |
*** sriram has quit IRC | 03:25 | |
*** chandankumar has quit IRC | 03:42 | |
*** flwang has quit IRC | 03:52 | |
*** chandankumar has joined #openstack-zaqar | 03:57 | |
*** cpallares has quit IRC | 03:58 | |
*** chandankumar has quit IRC | 03:59 | |
*** chandankumar has joined #openstack-zaqar | 04:00 | |
*** achanda has joined #openstack-zaqar | 04:01 | |
*** achanda has quit IRC | 04:46 | |
*** achanda has joined #openstack-zaqar | 04:49 | |
*** achanda has quit IRC | 04:49 | |
*** exploreshaifali has joined #openstack-zaqar | 05:12 | |
*** amalagon has quit IRC | 05:30 | |
*** exploreshaifali has quit IRC | 05:30 | |
*** achanda has joined #openstack-zaqar | 06:26 | |
*** echevemaster has quit IRC | 06:43 | |
*** exploreshaifali has joined #openstack-zaqar | 07:00 | |
exploreshaifali | flwang1, ping! | 07:22 |
exploreshaifali | flwang1, I can not think of how to make send DataDriver instances, there we are have list of objects of MessageQueueHandler | 07:24 |
exploreshaifali | and MessageQueueHandler have _delete and _stats methods only in case of redis it also have _create method along with these 2 | 07:25 |
*** exploreshaifali has quit IRC | 07:28 | |
*** achanda has quit IRC | 07:31 | |
*** dynarro has joined #openstack-zaqar | 07:55 | |
*** exploreshaifali has joined #openstack-zaqar | 08:34 | |
*** boris-42 has joined #openstack-zaqar | 08:59 | |
*** dynarro has quit IRC | 09:29 | |
*** exploreshaifali has quit IRC | 09:45 | |
*** dynarro has joined #openstack-zaqar | 09:54 | |
*** dynarro has quit IRC | 10:24 | |
*** achanda has joined #openstack-zaqar | 10:31 | |
*** exploreshaifali has joined #openstack-zaqar | 10:34 | |
*** achanda has quit IRC | 10:36 | |
*** exploreshaifali has quit IRC | 10:41 | |
*** flwang1 has quit IRC | 11:53 | |
*** exploreshaifali has joined #openstack-zaqar | 11:53 | |
*** flwang has joined #openstack-zaqar | 11:56 | |
*** mpanetta has joined #openstack-zaqar | 12:29 | |
*** exploreshaifali has quit IRC | 12:33 | |
*** chandankumar has quit IRC | 12:33 | |
*** dynarro has joined #openstack-zaqar | 12:42 | |
*** flwang has quit IRC | 12:45 | |
*** flwang has joined #openstack-zaqar | 12:48 | |
*** exploreshaifali has joined #openstack-zaqar | 12:52 | |
exploreshaifali | flwang, around? | 12:54 |
vkmc | exploreshaifali, flwang is probably asleep heh :) | 13:01 |
exploreshaifali | vkmc, okay! | 13:01 |
exploreshaifali | Thanks :) | 13:01 |
vkmc | np | 13:01 |
vkmc | what is the status of your change? | 13:01 |
exploreshaifali | vkmc, as per last discussion with flwang , https://review.openstack.org/#/c/144340/25/zaqar/storage/pipeline.py L99 here I am suppose to return DataDriver object rather than list | 13:03 |
exploreshaifali | atm we are returning list of MessageQueueHandler | 13:03 |
flaper87 | exploreshaifali: nope, you're suppose to return a list | 13:04 |
flaper87 | there could be more than one plugin | 13:04 |
flaper87 | what you need to do is call `extend` instead of `append` in L128 | 13:04 |
flaper87 | and L141 | 13:04 |
flaper87 | also, HELLLOOOOOOOOOOOOOOOOOOOOOOO! | 13:04 |
exploreshaifali | flaper87, o_O okay!! | 13:05 |
exploreshaifali | goooooooooooood morning :) | 13:05 |
exploreshaifali | :D | 13:05 |
vkmc | flaper87, did you hear the latest best news? | 13:05 |
flaper87 | vkmc: mmh, I'm afraid I didn't | 13:06 |
vkmc | exploreshaifali, tell him :) | 13:06 |
exploreshaifali | flaper87, I am greatful to join whole Zaqar team in coming Design summit | 13:07 |
exploreshaifali | :D | 13:07 |
flaper87 | exploreshaifali: O.O | 13:07 |
* flaper87 fainted | 13:07 | |
exploreshaifali | hahaha | 13:07 |
flaper87 | exploreshaifali: that means we can complete your internship by teaching you how to party properly | 13:07 |
exploreshaifali | haha | 13:07 |
flaper87 | *cough* I mean, work, obviously *cough* | 13:07 |
exploreshaifali | flaper87, yes ofcourse | 13:08 |
flaper87 | exploreshaifali: I'm SOOOO EXCITED!!!!! | 13:08 |
exploreshaifali | vkmc, and I too | 13:08 |
exploreshaifali | :D | 13:08 |
flaper87 | exploreshaifali: you are talking to me, just fyi | 13:08 |
flaper87 | I mean, you can mention vkmc all you want | 13:08 |
vkmc | exploreshaifali, try to keep away from flaper87 when he says tequila is a bad idea | 13:09 |
flaper87 | but don't be rude | 13:09 |
flaper87 | :P | 13:09 |
exploreshaifali | the last lesson of intership will be most memorable one | 13:09 |
flaper87 | tequila is always a bad idea | 13:09 |
flaper87 | ALWAYS! | 13:09 |
flaper87 | for gods sake, how many times do I have to repeat this? | 13:09 |
vkmc | exploreshaifali, for some reason he makes it look like a good idea | 13:09 |
exploreshaifali | okay | 13:09 |
exploreshaifali | tequila - tequila | 13:09 |
vkmc | flaper87, there are records of this statement | 13:10 |
flaper87 | vkmc: I have that statement in my twitter profile, I couldn't go any more public than that | 13:12 |
flaper87 | :P | 13:12 |
exploreshaifali | vkmc, seems like flaper87 moved in his old memories | 13:12 |
flaper87 | exploreshaifali: lol, old... I'd say present :D | 13:12 |
vkmc | flaper87, we have to recover the recordings on Travis phone haha | 13:12 |
exploreshaifali | :D | 13:12 |
vkmc | exploreshaifali, I'm so excited you can join us :) you will love the summit | 13:14 |
*** sriram has joined #openstack-zaqar | 13:14 | |
exploreshaifali | yes yes!! I can't sleep for last while night | 13:14 |
exploreshaifali | was dreaming about summit only | 13:14 |
flaper87 | vkmc: I think he deleted those | 13:15 |
exploreshaifali | vkmc, thanks a lot for always being super supportive! | 13:15 |
flaper87 | we never created our app /cc kragniz | 13:15 |
*** flwang has quit IRC | 13:16 | |
vkmc | flaper87, I hope he did haha | 13:16 |
vkmc | exploreshaifali, np, thanks for being such an amazing intern | 13:16 |
* exploreshaifali putting her hand on her eyes | 13:17 | |
vkmc | :) | 13:17 |
exploreshaifali | :D | 13:17 |
*** flwang has joined #openstack-zaqar | 13:18 | |
exploreshaifali | and thanks to flaper87 too for being super awesome mentor! | 13:18 |
exploreshaifali | flwang, goood morning! | 13:19 |
*** amalagon has joined #openstack-zaqar | 13:21 | |
flaper87 | exploreshaifali: it's vkmc and me who should thank you for contributing | 13:25 |
flaper87 | exploreshaifali: btw, that reminds me | 13:25 |
flaper87 | The internship is almost done and I'm basically forced to ask: Will you continue working on that patch ? | 13:25 |
vkmc | flaper87, the internship is done | 13:25 |
flaper87 | vkmc: sssssssssshhhhhhhhhhhhhhhh | 13:26 |
vkmc | :D | 13:26 |
flaper87 | I'm playing with exploreshaifali's mind | 13:26 |
exploreshaifali | flaper87, well no | 13:26 |
exploreshaifali | not just with current patch | 13:27 |
exploreshaifali | I will continue contributing for OpenStack other the current patch too | 13:27 |
exploreshaifali | :P | 13:27 |
flaper87 | exploreshaifali: you... scared me | 13:27 |
flaper87 | phew | 13:27 |
flaper87 | ok, cool, so, GET TO WORK NOW!!!!!!!!! | 13:27 |
flaper87 | :D | 13:27 |
exploreshaifali | yea | 13:28 |
exploreshaifali | btw - back to Work :D | 13:28 |
exploreshaifali | so since we are btw flaper87 using append or extend not changing any thing | 13:29 |
exploreshaifali | problem is https://github.com/openstack/zaqar/blob/master/zaqar/transport/wsgi/v2_0/queues.py#L80 | 13:29 |
exploreshaifali | self._queue_controller does not have create method | 13:29 |
exploreshaifali | error message comes for that line is AttributeError: 'list' object has no attribute 'create' | 13:30 |
exploreshaifali | messageQueueHandler that we have defined only have _delete and _stats method | 13:31 |
*** flwang has quit IRC | 13:37 | |
*** flwang has joined #openstack-zaqar | 13:38 | |
exploreshaifali | flaper87, here https://github.com/openstack/zaqar/blob/master/zaqar/transport/wsgi/v2_0/queues.py#L37 we have | 13:41 |
exploreshaifali | [<zaqar.storage.mongodb.messages.MessageQueueHandler instance at 0x7f0187fa1368>, <zaqar.storage.sqlalchemy.messages.MessageQueueHandler object at 0x7f0187f8fa50>, <zaqar.storage.redis.messages.MessageQueueHandler object at 0x7f0187f8fcd0>, <zaqar.common.pipeline.Pipeline object at 0x7f0187f8f950>, <zaqar.storage.sqlalchemy.queues.QueueController object at 0x7f0187f8f5d0>]) | 13:41 |
flaper87 | exploreshaifali: mmh, why are there so many instances of MessageQueueHandler | 13:42 |
flaper87 | ? | 13:42 |
exploreshaifali | they are coming from pipeline | 13:43 |
exploreshaifali | https://review.openstack.org/#/c/144340/25/zaqar/storage/pipeline.py L96 | 13:44 |
exploreshaifali | one instance of MessageQueueHandler for each data-store | 13:45 |
* flaper87 clicks | 13:50 | |
flaper87 | exploreshaifali: ahh wait, gotcha | 13:51 |
flaper87 | lemme take a look again at how that works | 13:51 |
*** amitgandhinz has joined #openstack-zaqar | 13:59 | |
*** cpallares has joined #openstack-zaqar | 14:03 | |
kragniz | woo, there's going to be an exploreshaifali in vancouver! | 14:27 |
exploreshaifali | kragniz, yeah!!! :D | 14:27 |
exploreshaifali | exicited to meet you all guyz! | 14:28 |
kragniz | :D | 14:28 |
kragniz | flaper87: sad we never made that app | 14:28 |
*** achanda has joined #openstack-zaqar | 14:34 | |
flaper87 | is there going to be a kragniz in vancouver ? | 14:37 |
kragniz | flaper87: there will be! | 14:40 |
exploreshaifali | that is great :D | 14:41 |
flaper87 | kragniz: aaaaaaaaaaaaaaaaaaawesome! | 14:43 |
*** achanda has quit IRC | 14:43 | |
flaper87 | exploreshaifali: still around ? | 14:57 |
exploreshaifali | yup | 14:57 |
exploreshaifali | flaper87, yes | 14:57 |
exploreshaifali | flaper87, on your head | 14:57 |
exploreshaifali | :P | 14:57 |
flaper87 | exploreshaifali: ok, looking at that thing | 14:57 |
vkmc | I spend my whole day yesterday reinstalling things | 15:00 |
vkmc | hope I can get back to code soon | 15:00 |
vkmc | damn | 15:00 |
*** chandankumar has joined #openstack-zaqar | 15:04 | |
*** chandankumar has quit IRC | 15:26 | |
flaper87 | exploreshaifali: so, the error there is that queue_controller, message_controller, claim_controller, etc, should return a Pipeline, not a list | 15:38 |
flaper87 | exploreshaifali: The pipeline class is in zaqar.common.pipeline | 15:39 |
flaper87 | not sure when that was changed nor how it passed the gate | 15:39 |
flaper87 | there should be tests for that | 15:39 |
flaper87 | exploreshaifali: do you want to work on a fix for that in a separate patch? | 15:39 |
flaper87 | dynarro: ^ | 15:39 |
flaper87 | otherwise, I can do it myself | 15:39 |
dynarro | flaper87: I could work on it ;) | 15:41 |
flaper87 | dynarro: sounds good | 15:42 |
flaper87 | dynarro: https://bugs.launchpad.net/zaqar/+bug/1433158 | 15:45 |
openstack | Launchpad bug 1433158 in zaqar "The pipeline should return a `zaqar.common.pipeline.Pipeline` object instead of a list" [Undecided,New] | 15:45 |
flaper87 | it's yours | 15:45 |
dynarro | flaper87: thanks! | 15:46 |
vkmc | flaper87, could you review the patches for websocket? if those look good, I can move forward adding the remainding endpoints and tests | 15:47 |
flaper87 | vkmc: I'll get to it right now | 15:50 |
flaper87 | exploreshaifali: lemme know when you read my messages and if they make sense to you | 15:50 |
vkmc | thanks | 15:50 |
flaper87 | also, wait for dynarro's patches | 15:51 |
flaper87 | vkmc: you know how to thank me, words ain't enough | 15:51 |
* flaper87 wants gummy, gummy, GUMMY BEARS! | 15:51 | |
vkmc | I'll pay you back with a bag of taffies next time I meet with you | 15:51 |
flaper87 | sounds good | 15:52 |
flaper87 | exploreshaifali: one more lesson, don't work for free... People are always willing to pay ^ | 15:53 |
flaper87 | :P | 15:53 |
flaper87 | mmh, I really want to fix the pooling issue in the gate | 15:53 |
flaper87 | I'll make zaqar a devstack plugin and that should give us more control over it | 15:53 |
flaper87 | zhiyan: btw, I reviewed your OSProfile patch, let me know your thoughts | 15:54 |
flaper87 | ah wait, you actually replied | 15:54 |
flaper87 | T_T | 15:54 |
vkmc | exploreshaifali, one review, one bag of candies... street laws apply here | 15:54 |
exploreshaifali | whaaaat.... I am stuck at one bag of candies! | 15:55 |
exploreshaifali | cannot move above it, what is written there? | 15:55 |
exploreshaifali | :P | 15:55 |
exploreshaifali | flaper87, okay I will work for that but I need pointers | 15:56 |
flaper87 | exploreshaifali: dynarro took it, just wait for her patch | 15:56 |
exploreshaifali | ammm okay | 15:56 |
exploreshaifali | I missed it | 15:56 |
exploreshaifali | but fine with dynarro :) | 15:56 |
flaper87 | zhiyan: replied | 16:04 |
flaper87 | vkmc: I don't want to be supper, silly, nitpicky but https://review.openstack.org/#/c/164007/4/zaqar/api/v1_1/endpoints.py,cm | 16:05 |
vkmc | flaper87, for the zaqar pool thing I remember we discussed that we needed to create some demo pools | 16:05 |
flaper87 | What do you think about `status` ? | 16:05 |
flaper87 | or `code` ? | 16:05 |
flaper87 | `status_code` seems long and it'll require more data to travel | 16:06 |
vkmc | omg | 16:06 |
vkmc | really flaper87? | 16:06 |
vkmc | lol, sure, I thought about it :) | 16:06 |
flaper87 | vkmc: shut up | 16:06 |
vkmc | you are one of those... nitpickers... nitpicking everything on your way | 16:06 |
vkmc | status sounds good | 16:07 |
* flaper87 pulls vkmc chair and watches her fall | 16:07 | |
flaper87 | vkmc: ok, I'll +2 after that, lets ping flwang for reviews | 16:07 |
vkmc | thanks for checking it out | 16:07 |
vkmc | sure | 16:07 |
vkmc | I was concerned about the json schema doc... messages, pools and flavors were missing | 16:08 |
vkmc | should I add the admin flag for pools/flavors? | 16:08 |
vkmc | I also added the base endpoints (ping and homedoc) | 16:08 |
*** chandankumar has joined #openstack-zaqar | 16:11 | |
flaper87 | vkmc: pools and flavors are admin endpoints | 16:16 |
flaper87 | yes | 16:16 |
flaper87 | vkmc: awesome | 16:16 |
flaper87 | vkmc: could you move the jsonschema patch at the top of the dependency chain | 16:17 |
flaper87 | ? | 16:17 |
flaper87 | actually | 16:17 |
flaper87 | could you remove it from that chain? | 16:17 |
flaper87 | it doesn't make sense to create a dependency there | 16:17 |
vkmc | sure thing | 16:18 |
vkmc | thanks flaper87 | 16:18 |
flaper87 | vkmc: np, girl. here to help | 16:19 |
flaper87 | (or at least pretending to) | 16:19 |
*** mpanetta has quit IRC | 16:32 | |
*** chandankumar has quit IRC | 16:48 | |
*** chandankumar has joined #openstack-zaqar | 17:08 | |
*** chandankumar has quit IRC | 17:18 | |
openstackgerrit | Doraly Navarro proposed openstack/zaqar: Make the Pipeline inmutable. https://review.openstack.org/165153 | 17:26 |
dynarro | exploreshaifali: it's done ^ | 17:28 |
exploreshaifali | dynarro, Thanks! | 17:28 |
dynarro | exploreshaifali: np | 17:28 |
dynarro | :) | 17:28 |
flaper87 | dynarro: exploreshaifali awesome | 17:29 |
flaper87 | thanks to both of you | 17:29 |
flaper87 | exploreshaifali: you need to make your patch depend on that one | 17:29 |
flaper87 | it should be easy/simple to do | 17:29 |
exploreshaifali | okay! | 17:29 |
flaper87 | I mean, it shouldn't conflict with your work | 17:29 |
flaper87 | That's wait I meant with easy/simple | 17:29 |
flaper87 | in other words, straightforward | 17:29 |
flaper87 | and I'll now stfu and leave! | 17:29 |
flaper87 | ttyl girls | 17:30 |
exploreshaifali | ok ok | 17:30 |
exploreshaifali | :D | 17:30 |
*** dynarro has quit IRC | 17:30 | |
*** achanda has joined #openstack-zaqar | 17:34 | |
*** chandankumar has joined #openstack-zaqar | 17:34 | |
*** exploreshaifali has quit IRC | 17:36 | |
*** reed has joined #openstack-zaqar | 17:42 | |
*** chandankumar has quit IRC | 17:50 | |
*** csoukup has joined #openstack-zaqar | 17:55 | |
*** exploreshaifali has joined #openstack-zaqar | 17:59 | |
*** chandankumar has joined #openstack-zaqar | 18:04 | |
*** achanda has quit IRC | 18:16 | |
*** chandankumar has quit IRC | 18:16 | |
*** achanda has joined #openstack-zaqar | 18:21 | |
*** chandankumar has joined #openstack-zaqar | 18:41 | |
*** chandankumar has quit IRC | 18:55 | |
*** ametts has quit IRC | 18:56 | |
*** exploreshaifali has quit IRC | 19:17 | |
*** achanda has quit IRC | 19:33 | |
*** flwang1 has joined #openstack-zaqar | 20:05 | |
*** fifieldt has quit IRC | 20:08 | |
*** achanda has joined #openstack-zaqar | 20:19 | |
*** fifieldt has joined #openstack-zaqar | 20:21 | |
openstackgerrit | Victoria Martínez de la Cruz proposed openstack/zaqar: Update json schema for API v1_1 https://review.openstack.org/148414 | 20:27 |
*** boris-42 has quit IRC | 20:42 | |
*** achanda has quit IRC | 20:44 | |
*** achanda has joined #openstack-zaqar | 20:45 | |
*** sriram has quit IRC | 21:22 | |
openstackgerrit | Victoria Martínez de la Cruz proposed openstack/zaqar: Adds a status code field to the Response https://review.openstack.org/164007 | 21:29 |
*** csoukup has quit IRC | 22:11 | |
flwang | flaper87: ping | 22:31 |
cpallares | flwang: I think you missed him again. | 22:31 |
flwang | ;-) | 22:33 |
*** amitgandhinz has quit IRC | 22:42 | |
*** reed has quit IRC | 22:53 | |
vkmc | flwang, hey there! | 22:58 |
flwang | vkmc: hey | 22:59 |
vkmc | flwang, how is it going? I saw exploreshaifali was working on something for the notifications patch? | 23:00 |
flwang | vkmc: really? | 23:00 |
flwang | vkmc: I think he/she is stilling working on splitting the queue controller | 23:00 |
flwang | the relationship between the patch and notification is if his/her patch works, then my patches' jenkins failure could be gone | 23:01 |
vkmc | flwang, I see | 23:01 |
flwang | vkmc: but | 23:01 |
vkmc | flwang, yes, she is working on the slip queue controller change | 23:01 |
flwang | i have downloaded his/her code and try to run it in my local env | 23:02 |
flwang | it's totally broken :( | 23:02 |
flwang | and almost all the unit test failed as well | 23:02 |
flwang | so i'm not confident to depend on that | 23:03 |
vkmc | hmm | 23:03 |
flwang | that's why I'm also working on the redis driver in parallel | 23:03 |
vkmc | so, notifications is blocked with it? | 23:03 |
flwang | technically, or I would say it's blocked by the redis driver | 23:03 |
openstackgerrit | Victoria Martínez de la Cruz proposed openstack/zaqar: Adds a status code field to the Response https://review.openstack.org/164007 | 23:04 |
flwang | flaper87 told me with exploreshaifali's patch, jenkins would be happy even there is no redis driver for notification | 23:04 |
vkmc | I see... | 23:04 |
vkmc | yes | 23:04 |
vkmc | I wonder if with a few tweaks it will be finished | 23:05 |
flwang | but now I'm not really sure if it could be | 23:05 |
vkmc | I'll download it in my env | 23:05 |
flwang | vkmc: not really | 23:05 |
vkmc | bo :( | 23:05 |
vkmc | ok | 23:05 |
flwang | it's adding many pipeline stages for queue | 23:05 |
flwang | as a result, when you start zaqar server, the queue_controller will be instantiated as a DataDriver list instead of a DataDriver instance | 23:06 |
flwang | so, everything is broken | 23:06 |
flwang | I mean any action related to queue | 23:06 |
openstackgerrit | Victoria Martínez de la Cruz proposed openstack/zaqar: Make the Pipeline inmutable https://review.openstack.org/165153 | 23:08 |
flwang | vkmc: did you try ^ patch with exploreshaifali's patch? | 23:12 |
vkmc | yep, I'm rebasing shaifali's patch | 23:12 |
flwang | so it works? | 23:13 |
vkmc | running py27 tests now | 23:13 |
vkmc | hopefully | 23:13 |
flwang | :-D | 23:13 |
vkmc | :D | 23:13 |
vkmc | while it runs, I'll review your patches | 23:13 |
flwang | vkmc: I'm wondering if the change will impact the basic pipeline logic, I will test your pipeline fix with my webhook patch | 23:15 |
vkmc | it shouldn't... but yes, we better fix that | 23:15 |
vkmc | s/fix/test | 23:17 |
flwang | vkmc: brb, grab some lunch, leave msg for me :) | 23:20 |
vkmc | flwang, sure | 23:20 |
vkmc | tests for the pipeline change are passing | 23:28 |
vkmc | but the splitting is still broken | 23:28 |
vkmc | I'll debug it a little more and try to fix it | 23:28 |
vkmc | I'll upload the rebase anyway, so we can see the output :) | 23:30 |
openstackgerrit | Victoria Martínez de la Cruz proposed openstack/zaqar: Removing QueueController from data to control plane https://review.openstack.org/144340 | 23:31 |
Generated by irclog2html.py 2.14.0 by Marius Gedminas - find it at mg.pov.lt!