[15:42:59] (PS1) Ejegg: DEPLOY BY 9/16: Swap out jQuery.JSON for native methods [extensions/CentralNotice] (wmf_deploy) - https://gerrit.wikimedia.org/r/160466 [17:13:39] ejegg: Good aftermorningnoon! [17:14:06] Or, as we usually say: Good Aftermath. [17:14:17] Hello K4! [17:14:25] What are you up to today? [17:14:34] Am prepping for the CentralNotice deploy [17:14:42] but having trouble getting to a certain server [17:14:49] * K4-713 backs away slowly [17:15:19] Heh. I think awight may try to upgrade mediawiki core on payments today, too. [17:15:28] Sounds like quite the rodeo. [17:16:09] wheee [17:25:19] atgo: Do you have line-of-sight on pizzzacat? [17:26:28] Ah, there's another one. [17:26:42] awight: Do you have line-of-sight on pizzzacat? [17:26:50] Also, good morning. [17:27:18] ejegg: fwiw, I should be online by 10:45 pdt [17:27:36] K4-713: not yet [17:28:24] And when I do, she's usually behind a curtain :p [17:28:37] hi awight! having trouble reaching main deployment server just now [17:29:04] awight: Darn. I wanted somebody to do The Dance Of Regret For Missing Our Weekly 1:1. [17:29:30] ...with a very short Dance Of Possible Rescheduling. [17:30:09] Capped off with The Dance Of I Hope Your Breakfast Didn't Explode Today. [17:31:53] K4-713: That last one never seems to work for me [17:32:13] It's tricky. Some of the lifts are really hard. [17:51:49] ejegg: ergo sum! [17:51:58] hello! [17:52:18] I was wondering, if u want to telecast your shell or anything [17:52:28] yeah, definitely [17:53:01] We haven't done a remote deployment training, yet, so yeah probably good to look over your shoulder [17:53:11] K4-713: you worked out the pizzzacat question? [17:53:25] Basically. [17:53:38] awight: I just joined the video call attached to the 11:00 calendar appt [17:53:49] awight: Though, with significantly less dancing than I wanted. [17:53:52] Ah well. [17:54:27] awight: Where were you with the mediawiki core upgrade for payments? [17:54:50] I mean, presumably we need Jeff to get anywhere switching deploy branches. [17:55:08] But, it sounded like you got stuck in testing. [17:55:19] K4-713: I think we have a working branch, now. The card status should be accurate: https://wikimedia.mingle.thoughtworks.com/projects/online_fundraiser/cards/1949 [17:55:22] K4-713: testing? [17:55:33] ... [17:55:57] Testing that the upgrade wouldn't, you know, break everything. [17:56:37] ejegg: hey, yeah I have no mic/vid on this box, but I can see you! [17:56:37] * K4-713 smirks [17:56:46] yah and can hear [17:56:49] I was expecting a larger number of words in that card. [17:56:55] :p [17:57:07] ejegg: no it's working! [17:57:18] thx [17:57:41] (CR) Ejegg: [C: 2] DEPLOY BY 9/16: Swap out jQuery.JSON for native methods [extensions/CentralNotice] (wmf_deploy) - https://gerrit.wikimedia.org/r/160466 (owner: Ejegg) [17:57:45] switching to priv for coworker sanity [17:58:32] atgo, awight, ejegg: I'm about to basically go silent for a while. So, if you need anything from me, now would be a good time. Dealing with fiddly bits in the new nightly audit code. [17:58:59] crush it K4-713 :) [18:01:39] Woot. Okay, here I go. [18:02:28] K4|readonly: shameless harvester of sorrow! [18:54:36] ejegg: ciao/aloha! [18:54:51] sorry for the creepy one-way mic thing [18:54:58] hello! [18:55:19] https://issues.civicrm.org/jira/browse/CRM-10700 [18:55:55] interesting [18:56:09] yeah but other people report the opposite (which is what I would have expected) [18:56:31] I can't explain it, but I can reproduce the problem... [18:56:55] dang the underlying mysql bug is pretty old [18:57:01] I'm interested in your Civi talk btw, they probably don't do a video link or anything? [18:57:14] nope... [18:57:39] Well I can peek at your notes if you'd like [18:58:21] Yeah, I'll work on those a bit and try to get you something before too late today [18:58:40] have just been poking around a diff and noting changes [18:59:06] I think the most notable stuff is how we've totally subverted the Contribution pages [18:59:30] yeah, I was going to give some civi-centric version of K4's pipeline diagram [18:59:34] nice [18:59:54] People might also be really interested in the queue-based loose coupling [19:00:08] ah yeah, I guess that's what I meant. [19:00:21] Sorry, how else have we subverted the contrib pages? [19:00:41] those pages are problematic to begin with [19:01:00] but anyway, we're just not using them at all [19:01:13] I see we removed some triggers, guessing for performance [19:01:20] apparently it's a top wish-list item for Civi admins to write their own donation pages [19:01:26] Caching the OptionGroup and ACL values [19:01:33] Have you seen the built-in contrib page feature? [19:01:37] * awight looks for sandbox example [19:01:49] ejegg: https://www.mesaprogram.org/civicrm/contribute/transact?reset=1&id=2 [19:02:11] ah yeah, took a quick look at that stuff [19:02:21] that's all I was referring to [19:02:46] k, I will butt out of your notes unless u want a peer :) [19:02:52] And Ellen's project would eventually tie in with that functionality, right? [19:03:00] hell yeah [19:03:04] (Eileen) [19:03:05] Cool [19:03:08] Oops, right [19:03:15] she's the raddest. [19:03:38] yeah, she picked up on all that stuff and distilled it down in no time [19:04:05] plus, came up with the plan for us to hire totten to do CI [19:04:58] oh, cool. Definitely will be nice to have those tests voting and running in a clean repeatable way [19:05:17] hashar: felicitations, papa! [19:05:42] awight: merci :) [19:05:46] hashar: if/when you're settled into work again, I have some patches for the CiviCRM CI stuff [19:06:23] So other stuff we changed: the language - using ISO codes rather than locales and not forcing a default, longer/unvalidated zip code for international folks, longer email [19:06:27] added a refund page [19:06:44] ejegg: oof, the language stuff is pretty badly broken at the moment [19:06:55] we're still using unix-locale [19:07:02] BCP-47 work was not merged to production [19:07:03] no full-db contact de-duping, but a batch dedupe module [19:07:11] oh, that's not in prod? [19:07:27] mostly cos the core i18n person wants me to do it as an extension [19:07:42] he said it's an insanely marginal use case to even support two language groups... [19:07:50] jeez [19:07:53] awight: kid care rushing out :/ [19:07:58] IMO this is a chicken-egg thing... nobody uses it for multilingual cos it does not work [19:08:06] sounds right [19:08:08] hashar: I'm sure! there'll be a lot more of that :p [19:08:24] hashar: yeah, no rush, I just want to keep positive momentum [19:09:07] ejegg: also, custom import methods. we are the only Civi instance that does audit processing [19:09:28] and sadly external listeners (some such as paypal IPN do exist in Civi core) [19:10:07] ah, right - that's all in our modules though, not core, right? [19:10:12] yep [19:10:59] u can brag that we have the largest *intact* civi instance. NYSS's Bluebird is bigger, but split across multiple instances [19:11:09] is there something I can read to catch up on the new things you + major gifts want to start using that we haven't been doing yet? [19:11:38] lemme double-check that I can forward the minutes... [19:11:46] but yeah there is some major stuff [19:12:19] Giant Rabbit is overhauling reporting, to run in the background, support permalinking, basically never run a report unless you intend to. Scheduled reports. [19:12:43] We've turned on CiviEvent in staging, evaluating then will probably use in production [19:13:04] wow, that reporting stuff will be big. [19:13:12] There's the mail stuff you've been working on, which is really huge. btw, did you spec the work for slurping BCCs? [19:13:20] and that's supposed to be upstreamed too, right? [19:13:28] ejegg: yeah the basic report class is actually very nice to customize, but usability is crap. [19:13:36] ejegg: um... the mail stuff? That's up to you [19:13:53] It seems like a decent design for upstreaming [19:13:54] Didn't spec it out yet, but it looks like we can re-use all the code we need to do the account config + mail reading [19:14:06] ejegg: maybe just create a top-level card [19:14:15] oh, I meant the reporting stuff being upstreamable [19:14:28] oh yeah absolutely, that's first priority [19:14:33] rockin [19:15:01] same with the CI stuff--we basically sponsored adding it to upstream to improve code quality, and getting it working for ourselves is an afterthought [19:15:14] a grave afterthought... [19:15:20] heh. also very nice [19:15:55] ejegg: fwiw, https://trello.com/b/HmPIQDhc/civi-major-gifts [19:15:58] out of date by now [19:16:33] what's the state of our deduping? I know you have a WIP to rewrite as a civi module rather than drupal [19:16:54] but do we actively dedupe batches via the drupal one now? [19:17:14] I finished the rough port [19:17:21] but it isn't in use yet. [19:17:31] I need to incorporate feedback from the last round of review [19:17:44] https://trello.com/b/f6BYQzoW/dedupe-roadmap [19:17:47] oh, even the original drupal module deduper isn't in use? [19:17:51] nope [19:18:06] it's the cause of some sadness and stress. We'll definitely finish it, I just need... a few weeks... [19:18:35] ok. that explains why I found 500k contact records for the 300k distinct emails in that Dec '12 cohort :) [19:19:04] yeeeah. [19:19:20] The estimate is ~25% of all historical contacts are dupes [19:19:35] I see we did disable full-db deduping though. Guessing that's just a synonym for 'kill the server' on our installation. [19:19:48] exactly. [19:19:53] N^2 [19:20:12] that'll do it [19:20:45] The author of Civi core dedupe is contracting for this UK NGO... [19:20:54] and he recently made the full dedupe more pluggable [19:21:17] + wrote a simple algorithm that can do full dedupe in a few seconds. [19:21:48] oh, whoa! [19:22:33] ejegg: if you want, here's an outline of our approach: https://docs.google.com/presentation/d/1X-9ZFbVJ-M_S25PwYfnv7-lSOriABCAilWkXNPZeq0c/edit?usp=sharing [19:23:37] oh, thanks! [19:24:36] i love all the HAL [19:27:07] (PS1) Ssmith: Merge branch 'master' of ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DonationInterface [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/160504 [19:27:39] (CR) jenkins-bot: [V: -1] Merge branch 'master' of ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DonationInterface [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/160504 (owner: Ssmith) [19:35:51] (PS1) Ssmith: Remove JCB logo and add new Carte Bleue logo [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/160506 [19:36:47] (Abandoned) Ssmith: Merge branch 'master' of ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/DonationInterface [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/160504 (owner: Ssmith) [19:37:02] (CR) Ejegg: [C: 2] Remove JCB logo and add new Carte Bleue logo [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/160506 (owner: Ssmith) [19:37:18] (Merged) jenkins-bot: Remove JCB logo and add new Carte Bleue logo [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/160506 (owner: Ssmith) [21:08:43] atgomez: thx, https://wikimedia.mingle.thoughtworks.com/projects/online_fundraiser/cards/1955 [21:13:37] (PS2) Awight: WIP new recurring charge API [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/139476 [21:19:21] (PS3) Awight: WIP new recurring charge API [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/139476 [21:26:35] huh [21:27:05] K4-713: Is there a reason DI request default 'values' take precedence over overrides in the unstaged data? [21:27:32] Probably. What do you mean be default values? [21:27:35] *by [21:27:45] stuff in the transaction 'values' array [21:28:08] Values are basically hard-coded. Think of them as constants. [21:28:13] I'm merging in the recurring globalcollect standalone code, and... hit an issue with effort_id [21:28:24] If it's in the transaction structure, that's... what that thing always is. [21:28:32] ok then [21:28:51] yeah that's how the code reads, glad to hear it's intentional. [21:28:53] If it's not supposed to be that thing all the time, either unset it for the special case, or... something else [21:29:01] hey awight - do you think you could help with the PCI scoping doc for verizon? [21:29:10] atgomez: I can try [21:29:17] cool. i'll show you the ropes after standup [21:29:50] speaking of which... awight pizzzacat AndyRussG ejegg K4-713 standup approaches :) [21:30:08] nay, nigh! [21:30:09] awight: One of the things I want to clean up in DI in general, are people doing things to sent values via the structure instead of in staging. :[ [21:30:29] K4-713: I won't explain... but https://gerrit.wikimedia.org/r/#/c/139476/3/globalcollect_gateway/globalcollect.adapter.php,unified [21:30:32] Also... you know that none of the things in the transaction structure are required, right? [21:30:45] oh. thanks, that takes care of it, then [21:31:06] Yeah, we just don't send things that aren't set in the donation data. [21:31:22] The transaction structure just tells the thing where to put them if they're there. [21:31:42] aah shit, setGatewayDefaults there are more defaults. and effort_id is one of them. [21:31:47] ok, standwards. [21:32:02] Didn't somebody kill that function? [21:32:10] gah. [21:46:32] awight: back yet? [21:47:27] K4-713: si [21:47:39] backlog. oh [21:48:20] Okay. So, I was sort of incredibly late to this party, but: You're updating the standalone, correct? [21:48:20] K4-713: no, not killed. Invoked, even. [21:48:37] Almost--I'm slowly backporting all the standalone patches into DI trunk [21:48:42] ugh [21:48:45] Pretty close now. [21:48:46] Wait. [21:48:55] done :p [21:48:55] Standalone patches... go into DI? [21:48:58] yeah [21:49:02] cos: unfork [21:49:14] That seems like it would... how to put it. "Break absolutely everything." [21:49:18] this current patch is for recurring support. [21:49:46] * K4-713 frowns [21:49:53] The tricky one, https://gerrit.wikimedia.org/r/#/c/139452/, will need to be reworked, but the idea is that we add a facade for all the core functions, then implement for Drupal and MediaWiki [21:50:28] Er. When you say "all the core functions" do you mean "all the recurring functions"? [21:50:31] no [21:50:38] * K4-713 frowns more. [21:50:40] all the stuff like wfDebugLog [21:50:44] and ... stuff [21:50:47] hooking. [21:51:07] OH, all the MEDIAWIKI core functions. [21:51:08] i18n [21:51:11] yessir [21:51:37] Yeah. The plan as I understand it, is: [21:52:03] 1) slide in a layer of abstraction between everything that actually does anything good in DonationInterface, and Mediawiki Core [21:52:36] 2) Move all the goodness that still lives in DI to a submodule, and start calling that abstraction layer "DonationInterface" [21:52:53] point 1) yes [21:52:54] 3) Write a parallel layer for drupal/civi [21:53:03] I don't know what you mean by 2) [21:53:10] I'm not planning such a thing. [21:53:14] 3) yes [21:53:29] So, how would 1 and 3 work without 2? [21:53:38] 2 is the best part. [21:53:50] Oh, I see. For example, https://gerrit.wikimedia.org/r/#/c/139452/5/gateway_common/framework.php,unified [21:54:27] That looks surprisingly small for anything we were just talking about, but maybe? [21:54:35] I think I'll just rely on platform-specific autoloading to switch between frameworks. [21:54:47] rather than do conditional include or dependency injection... [21:55:02] wat [21:55:05] ah... which brings up the autoload issue. Allow me to ignore that bridge. [21:55:21] Sorry, the "submodule" in point 2 is in fact meant to be a git submodule. [21:55:38] I would forgo that and have everything in the top-level repo [21:55:56] Huh. Okay, why? [21:56:26] Are you imagining we swap out the submodule? [21:56:30] No. [21:56:36] ok... so two submodules [21:56:41] N... [21:57:09] This isn't a module I imagine doing anything useful anywhere else in the world. [21:57:14] There would be a mediawiki extension, which contains the abstraction layer for MW, and the actual payments code (submodule). [21:57:26] cos I'm implementing the absolute minimimum amount of MW-core functionality [21:57:38] There would also be a drupal/civi extension, containing the actual payments code (submodule). [21:57:52] No switching, because nothing has to have any extra code. [21:58:03] OK [21:58:17] That would be fine, either way. [21:58:33] Did this stop sounding like crazy talk at some point? [21:58:39] I'd like to mess with DI as little at possible, I guess. [21:59:09] It's already a MW extension, so... there's nothing to gain by separating concerns there, unless we're designing something much different. [21:59:18] Such as the omnipay plugin. [21:59:20] Well, aside from drawing that line between what's actually MW core (and can therefore not come along to drupal land)... [21:59:41] Basically, I am sick to death of having to write things twice. [21:59:44] There is a ton of unported code remaining, which still calls the MW API directly... [21:59:47] oh me too [22:00:00] The same payments code *needs* to be included both places. [22:00:13] I thought a shared submodule would be the cleanest way to do that. [22:00:13] yes, that's the main step I wanna take [22:00:41] The only difference in what I'm proposing, is my layout would be more like a multi-IDE code repo. [22:00:42] ...without requiring drupal-only code to invade DI, and MW-only code to invade drupal. [22:01:10] I wasn't even planning to write a full Drupal module. [22:01:16] that's an option, though. [22:01:22] I was thinking more, library. [22:01:28] Well, what's "full". Heh. [22:01:53] At some point, some module is going to use the gateway objects. [22:02:22] yeah, you're causing me to rethink mixing MW and abstracted API. [22:02:24] And, at some point, somebody else might want to expand that to include stuff we already have on payments. [22:02:27] it's a terrible idea. [22:03:02] Which means, I should port all the MW-core calls in DI, or rethink this madness. [22:03:51] You can totally not upset the place settings if you just pull the tablecloth off really, really quickly. :p [22:04:06] I've fallen for that before. [22:04:17] there's a trick they don't tell you. [22:04:32] like the old dot of soap on a golfball move. [22:05:03] *distant crashing noises* [22:05:24] https://c1.staticflickr.com/1/220/501280820_af2c6327a1_z.jpg [22:06:34] Woah [22:06:43] K4-713: hey. so for buildXml tests, I notice... there is no assertion? [22:07:03] * K4-713 sighs [22:07:17] Possibly it's leaving that for something else? [22:07:23] Or, somebody goofed. [22:07:25] oh awesome, nvm it was in the base class [22:07:49] Oh good. [22:08:40] I wonder if anybody would deliver a case of total zero red bull to my house in an hour. [22:08:53] Two hours would also work, but I might not make it. [22:09:10] hehe ok I'll let you crawl back under the audit boulder [22:09:34] I think this logic is stopping my metabolism. [22:10:13] No wonder this hasn't changed much since January 2012. [22:10:24] Every time I get in this far, I go into a coma. [22:10:55] Did you *see* how busted everything got over the weekend? [22:11:09] And I didn't even *do* anything. [22:11:28] It's like it knows I'm going to kill it. [22:11:33] Should I fix the download issue? [22:11:43] The download issue was a fluke, I think. [22:11:51] I haven't cos--it seems like we're all enjoying watching it squirm? [22:12:05] That kind of failure only happened the one time. [22:12:24] All the other times, it was trying to find over 6k iDeal transactions in the logs. [22:12:28] ...and running out of time. [22:12:29] omg [22:12:47] yeah we need. some kind of cache of where we looked for what [22:13:09] Actually, I'm doing something almost completely different this time. [22:13:22] The first mechanism was a repeatedly-tweaked shot in the dark. [22:13:33] Now, I've seen this thing run for two and a half years. [22:13:35] Better idea. [22:14:51] Hopefully a significantly better idea. [22:14:55] aww. getExpectedXmlRequestForGlobalCollect. I have no clue why it takes two data arrays [22:15:13] homie don't play. [22:15:32] It's probably expected vs actual if there's an assert down there somewhere. [22:15:58] noo [22:16:03] it's more insidious [22:16:08] and undocumented [22:16:09] Great. [22:16:14] Perfect. [22:16:58] awight: who blames to those lines? [22:17:28] Though... wait, it's probably going to be largely me at this point, even if I didn't do it initially. [22:17:40] Which I might have. [22:18:06] I don't need to run blame, smell is a more powerful sense. [22:18:15] Hmmmm. [22:18:18] iono [22:18:25] Smells have a way of blemding. [22:18:26] Er. [22:18:28] let's just say, it involves a giant effing strcat [22:18:30] Blending. [22:18:45] Still onconclusive. [22:18:47] IN [22:18:47] ^"blemding" now I know you're holding your nose. [22:18:49] GAH [22:18:53] I think I'm dying. :p [22:19:33] I'm still looking for the extract() call, someone must have removed it since 2011. [22:19:37] :p [22:21:01] wait seriously, that function is a total fiction. I just realized what's happening. not cool. [22:21:38] it should be replaced by expected xml files. [22:21:57] Okay, THAT part, I wrote. [22:22:25] the comment? yeah I recognized that as a parenthesis of sanity. [22:23:11] "Parenthesis of Sanity" is my first album. [22:23:31] ...I just found an emergency 5-hour energy shot. [22:23:56] Only, it was around before 5-hour energy existed, and I haven't seen one in about 6 years. [22:24:04] It was either that or eat powdered coffee. [22:24:27] damn. And I was upset about running out of hot sauce during lunch. [22:26:03] ...wow. It was one of these: http://en.wikipedia.org/wiki/Jones_Soda#WhoopAss_and_Jones_Energy [22:26:12] "Jones Energy was discontinued in late 2008." [22:26:29] That sounds dangerous. You should look for recall information. [22:26:41] But, ah, in shot form, which they don't seem to know anything about on the article. [22:26:45] You drank it?? that was a collector's article! [22:26:59] I know. [22:27:10] I was saving it for a time of great need. [22:28:18] The really disturbing possibility is: What if I finish this code in the next three hours? [22:28:36] Do I spend the rest of my career hunting down forgotten supplies of WhoopAss? [22:29:09] Sounds like it's working already :p [22:29:16] Oh, it is. [22:29:29] Whoa, like I didn't realize I was so awesome! [22:29:37] I should tell people about this [22:29:50] What specific thing? [22:30:08] * awight vigorously rubs sleeve on nose [22:30:09] pizzzacat: just pushed some stuff to github! the module I'm using to parse the filters from the querystring seems to be a little wonky with numbers, but it should let you do a few filters now. [22:33:15] K4-713: you just reminded me of this amazing webpage, lone guy "reviewing" every energy drink, including short videos [22:33:19] cannot find :( [22:36:11] I think I might possibly know the one. [22:36:17] It's been a while, though. [22:36:22] I do think we spoke about this once [22:36:52] thanks ejegg! [22:39:07] ejegg: maybe you have input on this: https://wikimedia.mingle.thoughtworks.com/projects/online_fundraiser/cards/1695 [22:39:27] I did some shoddy work to make a few files run under Drupal and not MediaWiki... [22:39:41] using an abstraction layer for the mw-core functionality. [22:39:48] oh, let me take a look [22:40:01] K4-713 is causing me to rethink that approach however. Which is a good thing. [22:40:27] The problem is that we definitely don't want to port the form layer, so I think we'll end up with crazy inconsistency, where some classes can call MW global functions, and others cannot. [22:40:34] also, did you see if the minutes from the 'what more can we do with civi' meeting are valid fodder for my blabbing? [22:40:42] oh [22:41:05] fwd'd [22:41:09] ty! [22:41:20] there are more minutes, that's the latest one though [22:41:42] K4-713: in case you need caffeine in the future... surge is back. http://www.latimes.com/food/dailydish/la-dd-coca-cola-surge-back-amazon-20140915-story.html [22:41:58] WAIT A SECOND. it's not even energized. i'm full of lies. [22:42:16] my parents were so full of it. [22:42:57] awight, those poor patches have been languishing a while! Will try to grok & give feedback [22:44:35] ejegg: no sweat. I need to sweep this under the carpet in one form or another, workaround is fine as long as it's not too destructive to DI code. [22:45:53] atgomez: I remember Surge. [22:46:21] c'mon, you people are about to drive me to bud light lime and ethanol! [22:46:32] <_< [22:46:33] >_> [22:46:33] there's nothing wrong with bud light lime. [22:46:38] Seriously, though, I miss WhoopAss. [22:46:40] other than, yuck! [22:46:43] It was the best there ever was. [22:47:40] With the taste of way too many vitamins. [22:48:38] (PS6) Awight: WIP Standalone framework [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/139452 [22:48:42] (CR) jenkins-bot: [V: -1] WIP Standalone framework [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/139452 (owner: Awight) [22:50:32] Okay, I'm going back in there. If I don't come back, avenge me. [22:51:34] (PS7) Awight: WIP Standalone framework [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/139452 [22:51:51] (CR) jenkins-bot: [V: -1] WIP Standalone framework [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/139452 (owner: Awight) [23:46:03] anybody here use PhpStorm? [23:53:56] (PS8) Awight: WIP Standalone framework [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/139452 [23:54:15] (CR) jenkins-bot: [V: -1] WIP Standalone framework [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/139452 (owner: Awight) [23:59:55] (PS1) Awight: class-ify CurrencyRates [extensions/DonationInterface] - https://gerrit.wikimedia.org/r/160566