Many Cards Versus One Card and a List Field
Maybe I don't understand the question (does happen!) but isn't the answer something like this. 1) Once data storage gets serious, more than a few thousand records, Rev alone is not what to do it in. If you want to do the rest of the app in Rev, you have to add a real database. This means sqlite, mysql (if you need multi user and networked), Valentina, whatever. The issue is not one card versus many, the issue is tab delimited fields versus real databases. 2) If data storage retrieval and reports is the primary or only need, its incredibly much quicker to do that sort of thing to some level in Filemaker, but it may not come for your OS and has other limitations. But you do get point and click relational database and report construction. This is a real issue about Rev + sqlite, but its also an issue about alternatives to Rev + sqlite. 3) Even if you can live with tab delimited files for storage, getting reports out of them in Rev is not much fun So you have to add Quartam. Or Perl or Awk. This too is much easier and quicker in FM. But the same comment applies to the alternatives to Rev. Is there a gui package (except the database packages with end user pretensions like FM) that does data storage and retrieval and reporting much better than Rev? Most seem to be a lot worse. Python for instance, I think you have to use a real database for just about any storage. Nothing is perfect. This is my own case: 15-20k records of sales during the fiscal year. I accumulate them (with some trepidation) into an external tab delimited text file. Then we need to go through and extract sales by product by month for some 200+ items. After a prolonged meditation on switch, if and repeat, and the prospect of creating a 200 x 12 matrix of fields with each one individually named and scripted, I broke out Effective Awk Programming. Its like reaching for a plane, after trying to get a smooth finish with a chisel. But chisels have their uses too, and are often the right tool for the job. Don't try doing a mortise with a plane! Well, please correct if this is not right. Peter ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: How to change cursor with ctrl and shift?
Hello Jerry, This was the problem in the first place.. I did not get any rawKeyDown message, when I pressed ctrl or shift and yes I'm developing on a mac. Even tho we're doing mainly software for the Windows users, I would like to make it OS X/Linux/Unix compatible, since they can make big difference in the future. I think I can deal with mouseWithin messages, if I raise the idleTicks to some low rate like 10 seconds in cases, when it's not needed. Thanks for your help Jerry and the rest, this was really nice of you. Sakari On Jan 15, 2008, at 12:03 AM, Jerry Daniels wrote: Sakari, If you want to change the cursor anytime a modifier key is depressed on both Windows and Mac, then I believe you will have to use either a polling method (send in time), idle message or mouseWithin--none of which are very processor friendly and can interfere with other things like clicking links. HOWEVER...if you are developing for Windows only, then you are in luck. ANYTIME you depress a mod key, the rawKeydown message is sent. This may also be so for Linux, but I have not tested that. I would dearly love to have the ability to check mod keys anytime via rawkeydown message on Mac as well, but, at least in my tests over the years, this is not yet possible. As anyone who has developed a standalone application knows, there is an event loop that spawns things like the idle message and mousewithin message that Rev has. I am baffled why it is so hard to send a message anytime any key is depressed from within the Revolution engine. How could the Mac OS forbid such a thing. It never used to when I worked on apps in C and Pascal on Mac OS 7. We check mod keys for no-click inspection in GLX2, so I think I understand the exercise. We need to know mod key states even if the mouse is not within rect of the stack as well. So we check the mod key states while the mouse is moving and then send a series of staggered messages every 350 millisecs after the mouse stops moving to catch modifier key states outside of the stack window, etc. This taxes our processor time very, very little and provides almost zero interference with the IDE's other tasks, fortunately. But it is certainly not ideal as the staggered messages die out after a few seconds. Best, Jerry Daniels Daniels Mara, Inc. Makers of GLX2 http://www.daniels-mara.com/glx2 On Jan 14, 2008, at 2:40 PM, Jan Schenkel wrote: --- Sakari Ruoho [EMAIL PROTECTED] wrote: Hello folks, Was wondering how to change the mouse cursor behavior, when user presses either ctrl or shift key? Like in photoshop with select tool where u can add to selection by pressing shift and remove from selection by pressing ctrl? If anyone has implemented anything like this, any help would be appreaciated. Thank you! Sakari Ruoho Hi Sakari, Others already suggested trapping the 'mouseWithin' message, or polling every 100 milliseconds using a 'send in time' construct; here's a different approach: ## local sKeysDown on rawKeyDown pKey if the keysDown is not sKeysDown then RefreshCursor pass rawKeyDown end rawKeyDown on rawKeyUp pKey if the keysDown is not sKeysDown then RefreshCursor pass rawKeyUp end rawKeyUp on RefreshCursor put the keysDown into sKeysDown if the controlKey is down then set the defaultCursor to hand else set the defaultCursor to arrow end if end RefreshCursor ## Hope this helped, Jan Schenkel. Quartam Reports PDF Library for Revolution http://www.quartam.com = As we grow older, we grow both wiser and more foolish at the same time. (La Rochefoucauld) Looking for last minute shopping deals? Find them fast with Yahoo! Search. http://tools.search.yahoo.com/newsearch/category.php?category=shopping ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution Sakari Ruoho Software Designer [EMAIL PROTECTED] ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
RE: Many Cards Versus One Card and a List Field
Gregory, do you have a more detailed study of the architecture of your dna data solution that you would be willing to share... How physically you re storing and manipulating and reporting your data? randall -Original Message- From: Gregory Lypny [EMAIL PROTECTED] To: use-revolution@lists.runrev.com Sent: 1/14/2008 6:00 PM Subject: Re: Many Cards Versus One Card and a List Field Hello everyone, Having started this thread, perhaps I can throw in that the question for me has always been a practical one. If I need to work with and analyze the data in many records and the characteristics of those subsets most of the time (How many in total?, How many are red?, What is the median?), then I build something with a list-like or array-like structure because an individual record or card isn't really relevant; it's the ability to gather them quickly into groups and characterize the group. That's why when I built a program in MetaCard a few years ago to index the human genome database (Unigene) and extract subsets of the 100,000 plus entries, cards never entered the picture. Likewise, when I did the same with 127,000 news releases made by Canada NewsWire and associated the words in the headlines with some 360,000 entries in Webster's Dictionary and the 3,600 firms trading on the SP/TSX. But when I mostly need to find and study the details of an individual record, then the card model is a good one. However, I'm finding that my need to look at individual details is now almost always accompanied by a need to aggregate and study groups of records, and for databases of, say, 100 records or more, I have to maintain a series of lists anyway. Regards, Gregory ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
RE: Many Cards Versus One Card and a List Field
Does rev offer a table object? -Original Message- From: Peter Alcibiades [EMAIL PROTECTED] To: How to use Revolution use-revolution@lists.runrev.com Sent: 1/15/2008 12:11 AM Subject: Many Cards Versus One Card and a List Field Maybe I don't understand the question (does happen!) but isn't the answer something like this. 1) Once data storage gets serious, more than a few thousand records, Rev alone is not what to do it in. If you want to do the rest of the app in Rev, you have to add a real database. This means sqlite, mysql (if you need multi user and networked), Valentina, whatever. The issue is not one card versus many, the issue is tab delimited fields versus real databases. 2) If data storage retrieval and reports is the primary or only need, its incredibly much quicker to do that sort of thing to some level in Filemaker, but it may not come for your OS and has other limitations. But you do get point and click relational database and report construction. This is a real issue about Rev + sqlite, but its also an issue about alternatives to Rev + sqlite. 3) Even if you can live with tab delimited files for storage, getting reports out of them in Rev is not much fun So you have to add Quartam. Or Perl or Awk. This too is much easier and quicker in FM. But the same comment applies to the alternatives to Rev. Is there a gui package (except the database packages with end user pretensions like FM) that does data storage and retrieval and reporting much better than Rev? Most seem to be a lot worse. Python for instance, I think you have to use a real database for just about any storage. Nothing is perfect. This is my own case: 15-20k records of sales during the fiscal year. I accumulate them (with some trepidation) into an external tab delimited text file. Then we need to go through and extract sales by product by month for some 200+ items. After a prolonged meditation on switch, if and repeat, and the prospect of creating a 200 x 12 matrix of fields with each one individually named and scripted, I broke out Effective Awk Programming. Its like reaching for a plane, after trying to get a smooth finish with a chisel. But chisels have their uses too, and are often the right tool for the job. Don't try doing a mortise with a plane! Well, please correct if this is not right. Peter ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Many Cards Versus One Card and a List Field
Does rev offer a table object? Yes, theoretically, you can drag and drop table fields onto a card, but the general opinion here seems to have been to stay away from them. Even could you do it, you're still storing 10s of thousands of records in a text file, its just a rather inaccessible one. I considered using an ordinary field on a card for tab delimited storage. But that implies writing the reports in Rev because the data in the card field is not accessible from other programs. Once you've decided to use a text file of any sort for storage, and to awk that file, it has to be external. Well, you could put to it from a card field and then awk it. Is there any advantage to that? Be nice to know if people think there is. I will move from an external text file to an sqlite file as soon as 2.9 is released in final form and has an sqlite driver. No sort of expert - well you all know that - just trying to find a logical way through the problem, so if this is all wrong, it would be great to be given some guidance. Peter ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Anyone mention OpenBase (www.openbase.com)? 'Similar' to FM in certain aspects although I've found it more performant. The OpenBase Forms might be an alternative reporting tool to look at. The coolest EPOS I've seen uses it as a back end. Cheers, Luis. On 15 Jan 2008, at 08:54, Randall Lee Reetz wrote: Does rev offer a table object? -Original Message- From: Peter Alcibiades [EMAIL PROTECTED] To: How to use Revolution use-revolution@lists.runrev.com Sent: 1/15/2008 12:11 AM Subject: Many Cards Versus One Card and a List Field Maybe I don't understand the question (does happen!) but isn't the answer something like this. 1) Once data storage gets serious, more than a few thousand records, Rev alone is not what to do it in. If you want to do the rest of the app in Rev, you have to add a real database. This means sqlite, mysql (if you need multi user and networked), Valentina, whatever. The issue is not one card versus many, the issue is tab delimited fields versus real databases. 2) If data storage retrieval and reports is the primary or only need, its incredibly much quicker to do that sort of thing to some level in Filemaker, but it may not come for your OS and has other limitations. But you do get point and click relational database and report construction. This is a real issue about Rev + sqlite, but its also an issue about alternatives to Rev + sqlite. 3) Even if you can live with tab delimited files for storage, getting reports out of them in Rev is not much fun So you have to add Quartam. Or Perl or Awk. This too is much easier and quicker in FM. But the same comment applies to the alternatives to Rev. Is there a gui package (except the database packages with end user pretensions like FM) that does data storage and retrieval and reporting much better than Rev? Most seem to be a lot worse. Python for instance, I think you have to use a real database for just about any storage. Nothing is perfect. This is my own case: 15-20k records of sales during the fiscal year. I accumulate them (with some trepidation) into an external tab delimited text file. Then we need to go through and extract sales by product by month for some 200+ items. After a prolonged meditation on switch, if and repeat, and the prospect of creating a 200 x 12 matrix of fields with each one individually named and scripted, I broke out Effective Awk Programming. Its like reaching for a plane, after trying to get a smooth finish with a chisel. But chisels have their uses too, and are often the right tool for the job. Don't try doing a mortise with a plane! Well, please correct if this is not right. Peter ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Peter, did you look into using arrays and customPropertySets? In (somewhat) similar circumstances, I've found that these can deal with largish data sets and provide pretty good performance. I have 18000+ records in one of my data sets, each record with between 3 and 30 fields. I save the data as a customPropertySet in a stack file, and archive it regularly as a text file in a simple text format. Searching and comparing within the data seems quite quick on the whole, and though I don't have to produce nicely formatted reports I do have to assemble sub-sets of the data (by searching) in regular use. Best, Mark On 15 Jan 2008, at 08:11, Peter Alcibiades wrote: This is my own case: 15-20k records of sales during the fiscal year. I accumulate them (with some trepidation) into an external tab delimited text file. Then we need to go through and extract sales by product by month for some 200+ items. After a prolonged meditation on switch, if and repeat, and the prospect of creating a 200 x 12 matrix of fields with each one individually named and scripted, I broke out Effective Awk Programming. Its like reaching for a plane, after trying to get a smooth finish with a chisel. But chisels have their uses too, and are often the right tool for the job. Don't try doing a mortise with a plane! Well, please correct if this is not right. Peter ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
FTP Program
Hiya folks! Because people were so helpful to me on my last problem, I wanted to share a piece of code I did last summer. It's not even close to a complete program, but might have something useful in it. It's very poorly documented, but if needed I can do something about it. This program never got finished and was primarily a code library for internet updates and I have to say, that I was against the whole idea of using FTP for this task in the beginning and still am, but I made the code, so feel free to use it or improve it. I've asked my boss and it's all good, since it would not be a big seller anyways :D It does not support synchronous down/upload, because I did misinterpret some document I did read, which was written well before servers started supporting synchronous downloads. This should not be too hard problem to solve. File is located under utilities category with name FTP Program or u can look under my user name which is Sakari. Any feedback is appreciated. With best regards, Sakari Ruoho Software Designer [EMAIL PROTECTED] P.S. If I've let my ftp passwords and username to my own ftp site inside the code, please let me know :D ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Rev cgi search question
Thanks. A few other questions about using Rev in the cgi-bin. Can a Rev cgi script use the launch command to run a small Rev app from inside cgi-bin? Do I understand correctly that several instances of the Rev cgi application can be running concurrently? In other words, the server could be simultaneously processing the requests from several users, but each request would cause the Rev app to start its own instance. Is that right? Thanks. Richard On Jan 14, 2008, at 8:41 PM, Kee Nethery wrote: We do stuff like this all the time. caching data locally. The deal is we store last datetime changed for each row in each table in our database. Every time the row gets changed the datetime gets updated. The various systems that use the data search the local data cache, not the external database. Before doing the search we do an update to the cache and to do that we keep track of the lastdatetime when the database was looked at and we look for any rows that have changed since then. If the result set is zero, then the cached data gets used as is and the lastdatetime gets incremented in the cache. If the resultset is not zero, we grab the changes, and incorporate them into the data set and then update the cache date. Then once the cache is updated, we do the search. If the cache is empty, or the last cache check date is empty, we do a complete pull from the database. Kee On Jan 14, 2008, at 11:28 AM, Richard Miller wrote: I'm looking for suggestions on how to accomplish the following. 1. User starts a search of my text-based database (via browser and Rev cgi). 2. My app finds the results (which are a series of line numbers... possibly as many as 1000) 3. I now want to store those results so that when the user brings up a data page resulting from the search, they can go back to the results (presumably to go to another data page from the results) without having to re-do the search or use the back-button on their browser. I know how to store the results within a link (i.e. http://www.results.com?results=1,2,3...;), and I'm using this in various places already. But this won't work for me in all cases. I'm guessing one solution might be to issue a temporary id number and connect that to a given users search process. The results could then be stored in a file on the server under this ID, with this page liquidated after some period of time (30 minutes? 60 minutes?). Would this work or is there a better way to handle this. Thanks. Richard Miller ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution - I check email roughly 2 to 3 times per business day. Kagi main office: +1 (510) 550-1336 ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Rev cgi search question
Richard, using 'launch' is not advisable. Not only every instance of your cgi will start it's own program but there's a big chance that your cgi is running as 'nobody' or 'apacheuser' or some other very limited user on your server (this is a good thing, it's security wise to put the cgi user on a sandbox of sorts). If you want to run a persistent software on your server, you must do it with text file scripts and revolution, trying to run stacks or standalones will try to connect to the X11 server and unless you're running a framebuffer display server, this will fail and your software will fail to start with it. If you're thinking about running a software to cope with your previous search result issue, then let me say that you don't need it. The idea to solve this kind of trouble is to have session variables. This variables are assigned to each of your clients and you can store useful information in them. Revolution does not provide us with session variables from the start but with minimal effort you can create your own. In my RevOnRockets package ( http://www.andregarzia.com/RevOnRockets ), I have a minimal EasySession library that can help you. My current session library implementation is not in sync with EasySession. What I am using today is plain stack files. Each stack file holds a session. The name of the file is a unique id and I pass this name in the SessionID url parameter or a cookie. I have two functions one for setting a value and one for getting a value. My library has lockfile features, so a user with two browser windows open (and maybe the same session on both) will not overwrite himself. whenever I need to store some value, I call my value setting function which not only sets the value taking care not to overwrite other changes being made but it also save the file, so once the value is set, it is not lost anymore. Getting values is easy, we don't need to check anything, we just pull the value from the stack and thats all. I use custom properties to hold values. You may ask, Why, Oh Brazilian Fool, are you using stack files instead of a database? and the answer is quite simple. First, I like stacks. Second, session variables don't usually need heavy concurrent access or fort knox level security. You just use it to store simple data, if you need security you use a database and make a pointer in the stack file like myDatabaseId = '#23525' so your database record is safe and your session still contains the parts needed to construct the information you need. The main benefit of databases in my very humble opinion are: * many users changing the same resources. * searches! With session variables you have only one user changing his own session and you don't need searches, so, I guess we don't need a RDBMS afterall. Now, there are other ways if you digg into Javascript. You can use a hidden div to hold all your search data and use javascript in combination with xmlHTTPRequest to move things around. I don't know if this is overkill though. The RevOnRockets package comes with EasySession that uses text files instead of stack files and has no lockfile features so it is possible to overwrite changes if a user has two browser windows open with the same session. Still it is good enough for simple sessioning. With EasySession each session is write-once-read-once, or in plain english: you set a session then you read it afterward and when you read, it is deleted, if you want to move what you read forward then you need to set it again. This was done for security purposes so that sessions can't be re-used. If some hacker picks your url with a session id, there's no problem because that session has a great chance of not existing anymore. So what easy session is good for? Moving secret data from one page to another. In one page you set the data, for example credit card number, user information and when moving to the next one, you pass the session id. In this page, the data is read and session is cleared. Your url and your post/get requests hold no sensitive information. I've created this library mostly for doing confirmation pages where the user fill data, then he is moved to a confirmation page, then the data is proccessed. This way, I simply set the session on one page and clear it on the next, the sensitive data is held on server for a very brief time, just the interval when the user is in transit from one page to the other since in each page the session is cleared. It is hard to capture this session and impossible to re-use it. Feel free to download RevOnRockets and check on EasySession. I hope this helps. Andre On 1/15/08, Richard Miller [EMAIL PROTECTED] wrote: Thanks. A few other questions about using Rev in the cgi-bin. Can a Rev cgi script use the launch command to run a small Rev app from inside cgi-bin? Do I understand correctly that several instances of the Rev cgi application can be running concurrently? In other words, the server could be simultaneously processing the
Re: Many Cards Versus One Card and a List Field
I don't currently have a project where I'm trying to store thousands of records. To some, maybe that will invalidate my views on the subject. I just read what Sarah had written below and I was frankly a bit peeved. I've spent a considerable amount of time learning how to use stacks as documents and then to find out that even at a paltry 4000 cards, Revolution is in her words 'unworkably slow'. That just doesn't sit well with me. Most of us have yesterday's supercomputers sitting on our desks or in our laps. Revolution shouldn't take a performance hit until you're dealing with millions of cards. Maybe it's doing something stupid in all of that searching, like thousands of saves to disk when it should be suspending them until the search operation is over. --- Sarah Reichelt [EMAIL PROTECTED] wrote: I would recommend the list field-single card method for Rev. With Hypercard, marking cards by finding was super fast. With Rev this is not the case. I wrote a small database (about 4000 records) in Hypercard for some friends, using the one card per record method. When they changed to OS X, I tried just importing it into Rev but searching for multiple matches was unworkably slow. I converted it all to a single card plus data field and it was all good again. Plus the data is easier to back up and restore if I send them a program update. Cheers, Sarah ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution Never miss a thing. Make Yahoo your home page. http://www.yahoo.com/r/hs ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Peter Alcibiades wrote: Maybe I don't understand the question (does happen!) but isn't the answer something like this. 1) Once data storage gets serious, more than a few thousand records, Rev alone is not what to do it in. If you want to do the rest of the app in Rev, you have to add a real database. This means sqlite, mysql (if you need multi user and networked), Valentina, whatever. The issue is not one card versus many, the issue is tab delimited fields versus real databases. True. If you need a database, Rev has connections available for a wide variety of them, including SQLite, MySQL, Valentina, Oracle, and ODBC for everything else. But as Mark Smith noted, you may be pleasantly surprised by what you can do with storing data in custom property sets. One could use text files as well, but I tend to use properties so I can have metadata containing field names, types, and sizes in a separate property set from the data itself. I regularly work with data sets from 100 to 50,000 records this way. Using repeat for each... I can search at the rate of 98,000 records per second for a single-criterion search, and more than 34,000 records per second for a three-criteria search. I can extract a single column at the rate of about a million records a second (for field 7; 1.4 million for field 1), and return only unique values in that column at about three-quarter-million records per second. And that's using a generalized (read slower than is possible) method on a modest Mac. On a top-of-the-line Wintel box I would imagine one can nearly double that. For smaller data sets of about a thousand records or so, one can still use cards if desired. I prefer the flexibility of separating code from presentation, but for quick-n-dirty solutions using cards can be convenient. Being able to handle data up to 50,000 records in Rev alone is not bad, and having the connectivity to a variety of well-honed DBMS engines is even better. 2) If data storage retrieval and reports is the primary or only need, its incredibly much quicker to do that sort of thing to some level in Filemaker, but it may not come for your OS and has other limitations. But you do get point and click relational database and report construction. This is a real issue about Rev + sqlite, but its also an issue about alternatives to Rev + sqlite. FileMaker is in a class by itself for ease of use, and I've seen a few projects done in Rev, even commercial ones, that might well have benefited from having been done with FMP instead. It's a good tool, and if it does what a project needs it can be a very good choice. 3) Even if you can live with tab delimited files for storage, getting reports out of them in Rev is not much fun So you have to add Quartam. Or Perl or Awk. This too is much easier and quicker in FM. But the same comment applies to the alternatives to Rev. True, reporting in most 4GLs is done through commercial add-ons. VB uses Crystal Reports, HyperCard used Reports Data Pro, and Rev uses Quartam. That said, I've rolled my own reporting as needed, since my apps tend to have specialized needs, and they've been acceptable in both cost and performance. Though I don't have the direct experience to say with certainty, I would venture to guess that rolling one's one reporting tools would be more costly in VB by at least a factor of two, and perhaps an order of magnitude in Java. Is there a gui package (except the database packages with end user pretensions like FM) that does data storage and retrieval and reporting much better than Rev? Most seem to be a lot worse. Python for instance, I think you have to use a real database for just about any storage. Nothing is perfect. This is my own case: 15-20k records of sales during the fiscal year. I accumulate them (with some trepidation) into an external tab delimited text file. Then we need to go through and extract sales by product by month for some 200+ items. After a prolonged meditation on switch, if and repeat, and the prospect of creating a 200 x 12 matrix of fields with each one individually named and scripted, I broke out Effective Awk Programming. Its like reaching for a plane, after trying to get a smooth finish with a chisel. But chisels have their uses too, and are often the right tool for the job. Don't try doing a mortise with a plane! Well, please correct if this is not right. I think you summed it up well. If one needs a database, use a database. If FMP, or even Bento (FileMaker Inc.'s new ultra-simple DB product) will do the trick, it'd be a shame not to use it. And if one needs more flexibility with the UI than FileMaker accommodates, Rev can be used for tens of thousands of records natively or take advantage of its connectivity options for millions of records with any of its many DBMS engines. -- Richard Gaskin Managing Editor, revJournal
Re: Many Cards Versus One Card and a List Field
Russell, please don't take this as unfriendly or agressive, and being quite good at peevish myself, I can understand your point of view. But if you don't currently need to deal with thousands of records, then your current level of expertise with using cards will serve you well, and since the card metaphor is inherent in Revoluton, it has more uses than just wrangling data, obviously. When and if you need to deal with bigger data sets, then you'll have the opportunity to develop your expertise for that (whether it be files, custom props, databases, or whatever), and you can be sure that people here will be happy to help and advise. Personally, I find devising schemes for handling data is one of the more enjoyable and interesting aspects of programming, though of course YMMV. Best, Mark On 15 Jan 2008, at 17:56, Russell Martin wrote: I don't currently have a project where I'm trying to store thousands of records. To some, maybe that will invalidate my views on the subject. I just read what Sarah had written below and I was frankly a bit peeved. I've spent a considerable amount of time learning how to use stacks as documents and then to find out that even at a paltry 4000 cards, Revolution is in her words 'unworkably slow'. That just doesn't sit well with me. Most of us have yesterday's supercomputers sitting on our desks or in our laps. Revolution shouldn't take a performance hit until you're dealing with millions of cards. Maybe it's doing something stupid in all of that searching, like thousands of saves to disk when it should be suspending them until the search operation is over. --- Sarah Reichelt [EMAIL PROTECTED] wrote: I would recommend the list field-single card method for Rev. With Hypercard, marking cards by finding was super fast. With Rev this is not the case. I wrote a small database (about 4000 records) in Hypercard for some friends, using the one card per record method. When they changed to OS X, I tried just importing it into Rev but searching for multiple matches was unworkably slow. I converted it all to a single card plus data field and it was all good again. Plus the data is easier to back up and restore if I send them a program update. Cheers, Sarah ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution __ __ Never miss a thing. Make Yahoo your home page. http://www.yahoo.com/r/hs ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Russell, I'm kind of late replying to this comment (re your dismay). I understand your frustration, and I agree with you. RR has lots of warts, and this is one of them. I have not been able to use it as my primary development tool because I develop mainly database-centric applications, and RR's implementation of the HC paradigm isn't what I expected, either. HOWEVER, RR's ODBC routines are simple to use and are quick. The ability to hack RR is rare in development tools. I was able to write a general purpose ODBC front-end including list and individual record form layouts in almost no time at all, which was cool, and I was able to implement interface features that RR was missing (such as splitters) very quickly and with very little effort. So, yep, it needs work. Yep, it's buggy. Nope, it isn't perfect, and yep, it would be better if the card paradigm was more in line with HC. But, for the time being it appears that it should work ok for you, and when your needs outgrow it, it looks like it will be pretty easy to write some front-end scripts that will substitute a database back end for RR's native card format, but not sacrifice your effort. I will repeat here yet again that the fact that we can't hack RR commands makes the previous action more difficult, but it is what it is, and it is certainly easier to hack in general than HC ever was. ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Hey Mikey - Good to see you here. Even though Bill Atkinson himself said that HyperCard isn't a database, I can understand the desire of those who've used it as one to use Rev similarly. What made it possible to use HC that way was its hint bits, a system for indexing field contents which is not only proprietary but patented as well. Hint bits made it ultra-fast for obtaining data across the otherwise-complex structures that make up cards and fields. So while we might want Rev to adopt something like this, in all fairness no other card-based system has ever done so, nor are they likely to in the future, for at least two reasons: First, it's proprietary, and while it may be possible to recreate something similar from scratch it would be a fair amount of work, unlikely given: Moreover, the rest of the world has moved on to separate content from presentation, and the Rev team seems well focused on those options. In this thread we've outlined three distinct ways of managing data with Rev: 1. 3,000 records: cards work okay 2. 50,000 records: delimited text stored in custom properties 3. 50,000 records: true database engine (SQlite, MySQL, etc.) If you were using RB, VB, Java, or just about any other system, the first two wouldn't even be options (well, you could store delimited text in a text file, but without the ease of working with metadata or Rev's chunk expressions). Rev gives you all three, with a few limits on the first two. And the latter two are reflective of pretty much how everyone in the world except HyperCarders work with data, providing a lot of flexibility and with the ease of Rev's chunk expressions and other scripting niceties. FWIW, Rev does two other things HC never did: As a RAM-based system, you have control over when it saves. This allows you to implement true document behaviors, or write a simple automatic saving mechanism, whichever you choose. HyperCard gave you no control over saving. When saving, the entire file is written to disk in a single pass, rather than HC's paging from/to disk, which introduces a risk of file corruption that's nearly unknown in the Rev world (remember Error 5454?). Sure, the risk of corruption could be minimized in HC with regular compaction, but any paging system is inherently more prone to corruption than a non-paging one. Extra bonus points: if power outage or other anomaly happens during save, the first thing the Rev engine does when saving is make a copy of the file as a backup, named the same as the file but preceded with ~ (e.g., ~mystack.rev). So in the rare case where file corruption might occur, you have an automatic backup - just toss the bad copy, delete the ~ from the backup, and get back to work. So in brief, Rev definitely works differently than HC, but I wouldn't necessarily think of that difference as being broken. HC had a number of conveniences unique to it, but in the modern world where most folks are accustomed to the flexibility of having content and presentation separated it doesn't seem likely the Rev team would be willing to devote the significant resources needed to replicate HC's hint bits. For projects requiring a simpler approach than Rev offers, Bento may be worth looking at: http://www.filemaker.com/products/bento/ It's a nifty tool, not nearly as flexible as Rev but it seems to do what it does well. -- Richard Gaskin Managing Editor, revJournal ___ Rev tips, tutorials and more: http://www.revJournal.com ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Wrong assumptions. Rev works completely in RAM after loading. Save to disk is only done under command or script control. What you're seeing as disk activity is probably virtual memory in your OS. Rev doesn't touch that. Most of us have given up the card data metaphor for serious projects. Forget the speed issue - having business code and data mixed together is just bad practice. What you might consider 'lacking' is a trade-off most of us are happy to accept considering all the other advantages. I'm sure the makers of Rev have a good technical reason. And I frankly don't care about the card metaphor - to me it's just to accommodate legacy hypercard stacks for the transition and simple applications and documentation. There are so many ways to store data. Even in my Hypercard days I started storing data in resource forks of stacks.The great Rinaldi had an XCMD set that could save and get text in TEXT resources that could be edited in ResCopy or ResEdit. They were just like todays custom properties in Rev. I was looking for ways to improve data use in Hypercard back in the 90's as one of the first users of the SQL database 'Butler'. It was the first SQL server built to run on a mac. Unfortuately the server was buggy and the XCMDs worse, it was crashing too much to even develop more than a few lines of SQL. There's a lot more 'stuff' on a Rev card than a Hypercard 'card', so I guess moving and searching among the cards causes some messaging to occur, and some amount of housekeeping is done on each page change. A lot of this stuff goes away with lock screen etc. But boy, if you're used to Hypercard speed and you hook up a real database to Rev... it will blow your socks off with speed and has so many more features you can apply to your data.. like working on entire columns at once, aggregate functions, etc. supercomputers sitting on our desks or in our laps. Revolution shouldn't take a performance hit until you're dealing with millions of cards. Maybe it's doing something stupid in all of that searching, like thousands of saves to disk when it should be suspending them until the search operation is over. -- stephen barncard s a n f r a n c i s c o - - - - - - - - - - - - ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Rev cgi search question
Thanks, Andre, for the extensive reply. I'll study it and get back to you if I have any questions. Richard On Jan 15, 2008, at 10:47 AM, Andre Garzia wrote: Richard, using 'launch' is not advisable. Not only every instance of your cgi will start it's own program but there's a big chance that your cgi is running as 'nobody' or 'apacheuser' or some other very limited user on your server (this is a good thing, it's security wise to put the cgi user on a sandbox of sorts). If you want to run a persistent software on your server, you must do it with text file scripts and revolution, trying to run stacks or standalones will try to connect to the X11 server and unless you're running a framebuffer display server, this will fail and your software will fail to start with it. If you're thinking about running a software to cope with your previous search result issue, then let me say that you don't need it. The idea to solve this kind of trouble is to have session variables. This variables are assigned to each of your clients and you can store useful information in them. Revolution does not provide us with session variables from the start but with minimal effort you can create your own. In my RevOnRockets package ( http://www.andregarzia.com/RevOnRockets ), I have a minimal EasySession library that can help you. My current session library implementation is not in sync with EasySession. What I am using today is plain stack files. Each stack file holds a session. The name of the file is a unique id and I pass this name in the SessionID url parameter or a cookie. I have two functions one for setting a value and one for getting a value. My library has lockfile features, so a user with two browser windows open (and maybe the same session on both) will not overwrite himself. whenever I need to store some value, I call my value setting function which not only sets the value taking care not to overwrite other changes being made but it also save the file, so once the value is set, it is not lost anymore. Getting values is easy, we don't need to check anything, we just pull the value from the stack and thats all. I use custom properties to hold values. You may ask, Why, Oh Brazilian Fool, are you using stack files instead of a database? and the answer is quite simple. First, I like stacks. Second, session variables don't usually need heavy concurrent access or fort knox level security. You just use it to store simple data, if you need security you use a database and make a pointer in the stack file like myDatabaseId = '#23525' so your database record is safe and your session still contains the parts needed to construct the information you need. The main benefit of databases in my very humble opinion are: * many users changing the same resources. * searches! With session variables you have only one user changing his own session and you don't need searches, so, I guess we don't need a RDBMS afterall. Now, there are other ways if you digg into Javascript. You can use a hidden div to hold all your search data and use javascript in combination with xmlHTTPRequest to move things around. I don't know if this is overkill though. The RevOnRockets package comes with EasySession that uses text files instead of stack files and has no lockfile features so it is possible to overwrite changes if a user has two browser windows open with the same session. Still it is good enough for simple sessioning. With EasySession each session is write-once-read-once, or in plain english: you set a session then you read it afterward and when you read, it is deleted, if you want to move what you read forward then you need to set it again. This was done for security purposes so that sessions can't be re-used. If some hacker picks your url with a session id, there's no problem because that session has a great chance of not existing anymore. So what easy session is good for? Moving secret data from one page to another. In one page you set the data, for example credit card number, user information and when moving to the next one, you pass the session id. In this page, the data is read and session is cleared. Your url and your post/get requests hold no sensitive information. I've created this library mostly for doing confirmation pages where the user fill data, then he is moved to a confirmation page, then the data is proccessed. This way, I simply set the session on one page and clear it on the next, the sensitive data is held on server for a very brief time, just the interval when the user is in transit from one page to the other since in each page the session is cleared. It is hard to capture this session and impossible to re-use it. Feel free to download RevOnRockets and check on EasySession. I hope this helps. Andre On 1/15/08, Richard Miller [EMAIL PROTECTED] wrote: Thanks. A few other questions about using Rev in the cgi-bin. Can a Rev cgi script use the launch command to run a small Rev app from inside cgi-bin? Do I understand
large amounts of data and cgi
Part of a web application I'm working on requires a large number of queries joining several tables, and each table containing millions of rows. Accessing the database (Frontbase) using either the JDBC drivers or the Rev drivers provided by Frontbase, resulted in single queries that would take anywhere between 300-900ms. As there could be hundreds of such queries in order to produce one response, I had to look at ways to speed this up. I don't believe that it is a question of writing better SQL - the queries have to spider across the data, and keep a track of the route they take to get to each node in the graph. I tuned the database, making sure that all the 'where' columns were indexed, and checked the query plan to ensure that it was precisely those indexes being used in the queries. I gave the database 100mb of RAM cache, and even tried loading the core tables 100% into RAM. But still I could not really get much better performance. From my testing, the data did not seem to be found in RAM until after the first time it was retrieved from disk, despite my setting the tables to pre-load in RAM. Perhaps over time RAM-cached data would have shown a much better performance than at this stage. I decided to try HSQLDB - a rdbms written in Java, and which can contain all its tables in RAM, so I could be sure that the data was in RAM. After exporting the core tables to CSV format (and transforming them to SQL Inserts using Rev), it took about 1 hour to start the database, and when started the database took 1.5gb of RAM. But the queries were still slow (my guess is that HSQLDB is just not designed to take that much data). So, I took the CSV data and imported it into a stack, turning each table into a custom property set. I could now search the data in a tiny fraction of a second -- literally. The hundreds of queries involved in making a single response are completed in 200ms. That's right -- I can now run the entire series of queries in less time than it took to do a single query accessing a rdbms. Obviously, custom properties being used in this way are not appropriate if one needs referential integrity, locking, concurrent access, etc. But for a read-only query, Rev has provided a very satisfactory solution. Moreover, whilst HSQLDB would take an hour and 1.5gb of RAM, Rev could load the 100mb of CSV data in 2-4 secs, making the frequent updating of data and subsequent restarting of the application feasible. After following Pierre Sahores' tutorial on creating persistent Rev CGI processes, I now have these queries returning a web page in 200ms, instead of the 30 secs they would have taken using Java and a database. I know all of this flies in the face of many people's expectations, and it is certainly not the position I saw myself being in 2 weeks ago. The rest of the application is written in Java, but this core feature has been made possible using Rev. I expect that associative arrays in e.g. PHP might also be as fast in this regard. Bernard ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: large amounts of data and cgi
Bernard, have you tried valentina? It is very fast!!! :-D cheers andre On 1/15/08, Bernard Devlin [EMAIL PROTECTED] wrote: Part of a web application I'm working on requires a large number of queries joining several tables, and each table containing millions of rows. Accessing the database (Frontbase) using either the JDBC drivers or the Rev drivers provided by Frontbase, resulted in single queries that would take anywhere between 300-900ms. As there could be hundreds of such queries in order to produce one response, I had to look at ways to speed this up. I don't believe that it is a question of writing better SQL - the queries have to spider across the data, and keep a track of the route they take to get to each node in the graph. I tuned the database, making sure that all the 'where' columns were indexed, and checked the query plan to ensure that it was precisely those indexes being used in the queries. I gave the database 100mb of RAM cache, and even tried loading the core tables 100% into RAM. But still I could not really get much better performance. From my testing, the data did not seem to be found in RAM until after the first time it was retrieved from disk, despite my setting the tables to pre-load in RAM. Perhaps over time RAM-cached data would have shown a much better performance than at this stage. I decided to try HSQLDB - a rdbms written in Java, and which can contain all its tables in RAM, so I could be sure that the data was in RAM. After exporting the core tables to CSV format (and transforming them to SQL Inserts using Rev), it took about 1 hour to start the database, and when started the database took 1.5gb of RAM. But the queries were still slow (my guess is that HSQLDB is just not designed to take that much data). So, I took the CSV data and imported it into a stack, turning each table into a custom property set. I could now search the data in a tiny fraction of a second -- literally. The hundreds of queries involved in making a single response are completed in 200ms. That's right -- I can now run the entire series of queries in less time than it took to do a single query accessing a rdbms. Obviously, custom properties being used in this way are not appropriate if one needs referential integrity, locking, concurrent access, etc. But for a read-only query, Rev has provided a very satisfactory solution. Moreover, whilst HSQLDB would take an hour and 1.5gb of RAM, Rev could load the 100mb of CSV data in 2-4 secs, making the frequent updating of data and subsequent restarting of the application feasible. After following Pierre Sahores' tutorial on creating persistent Rev CGI processes, I now have these queries returning a web page in 200ms, instead of the 30 secs they would have taken using Java and a database. I know all of this flies in the face of many people's expectations, and it is certainly not the position I saw myself being in 2 weeks ago. The rest of the application is written in Java, but this core feature has been made possible using Rev. I expect that associative arrays in e.g. PHP might also be as fast in this regard. Bernard ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution -- http://www.andregarzia.com All We Do Is Code. ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
On Jan 15, 2008, at 1:16 PM, Richard Gaskin wrote: In this thread we've outlined three distinct ways of managing data with Rev: 1. 3,000 records: cards work okay 2. 50,000 records: delimited text stored in custom properties 3. 50,000 records: true database engine (SQlite, MySQL, etc.) -- Richard Gaskin Managing Editor, revJournal ___ Rev tips, tutorials and more: http://www.revJournal.com ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution Option 3. 50,000 records you said to use a database. What would be the disadvantage of using cards and a database together. So the database handles the searching etc. but the card includes info you don't need to access from the database. And if you find you do need to access it you just build another database to access it. -=JB=- ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
What made it possible to use HC that way was its hint bits, a system for indexing field contents which is not only proprietary but patented as well. Hint bits made it ultra-fast for obtaining data across the otherwise-complex structures that make up cards and fields. Certainly any such patent has expired by now. Patents are enforceable a maximum of 20 years past the filing date. J. ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
I believe patents are limited to 14 years, but something like this is probably more of a copyright issue; copyrights are good for 28 years and renewable for two additional 28 year periods for a total of 84 years. Of course, I've been wrong before. (sheepish grin) Joe Wilkins On Jan 15, 2008, at 5:35 PM, J. Downs wrote: What made it possible to use HC that way was its hint bits, a system for indexing field contents which is not only proprietary but patented as well. Hint bits made it ultra-fast for obtaining data across the otherwise-complex structures that make up cards and fields. Certainly any such patent has expired by now. Patents are enforceable a maximum of 20 years past the filing date. J. ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Https: how to get Rev app certified
if I put https://[EMAIL PROTECTED]:[EMAIL PROTECTED]/f.api/7522423 into my browser I'll be asked to authenticate and the server spits back info we expect. Now... if I put this into the msg in Rev: put url (https://[EMAIL PROTECTED]:[EMAIL PROTECTED]/f.api/7522423) result: error -Error with certificate at depth: 0 issuer = /C=US/O=Equifax/OU=Equifax Secure Certificate Authority subject = /C=US/O=api.feedblitz.com/OU=GT65832592/OU=See www.geotrust.com/resources/cps (c)07/OU=Domain Control Validated - QuickSSL Premium(R)/CN=api.feedblitz.com err 20:unable to get local issuer certificate how do we do the https-certificate handshake from within a Rev app? ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
J. Downs wrote: What made it possible to use HC that way was its hint bits, a system for indexing field contents which is not only proprietary but patented as well. Hint bits made it ultra-fast for obtaining data across the otherwise-complex structures that make up cards and fields. Certainly any such patent has expired by now. Patents are enforceable a maximum of 20 years past the filing date. Cool. Let us know what Apples says when you write to ask them for the code. ;) -- Richard Gaskin Managing Editor, revJournal ___ Rev tips, tutorials and more: http://www.revJournal.com ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
RE: Many Cards Versus One Card and a List Field
Hello Randall, It's been a while. I could dig it up, but it would be embarrassing (although the program is still being used). My scripting is like Johnny Cash's guitar playing was: primitive. Here's the gist of it, although I'm sure (actually certain) that there's nothing here that people on the list don't already know. But let me know if I can clarify anything. Regards, Gregory Lypny Associate Professor of Finance John Molson School of Business Concordia University Montreal, Canada - The raw sequence data is available in a text files, which are 500 MB plus. Later projects involved files of more than a GB. These are what I call flat-file databases in that each record can have a varying number of sub-records (none to thousands) pertaining to other variables. Records follow each other in a long stream and are delimited by characters such as . Variables within records are labelled at the beginning of each line in capitals followed by a colon. After that, any line may contain a further breakdown, which can be delimited any number of ways. Basically a mess, and the files aren't very useful in themselves for aggregating or doing batch searches where there would be many hits. I think they were originally set up (by the NIH? I forget.) to return results for single web-based queries, kind of like finding a card in HyperCard. I don't think it was foreseen that some researches might want to submit a batch of queries (called probe sets) to find whether they had been sequenced. - Having figured out the record delimiter, it was a question of reading in the file a bit at a time to index the information about each variable, that is, break it down and store it in separate files for searching and extracting later. I experimented with reading in as many complete records as possible (as opposed to lines or characters) so as never to mistakenly cut off or lose part of a record, subject to the constraint that the amount read into what I knew would be the biggest MetaCard variables (what I called indexes) did not exceed a certain size in MB because MetaCard would slow down dramatically after a certain point and, of course, go a slow as molasses if virtual memory was called upon. I don't have the stats handy, but trial and error in setting the reading criteria really pays off. - The MetaCard variables that were used as indexes to store the various record variables were always simple tab-delimited lists or arrays that would be later converted to lists. These were always created using Repeat-for-each-line loops because this type of loop is very fast. Another thing that increased the speed of indexing was to dump the contents of the indexes to text files intermittently to free up memory. Again trial and error was necessary (for me, anyway) to determine the optimal number of times to write to disk because writing takes time, so you're balancing write time with variable size. On an ancient Mac, the one-time indexing process could take about 40 minutes. - The next step was to build a simple interface so that searches and extraction of hits could be done. The user imports a list of search terms (such as probe sets); the appropriate index files are read in and the lines matched with the submitted queries. Output files that can be slapped into a spreadsheet are created and stats reported. A batch query of about 500 probe sets across the 100,000 plus DNA sequences used to take about three to seven minutes on an old blue iMac (forgot what those are called). On Tue, Jan 15, 2008, at 10:47 AM, [EMAIL PROTECTED] wrote: Gregory, do you have a more detailed study of the architecture of your dna data solution that you would be willing to share... How physically you re storing and manipulating and reporting your data? randall ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Constructing and calling a handler as do
On Jan 14, 2008 8:18 AM, Randall Lee Reetz [EMAIL PROTECTED] wrote: I use delimeters so that i can auto deconstruct (this is much slower if one has to filter for cap letters). This is lightning bolt brilliant! I've had the odd occasion where I've needed to be able to 'interpret' and 'manipulate' an bunch of object names and have usually resorted to coming up with some kind of naming convention that forces a prefix and/or suffix to be a fixed number of char long so I can search for 'char 1 to 3' (or 4 or 5 or.because looking for the offset of the char whose charToNum fell between the range of 65 to 90 seemed more difficult to me that just going with fixed length prefix/suffix) which typically resulted in names that weren't as self evident as I'd like. To use an underscore, change the itemDelimiter and search by item is so staring you in the face Rev chunk obvious I can't believe I've spent so much time renaming things to fit my ever-changing fixed width prefix/suffix system. I'd like to try and blame Richard, for his excellent 'script style' bible, but midWord capitalization for me dates back to the origin of HyperCard so it's a habit that clearly blinded me to the advantages that could be afforded by using a naming convention which ALSO incorporated taking advantage of chunk expressions. Randall, any tips, tricks or pitfalls to using this approach? ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
On Jan 16, 2008 10:06 AM, Richard Gaskin [EMAIL PROTECTED] wrote: Cool. Let us know what Apples says when you write to ask them for the code. ;) I had to smile two days ago, I was on the Apple site registering some software and noticed that HyperCard is listed there; so I guess Apple think it very much alive and theirs. I wasn't on the net when I got HC and I'm sure I wouldn't have bothered posting international to register, so I'm thinking, I might just log in and register my copy of HC;-) ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Cool. Let us know what Apples says when you write to ask them for the code. ;) lol. i'd reverse engineer it for you, but haven't the foggiest where to begin with such an enterprise. :P j. ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Richard Gaskin wrote: J. Downs wrote: What made it possible to use HC that way was its hint bits, a system for indexing field contents which is not only proprietary but patented as well. Hint bits made it ultra-fast for obtaining data across the otherwise-complex structures that make up cards and fields. Certainly any such patent has expired by now. Patents are enforceable a maximum of 20 years past the filing date. Cool. Let us know what Apples says when you write to ask them for the code. ;) I think it also falls into the category of company secrets. In every NDA I've signed, this has legal significance. -- Jacqueline Landman Gay | [EMAIL PROTECTED] HyperActive Software | http://www.hyperactivesw.com ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Well, at least I'm the first to let me know I was wrong. Appears they changed it in 1995 to 20 years as JD said earlier; and it had been changed from 14 to 17 years sometime even earlier. You know about old coots. (smile) http://www.fda.gov/cder/about/smallbiz/patent_term.htm Joe Wilkins On Jan 15, 2008, at 5:45 PM, Joe Lewis Wilkins wrote: I believe patents are limited to 14 years, but something like this is probably more of a copyright issue; copyrights are good for 28 years and renewable for two additional 28 year periods for a total of 84 years. Of course, I've been wrong before. (sheepish grin) Joe Wilkins On Jan 16, 2008 10:06 AM, Richard Gaskin [EMAIL PROTECTED] wrote: Cool. Let us know what Apples says when you write to ask them for the code. ;) I had to smile two days ago, I was on the Apple site registering some software and noticed that HyperCard is listed there; so I guess Apple think it very much alive and theirs. I wasn't on the net when I got HC and I'm sure I wouldn't have bothered posting international to register, so I'm thinking, I might just log in and register my copy of HC;-) ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
handler: error in statement
Hi all, This error (see subject) happens when I double-click on a table field of data that has an on mouseDoubleUp in it. The idea of the script is to get the ID value (item 1) and place it into a global variable. Then go to a card to edit the record. Here's the RunRevScript: on mouseDoubleUp set the itemDel to tab put item 1 of the selectedText into gRecord go card EditRecord of stack names end mouseDoubleUp Anything wrong with this script? 3rd line causes the error. With some testing, I did the following to get this to break - to cause the above error: Created a New Stack placed a button on the card created a card named: EditRecord added a script for the button: on mouseUp script: go card EditRecord That's it, and it works. As soon as I put this script (go card...) into the table field and use it there, the above error occurs. Any help is much appreciated. Thanx, Mark Stuart -- View this message in context: http://www.nabble.com/handler%3A-error-in-statement-tp14860651p14860651.html Sent from the Revolution - User mailing list archive at Nabble.com. ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Https: how to get Rev app certified
Sivakatirswami, this looks like an SSL certificate problem, have a look at this thread: http://article.gmane.org/gmane.comp.ide.revolution.user/59030/ match=ssl+certificate which covers it, I think. Best, Mark On 16 Jan 2008, at 01:42, Sivakatirswami wrote: if I put https://[EMAIL PROTECTED]:[EMAIL PROTECTED]/f.api/7522423 into my browser I'll be asked to authenticate and the server spits back info we expect. Now... if I put this into the msg in Rev: put url (https://[EMAIL PROTECTED]:[EMAIL PROTECTED]/ f.api/7522423) result: error -Error with certificate at depth: 0 issuer = /C=US/ O=Equifax/OU=Equifax Secure Certificate Authority subject = /C=US/ O=api.feedblitz.com/OU=GT65832592/OU=See www.geotrust.com/resources/ cps (c)07/OU=Domain Control Validated - QuickSSL Premium(R)/ CN=api.feedblitz.com err 20:unable to get local issuer certificate how do we do the https-certificate handshake from within a Rev app? ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Showing unsaved status for document-based windows
On Jan 14, 2008 2:15 AM, Stephen Barncard [EMAIL PROTECTED] wrote: I've filed a long standing bug report on this... Would that be bug 5179, which I hope you'll be canceling now that you've squashed it:-) ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
RE: Constructing and calling a handler as do
Wow, i hate it when people like my ideas as much as i do... Makes you suspect. Anyway, ya there are lots of pitfalls that may happen when one falls off the path. The problem with live code (scripts your scripts modify on the fly) are that none of us quite know exactly how any particular runtime interpreter works. But if all you re doing is conastructing messages... You will usually be fine. Of course the rest of your code might need to keep aware of your current dels (or get in the habit of deliborately resetting your dels to the defaults right after your use is complete)... The other thing i to remember not to choose dels that may be present already in the source parts you will be linking up. Like others hve said, little niceties like double clicking to select a handler in the script editor may not work. Also, maybe someone else kows the char length limit for var, costume prop, and handler names. Have fun, randall -Original Message- From: Kay C Lan [EMAIL PROTECTED] To: How to use Revolution use-revolution@lists.runrev.com Sent: 1/15/2008 6:14 PM Subject: Re: Constructing and calling a handler as do On Jan 14, 2008 8:18 AM, Randall Lee Reetz [EMAIL PROTECTED] wrote: I use delimeters so that i can auto deconstruct (this is much slower if one has to filter for cap letters). This is lightning bolt brilliant! I've had the odd occasion where I've needed to be able to 'interpret' and 'manipulate' an bunch of object names and have usually resorted to coming up with some kind of naming convention that forces a prefix and/or suffix to be a fixed number of char long so I can search for 'char 1 to 3' (or 4 or 5 or.because looking for the offset of the char whose charToNum fell between the range of 65 to 90 seemed more difficult to me that just going with fixed length prefix/suffix) which typically resulted in names that weren't as self evident as I'd like. To use an underscore, change the itemDelimiter and search by item is so staring you in the face Rev chunk obvious I can't believe I've spent so much time renaming things to fit my ever-changing fixed width prefix/suffix system. I'd like to try and blame Richard, for his excellent 'script style' bible, but midWord capitalization for me dates back to the origin of HyperCard so it's a habit that clearly blinded me to the advantages that could be afforded by using a naming convention which ALSO incorporated taking advantage of chunk expressions. Randall, any tips, tricks or pitfalls to using this approach? ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Https: how to get Rev app certified
Aloha Swami, the @ in the username needs to be replaced with %40, that is urlencode(@). The error you got on rev is an ssl problem. Avoid it with: libURLSetSSLVerification false Om Shanti andre On 1/15/08, Sivakatirswami [EMAIL PROTECTED] wrote: if I put https://[EMAIL PROTECTED]:[EMAIL PROTECTED]/f.api/7522423 into my browser I'll be asked to authenticate and the server spits back info we expect. Now... if I put this into the msg in Rev: put url (https://[EMAIL PROTECTED]:[EMAIL PROTECTED]/f.api/7522423) result: error -Error with certificate at depth: 0 issuer = /C=US/O=Equifax/OU=Equifax Secure Certificate Authority subject = /C=US/O=api.feedblitz.com/OU=GT65832592/OU=See www.geotrust.com/resources/cps (c)07/OU=Domain Control Validated - QuickSSL Premium(R)/CN=api.feedblitz.com err 20:unable to get local issuer certificate how do we do the https-certificate handshake from within a Rev app? ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution -- http://www.andregarzia.com All We Do Is Code. ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Constructing and calling a handler as do
Although this does not work for handlers, for names of objects I always use space. that way I can say for example: put word 2 of the short name of button 3 -- autoName 12 -- 12 or: clone button x set the name of it to (the short name of button x 2) -- originalName 2 Quite simple to write, read and edit per code... On 16 Jan 2008, at 03:14, Kay C Lan wrote: On Jan 14, 2008 8:18 AM, Randall Lee Reetz [EMAIL PROTECTED] wrote: I use delimeters so that i can auto deconstruct (this is much slower if one has to filter for cap letters). This is lightning bolt brilliant! I've had the odd occasion where I've needed to be able to 'interpret' and 'manipulate' an bunch of object names and have usually resorted to coming up with some kind of naming convention that forces a prefix and/or suffix to be a fixed number of char long so I can search for 'char 1 to 3' (or 4 or 5 or.because looking for the offset of the char whose charToNum fell between the range of 65 to 90 seemed more difficult to me that just going with fixed length prefix/suffix) which typically resulted in names that weren't as self evident as I'd like. To use an underscore, change the itemDelimiter and search by item is so staring you in the face Rev chunk obvious I can't believe I've spent so much time renaming things to fit my ever-changing fixed width prefix/suffix system. I'd like to try and blame Richard, for his excellent 'script style' bible, but midWord capitalization for me dates back to the origin of HyperCard so it's a habit that clearly blinded me to the advantages that could be afforded by using a naming convention which ALSO incorporated taking advantage of chunk expressions. Randall, any tips, tricks or pitfalls to using this approach? ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution -- official ChatRev page: http://chatrev.bjoernke.com Chat with other RunRev developers: go stack URL http://homepage.mac.com/bvg/chatrev1.3.rev; ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Constructing and calling a handler as do
Kay C Lan wrote: ...midWord capitalization for me dates back to the origin of HyperCard... Oh, it's much, much older than that, older than the Pascal that helped inspire it -- Richard Gaskin Managing Editor, revJournal ___ Rev tips, tutorials and more: http://www.revJournal.com ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
[OT] SoCAl Linux Expo
Anyone here going to this year's SCaLE?: The sixth annual Southern California Linux Expo To be held Friday, Saturday and Sunday, February 8-10, 2008 at the Westin Los Angeles Airport. http://www.socallinuxexpo.org/ If so let me know. I'm thinking of going -- Richard Gaskin Fourth World Media Corporation ___ [EMAIL PROTECTED] http://www.FourthWorld.com ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
RE: Constructing and calling a handler as do
Anyone ever try to set a del to or empty? -Original Message- From: Björnke von Gierke [EMAIL PROTECTED] To: How to use Revolution use-revolution@lists.runrev.com Sent: 1/15/2008 7:15 PM Subject: Re: Constructing and calling a handler as do Although this does not work for handlers, for names of objects I always use space. that way I can say for example: put word 2 of the short name of button 3 -- autoName 12 -- 12 or: clone button x set the name of it to (the short name of button x 2) -- originalName 2 Quite simple to write, read and edit per code... On 16 Jan 2008, at 03:14, Kay C Lan wrote: On Jan 14, 2008 8:18 AM, Randall Lee Reetz [EMAIL PROTECTED] wrote: I use delimeters so that i can auto deconstruct (this is much slower if one has to filter for cap letters). This is lightning bolt brilliant! I've had the odd occasion where I've needed to be able to 'interpret' and 'manipulate' an bunch of object names and have usually resorted to coming up with some kind of naming convention that forces a prefix and/or suffix to be a fixed number of char long so I can search for 'char 1 to 3' (or 4 or 5 or.because looking for the offset of the char whose charToNum fell between the range of 65 to 90 seemed more difficult to me that just going with fixed length prefix/suffix) which typically resulted in names that weren't as self evident as I'd like. To use an underscore, change the itemDelimiter and search by item is so staring you in the face Rev chunk obvious I can't believe I've spent so much time renaming things to fit my ever-changing fixed width prefix/suffix system. I'd like to try and blame Richard, for his excellent 'script style' bible, but midWord capitalization for me dates back to the origin of HyperCard so it's a habit that clearly blinded me to the advantages that could be afforded by using a naming convention which ALSO incorporated taking advantage of chunk expressions. Randall, any tips, tricks or pitfalls to using this approach? ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution -- official ChatRev page: http://chatrev.bjoernke.com Chat with other RunRev developers: go stack URL http://homepage.mac.com/bvg/chatrev1.3.rev; ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Many Cards Versus One Card and a List Field
I have to admit to not having been able to make Rev work as a storage and retrieval language and am getting close to giving up after a couple of weeks hard trying. Its mostly the documentation probably. It must be possible since people on the list are doing it, but there seems no way to find out how from the documentation. The problem is not storage. Nor is it retrieval. It is reporting. Its a childishly simple problem. There is a file with 15k records. Tab delimited. Each record has five fields and is of the form: number eg 123 description eg Pen, Pencil price eg 2.00 category eg AA, AB... date eg 12/4/2008, 21/5/2008 (UK style) We then have 30 fields, which are the combination of a category and a month. So for instance we need to look at each record, if and only if it has both AA in item 4 and /4/ in item 5, then add the price item 3 to field AAApril. If and only if it has both AA and /5/ then add it to AAMay, and so on. 6 months, five categories = 30 fields.. Its a five minute job in a spreadsheet, but its defeated me for a couple of weeks now in Rev. There must be a way of combining switch, break and if-then to do this.The different ways I've tried sometimes go into loops. Sometimes they accumulate, as if case is leading it to retain previous totals and add new match totals to them. Sometimes they put all zeros into the fields. Sometimes half the fields go blank when I know there are matches. Sometimes it records half of the AAs, or a quarter. Sometimes it works with some of the months, or some of the categories. What is also deeply discouraging is that even can one get through this, there will be the problem of how to make Rev print it in Linux. This seems insuperable. It doesn't see the installed printers. Like it doesn't see the installed fonts. No idea why, everything else does. Maybe going out to the shell and using a2p will work? Maybe a different distro than debian? But this could well be another black hole Peter ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Many Cards Versus One Card and a List Field
Peter, I'm not sure this will work for you, but it worked for me with HC. I designed stacks that could be used for printing reports and then stored data in those stacks when I needed to print new data; the action stacks, used to acquire and change/revise new data would pick up the data from these stacks on start up, putting it into global variables. Then at the end of the day or at the completion of the work with these variables, they would be redeposited into the reports stacks for printing. I realize that this is very general, but perhaps you can see the approach and adapt it to your specific set of circumstances. Admittedly, I did convert some of these activities to XCMDs with Compile-It for speed reasons, but that was because I was dealing with SE30 Macs at the time. When we got around to using later generation, much faster Macs, in several instances I reverted back to the original HyperTalk handlers with no noticeable decrease in speed. With the current machines and memory capacity, this should easily work with Rev. Of course one of the reasons I did as I did was because HC auto saved stuff, so I needed to keep everything in globals; something that was a bit dangerous, but HC was so rock solid that it was very, very seldom that we lost anything due to a crash of some sort. With Rev that might be a concern. Originally, when we were using 400k floppy disks to back-up data, the 2,000+ accounts were split into 13 different account stacks. Eventually, once we had hard drives and removable cartridges for back-up, they were all assembled into a single stack. Just some thoughts. HTH, Joe Wilkins On Jan 15, 2008, at 10:47 PM, Peter Alcibiades wrote: I have to admit to not having been able to make Rev work as a storage and retrieval language and am getting close to giving up after a couple of weeks hard trying. Its mostly the documentation probably. It must be possible since people on the list are doing it, but there seems no way to find out how from the documentation. The problem is not storage. Nor is it retrieval. It is reporting. Its a childishly simple problem. There is a file with 15k records. Tab delimited. Each record has five fields and is of the form: number eg 123 description eg Pen, Pencil price eg 2.00 category eg AA, AB... date eg 12/4/2008, 21/5/2008 (UK style) We then have 30 fields, which are the combination of a category and a month. So for instance we need to look at each record, if and only if it has both AA in item 4 and /4/ in item 5, then add the price item 3 to field AAApril. If and only if it has both AA and /5/ then add it to AAMay, and so on. 6 months, five categories = 30 fields.. Its a five minute job in a spreadsheet, but its defeated me for a couple of weeks now in Rev. There must be a way of combining switch, break and if-then to do this.The different ways I've tried sometimes go into loops. Sometimes they accumulate, as if case is leading it to retain previous totals and add new match totals to them. Sometimes they put all zeros into the fields. Sometimes half the fields go blank when I know there are matches. Sometimes it records half of the AAs, or a quarter. Sometimes it works with some of the months, or some of the categories. What is also deeply discouraging is that even can one get through this, there will be the problem of how to make Rev print it in Linux. This seems insuperable. It doesn't see the installed printers. Like it doesn't see the installed fonts. No idea why, everything else does. Maybe going out to the shell and using a2p will work? Maybe a different distro than debian? But this could well be another black hole Peter ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution
Re: Constructing and calling a handler as do
On Jan 16, 2008 11:15 AM, Björnke von Gierke [EMAIL PROTECTED] wrote: Although this does not work for handlers, Yes, I appreciate all that, and I've definitely done something similar on many occasions, but what I like about Randall's approach is that it can work for handlers and custom properties:-) Which brings and added bonus. My gray matter definitely doesn't work like it use to and I've since found it very very advantageous to name things exactly the same to avoid confusion - so a mySQL column might be named the same as a field or custom property; or fields may contain scripts with the name of the field matching the name of the handler. mySQL (and probably other dbs) doesn't allow multi-word column names, plus there are other traps if you use multi-word names in Rev, like if you forget to quote. Basically what I like most about Randall's approach is the use of 'item'. Myself, and clearly others, have successfully used prefixes, char and word, but have not extended the concept to 'item'. ___ use-revolution mailing list use-revolution@lists.runrev.com Please visit this url to subscribe, unsubscribe and manage your subscription preferences: http://lists.runrev.com/mailman/listinfo/use-revolution