Evergreen ILS Website

IRC log for #evergreen, 2018-04-13

| Channels | #evergreen index | Today | | Search | Google Search | Plain-Text | summary | Join Webchat

All times shown according to the server's local time.

Time Nick Message
00:09 beanjammin joined #evergreen
01:43 StomproJ joined #evergreen
01:56 beanjammin joined #evergreen
02:29 StomproJ joined #evergreen
02:29 dbwells joined #evergreen
02:29 JBoyer joined #evergreen
03:13 jaswinder joined #evergreen
06:30 pinesol_green News from qatests: Testing Success <http://testing.evergreen-ils.org/~live>
06:32 dickreckard left #evergreen
07:04 rjackson_isl joined #evergreen
07:09 agoben joined #evergreen
07:36 rlefaive joined #evergreen
08:14 jaswinder joined #evergreen
08:15 rlefaive joined #evergreen
08:31 kmlussier joined #evergreen
08:38 ngf42 joined #evergreen
08:58 bos20k joined #evergreen
09:05 tspindler joined #evergreen
09:06 Dyrcona joined #evergreen
09:09 tspindler I am working on the state of evergreen for the conference that the EOB needs to do. kmlussier shared the annual report numbers but I was wondering if there is an easy way to pull the number of bugs fixed for a given year?  Also, other than counting the new features on the documentation pages, is there an easy way to say how many new featuers were added?
09:10 kmlussier tspindler: In the report, I counted 25 new features for 2.12 and 50 for 3.0. I counted those from the release notes.
09:12 tspindler kmlussier: thanks, I must have missed that number
09:18 rhamby luanchpad stats are not terribly reliable in my experience which is why I decided to not use them for the report this year.  even going through the effort of  aggregating the individual ticket json data it still was ... well, I wouldn't stand by the numbers.
09:22 yboston joined #evergreen
09:30 kmlussier joined #evergreen
09:31 kmlussier tspindler: I was going to see what I could grab from LP at some point, but we could do something similar to what we did for the new features and count the bug fixes in maintenance release notes. It might not catch everything, but it could be a good approximation.
09:33 tspindler kmlussier: I like that idea.  It might be more meaningful.
09:37 csharp changelog would help count the number of commits/fixes too
09:38 kmlussier csharp: Yeah, but the new features are mixed in with the bug fixes. A lot of that work to pull things apart was already done when the notes were created.
09:39 kmlussier Not to mention some of those features that get 10+ commits. :)
09:42 Dyrcona So, reports are simply not running.
09:42 Dyrcona Clark is "waiting for trouble" and the reports database is accepting connections and queiries.
09:43 Dyrcona I can't find any postgres restarts or issues in the logs.
09:43 Dyrcona Anyone got any ideas of what I should look for in the reports tables?
09:44 jvwoolf joined #evergreen
09:49 csharp Dyrcona: anything in reporter.currently_running?
09:49 csharp maybe a report died off and didn't update that table?
09:50 Dyrcona csharp: I'll check.
09:50 csharp well, that's a view, but... might be in the ballpark
09:51 Dyrcona But, even if 1 report died, other reports should still run because we allow more than 1, though. if more than 1 died...
09:52 csharp Dyrcona: SELECT  count(*) FROM  reporter.schedule WHERE start_time IS NOT NULL AND complete_time IS NULL; is what clark uses to determine if it needs to run a new report
09:52 Dyrcona I did select * and I've got 3.
09:53 csharp and your limit is 3 or more?
09:53 Dyrcona I think 4, but lemme check.
09:54 Dyrcona Nope. Parallel 3.
09:54 Dyrcona :)
09:55 Dyrcona So, do I just set complete_time in reporter.schedule for these 3 reports?
09:55 csharp yeah - if the clark process itself dies it isn't able to go back and update the schedule - we have a convenience script connected to an internal chat bot that allows us to 'updateschedule <report id>'
09:55 csharp yeah
09:56 Dyrcona Clark didn't die, AFAICT.
09:56 Dyrcona It was running when I checked, though I restarted it, just to be sure.
09:56 csharp well, even if the daemon's alive, the report process might've?
09:56 Dyrcona I see what you mean, the child process.
09:56 csharp hard to tell after the fact since it never updates anything
09:56 Dyrcona There were none of those.
09:58 csharp this is what that updateschedule script does: PGUSER=postgres psql -1 -c "update reporter.schedule set complete_time = now(), error_code = 1, error_text = 'report failed - please open a Helpdesk ticket for assistance' where id = $SCHEDULE_ID" evergreen && echo "The operation succeeded."
09:59 Dyrcona csharp++ I'll crib that for my update.
09:59 csharp glad it's helpful :-)
10:00 Dyrcona One of these reports started in February. The other two were Wednesday and yesterday, respectively.
10:04 Dyrcona csharp++ # That worked and more reports started running almost immediately.
10:04 csharp Dyrcona: excellent
10:05 Dyrcona Think you deserve a double karma boost, because Friday! :)
10:05 csharp :-)
10:05 csharp Dyrcona++ # on Friday the 13th, we need all the karma we can get
10:07 Dyrcona I think I'll up that parallel setting when we put the new reports database server in place.
10:08 Dyrcona It should be able to handle a lot more than 3 at a time.
10:12 tspindler left #evergreen
10:12 csharp Dyrcona: ours is set to 6 at a time, which we've found to be a good balance between keeping the queue clear and not overwhelming the reports DB
10:13 Dyrcona I'm not sure why ours is set to 3, but it was set that way before I got here.
10:13 csharp at one point we had 12 concurrent, but that was overkill and caused load trouble
10:13 Dyrcona Our new server is identical to the production server and goes in next Tuesday.
10:14 csharp awesome
10:14 Dyrcona Yeah, 768GB RAM and NVMe drives. :)
10:14 csharp very nice
10:14 Dyrcona That is awesome. :)
10:14 csharp that will make a huge difference
10:14 Dyrcona Think I'll bump parallel to 6 at least.
10:15 Dyrcona It's Friday and I'm felling nostalgic: Time to play some CSNY.
10:22 dbs csharp, Stephenson, ngf42, and Yamil?
10:23 abneiman dbs++
10:23 abneiman actual LOL
10:23 Dyrcona heh.
10:23 Dyrcona yboston is a talented musician in his own right, thought I think he'll try to deny it. :)
10:25 dbs abneiman: yay laughs! now I'm nostalgic for the Reds-Orioles fun we had
10:26 abneiman dbs: indeed -- have you been to a game yet this year?  We went to Opening Day, as is tradition.
10:27 csharp dbs++
10:27 Dyrcona dbs++
10:28 csharp @eightball have you ever ridden horses through a rainstorm?
10:28 pinesol_green csharp: The answer is certainly yes.
10:29 Dyrcona csharp: Have you?
10:29 Dyrcona :)
10:30 Dyrcona And, that's only CSN....No Y. :)
10:30 dbs abneiman: alas no, I think that was the most recent game I've been to
10:30 csharp Dyrcona: ah, right, they dropped yboston for that track
10:30 Dyrcona heh
10:30 Dyrcona yboston++
10:30 abneiman dbs: bummer.  The Cardinals are at home on the 5/1 and 5/2 & I'm toying with the idea of organizing a trip to see a game.  Would be another stadium checked off my list!
10:31 Dyrcona I have a private video of yboston noodling on the piano at the hackaway in Michigan.
10:31 csharp I remember that!
10:31 Dyrcona Private on youtube, I mean.
10:32 Dyrcona "We are stardust. We are golden. We are billion year-old carbon...." :)
10:32 Dyrcona Joni Mitchell can sure write lyrics. :)
10:37 Dyrcona @eightball Have we all been here before?
10:37 pinesol_green Dyrcona: No clue.
10:41 jaswinder joined #evergreen
10:43 jaswinder Hey Dyrcona: I added the xml code for new tables inside the /openils/conf/fm_IDL.xml and ran autogen. I am getting the method  not found exception.
10:44 Christineb joined #evergreen
10:45 jaswinder <class id="ebook_rds" controller="open-ils.cstore open-ils.pcrud"
10:45 jaswinder oils_obj:fieldmapper="rboks::digital_services"
10:45 jaswinder oils_persist:tablename="rbooks.digital_services"
10:45 jaswinder reporter:label="Digital Services">
10:45 jaswinder <fields oils_persist:sequence="rboo​ks.digital_services_id_seq" oils_persist:primary="id">
10:45 jaswinder <field reporter:label="Id" name="id" reporter:datatype="id" />
10:45 jaswinder <field reporter:label='Name' name="name" reporter:datatype="text" />
10:45 jaswinder </fields>
10:45 jaswinder </class>
10:47 dbwells jaswinder: looks like at least one typo in there, "rboks"
10:50 dbwells jaswinder: Also, you will probably want a "<permacrud>" section in there if you want pcrud to work, even if you aren't actually requiring a permission.  Not sure what happens without one.
10:50 alynn26_away left #evergreen
10:51 alynn26 joined #evergreen
10:53 jaswinder Typo was part of masking
10:53 jaswinder I see that is what I was thinking about that
10:53 jaswinder thanks
10:54 jaswinder <permacrud xmlns="http://open-ils.org/spec/opensrf/IDL/permacrud/v1">  # <8>
10:54 jaswinder <actions>
10:54 jaswinder <create global_required="true" permission="CREATE_MARC_CODE">  # <9>
10:54 jaswinder <retrieve global_required="true"
10:54 jaswinder permission="CREATE_MARC_CODE UPDATE_MARC_CODE DELETE_MARC_CODE">
10:54 jaswinder <update global_required="true" permission="UPDATE_MARC_CODE">
10:54 jaswinder <delete global_required="true" permission="DELETE_MARC_CODE">
10:54 jaswinder </actions>
10:54 jaswinder </permacrud>
10:54 jaswinder Something like this:
10:56 dbwells jaswinder: Yes, and at least to start, you don't need to specify a certain permission, just self-close the tag, e.g.  <retrieve/>
10:56 dbwells If you do that, then any logged-in user can do that particular action.
10:56 csharp jaswinder: we have a pastebin at http://paste.evergreen-ils.org/ (or use pastebin.com or similar) for large pastes, FYI
10:57 gsams joined #evergreen
11:00 jaswinder thanks dbwells
11:00 jaswinder csharp: I lost that link. thanks for sharing
11:03 Dyrcona Any paste site will work, if you paste the URL of the paste in the chat.
11:05 alynn26 dbs and abneiman, I'm up for a game if you all are.
11:06 abneiman alynn26++ awesome!  I will start looking into it
11:11 dbs alynn26 abneiman - alas, I will not be present :/
11:13 alynn26 :( that make me sad, dbs. Oh well, life moves on.
11:13 Dyrcona JBoyer | rjackson_isl: Thought you might be interested in Lp 1735539 and my proposed fix.
11:13 pinesol_green Launchpad bug 1735539 in Evergreen 3.1 "web client Cannot delete multiple Items from Item Status Screen" [High,Confirmed] https://launchpad.net/bugs/1735539
11:15 rjackson_isl Dyrcona++ - that has the potential to make some folks happy!
11:16 abneiman also sad at no conference dbs -- maybe next year!  I'll still look at the Cards game though
11:16 * Dyrcona has a sad, too.
11:16 alynn26 abneiman++
11:18 dbs awww, you! alynn26++ abneiman++ Dyrcona++
11:23 csharp next year is philly suburbs - another baseball town
11:24 csharp and hopefully Christineb and co. will bring us back to Vancouver someday :-)
11:25 Christineb hahah #egconvancouver2020
11:25 Christineb probably not 2020 but hopefully soon!!!!
11:26 alynn26 Maybe I'll make Vancover next time.
11:27 Christineb Drycona++ re 1735539 - this will make the Sitka libraries very happy!
11:27 csharp Christineb++
11:27 csharp bug 1735539
11:27 pinesol_green Launchpad bug 1735539 in Evergreen 3.1 "web client Cannot delete multiple Items from Item Status Screen" [High,Confirmed] https://launchpad.net/bugs/1735539
11:29 alynn26 drycona++ that will make a lot of folks happy.  Especailly since I delete in bulk alot.
11:30 Dyrcona You're welcome. It is a big one for us, too.
11:40 rlefaive joined #evergreen
11:43 beanjammin joined #evergreen
12:35 jaswinder joined #evergreen
12:38 JBoyer Dyrcona++
12:38 JBoyer Those commits look good, will be trying them very soon.
12:56 jaswinder joined #evergreen
13:00 jihpringle joined #evergreen
13:28 miker Dyrcona: I can comment on the bug if you want, but a thought, re 1735539: it may be better to let the response stream back and use the notify handler (rather than the current resolve handler).  it looks like that was the /intent/ in the original code, but it just wasn't done correctly (used first rather than third param to the first then()) ... I suggest this thinking of large lists of copies, and of making a progress dialog possible via the notify
13:28 miker handler. that said, working code wins :)
13:29 Dyrcona miker: I didn't look hard enough for examples of streaming. atomic: true worked, so I went with that.
13:33 miker Dyrcona: right, it does.  it causes the resolve handler to get an array of results, rather than the last streamed result. do you have any concerns about over-large lists of copies? (do you think that'd be a reasonable thing to protect the delete function against, I mean)
13:34 Dyrcona miker: Point at an example of streaming, and I'll happily change it. Right now, I'm trying to figure out why a specific multiclass query blows up on me.
13:34 miker if you don't think that'll be something folks will generally do, from that interface, I'm happy to leave well enough alone and let atomic do its thing.
13:34 Dyrcona I don't know how many copies people are going to try to delete at once. I tested with about 5 or so.
13:35 Dyrcona I had 15 in the initial list.
13:35 miker I'm really talking about 100+ at once
13:35 miker I imagine that's probably /not/ common
13:38 JBoyer I think we've always told people to stick to 20-50.
13:38 kmlussier JBoyer: Do people listen?
13:38 miker and, to be clear, the streaming version would be: egCore.pcrud.search(...).then(function() { /* function starting with "var cnHash = {}" */}, null, function (copy) {copy_objects.push(copy)});
13:38 Dyrcona Well, I think streaming would be better just in case.
13:38 JBoyer I don't think the XUL client made things very easy for them if they didn't. ;)
13:39 miker the params to then are: resolve handler (think: oncomplete), error handler, notify handler
13:40 Dyrcona miker: Ok. I think I got it. I'll give that a try. Looks like var copy_obejcts returns. :)
13:40 miker resolve handler gets the /last/ response from egCore.net things, error handler gets what it says on the tin, and notify handler gets called with /every/ response (streaming or atomic)
13:40 miker Dyrcona++
13:41 JBoyer Dyrcona++
13:41 JBoyer miker++
13:41 JBoyer Since I haven't gotten around to it yet we'll test the streaming version when it's up.
13:43 Dyrcona OK. I'll assign the bug to myself this time. :)
14:07 Dyrcona miker++ # That was easy.
14:12 Stompro Hello, In evergreen, do authority records have any effect on non browse searching?  Can authority records be used to include alternate forms of an authors name in search results?
14:18 kmlussier Not yet
14:26 Stompro Thanks Kathy.
14:51 jaswinder can I retrieve all recrods by prcud method?
14:53 alynn26_away joined #evergreen
14:56 yboston joined #evergreen
14:59 Dyrcona jaswinder: If you do a pcrud search that will retrieve all records, then yes, but I would advise against it.
14:59 Dyrcona jaswinder: It might help to know more about what you are trying to do.
15:10 jaswinder There are only 5 records.
15:11 jaswinder Do I have pass in any parameters with search?
15:12 rlefaive joined #evergreen
15:13 jaswinder Dyrcona: I got an exception when I ddi not pass in params
15:13 Dyrcona Right, you do have pass in something to do a search.
15:29 jaswinder is there a like or greater than filter I can use?
15:35 Dyrcona jaswinder: You can try something like { id => {'>' => 0 } } Not sure if that will work exactly.
15:44 jaswinder Dyrcona: It only returned 1 record
15:45 jaswinder anything else I can try?
15:59 jaswinder is the gather() method returns all results form db?
16:01 jaswinder No matter what I have in filter, I am getting only one record.
16:01 Dyrcona jaswinder: You need to loop over the results or add atomic to the pcrud search.
16:03 yboston joined #evergreen
16:04 jaswinder I am dumping the results using Dumper. shouldn't that prints every record from results?
16:04 Dyrcona Yes, but you only get the first one unless you make the search be atomic.
16:05 Dyrcona Add .atomic after the class in your pcrud method and see what you get then.
16:05 jaswinder I add the .atomic and it complains about method not found?
16:05 Dyrcona open-ils.pcrud.search.class.atomic
16:07 jaswinder That is how I am using.
16:07 Dyrcona The atomic methods should be autogenerated by the pcrud code when the services start up and parse the IDL.
16:07 pastebot "jaswinder" at 64.57.241.14 pasted "fm_IDL Contents" (18 lines) at http://paste.evergreen-ils.org/2192
16:08 jaswinder please see the above paste xml snippet and see it that is good. I will share how I am calling as well
16:09 Dyrcona So, this tells you method not found: open-ils.pcrud.search.ebook_rds.atomic ?
16:11 jaswinder Actually, I just realized that I was using retrieve instead of search. I am getting the results now.
16:12 jaswinder What is the key difference between search and retrieve though?
16:12 Dyrcona OK.
16:12 Dyrcona Retrieve only gets 1 record and expects an id.
16:13 jaswinder I see
16:14 Dyrcona Search takes a hash of arguments and will return all that match the parameters in the hash.
16:15 jaswinder Thanks that is clear now
16:16 jaswinder My next battle is to call the pcrud classes with the vendor folder (EbookAPI/OneClickDigital for example). What I found is that I need an authtoken? Is there a way around it?
16:17 Dyrcona I also don't think that atomic retrieve exists.
16:17 Dyrcona Because it only gets 1 result anyway.
16:17 jaswinder Dyrcona: that is correct I believe
16:18 Dyrcona jaswinder: Only if the retrieve permission is empty for the pcrud class as dbwells mentioned earlier, if not then you'll need to have an authtoken.
16:21 jaswinder Ah
16:21 jaswinder So, I can access it without passing in authtoken. i just have to make sure no permission attribute is there.
16:21 jaswinder Let me try this
16:22 Dyrcona You might need a dummy authtoken just the same.
16:22 Dyrcona I'm a bit fuzzy on how that works.
16:23 Dyrcona If you're getting patron data and looking it up on a vendor's site, then you should require the patron to be logged in already.
16:23 Dyrcona Or do I misunderstand what you're doing?
16:25 jaswinder hmm
16:27 jaswinder well, in my design, each user has their own home library. When they search through a vendor tab, their library information is pulled from db and then API call is made to fetch the results.
16:27 Bmagic When a 650 tag is linked to an authority record, it appears that biblio.record_entry receives a slight update to the $0 with a link to an ID number. When performing record extracts, is it common to exclude those for shipping to external vendors?
16:27 jaswinder I do check for authorized vendors in this case.
16:27 jaswinder How do I create a dummy authtoken to get around it
16:33 Dyrcona jaswinder: That's the part that I am fuzzy on, getting that authtoken. I've only ever used pcrud with real authtokens.
16:33 Dyrcona Bmagic: No and yes. :)
16:33 Bmagic :)
16:34 Bmagic Our authority processing vendor "corrected" those fields and shiped MARC back to us with external URL's
16:34 Bmagic shiped/shipped
16:35 Dyrcona Bmagic: No, as in marc_export can't do it, yet. Yes, as in dpearl and I have been asked to implement exactly that, but the implementation is hung up while we make it more generic and do other, more important things in the mean time.
16:35 Bmagic I think* we can ask them to knock it off
16:35 Dyrcona Well, someone asked on the bug about stripping $0 on the way into Evergreen, too, but I said that was a different bug. :)
16:36 Bmagic Sorry, I missed this conversation
16:37 Bmagic bug 1164189 ?
16:37 pinesol_green Launchpad bug 1164189 in Evergreen "Remove $0 from bib control field(s) when authority record is deleted" [Undecided,Triaged] https://launchpad.net/bugs/1164189
16:37 Dyrcona Bmagic: bug 1754455
16:37 pinesol_green Launchpad bug 1754455 in Evergreen "marc_export: want to delete fields/subfields" [Undecided,New] https://launchpad.net/bugs/1754455 - Assigned to Jason Stephenson (jstephenson)
16:38 dbwells jaswinder: This may help you with anonymous pcrud (specific slide, and the whole presentation in general): http://git.evergreen-ils.org/?p=working/rand​om.git;a=blob_plain;f=api_presentation/web_a​pis.html;hb=refs/heads/collab/berick/eg2015#(20)
16:38 Dyrcona I was going to completely revamp dpearl's second implementation to make it more generally useful.
16:39 Dyrcona I think we're going to end up with a mini-language for removing stuff from MARC records on export.
16:40 Dyrcona dbwells++ berick++
16:40 Dyrcona Dyrcona-- # I should have remembered that...
16:41 Bmagic Dyrcona: if we asked the vendor to leave it alone and we are provided the MARC back to us with the $0's intact, will the authority link survive the import?
16:42 Dyrcona Bmagic: It should, but I usually run the linker after import.
16:42 Dyrcona Let me paste what I do for backstage.
16:42 jaswinder Dyrcona: thanks! this is helpful. I will try to play around with the anonymous token
16:42 Bmagic ok, that begs the question, if I run the linker, will it ignore the weird $0 and replace it?
16:46 Dyrcona Bmatic: https://pastebin.com/V03gL1S9
16:46 Bmagic ty
16:46 Dyrcona Bmagic: I think it will replace the $0.
16:47 Dyrcona I stopped doing my entirely homebrew thing and started using the ESI migration tools.
16:47 Bmagic right on
16:48 Bmagic I just finished crafting a script to do this type of work as well. It makes use of eg_staged_bib_overlay as well
16:49 Dyrcona I should probably stick a copyright statement and license on it, but meh.
16:49 Dyrcona What else is it good for? :)
16:49 Bmagic I see that this is an import script, I suppose your export leaves the $0 ?
16:50 Dyrcona Yes, no easy way to pull it out.
16:50 Bmagic so you strip it with --cutoff upon import then?
16:51 Dyrcona --cutoff is the date where you don't want records overlaid after....
16:51 Dyrcona So, if you dumped on 4/1/18 and you load on 4/5/18, you might say --cutoff=20180401
16:52 Dyrcona So records modified after midnight on 4/1/18 are not replaced.
16:52 Dyrcona At least, that's what I understand it to do.
16:52 Bmagic right, I was eating my words as I was reading the source
16:52 Dyrcona heh
16:52 Dyrcona S'ok. I misspeak in channel all the time.
16:53 Bmagic Thanks for sharing the script!
16:53 Bmagic Mine is probably more than it needs to be
16:53 Dyrcona I can share my dump script if you're interested.
16:54 Dyrcona We only dump records with a bib source of OCLC.
16:54 Bmagic Sounds fun
17:00 Bmagic Dyrcona: don't judge https://github.com/mcoia/mobius_evergreen​/blob/master/overdrive/marcive_import.pl
17:02 Dyrcona S'OK. I used this at MVLC: https://github.com/Dyrcona/backstage
17:14 Bmagic real quick, do you know if batch import holdings can have a default for aged pased hold protection?
17:15 Dyrcona No, I don't know. I don't import holdings that way.
17:16 Dyrcona Someone else usually loads them at CW MARS.
17:16 Dyrcona And, when Groveland joined MVLC, I wrote something entirely bespoke to handle their data.
17:16 Bmagic The interface doesn't offer that as a configurable holding subfield
17:20 jvwoolf left #evergreen
17:27 jihpringle Bmagic: https://bugs.launchpad.net/evergreen/+bug/1376427
17:27 pinesol_green Launchpad bug 1376427 in Evergreen "Holdings Import Profile Should Support All Applicable Item Attributes" [Wishlist,Triaged]
17:29 jaswinder Hey guys, do you know if the user has a home library in EG?
17:29 jaswinder If so, which table I should be looking at?
17:30 dbwells jaswinder: actor.usr has the home_ou field
17:31 dbwells It is not nullable, so they will have one.
17:34 Merixerlk joined #evergreen
17:42 Bmagic jihpringle++
17:43 jaswinder nice
17:45 jaswinder Does this mean that each user has only one home library in the system?
17:45 Bmagic jaswinder: yep actor.usr -> home_ou
17:46 jaswinder okay that home is basically actor.org_unit.id?
17:46 Bmagic yes, it's linked to actor.org_unit.id
17:46 jaswinder ok thanks!
17:46 Bmagic Good luck!
17:46 jaswinder yup
18:31 pinesol_green News from qatests: Testing Success <http://testing.evergreen-ils.org/~live>
19:24 jaswinder joined #evergreen
19:33 jaswinder joined #evergreen
20:13 jaswinder joined #evergreen
20:38 beanjammin joined #evergreen
20:55 jaswinder joined #evergreen
22:33 jaswinder joined #evergreen
22:57 xSmurfI5506F joined #evergreen
23:46 jaswinder joined #evergreen

| Channels | #evergreen index | Today | | Search | Google Search | Plain-Text | summary | Join Webchat