*** tpb has joined #tp | 00:00 | |
*** ChanServ sets mode: +o tpb | 00:00 | |
*** bddebian has quit IRC | 00:51 | |
*** pluskid has joined #tp | 01:42 | |
*** xdotx has quit IRC | 02:07 | |
CIA-29 | pluskid schemepy * r39a713255cad /schemepy/mzscheme/ (mzhelper.c mzscheme.py): | 02:09 |
---|---|---|
CIA-29 | Added support for mzscheme string. | 02:09 |
CIA-29 | There are byte string and char string in mz. | 02:09 |
CIA-29 | pluskid schemepy * r111340f9b280 /schemepy/mzscheme/mzscheme.py: Add compile support for mzscheme. | 02:30 |
*** zzorn_laptop has joined #tp | 02:44 | |
*** pluskid has quit IRC | 02:58 | |
mithro | dang | 03:14 |
mithro | missed him | 03:14 |
*** nash has quit IRC | 03:17 | |
CIA-29 | pluskid schemepy * r9b5acf9d1a29 /schemepy/guile/guile.py: Fixed the bug of ref-couting of Guile SCM object. | 03:27 |
llnz | mithro: does tpserver-py allow addCategory and remove category? | 04:05 |
mithro | not sure | 04:14 |
* mithro is heading to bed | 04:14 | |
llnz | ok | 04:14 |
llnz | have a good day | 04:18 |
CIA-29 | pluskid schemepy * rae19f857789c /schemepy/ (guile/guile.py mzscheme/mzscheme.py): | 04:24 |
CIA-29 | Manage the ref-count of mzscheme object. | 04:24 |
CIA-29 | Those object held in Python should be kept from garbage | 04:24 |
CIA-29 | collected by mzscheme. | 04:24 |
*** JLafont has quit IRC | 04:46 | |
*** JLafont has joined #tp | 04:47 | |
JLP | ahoy everyone | 05:17 |
*** peres has joined #tp | 06:02 | |
llnz | hi JLP | 06:06 |
CIA-29 | pluskid schemepy * r0f652936b0b7 /schemepy/mzscheme/ (mzhelper.c mzscheme.py): | 06:06 |
CIA-29 | Added Python Object holding in Scheme for mzscheme. | 06:06 |
CIA-29 | But it is still not working now. The 3m and CGC memory | 06:06 |
CIA-29 | model seems to be rather complex in mzscheme. | 06:06 |
*** peres has quit IRC | 06:21 | |
*** Marcel- has joined #tp | 07:31 | |
llnz | hi Marcel- | 07:33 |
Marcel- | hi llnz | 07:33 |
*** peres has joined #tp | 08:11 | |
*** Iwanowitch has joined #tp | 08:12 | |
*** Marcel- has quit IRC | 08:12 | |
Iwanowitch | Any documentation or examples on how to use libtpclient-py? tpsai-py doesn't seem to work for me. | 08:18 |
llnz | Iwanowitch: tpsai-py uses an old version of the libraries | 08:19 |
llnz | tpclient-pywx uses libtpprot-py and libtpclient-py | 08:19 |
llnz | there is pydoc on the website for them too | 08:19 |
llnz | Start in the python section of http://www.thousandparsec.net/tp/dev/documents.php | 08:21 |
tpb | <http://ln-s.net/1t+n> (at www.thousandparsec.net) | 08:21 |
Iwanowitch | Ah, nice. Thanks. | 08:22 |
llnz | no problem | 08:22 |
* JLP nominates Thousand Parsec as Best Project for Gamers for SF.net 2008 community choice awards | 09:11 | |
*** Marcel- has joined #tp | 09:11 | |
JLP | http://sourceforge.net/awards/cca/?group_id=132078&from=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fthousandparsec%2F | 09:12 |
tpb | <http://ln-s.net/1t-+> (at sourceforge.net) | 09:12 |
llnz | that's odd | 09:14 |
llnz | i get a broken image symbol where the nomination form should be | 09:14 |
llnz | and why are some of the links to doubleclick (then back to sf) | 09:15 |
llnz | ? | 09:15 |
llnz | redirect back... | 09:16 |
JLP | heh, it's SF, they are strange | 09:17 |
llnz | hehe, the NZ open source awards are open for nominations too: http://www.nzosa.org.nz/ | 09:20 |
tpb | Title: New Zealand Open Source Awards 2008 | NZOSA (at www.nzosa.org.nz) | 09:20 |
* ezod is mavrinac on sf.net | 09:25 | |
ezod | i can has be on list? | 09:25 |
* llnz adds ezod | 09:26 | |
ezod | thanks :) | 09:26 |
llnz | 14 developers says sf | 09:29 |
llnz | 29 says ohloh | 09:30 |
JLP | llnz: you can add at least jezuch | 09:38 |
*** bddebian has joined #tp | 09:38 | |
bddebian | Heya | 09:41 |
JLP | bddebian: ahoy | 09:43 |
bddebian | Hello JLP | 09:43 |
llnz | JLP: done | 09:45 |
* JLP was so busy he forgot to pay for his domain :( | 09:50 | |
llnz | :-( | 09:50 |
* llnz wanders off | 09:51 | |
llnz | oh, before i go... | 09:51 |
JLP | noone stollen it yet, it's paid and all should be back soon :) | 09:51 |
llnz | tpserver-cpp 0.5.1 later today | 09:51 |
* llnz wanders off | 09:51 | |
llnz | later all | 09:51 |
*** llnz has quit IRC | 09:51 | |
ezod | are ohloh commit lists just inherently out of date? | 09:55 |
ezod | wow, looks like the record stops a whole 11 hours before my first commit :\ | 09:58 |
JLP | in enlistments it says that config branch for tpserver-cpp was updated 17 days ago | 10:06 |
ezod | hrm | 10:08 |
ezod | any idea what my "committer name" would be? | 10:09 |
ezod | i've tried aaron (ssh key user, what CIA bot reports), ezod (actual git account), and my full name... no dice | 10:10 |
JLP | i think it would be aaron | 10:10 |
ezod | No recognized committer with that name. | 10:11 |
* ezod shrugs | 10:11 | |
*** peres has quit IRC | 10:22 | |
*** zzorn_laptop has quit IRC | 10:22 | |
CIA-29 | pluskid schemepy * red91064660c9 /schemepy/mzscheme/ (Makefile mzhelper.c mzscheme.py): Added a mzscheme type to hold Python objects. | 10:23 |
JLP | oh i see ohloh added jabber integration, let's see how useful it is :) | 10:26 |
ezod | JLP: it appears their jabber user isn't even online :( | 10:29 |
JLP | seams to work here | 10:34 |
ezod | from ohloh: Metrics updated 17 Apr 08 | 11:11 |
*** Iwanowitch has quit IRC | 11:20 | |
*** jphr has joined #tp | 11:34 | |
CIA-29 | jphr tpserver-cpp-risk * rf2898108186d /modules/games/risk/ (TODO risk.cpp risk.h): implemented createGame methods (create - universe,galaxy,planet). Created Dummy galaxy/planets. | 11:35 |
*** peres has joined #tp | 11:39 | |
*** Demitar has quit IRC | 11:57 | |
*** peres has quit IRC | 12:12 | |
CIA-29 | pluskid schemepy * re89e4a5bcb1b /schemepy/mzscheme/ (mzhelper.c mzscheme.py): Testcase test_symbol passed for mzscheme backend. | 12:27 |
CIA-29 | jphr tpserver-cpp-risk * r1c3149b909bc /modules/games/risk/ (13 files): Refactoring code layout. Added my TODO's to TODO file in risk folder. | 12:49 |
CIA-29 | jphr tpserver-cpp-risk * rfaf47e0299fb /modules/games/risk/ (Makefile.am TODO planet.cpp planet.h risk.cpp risk.h): Made getters/setters for Armies property in Planets type. | 12:49 |
CIA-29 | jphr tpserver-cpp-risk * r415c0482d432 /modules/games/risk/ (galaxy.cpp galaxy.h): Created galaxy type which has special "bonus" property for describing a galaxies bonus to reinforcements | 12:50 |
tpb | aloril has quit worldforge (Ping timeout: 378 seconds) | 12:54 |
*** jphr has left #tp | 13:33 | |
tpb | aloril has joined on worldforge | 13:53 |
CIA-29 | jphr tpserver-cpp-risk * r2ac13ecc98ad /modules/games/risk/ (TODO risk.cpp): Added logic for onPlayerAdded and startGame | 13:56 |
*** zzorn has quit IRC | 14:19 | |
*** Iwanowitch has joined #tp | 14:23 | |
*** nuleren has joined #tp | 14:44 | |
CIA-29 | jphr tpserver-cpp-risk * r7fbd24e9b532 /modules/games/risk/ (10 files): Made sure every file ends with newline. Updated TODO file. | 15:05 |
*** JLafont has quit IRC | 15:58 | |
*** JLafont has joined #tp | 15:59 | |
*** Marcel- has quit IRC | 16:04 | |
*** Demitar has joined #tp | 16:05 | |
*** zzorn has joined #tp | 16:37 | |
JLafont | allooo | 17:05 |
JLP | JLafont: ahooooy :) | 17:06 |
JLafont | whats up? | 17:06 |
JLP | JLafont: not much :( busy relaxing after some construction work :) | 17:10 |
JLafont | JLP, ahh that does sound really nice | 17:11 |
mithro | hey JLafont | 17:13 |
mithro | so GSoC officially starts today | 17:13 |
Iwanowitch | Rejoice! | 17:14 |
mithro | JLafont: so where is the code? :) | 17:15 |
JLafont | hey mithro | 17:15 |
JLafont | I'm working on it | 17:15 |
JLafont | haven't made a commit yet | 17:15 |
JLafont | Csv is the greatest thing ever | 17:16 |
mithro | JLafont: commit early, commit often | 17:16 |
mithro | JLafont: we can't see your progress unless it's committed | 17:16 |
mithro | I'll be back in 5-10 minutes | 17:16 |
JLafont | mithro: alrighty. I'll do a commit tonight | 17:16 |
mithro | and then we can discuss how we should move forward | 17:17 |
mithro | kind of like the first of weekly meetings? | 17:17 |
mithro | that sound okay? | 17:17 |
JLafont | yeah | 17:17 |
mithro | Iwanowitch: you had some questions about libtpclient-py | 17:17 |
mithro | it will be a good time to ask questions | 17:18 |
mithro | too | 17:18 |
mithro | be back in 10 | 17:18 |
CIA-29 | jphr tpserver-cpp-risk * rc1f41f9c52d2 /modules/games/risk/risk.cpp: Went over code at end of day and fixed up miscellaneous errors and omissions. | 17:32 |
mithro | okay I'm back now | 17:34 |
JLafont | welcome back | 17:34 |
mithro | JLafont: okay, from this week onwards, weekly status reports are *compulsory* | 17:35 |
JLafont | yes sir | 17:35 |
mithro | they should include the following information | 17:35 |
mithro | - what I did this week | 17:35 |
mithro | - what I didn't do this week, but planned to do and why I wasn't able to do it | 17:36 |
mithro | - what I plan to do next week | 17:36 |
JLafont | sounds good | 17:38 |
mithro | okay cool | 17:39 |
mithro | next thing, each commit should be a single "logical" unit | 17:40 |
mithro | IE, a bug fix | 17:40 |
mithro | or a feature addition | 17:41 |
mithro | it is likely that you will need to do a couple of hundred commits a week when you get going | 17:41 |
JLafont | ok, I already have a big commit with some initialization and unit reader and a couple of fixes. Should I just push that in and then start doing the single feature commits? | 17:42 |
mithro | that sounds reasonable | 17:43 |
mithro | did you get around to doing a squash commit of the two planet name generation patches? | 17:43 |
*** llnz has joined #tp | 17:43 | |
JLafont | I have them as part of my big commit | 17:44 |
llnz | morning all | 17:44 |
JLafont | hi llnz | 17:44 |
mithro | JLafont: my recommendation is to do a branch before the bit commit | 17:46 |
mithro | and then seperate it out into a few smaller commits | 17:46 |
mithro | and then push your branch | 17:46 |
mithro | hey llnz | 17:46 |
JLafont | My commit is all in a dronesec branch right now | 17:46 |
JLafont | how can I seperate it out it? I'm not that familiar with git | 17:47 |
mithro | you can create as many branches as you want | 17:47 |
mithro | JLafont: you pull up something like gitk and just copy out the various bits of the patch | 17:48 |
JLafont | ok | 17:49 |
llnz | hi JLafont, mithro | 17:49 |
JLafont | mithro: sounds simple enough | 17:49 |
mithro | JLafont: if you prefer, you can export the patch as a plain text file | 17:49 |
JLP | llnz: ahoy | 17:52 |
llnz | hi JLP | 17:53 |
mithro | JLafont: so where are you up too? | 17:55 |
JLafont | Dronesec initializes and I have the unit information handler working. I just have to get units to produce | 17:57 |
mithro | that sounds really good | 18:03 |
JLafont | thanks | 18:04 |
mithro | JLafont: so you went the same route as TIMTrader, using CSV files to describe various stuff? | 18:08 |
Iwanowitch | mithro: about libtpclient-py... I'm not entirely sure how to use it and what the important bits are. | 18:13 |
mithro | Iwanowitch: the way to use it is quite simple | 18:14 |
mithro | you use it to download the universe, and then you can access it via dictionaries | 18:14 |
mithro | you should be able to do something like this | 18:19 |
mithro | connection = Connection() | 18:19 |
mithro | # Download the entire universe | 18:19 |
mithro | if connection.setup(host=host, debug=debug): | 18:19 |
mithro | print "Unable to connect to the host." | 18:19 |
mithro | return | 18:19 |
mithro | if failed(connection.connect("tpsai-py/%i.%i.%i" % version)): | 18:19 |
mithro | print "Unable to connect to the host." | 18:19 |
mithro | return | 18:19 |
mithro | if failed(connection.login(username, password)): | 18:19 |
mithro | # Try creating the user.. | 18:19 |
mithro | print "User did not exist, trying to create user." | 18:19 |
mithro | if failed(connection.account(username, password, "", "tpsai-py bot")): | 18:19 |
mithro | print "Username / Password incorrect." | 18:19 |
mithro | return | 18:19 |
mithro | if failed(connection.login(username, password)): | 18:19 |
mithro | print "Created username, but still couldn't login :/" | 18:19 |
mithro | return | 18:19 |
mithro | cache = Cache(Cache.key(host, username)) | 18:19 |
mithro | return connection, cache | 18:19 |
mithro | (that is taken from tpsai-py | 18:19 |
mithro | ) | 18:19 |
mithro | ~seen greywhind | 18:20 |
JLafont | mithro: yeah | 18:20 |
tpb | mithro: greywhind was last seen in #tp 2 weeks, 0 days, 20 hours, 27 minutes, and 2 seconds ago: <greywhind> llnz: do you want to tell me so I can pass it on to him, or e-mail him directly? | 18:20 |
mithro | :/ | 18:20 |
mithro | JLafont: and it's working okay? | 18:20 |
JLafont | mithro: Its simple right now. But its working perfectly | 18:21 |
JLafont | I was surprised at how it didn't give me any problems | 18:23 |
mithro | okay cool | 18:30 |
mithro | Iwanowitch: does that help? | 18:32 |
mithro | once you have a cache object | 18:32 |
mithro | you just look into the various dictionaries | 18:32 |
mithro | IE | 18:32 |
mithro | cache.objects[<object id>] | 18:32 |
Iwanowitch | mithro: is tpsai-py supposed to run? | 18:36 |
mithro | Iwanowitch: I have not updated tpsai-py for the new way for dealing with orders | 18:36 |
Iwanowitch | So the ImportError I'm getting is expected? | 18:36 |
mithro | it will run with the 0.2.x version of libtpclient-py, but not 0.3.x series | 18:36 |
Iwanowitch | Okay. | 18:37 |
mithro | ~seen jmtan | 18:37 |
tpb | mithro: jmtan was last seen in #tp 2 weeks, 4 days, 13 hours, 17 minutes, and 6 seconds ago: <jmtan> archlinux | 18:37 |
Iwanowitch | mithro: I can't import Cache | 18:43 |
mithro | Iwanowitch: hrm? | 18:43 |
Iwanowitch | http://pastebin.com/m4f2dcc49 | 18:44 |
mithro | you need to import tp.client.threads first | 18:45 |
mithro | tim@vaio:~/oss/tp/tpclient-pywx$ python | 18:45 |
mithro | Python 2.5.2 (r252:60911, Apr 21 2008, 11:12:42) | 18:45 |
mithro | [GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu7)] on linux2 | 18:45 |
mithro | Type "help", "copyright", "credits" or "license" for more information. | 18:45 |
mithro | >>> from tp.client import threads | 18:45 |
mithro | No module named avahi_disabled | 18:45 |
mithro | No module named bonjour | 18:45 |
mithro | Using pyZeroConf ZeroConf implimentation... | 18:45 |
mithro | >>> from tp.client.cache import Cache | 18:45 |
Iwanowitch | Indeed, seems to work. | 18:46 |
mithro | it's an evil circular dependency | 18:47 |
mithro | I'll have to figure out how to fix it sometime | 18:47 |
Iwanowitch | Yeah, looks bad... But well, it seems to work now. | 18:48 |
Iwanowitch | Nice. | 18:48 |
mithro | you probably won't need the threads stuff in an AI client | 18:50 |
mithro | you change the cache by issuing "CacheUpdateEvent"s | 18:51 |
mithro | they are a little tricky to get right | 18:52 |
mithro | so you'll probably should ask a load of questions about them | 18:52 |
mithro | it would be also very good if you help improved the documentation so the next person doesn't have to worry as much | 18:52 |
mithro | porting tpsai-py to the new API would probably be a fairly good introduction | 18:53 |
Iwanowitch | Any particular reason why Cache isn't at http://www.thousandparsec.net/tp/dev/documents/python/stable/python-tp-doc/ ? | 18:53 |
tpb | <http://ln-s.net/1tB1> (at www.thousandparsec.net) | 18:53 |
mithro | I have no idea | 18:54 |
Iwanowitch | Or is it that evil dependency thing that makes the generator fail, perhaps? | 18:54 |
mithro | Iwanowitch: possible | 18:54 |
Iwanowitch | (the doc generator, that is) | 18:54 |
mithro | the doc generator is epydoc | 18:54 |
mithro | so you should be able to run it locally | 18:54 |
Iwanowitch | Gets generated fine locally. | 18:58 |
Iwanowitch | Using epydoc 3.0beta1 though. | 18:59 |
mithro | it could be a generation script being screwed | 18:59 |
mithro | or it could be generating against an old verions of the code | 19:00 |
Iwanowitch | mithro: So, are you proposing I update tpsai-py to work with the new libtpclient-py to get some experience with the lib and improve documentation? | 19:02 |
mithro | Iwanowitch: that would be what I would do | 19:02 |
mithro | but it's up to you | 19:02 |
*** greywhind has joined #tp | 19:03 | |
mithro | it does add the extra complexity of dealing with tpsai-py code (which is not the nicest) | 19:03 |
mithro | hey greywhind | 19:03 |
greywhind | hey mithro | 19:03 |
mithro | but it means you have something to compare too | 19:03 |
greywhind | sorry i haven't been on much lately. | 19:03 |
Iwanowitch | Fine for me. Can't promise I'll finish the job if it takes too long though. | 19:03 |
Iwanowitch | mithro: tpsai-py is for MiniSec, right? | 19:06 |
mithro | yes | 19:07 |
mithro | Iwanowitch: it also uses a rule based type system | 19:07 |
mithro | so it might give you a few more ideas | 19:07 |
mithro | it uses a kind of explore and reduce mindset | 19:08 |
mithro | greywhind: your near Chicago right? | 19:12 |
greywhind | mithro: actually, not particularly near it, no. | 19:12 |
mithro | greywhind: oh? your on the same timezone as Chicago right? | 19:12 |
greywhind | mithro: nope. pretty sure it's on central time, and I'm on mountain time | 19:13 |
mithro | oh | 19:13 |
greywhind | mithro: 2 hours earlier, i think | 19:13 |
mithro | I must be confusing your location with someone else | 19:13 |
mithro | where are you located then? | 19:13 |
greywhind | probably | 19:13 |
*** greywhind has quit IRC | 19:34 | |
tpb | aloril has quit worldforge (Ping timeout: 378 seconds) | 19:37 |
CIA-29 | jm tpclient-pyogre * r6270cb411709 /src/Scene.py: Press C to center on selected object | 20:09 |
CIA-29 | jm tpclient-pyogre * rf4c4055df056 /src/ (Framework.py Scene.py): Allow arrow keys for map scrolling | 20:09 |
CIA-29 | jm tpclient-pyogre * r1c9920a0d7ce /src/Scene.py: Use minus and equals key for zooming | 20:09 |
*** Epyon has quit IRC | 20:20 | |
*** nuleren has quit IRC | 20:43 | |
*** nash has joined #tp | 20:51 | |
llnz | hi nash | 20:52 |
nash | heyo llnz | 20:53 |
* nash needs to look for his GSoC student | 20:53 | |
* nash pokes Iwanowitch | 20:54 | |
Iwanowitch | Ouch. | 21:02 |
Iwanowitch | nash: I've been good and I didn't cause any trouble! | 21:03 |
nash | Iwanowitch: Next time it will be a cattle prod if you do | 21:03 |
Iwanowitch | Wouldn't think about it! | 21:04 |
nash | So... have you started yet | 21:04 |
* nash knows you still have school.. but I still need to write reports for google for you to get cash... | 21:05 | |
Iwanowitch | Well, yeah... Ive been taking a look at libtpclient-py and bounced some questions off mithro. | 21:05 |
nash | Cool | 21:06 |
Iwanowitch | He suggested I try fixing tspai-py first to get a feeling for the library. | 21:06 |
nash | So have you got it working yet? | 21:14 |
nash | Iwanowitch: | 21:17 |
nash | ? | 21:17 |
Iwanowitch | Nope. The library still goes a bit over my head at the moment. | 21:17 |
nash | You know what it is trying to do? | 21:18 |
Iwanowitch | Yeah, mostly... It's just that navigating Python isn't really easy. | 21:18 |
Iwanowitch | Though it might be my lack of experience with it. | 21:18 |
* nash knows how you feel ;-) | 21:27 | |
nash | I find python code is written a bit too much like a scripting language often. Too few comments | 21:28 |
nash | Too little structure | 21:28 |
nash | Just put some debug in and see what it does when you expect it to | 21:38 |
nash | Else find a version that did work and roll back to that, and see what breaks | 21:38 |
Iwanowitch | It's not going to be for today. I'm heading to bed. | 21:52 |
nash | fair enough | 21:54 |
nash | Talkto you later | 21:54 |
Iwanowitch | I suppose I'll see you around if I manage to stay awake this late. | 21:54 |
nash | heh | 21:55 |
nash | indeed | 21:55 |
Iwanowitch | It seriously feels like a pain to live in wildly differing timezones. | 21:55 |
nash | :-) | 21:55 |
nash | I'm used to it ;-) | 21:55 |
nash | we deal with europe & asia | 21:55 |
nash | at work | 21:56 |
mithro | heyo | 21:57 |
* mithro is back | 21:57 | |
mithro | hey nash | 21:57 |
nash | heyo | 21:58 |
nash | back in au or back in irc? | 21:58 |
*** Iwanowitch has quit IRC | 22:12 | |
mithro | back on IRC | 22:13 |
*** JLafont has quit IRC | 22:14 | |
*** JLafont has joined #tp | 22:14 | |
llnz | bbl | 22:23 |
*** llnz has quit IRC | 22:23 | |
tpb | aloril has joined on worldforge | 23:19 |
*** greywhind has joined #tp | 23:21 | |
mithro | wb greywhind | 23:50 |
greywhind | thanks | 23:50 |
mithro | greywhind: I could use your feedback on some stuff | 23:53 |
greywhind | mithro: i have to go AFK again, but i should be back | 23:53 |
mithro | ezod: ping? | 23:53 |
ezod | mithro: pong | 23:56 |
mithro | ezod: how goes everything? | 23:56 |
ezod | mithro: pretty well, worked on a module for tpserver-cpp to log to the remote admin client | 23:57 |
ezod | today that is | 23:57 |
mithro | cool | 23:57 |
ezod | should have the XML spec done shortly as well | 23:57 |
mithro | okay | 23:58 |
mithro | ezod: so you know about the status reports? | 23:58 |
ezod | mithro: anything different than my blog posts? the weekly report ones | 23:58 |
*** greywhind has quit IRC | 23:58 | |
*** greywhind has joined #tp | 23:59 | |
mithro | ezod: not hugely, it would be good if you include the following | 23:59 |
mithro | - what you did this week | 23:59 |
mithro | - what you didn't do this week (and why) | 23:59 |
Generated by irclog2html.py 2.17.2 by Marius Gedminas - find it at https://mg.pov.lt/irclog2html/!