Evergreen ILS Website

IRC log for #evergreen, 2014-02-15

| 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:21 zerick joined #evergreen
01:30 gsams joined #evergreen
03:40 jasonb-iph joined #evergreen
04:05 jasonb-iph joined #evergreen
04:14 jboyer-laptaupe joined #evergreen
05:05 berickm joined #evergreen
05:11 pastebot joined #evergreen
06:27 RBecker joined #evergreen
07:45 rjackson_home joined #evergreen
09:28 RBecker joined #evergreen
09:38 Dyrcona joined #evergreen
09:38 Dyrcona Well, I hope someone is around. Maybe phasefx can answer my query.
09:39 Dyrcona I wan to step through the renewal code in the staff client because the behavior that I see suggests that a sizable chunk of it is dead code.
09:40 Dyrcona Trouble is, I don't know how to do that since the development client no longer includes Venkman.
09:42 phasefx Dyrcona: litter the code with dump('1\n'); dump('2\n'); etc.
09:44 phasefx alert() too, but that can be problematic sometimes, and change behavior
09:44 Dyrcona Um, no thanks.
09:45 Dyrcona I think I'll try installing Venkman as an add on and see if that works.
09:45 phasefx :D
09:46 Dyrcona It looks like the code to start Venkman is still there, just not available 'cause Venkman isn't there.
09:47 phasefx adee850f88dcedfd65a19d41a7fb4948d4c7eee3
09:47 pinesol_green [evergreen|Thomas Berezansky] Improve Firefox/XULRunner Support - <http://git.evergreen-ils.org/?p=​Evergreen.git;a=commit;h=adee850>
09:49 Dyrcona Heh. This is what Venkman claims about compatibility: Works with Firefox 3.5 - 14.0a1
09:49 Dyrcona phasefx: I'll take a look at that commit.
09:51 Dyrcona That's in master, so I should have that already.
09:54 Dyrcona Damn. Bad copy and paste into the console.
09:54 phasefx fetch-extensions as a make target?  I've never tried it
09:55 Dyrcona I'm going to install Venkman manually.
09:55 Dyrcona I was trying to copy and paste the path into a mkdir command when I got the whole web page!
09:55 Dyrcona So, wipe out dev client and reinstall.
09:57 Dyrcona "Nuke it from orbit. It's the only way to be sure."
09:59 jl- ERROR:  duplicate key value violates unique constraint "asset_call_number_label_once_per_lib"
09:59 jl- DETAIL:  Key (record, owning_lib, label, prefix, suffix)=(1, 4, ML 2533 B34 C1,
09:59 phasefx Dyrcona: venkman works for me after using fetch-extensions and rebuilding the client
09:59 jl- how can I search for this asset call number in my records.xml?
09:59 jl- considering these numbers/letters aren't right next to each other
10:01 phasefx jl-: I don't know what your records.xml looks like, but if record = 1, it's probably early in the file?
10:01 phasefx oh, the second occurence
10:01 phasefx har :) too early for a saturday
10:01 jl- hmm
10:02 jl- shouldn't that very first number be autoincremented?
10:02 phasefx jl-: how are you loading these holdings?  I would want to do soemthing that merges colliding volumes, not halt on them
10:02 jl- what I did was, I used the sql_loader twice
10:02 jl- load_concerto
10:03 jl- but each time it loaded a different .bib file for me
10:04 phasefx jl-: what's the big picture here?  are you trying to load concerto data or use concerto-based sql to load your own data?
10:04 Dyrcona phasefx: Venkman appears to work.
10:04 phasefx Dyrcona: yay
10:05 jl- phasefx the later.. I have my own marcxml file with 200000 records.. I split it into 5 files and made it into sql format.. then attempted to load it with the concerto loader
10:05 Dyrcona jl-: I saw things like that with our migration when loading copies from the same library that have the same call number.
10:05 jl- it worked fine the first file
10:05 jl- 50000 recorsd imported
10:06 jl- but then the 2nd file is giving me errors like the one above
10:06 Dyrcona The naive approach is try to create a call number for each copy and it will fail like you report.
10:06 phasefx jl-: I'm sure the concerto data is shaped so that it doesn't have colliding call numbers
10:06 phasefx brb
10:06 Dyrcona The smart approach is look for an existing call number and use that if found. Create a new one if not found.
10:07 jl- how would I do that?
10:07 jl- also, I used yaz-marcdumper to sanitize the dater are there any other tools that can help with thus stuff?
10:07 Dyrcona jl-: You would have to alter the software that is loading your records to lookup the call number and store its id. If the id is null, then make a new call number.
10:08 Dyrcona jl-: If the id is not nul, use that as the call number id for your record.
10:08 Dyrcona jl-: Multiple copies with the same call number is not bad data. It's pretty normal, and happens in the real world all the time.
10:10 jl- gotcha
10:14 jl- Dyrcona what do you use for importing?
10:14 jl- (what script)
10:17 phasefx jl-: I don't know of anything turnkey
10:17 phasefx does the MARC Importer/Exporter handle call number collisions when importing MARC holdings?  I imagine it has to
10:18 phasefx jl-: so you could try using the staff client to do do this, with the files suitably chunked
10:19 jl- I might look into that
10:19 jl- what is suitable?
10:19 jl- I have 5 files with 50000 records each
10:21 phasefx just try one and see if it goes through; if it doesn't, try halving the number of records for a file
10:24 phasefx jl-: of course, for a faster experiment, a file on 10 records would let you check things afterward, and make sure the holdings got in correctly, etc.
10:24 phasefx s/on/of/
10:26 phasefx depending on where the data originated, you may need to come up with a holdings import profile to map the subfields
10:33 jl- yeah I might try the staff client
10:34 jl- tho, honestly, I imported 50000 records just fine with the concerto_loader
10:34 jl- now with the 2nd batch of 50000 I got some errors
10:37 jl- so I'm not quite ready to abandon this method
10:37 jl- just yet
10:38 phasefx you can modify the populate_callnumber stored procedure to check for duplicates
10:38 phasefx I don't know what the repurcussions would be
10:39 Dyrcona phasefx: What I said earlier about "dead code" in renewals.....
10:40 jl- yeah I could, but at this point it's a little scary to modify the core software this much
10:40 Dyrcona phasefx: I don't think it is exactly dead code, but overrides aren't happening for some events when they should be because the events are swallowed by an earlier handler.
10:40 jl- we have about ~18 universities currently using voyager
10:40 jl- but the contract is running out in 2 years
10:40 jl- so evergreen is an option
10:40 jl- but it needs to be reliable and somewhat userfriendly
10:41 phasefx jl-: that's not core software; that populate_callnumbers thing is only used by the concerto loader
10:41 jl- hmm
10:41 phasefx the way I used to migrate data was with staging tables
10:41 jl- yes
10:41 jl- that's probably what I should look into more
10:42 Dyrcona I migrate data by writing a fresh set of scripts for each migration, because I've not done any where the input data was in a consistent format.
10:43 Dyrcona Horizon's MARC data was interesting to say the least.
10:43 phasefx there are scripts that will take a base table like asset.copy, and make an identically shaped table complete with the same sequences, like  m_foo.asset_copy.And then, based on the incoming data, we'd make a m_foo.asset_copy_legacy that inherits from that table, with the legacy columns added in.  Then the mapping process would be moving that data from the legacy columns to the stock columns
10:43 phasefx (and other tables).  Then when ready to push the data into the real tables, you just INSERT INTO asset.copy SELECT * FROM m_foo.asset_copy; and it just works
10:44 Dyrcona I do all my stuff in Perl and just insert directly into asset.copy, etc.
10:45 Dyrcona Well, I did the Horizon migration with Java, 'cause when I started Java was the easiest language to get talking to both database at once. :)
10:45 Dyrcona It also did the fastest bib load I've ever seen, using threads and JDBC Batch Inserts.
10:46 Dyrcona That code is available online if you're curious.
10:46 jl- Dyrcona do you work as an evergreen consultant ?
10:47 Dyrcona jl-: I do.
10:47 Dyrcona http://www.sigio.com/evergreen/index.html
10:47 Dyrcona Among other things.
10:48 jl- very nice
10:48 jl- that page needs some css :P
10:48 Dyrcona That page has some css.
10:49 Dyrcona Three styles.
10:49 jl- http://www.sigio.com/styles/screen.css
10:49 jl- :))
10:49 Dyrcona There's also a print style, and an "article" style.
10:50 jl- hmm
10:50 Dyrcona If your browser lets you choose, you can change the style.
10:50 Dyrcona I'll admit it is rather ugly but its functional.
10:51 Dyrcona If your browser won't let you choose styles, you can usually install an extension.
10:51 Dyrcona I use Style Chooser in Chromium.
10:52 jl- http://webspace.ship.edu/bwiens/screen.png
10:52 jl- I tried it with all my browsers
10:53 jl- hey minimal design is in
10:53 jl- ;)
10:53 Dyrcona Yeah, my site doesn't do anything for phones and it is still usable there.
10:53 Dyrcona At least it can scale OK.
10:53 Dyrcona I should look into making it a bit responsive.
10:53 jl- bootstrap is fun
10:54 Dyrcona Yeah, I was thinking about tyring out bootstrap.
10:54 jl- that's where my strengths are.. ils not so much
10:54 Dyrcona trying.
10:58 Dyrcona Actually, I'm trying to work on something this morning, but since about 10:00 my time, I've had too many distractions in the house.
10:58 Dyrcona I'm probably going to have to wait until after the wife and kid go out with some of their friends.
11:00 jl- yeah I have some problems here too wife is at the desk and we only have one
11:00 jl- so I have to make due with the couch
11:00 jl- which doesn't lead to much productivity
11:01 Dyrcona We have a recliner style couch, and I kind of like using the laptop on it.
11:07 jl- nice
11:12 Dyrcona On a totally unrelated note. There's a great line in Bruce Schneier's Cryptogram this month:
11:12 Dyrcona I used to decry secret security systems as "security by obscurity."  I  now say it more strongly: "obscurity means insecurity."
11:42 zerick joined #evergreen
12:33 Dyrcona Hmm. I think there is a typo in copy status long overdue.
12:33 Dyrcona The event name is COPY_STATUS_LONG_OVERDUE, and the override permission is COPY_STATUS_LONGOVERDUE.override.
12:34 Dyrcona Something tells me that won't work.
13:17 jboyer-upg joined #evergreen
13:40 Dyrcona tsbere: Just a curious thing: You know the artifacts I get in Thunderbird? I get them in Venkman, too, in the source code pane.
13:55 Dyrcona Must be the same base widget.
13:59 Dyrcona Hmm....
14:00 Dyrcona I'm not sure that I like this behavior.
14:00 Dyrcona I changed the staff client in development to do a renew.override and if the user has the permissions, the renewal just happens.
14:01 Dyrcona I half expected that.
14:01 Dyrcona What I think I want to happen is for the client to try a regular renewal, and if that fails because of events, it asks to override, then does the override.
14:02 Dyrcona What happens with the regular renew is I get an unexpected error message.
14:02 Dyrcona Venkman mostly reveals why.
14:03 Dyrcona Despite override arguments being passed into the renew function, they aren't used of course unless the override version is called.
14:03 Dyrcona The renew function treats all failures as unexpected errors, though one event can throw a mis-scanned barcode.
14:05 Dyrcona To do this "right" looks like I'd have to catch the failure, check the events against the list of override events, then throw up the override dialog, and try again with the override option.
14:06 Dyrcona Oh! There are too many scripts named util.js and data.js in the source code. :)
14:09 Dyrcona I vaguely recall having realized that renewal was 'broken' in this way a few years ago, but the brain is a tricky thing.
14:14 Dyrcona I don't know. Maybe the preferable solution is to just use renew.override. It looks like that may have been intended in the first place given the override parameters in the call.
14:14 Dyrcona phasefx: ^
14:21 Dyrcona venkman++
14:21 Dyrcona @karma venkman
14:21 pinesol_green Dyrcona: Karma for "venkman" has been increased 2 times and decreased 0 times for a total karma of 2.
14:21 Dyrcona @monologue
14:21 pinesol_green Dyrcona: Your current monologue is at least 24 lines long.
14:26 phasefx Dyrcona: have you been talking about the scan item to renew interface?
14:27 * phasefx just beat To the Moon; tear jerker, bah :)
14:27 Dyrcona phasefx: I've been renewing from a patron's list of items out.
14:28 phasefx ah, when you mentioned mis-scanned barcode, that's what I thought of
14:28 Dyrcona They both go through circ/util.js don't they?
14:28 phasefx they should
14:29 Dyrcona CHECKOUT_RENEW in constants.js is open-ils.circ.renew but util.js passes override parameters that will be ignored.
14:29 Dyrcona So, it seems to me the intention was to use open-ils.circ.renew.override all along.
14:30 phasefx from what I remember, .override should always be proceeded with a prompt
14:31 phasefx exceptions include the auto-override stuff, offline xact mode processing
14:31 Dyrcona well, renewals simply fail if anything at all happens.
14:32 Dyrcona even when the user has the necessary permissions, etc.
14:32 phasefx that's also what I would expect
14:32 Dyrcona Frankly, I'd rather eliminate prompts.
14:33 Dyrcona This is about lp 638509
14:33 pinesol_green Launchpad bug 638509 in Evergreen "renewing lost items fails unintuitively" (affected: 5, heat: 26) [Medium,In progress] https://launchpad.net/bugs/638509 - Assigned to Jason Stephenson (jstephenson)
14:33 phasefx the override prompts are for overriding failures
14:33 Dyrcona So, you're saying that I should add another try block, intercept the failure, and then offer the override.
14:34 phasefx not necessarily; I don't have my head in this space at all at the moment :)
14:34 Dyrcona ok. but it is either use override from the outset or trap the failure and try again based on what I see.
14:35 Dyrcona or maybe add a renew.permit function to the backend. :)
14:37 phasefx if we don't want folks to be renewing Lost xacts, then we shouldn't offer them the option.  If we do, then we need to return a more appropriate event
14:37 phasefx if at all
14:37 Dyrcona Well, I feel like people should set up the permissions and just use override.
14:38 Dyrcona Of course, that assumes they know what they're doing, which is maybe too much to assume.
14:38 phasefx override was always meant for staff intervention.. if you want something to be automatic, you should just change the method so that it doesn't throw an event
14:38 Dyrcona right.
14:39 Dyrcona how it usually seems to work in practice is: staff tries to do something, their account doesn't have permission, so become someone else who does have permission.
14:39 phasefx then stuff started accreting to that.. I think there's some patron-based overrides now for certain events re: hold placement
14:40 Dyrcona thing is, people want to be able to renew lost and claims returned items.
14:40 Dyrcona some people anyway.
14:41 Dyrcona I can push a branch if you feel like having a look some time.
14:42 phasefx sure.  There's a queue of stuff I want to poke at when I next put on a developer hat
14:42 Dyrcona I forget you're most often in manager mode. :)
14:43 Dyrcona I pushed it to working/user/dyrcona/lp638509
14:44 Dyrcona Just two commits.
14:44 phasefx cool deal
15:12 jl- got an error for the third batch of 50000 records: psql:assets_concerto.sql:99: ERROR:  insert or update on table "monograph_part" violates foreign key constraint "monograph_part_record_fkey" DETAIL:  Key (record)=(84) is not present in table "record_entry"
15:12 jl- I'm assuming there's a foreign key in there
15:12 jl- I thought yaz-marcdumper would have removed that
15:16 jl- would it be wrong to assume that it's the 84'th record?
15:16 jl- in the .sql file ?
15:16 jl- Dyrcona
15:16 Dyrcona Yeah. The parts have a like to a biblio.record_entry which is a bilbiographic (MARC) record in the database.
15:17 Dyrcona s/like/link/
15:18 jl- Dyrcona so I'm not exactly sure about the meaning of a foreign key constraint
15:18 jl- does it mean that record 84 has an illegal char?
15:19 Dyrcona It means that a value in one column in a table must reference a value in another table.
15:19 Dyrcona http://www.tutorialspoint.com/post​gresql/postgresql_constraints.htm
15:21 jl- any tip on how to resolve this?
15:21 jl- will taking out record 84 solve it?
15:22 Dyrcona The problem is that the bibliographic record that would have id 84 didn't load.
15:22 Dyrcona You will probably have to start over and find out why some bibs are still not loading.
15:23 jl- Dyrcona since I inserted into an empty database, I wonder if I could just take out record 84
15:23 jl- how could I investigate which record/bib is not loading
15:24 Dyrcona The messages tells you that a mongraph_part entry was not created because a biblio.record_enty with id 84 is not there.
15:25 Dyrcona PostgreSQL updates sequences even when an insert fails, so you end up with gaps in the sequence.
15:25 jl- unfortunately it caused the load_concerto to fail
15:25 jl- so nothing inserted
15:25 Dyrcona I would suggest at this point that you stop loading records and learn more about how PostgreSQL and Evergreen work.
15:33 phasefx the way concerto gets loaded really isn't a good strategy for arbitrary data; you don't even have to use monographic parts, yet here you are dealing with them, and I doubt it's even your data there
15:34 phasefx so you're probably getting a mix of concerto with your adaptations
18:19 timhome_ joined #evergreen
19:55 timlaptop joined #evergreen
21:56 fparks joined #evergreen
22:26 jboyer_laptaupe joined #evergreen
22:26 fparks_ joined #evergreen
22:40 ktomita joined #evergreen
23:10 nh_99 joined #evergreen
23:10 nh_99 left #evergreen

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