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/postgresql/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 |