Re: [U2] Shipping integration (Was ODBC to UPS WorldShip)
> -Original Message- > From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users- > boun...@listserver.u2ug.org] On Behalf Of Support > Sent: Friday, July 17, 2009 2:28 PM > To: 'U2 Users List' > Subject: Re: [U2] ODBC to UPS WorldShip > > > I know the question was about UPS WorldShip. However, suffer the some of > the same > problems no matter what carrier package we implemented. Finally, we went > with a > third party package (http://www.bestwaytech.com/proship/). It allows us to > ship > package UPS/FEDEX/USPS thru the same xml interface. Their black box > implementation > only requires us to open a socket and stream the xml. They reply with xml > and can > including ZPL/EPL/PNG formatted manifest label. We actually imbed the > image on > our packing slip. They take care of the carrier rules updates, so in the > three > years we have used them we have not had to make a single code change for a > carrier > updates. Our largest customer ships well over 7000 package a week with no > problems. > I think I looked at that long ago, but decided to go in-house. One problem with using the WorldShip hooks is that you can still get unforeseen charge-backs from invalid/mismatched/cancelled/suspended accounts on collect shipments. The benefit to that, though, is that you can bill to any account and not have to deal with the account zip validation thing. With the web API the accounts are checked live each time you request a package label so it's a half empty, half full situation. I'm assuming that the shipping application builds a PLD itself and sends it to WorldShip for upload. IIRC the basic Café software has an XML interface now as well as the old raw socket connectivity and I'm pretty sure it's a live application unlike WorldShip which is offline until you do end-of-day. There is a 'server' version of the Café/ShipManager product that does not do Internet queries and I would guess that's what's being deploy. It's designed for high-volume shipping and availability. I don't know much more about it than that. I considered all of those points before deciding to do it in-house. We're not at a huge volume yet, but we had to have something more automated and streamlined. All orders are processed the same way and the shipping app determines how to handle the shipment/paperwork/billing/labels/etc. > The ProShip cost is very reasonable compare to some package out there and > when you > compare it to the cost of setup/supporting in-house the carrier supplied > options > it's a net savings. They cut our cost over 80% on doing it our self using > the > "FREE" software supplied by the carriers. Not to mention the better rate > you can > get from the carriers when you can ship FEDEX as easy as UPS. > > I don't remember getting a cost for ProShip, so I can't say that what you consider reasonable is what I would consider reasonable. We run on very low margin here and a few thousand dollars is a decent investment. We tried with Harvey CPS' 'automator' product and ended up trashing it because it didn't handle batch processing of international shipments as was described before sale. Anyway, that's water under the bridge. It would have worked if we only sold to the USA and their desktop app is really nice if you need a multi-carrier shipping application. We have had to do the same thing with the carriers. We're constantly putting them in the ring to help us do more business and fix problems that either don't exist to them or are not critical problems to address. For example, we started having residential FedEx Ground problems to Canada. The drivers are releasing the packages at the door without collecting the duties which are due. FedEx brokers their own packages so they're just delivering the boxes and sticking it to the shippers! Be careful! Even if they are bill-recipient packages, the duties get charged back to the shipper account. Apparently, there is nothing FedEx can do so we are no longer shipping to Canada using FedEx. We also recently put shipping costs online. Prepaid shipping methods can be changed with a single ship-via code flip from FedEx to UPS or vice-versa. Regards, Glen Batchelor IT Director All-Spec Industries phone: (910) 332-0424 fax: (910) 763-5664 E-mail: webmas...@all-spec.com Web: http://www.all-spec.com Blog: http://blog.all-spec.com ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users
Re: [U2] ODBC to UPS WorldShip
I know the question was about UPS WorldShip. However, suffer the some of the same problems no matter what carrier package we implemented. Finally, we went with a third party package (http://www.bestwaytech.com/proship/). It allows us to ship package UPS/FEDEX/USPS thru the same xml interface. Their black box implementation only requires us to open a socket and stream the xml. They reply with xml and can including ZPL/EPL/PNG formatted manifest label. We actually imbed the image on our packing slip. They take care of the carrier rules updates, so in the three years we have used them we have not had to make a single code change for a carrier updates. Our largest customer ships well over 7000 package a week with no problems. The ProShip cost is very reasonable compare to some package out there and when you compare it to the cost of setup/supporting in-house the carrier supplied options it's a net savings. They cut our cost over 80% on doing it our self using the "FREE" software supplied by the carriers. Not to mention the better rate you can get from the carriers when you can ship FEDEX as easy as UPS. James F Thompson Senior Systems Analyst Cypress Business Solutions 678.494.9353 x1410 supp...@cypressesolutions.com www.cypressesolutions.com -Original Message- From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Glen B Sent: Friday, July 17, 2009 10:10 AM To: U2 Users List Subject: Re: [U2] ODBC to UPS WorldShip Tony G wrote: > I concur with Glen's assessment that some of these services can > be unstable. Not long after writing NebulaShip > (nospamNebula-RnD.com/products/ship.htm) I realized that even > though the product was stable that we might be getting emergency > calls when services were down. I stopped advertising the > product, we're not currently selling it, and unless there is > significant demand for some of the less critical functions > (lookups, confirmations) I may withdraw it entirely. Make sure > you have backup providers for critical services. > > That's a nice spin on my comments. I was actually promoting the API web intergration. WorldShip and Cafe' change too often to be long-term stable automated shipping components IMO. If you have someone standing at the terminal running batches, then OK have fun. I'd rather not waste employee time doing that. If you're only shipping a handful of packages then the desktop tools are fine. We ship way more than that and our shipment processing efficiency was suffering with WorldShip integration. WorldShip used to change once every 3 or 4 years (it seemed like) but now every year a new version comes out with some core change that affects a piece of software plugged into it. Plus, I never could get the post-shipping export to work with D3 ODBC and from what I've read it's not fun to do with U2 either. We use RF terminals to capture tracking barcodes and prompt for other box info. Of course, that is only when the order is hazardous or the rare instance that we can't process packages through the API. It really is a rare thing, so I wouldn't discount your NebulaShip. Anyone who specifically integrates web services must have an understanding of the cloud and the fact that stuff will get lost in the ether just like your ODBC lookup will fail at some point. Either way, a plan needs to be in place to handle the problem. No service is perfect. It won't happen daily, quarterly, or even semi-annually if you implement the proper infrastructure and failover plan. If you don't plan the cloud-operating infrastructure to support web services during processing hours then your "disaster recovery" is just as bad as sticking the backup tapes to the filing cabinet with magnets. GlenB > Tony Gravagno > Nebula Research and Development > TG@ remove.pleaseNebula-RnD.com > remove.pleaseNebula-RnD.com/blog > Visit PickWiki.com! Contribute! > > >> From: Glen Batchelor >> > > >> 3) You're tied to a web service that can (and will) go >> down at some point. Have a backup processing plan with >> WorldShip. UPS has been good, for the most part. FedEx >> has gotten better, but there are still times when the >> FedEx Ground back-end disappears and we get goofy >> 'unavailable' errors. >> > > ___ > U2-Users mailing list > U2-Users@listserver.u2ug.org > http://listserver.u2ug.org/mailman/listinfo/u2-users > > ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users
Re: [U2] More questions on indexing
These are really annoying when you go to recover data from a tar'd tape. Not realizing, you xvf the actual name, only to realize a an hour later, you didn't use the truncated 'real' name it's stored under the backup as!! George > -Original Message- > From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users- > boun...@listserver.u2ug.org] On Behalf Of Charles Stevenson > Sent: Friday, July 17, 2009 12:05 PM > To: U2 Users List > Subject: Re: [U2] More questions on indexing > > This cries for a ICONV / OCONV code: > > George Gallen wrote: > > In our case, we would also have to build a cross reference to all the > > 'F' VOC's whose actual filenames are different from their ID's, since > > we have a lot of longer filenames with truncated unix filenames. > > > > Or is there a system cross reference file already setup we could tap. > > > I wrote a "user-exit" style OCONV/ICONV that will convert unix > filenames to/from Universe names. > It's mostly to handle the slashes, backslashes, question marks, etc. > that are legal in UV but illegal UV. > Works for filenames and type-19 "item" ids. > > It could be made to handles longname/shortname (type-1 vs -19) > differences, too. > I avoid the hated archaic type-1, so just always use type-19 & > longnames > on.. > > ___ > U2-Users mailing list > U2-Users@listserver.u2ug.org > http://listserver.u2ug.org/mailman/listinfo/u2-users ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users
Re: [U2] Universe Retrieve
Thank you to all. I think Henry insight, supported by others is the core of what I was looking for. I appreciate all input frm all parties. Barry Rogen PNY Technologies, Inc. Senior Programmer/Analyst (973) 515 - 9700 ext 5327 bro...@pny.com - We are continually faced with great opportunities brilliantly disguised as insoluble problems. John W Gardner P Before printing please think about your environmental responsibility -Original Message- From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of andy baum Sent: Friday, July 17, 2009 5:21 AM To: U2 Users List Subject: Re: [U2] Universe Retrieve Henry, Yes, I did some more testing myself last night, should have replied sooner. I built a file with a million records and repeated the test, I also created an I-Descriptor on the dictionary and got the following results :- COUNT TESTFILE WITH F1 = "v" Elapsed 2.828 CPU 2.171 COUNT TESTFILE WITH F1 = EVAL "'V'" Elapsed 8.953 CPU 6.625 COUNT TESTFILE WITH F1 = VEE.ITYPE Elapsed 8.766 CPU 6.500 Which seems to confirm what you are saying Cheers, Andy - Original Message From: Henry Unger To: U2 Users List Sent: Friday, 17 July, 2009 0:32:03 Subject: Re: [U2] Universe Retrieve Good point, Andy. I had considered that, but guessed that it would not be a significant factor. Just in case, I created a file with a million records, and reran the tests. Here are the results: COUNT TESTFILE WITH F1 = 'V' Elapsed 7.4796 COUNT TESTFILE WITH F1 = EVAL "'V'" Elapsed 23.2558 Seems pretty consistent with the earlier tests. Best regards, Henry Henry P.. Unger Hitech Systems, Inc. http://www.hitech.com -Original Message- From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of andy baum Sent: Thursday, July 16, 2009 2:52 PM To: U2 Users List Subject: Re: [U2] Universe Retrieve Henry, EVAL compiles the expression and writes the result into the dictionary, runs the query and then deletes the dictionary item. For your test to be valid you would need to ignore the overheads of the compile, write to and delete from dictionary which in your example are significant compared to the number of records counted. You could probably get more accurate results by choosing an example that runs against a file with millions of records. Cheers, Andy - Original Message From: Henry Unger To: U2 Users List Sent: Thursday, 16 July, 2009 18:36:27 Subject: Re: [U2] Universe Retrieve Hi Martin, I was under the impression that an EVAL calls the same compiler that an I-type does, and that any expression optimization would be done therein. Expanding beyond that, it would be interesting if the I-type compiler was able to detect that a particular expression does result in a constant value and flag the object code as not requiring repeated evaluation by the query processor. Here are some empirical results using UniVerse 10.2.7: >TIMEIT 50 COUNT VOC WITH F1 = 'V' COUNT VOC WITH F1 = 'V' Elapsed 1.3006 >TIMEIT 50 COUNT VOC WITH F1 = EVAL "'V'" COUNT VOC WITH F1 = EVAL "'V'" Elapsed 5.135 This suggests that the query processor does not detect that the result of the evaluation is a constant and optimize its execution. Best regards, Henry TIMEIT: sent = @SENTENCE rest = trimf(field(sent, ' ', 2, len(sent))) word = field(rest, ' ', 1) if word matches "0N" then n = int(word) sent = trimf(field(rest, ' ', 2, len(rest))) end else n = 1 sent = rest end print sent t0 = time() for i = 1 to n execute sent capturing output next t1 = time() print 'Elapsed ' : t1 - t0 end Henry P. Unger Hitech Systems, Inc. http://www.hitech.com -Original Message- From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Martin Phillips Sent: Thursday, July 16, 2009 9:30 AM To: U2 Users List Subject: Re: [U2] Universe Retrieve Hi Henry, > You can see the object code that is produced using VLIST and > examine it for optimizations. The particular optimsiation that Barry is looking for would not show in the object code. For a truly constant I-type expression, the query procesor could evaluate it just once and store the result instead of doing it on every use. Although not common, such I-types do exist. Martin Phillips Ladybridge Systems Ltd 17b Coldstream Lane, Hardingstone, Northampton, NN4 6DB +44-(0)1604-709200 ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users ___ U2-
Re: [U2] More questions on indexing
This cries for a ICONV / OCONV code: George Gallen wrote: In our case, we would also have to build a cross reference to all the 'F' VOC's whose actual filenames are different from their ID's, since we have a lot of longer filenames with truncated unix filenames. Or is there a system cross reference file already setup we could tap. I wrote a "user-exit" style OCONV/ICONV that will convert unix filenames to/from Universe names. It's mostly to handle the slashes, backslashes, question marks, etc. that are legal in UV but illegal UV. Works for filenames and type-19 "item" ids. It could be made to handles longname/shortname (type-1 vs -19) differences, too. I avoid the hated archaic type-1, so just always use type-19 & longnames on.. ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users
Re: [U2] More questions on indexing
One more thing that we do. We build a database of our indexes every night using a 'cron'. It does a find / \( -name 'idx001' -o -name 'X_*' \) at a UNIX level. UV's SET.INDEX INFORM acting on an active select list of F- & Q-pointers will give you somethiong similar. Contrary to syntax listed in UV's documentation, where "filename" seems to be necessary: "SET.INDEX [ DICT ] filename [ TO [ pathname | NULL ] ] [ options ]" E.g.: >MAKE.LIST CUSTOMERS VOC ORDERS 3 record(s) selected to select list 0. >> SET.INDEX INFORM Indices for file "CUSTOMERS" reside in "C:/UV/CDS/I_CUSTOMERS". File VOC has no secondary indices. Indices for file "ORDERS" reside in "C:/UV/CDS/I_ORDERS". > I sometimes do this ad hoc: COMO ON CDS SELECTF SET.INDEX INFORM COMO OFF ED &COMO& CDS L Indices for file Chuck Stevenson ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users
Re: [U2] ODBC to UPS WorldShip
Tony G wrote: I concur with Glen's assessment that some of these services can be unstable. Not long after writing NebulaShip (nospamNebula-RnD.com/products/ship.htm) I realized that even though the product was stable that we might be getting emergency calls when services were down. I stopped advertising the product, we're not currently selling it, and unless there is significant demand for some of the less critical functions (lookups, confirmations) I may withdraw it entirely. Make sure you have backup providers for critical services. That's a nice spin on my comments. I was actually promoting the API web intergration. WorldShip and Cafe' change too often to be long-term stable automated shipping components IMO. If you have someone standing at the terminal running batches, then OK have fun. I'd rather not waste employee time doing that. If you're only shipping a handful of packages then the desktop tools are fine. We ship way more than that and our shipment processing efficiency was suffering with WorldShip integration. WorldShip used to change once every 3 or 4 years (it seemed like) but now every year a new version comes out with some core change that affects a piece of software plugged into it. Plus, I never could get the post-shipping export to work with D3 ODBC and from what I've read it's not fun to do with U2 either. We use RF terminals to capture tracking barcodes and prompt for other box info. Of course, that is only when the order is hazardous or the rare instance that we can't process packages through the API. It really is a rare thing, so I wouldn't discount your NebulaShip. Anyone who specifically integrates web services must have an understanding of the cloud and the fact that stuff will get lost in the ether just like your ODBC lookup will fail at some point. Either way, a plan needs to be in place to handle the problem. No service is perfect. It won't happen daily, quarterly, or even semi-annually if you implement the proper infrastructure and failover plan. If you don't plan the cloud-operating infrastructure to support web services during processing hours then your "disaster recovery" is just as bad as sticking the backup tapes to the filing cabinet with magnets. GlenB Tony Gravagno Nebula Research and Development TG@ remove.pleaseNebula-RnD.com remove.pleaseNebula-RnD.com/blog Visit PickWiki.com! Contribute! From: Glen Batchelor 3) You're tied to a web service that can (and will) go down at some point. Have a backup processing plan with WorldShip. UPS has been good, for the most part. FedEx has gotten better, but there are still times when the FedEx Ground back-end disappears and we get goofy 'unavailable' errors. ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users
Re: [U2] More questions on indexing
nice idea, In our case, we would also have to build a cross reference to all the 'F' VOC's whose actual filenames are different from their ID's, since we have a lot of longer filenames with truncated unix filenames. Or is there a system cross reference file already setup we could tap. George > -Original Message- > From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users- > boun...@listserver.u2ug.org] On Behalf Of Baakkonen, Rodney A (Rod) 46K > Sent: Thursday, July 16, 2009 5:10 PM > To: U2 Users List > Subject: Re: [U2] More questions on indexing > > One more thing that we do. We build a database of our indexes every > night using a 'cron'. It does a > find / \( -name 'idx001' -o -name 'X_*' \) at a UNIX level. > > The results of this 'find' are then passed into a Unidata program. > Using > a combination of LIST.INDEX and INDICES we get all the info we need to > build the index and write a record to a database using the FILE.NAME as > the key. We then have a process to rebuild indexes using this database. > So if I want to re-build an index. I just type REBUILD.INDEX file name > and everything gets redone. This is really nice for when you have a > file > with 10 indexes and you want to rebuild it. -Rod > > ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users
Re: [U2] Universe Retrieve
Henry, Yes, I did some more testing myself last night, should have replied sooner. I built a file with a million records and repeated the test, I also created an I-Descriptor on the dictionary and got the following results :- COUNT TESTFILE WITH F1 = "v" Elapsed 2.828 CPU 2.171 COUNT TESTFILE WITH F1 = EVAL "'V'" Elapsed 8.953 CPU 6.625 COUNT TESTFILE WITH F1 = VEE.ITYPE Elapsed 8.766 CPU 6.500 Which seems to confirm what you are saying Cheers, Andy - Original Message From: Henry Unger To: U2 Users List Sent: Friday, 17 July, 2009 0:32:03 Subject: Re: [U2] Universe Retrieve Good point, Andy. I had considered that, but guessed that it would not be a significant factor. Just in case, I created a file with a million records, and reran the tests. Here are the results: COUNT TESTFILE WITH F1 = 'V' Elapsed 7.4796 COUNT TESTFILE WITH F1 = EVAL "'V'" Elapsed 23.2558 Seems pretty consistent with the earlier tests. Best regards, Henry Henry P.. Unger Hitech Systems, Inc. http://www.hitech.com -Original Message- From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of andy baum Sent: Thursday, July 16, 2009 2:52 PM To: U2 Users List Subject: Re: [U2] Universe Retrieve Henry, EVAL compiles the expression and writes the result into the dictionary, runs the query and then deletes the dictionary item. For your test to be valid you would need to ignore the overheads of the compile, write to and delete from dictionary which in your example are significant compared to the number of records counted. You could probably get more accurate results by choosing an example that runs against a file with millions of records. Cheers, Andy - Original Message From: Henry Unger To: U2 Users List Sent: Thursday, 16 July, 2009 18:36:27 Subject: Re: [U2] Universe Retrieve Hi Martin, I was under the impression that an EVAL calls the same compiler that an I-type does, and that any expression optimization would be done therein. Expanding beyond that, it would be interesting if the I-type compiler was able to detect that a particular expression does result in a constant value and flag the object code as not requiring repeated evaluation by the query processor. Here are some empirical results using UniVerse 10.2.7: >TIMEIT 50 COUNT VOC WITH F1 = 'V' COUNT VOC WITH F1 = 'V' Elapsed 1.3006 >TIMEIT 50 COUNT VOC WITH F1 = EVAL "'V'" COUNT VOC WITH F1 = EVAL "'V'" Elapsed 5.135 This suggests that the query processor does not detect that the result of the evaluation is a constant and optimize its execution. Best regards, Henry TIMEIT: sent = @SENTENCE rest = trimf(field(sent, ' ', 2, len(sent))) word = field(rest, ' ', 1) if word matches "0N" then n = int(word) sent = trimf(field(rest, ' ', 2, len(rest))) end else n = 1 sent = rest end print sent t0 = time() for i = 1 to n execute sent capturing output next t1 = time() print 'Elapsed ' : t1 - t0 end Henry P. Unger Hitech Systems, Inc. http://www.hitech.com -Original Message- From: u2-users-boun...@listserver.u2ug.org [mailto:u2-users-boun...@listserver.u2ug.org] On Behalf Of Martin Phillips Sent: Thursday, July 16, 2009 9:30 AM To: U2 Users List Subject: Re: [U2] Universe Retrieve Hi Henry, > You can see the object code that is produced using VLIST and > examine it for optimizations. The particular optimsiation that Barry is looking for would not show in the object code. For a truly constant I-type expression, the query procesor could evaluate it just once and store the result instead of doing it on every use. Although not common, such I-types do exist. Martin Phillips Ladybridge Systems Ltd 17b Coldstream Lane, Hardingstone, Northampton, NN4 6DB +44-(0)1604-709200 ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users ___ U2-Users mailing list U2-Users@listserver.u2ug.org http://listserver.u2ug.org/mailman/listinfo/u2-users