From rdm at cfcl.com Tue Dec 6 15:45:56 2005 From: rdm at cfcl.com (Rich Morin) Date: Tue, 6 Dec 2005 15:45:56 -0800 Subject: [sf-perl] Beer & Dim Sum, etc. Message-ID: The Beer & Pizza SIG will meet at Long Island Chinese Restaurant (1689 Church St.; SF, CA) on 12/28 at 8 pm. For details, see http://cfcl/rdm/beer_and_pizza. I've posted the announcement to the Ruby folks, as well, so we can have a nice scripty evening during the inter-holiday gap... If anyone is interested in attending a Real Meeting (TM) about Ruby, here's an opportunity: The SF Ruby Meetup Group will meet at the SF Library (Mary Louise Strong conference rooms; 100 Larkin St.; SF, CA) at 6:30 pm on 12/13 (see http://ruby.meetup.com/6/events for more infoermation). -r -- email: rdm at cfcl.com; phone: +1 650-873-7841 http://www.cfcl.com - Canta Forda Computer Laboratory http://www.cfcl.com/Meta - The FreeBSD Browser, Meta Project, etc. From rdm at cfcl.com Tue Dec 6 17:49:58 2005 From: rdm at cfcl.com (Rich Morin) Date: Tue, 6 Dec 2005 17:49:58 -0800 Subject: [sf-perl] Beer & Dim Sum, etc. In-Reply-To: <200512070037.jB70bnl46041@mail0.rawbw.com> References: <200512070037.jB70bnl46041@mail0.rawbw.com> Message-ID: At 4:37 PM -0800 12/6/05, Joseph Brenner wrote: >> For details, see http://cfcl/rdm/beer_and_pizza. > >Hm? I guess a ".com" is needed in there, yes? Picky, picky.... Try: http://www.cfcl.com/rdm/beer_and_pizza -r -- email: rdm at cfcl.com; phone: +1 650-873-7841 http://www.cfcl.com - Canta Forda Computer Laboratory http://www.cfcl.com/Meta - The FreeBSD Browser, Meta Project, etc. From doom at kzsu.stanford.edu Wed Dec 7 20:33:55 2005 From: doom at kzsu.stanford.edu (Joseph Brenner) Date: Wed, 07 Dec 2005 20:33:55 -0800 Subject: [sf-perl] Beer & Dim Sum, etc. In-Reply-To: References: Message-ID: <200512080433.jB84Xtl21007@mail0.rawbw.com> Rich Morin wrote: > The Beer & Pizza SIG will meet at Long Island Chinese Restaurant > (1689 Church St.; SF, CA) on 12/28 at 8 pm. For details, see > http://cfcl/rdm/beer_and_pizza. I just took a look, and 'tis definitely not there. It moved in November. The contact phone number is supposed to be the same (though I didn't think to write it down). The new place is going to be called "Wild Pepper", but I haven't checked to see if it's open yet... the location is definitely on 26th near San Jose. From doom at kzsu.stanford.edu Wed Dec 7 20:33:55 2005 From: doom at kzsu.stanford.edu (Joseph Brenner) Date: Wed, 07 Dec 2005 20:33:55 -0800 Subject: [sf-perl] Beer & Dim Sum, etc. In-Reply-To: References: Message-ID: <200512080433.jB84Xtl21007@mail0.rawbw.com> Rich Morin wrote: > The Beer & Pizza SIG will meet at Long Island Chinese Restaurant > (1689 Church St.; SF, CA) on 12/28 at 8 pm. For details, see > http://cfcl/rdm/beer_and_pizza. I just took a look, and 'tis definitely not there. It moved in November. The contact phone number is supposed to be the same (though I didn't think to write it down). The new place is going to be called "Wild Pepper", but I haven't checked to see if it's open yet... the location is definitely on 26th near San Jose. From rdm at cfcl.com Wed Dec 7 22:14:11 2005 From: rdm at cfcl.com (Rich Morin) Date: Wed, 7 Dec 2005 22:14:11 -0800 Subject: [sf-perl] SF Beer & Dim Sum SIG (12/28) - !change of venue! Message-ID: It turns out that the Long Island Chinese Restaurant has (a) moved and (b) changed its name (to "Wild Pepper"). So, please visit the SIG's page (http://cfcl/rdm/beer_and_pizza) for new directions! -r -- email: rdm at cfcl.com; phone: +1 650-873-7841 http://www.cfcl.com - Canta Forda Computer Laboratory http://www.cfcl.com/Meta - The FreeBSD Browser, Meta Project, etc. From josh at agliodbs.com Fri Dec 9 10:25:24 2005 From: josh at agliodbs.com (Josh Berkus) Date: Fri, 9 Dec 2005 10:25:24 -0800 Subject: [sf-perl] Need Web Services Geek Message-ID: <200512091025.24649.josh@agliodbs.com> Folks, I'm working on a rush project right now which could really use the consulting assistance of an expert in implementing web services interactions sometime next week, for half a day to a couple of days. Rates are negotiable based on experience. My phone number and contact information in sig. --Josh -- __Aglio Database Solutions_______________ Josh Berkus Consultant josh at agliodbs.com www.agliodbs.com Ph: 415-752-2500 Fax: 415-752-2387 2166 Hayes Suite 200 San Francisco, CA From sigje at sigje.org Tue Dec 13 15:19:16 2005 From: sigje at sigje.org (Jennifer Davis) Date: Tue, 13 Dec 2005 15:19:16 -0800 (PST) Subject: [sf-perl] Code Con..and Job opening In-Reply-To: <200512091025.24649.josh@agliodbs.com> References: <200512091025.24649.josh@agliodbs.com> Message-ID: My company Decru, http://www.decru.com is looking for a web apps person. I do the job currently (as well as a myriad of other jobs) so I know exactly what is needed. php mysql fundamental understanding of web design all very good. This is for the external site, as well as internal sites. Please send me your resume if you are interested in this position. If you have other questions, I can answer them. The company is a great place to work.. it's in Redwood City. We have a great culture and a good outlook. Also.. Code Con is coming up.. if you have a project you want to talk about, you can submit it to them. Code Con CodeCon 2006 February 10-12, 2006 San Francisco CA, USA www.codecon.org Call For Papers CodeCon is the premier showcase of cutting edge software development. It is an excellent opportunity for programmers to demonstrate their work and keep abreast of what's going on in their community. All presentations must include working demonstrations, ideally accompanied by source code. Presentations must be done by one of the active developers of the code in question. We emphasize that demonstrations be of *working* code. We hereby solicit papers and demonstrations. * Papers and proposals due: December 15, 2005 * Authors notified: January 1, 2006 Possible topics include, but are by no means restricted to: * community-based web sites - forums, weblogs, personals * development tools - languages, debuggers, version control * file sharing systems - swarming distribution, distributed search * security products - mail encryption, intrusion detection, firewalls Presentations will be 45 minutes long, with 15 minutes allocated for Q&A. Overruns will be truncated. Submission details: Submissions are being accepted immediately. Acceptance dates are November 15, and December 15. After the first acceptance date, submissions will be either accepted, rejected, or deferred to the second acceptance date. The conference language is English. Ideally, demonstrations should be usable by attendees with 802.11b connected devices either via a web interface, or locally on Windows, UNIX-like, or MacOS platforms. Cross-platform applications are most desirable. Our venue will be 21+. To submit, send mail to submissions-2006 at codecon.org including the following information: * Project name * url of project home page * tagline - one sentence or less summing up what the project does * names of presenter(s) and urls of their home pages, if they have any * one-paragraph bios of presenters, optional, under 100 words each * project history, under 150 words * what will be done in the project demo, under 200 words * slides to be shown during the presentation, if applicable * future plans General Chair: Jonathan Moore Program Chair: Len Sassaman From qw at sf.pm.org Wed Dec 14 22:23:28 2005 From: qw at sf.pm.org (Quinn Weaver) Date: Wed, 14 Dec 2005 22:23:28 -0800 Subject: [sf-perl] Call for bad code! Spring/summer talk by Dominus. Message-ID: <20051215062328.GB63981@cfcl.com> Hey, Having lately produced _Higher-Order Perl_, Mark Jason Dominus is working on yet another book. The catch is, he wants your code to turn into examples for his book. The nature of the book is such that he needs bad code, or at least suboptimal code, so that he can show how to refactor it. Yes, you can contribute anonymously. ;) Now the cool thing... if we get enough interest, Dominus will come visit us and personally workshop the code we submitted. This would be sometime in late spring or summer, most likely. We'd devote a monthly meeting to it. If you have code to send, mail Dominus, but ping me as well to let me know you've submitted. I'm trying to keep track of how much code we can come up with. So open up your crufty archives now! ;) Anyway, why am I saying all this? Dominus's own words are below. Full details are in the URLs he mentions. ----- Forwarded message from Mark Jason Dominus ----- [...] Dear San Francisco Perl Mongers, I'm writing a new book, which I hope will be published in 2007. It's about code review and refactoring in Perl. (For more complete information, please see http://perl.plover.com/flagbook/ .) To do this right, I need real examples of real code that other people wrote. I'll review the code and fix it up, and explain in the book what I did and why. I have about half the examples that I need. I hope that the Perl community can provide the other half. For the next year, I'll be travelling around speaking to Perl Mongers groups about this. I'd like to give about one talk each month for the rest of the year. What I hope will happen is that your group will invite me to come speak, and that some of the group members will send me some example code ahead of time. Then I'll read over the code, write up a talk about how I think it could be improved, and come visit your group and give the talk. After I go home again, I'll write up a book chapter about the code, incorporating the points that your PM group raised when I gave the talk. (Of course, you can also send code even if you're not part of a Perl Mongers group or if I can't visit your group. The more contributions, the better.) Guidelines for code contributions are at http://perl.plover.com/flagbook/contribute.html To contribute, send code to: mjd at plover.com Questions? Send them to: mjd at plover.com Thanks! ----- End forwarded message ----- From david at fetter.org Thu Dec 15 06:00:26 2005 From: david at fetter.org (David Fetter) Date: Thu, 15 Dec 2005 06:00:26 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215064740.GD63981@cfcl.com> References: <20051215064740.GD63981@cfcl.com> Message-ID: <20051215140026.GA19716@fetter.org> On Wed, Dec 14, 2005 at 10:47:40PM -0800, Quinn Weaver wrote: > Hi, all, > > I'm looking for a practical, lay book on graph theory, especially > one that describes how to represent graphs in RDBMSs. > > I fear I am stuck with something by Date, but... Do people have any > other recommendations? Sure :) First, a few refs on graph theory in general: http://en.wikipedia.org/wiki/Graph_theory The references there include a book from Springer in PDF form :) The problem of is one representing graphs in RDBMSs is at the outer edge of theory right now, so you'll be doing some pretty serious coding to make it happen. The kind of graph where the most has already happened as far as RDBMSs go is a tree. http://www.grzm.com/fornow/archives/2004/07/10/static_hierarchies http://www.mrnaz.com/static/articles/trees_in_sql_tutorial/ http://www.sai.msu.su/~megera/postgres/gist/ltree/ > I specifically don't want formal proofs of mathematical properties > of graphs. What I want is something more emic: What can you > represent with x kind of graph? What are its properties? What are > the algorithms for traversing (or otherwise processing it)? In > short, what is it good for? A lot of the general questions about graphs are essentially mathematical in nature and end up with phrases like "NP-hard" or "NP-complete." > If anyone can come up with this, I owe them a huge debt of > gratitude. :) HTH :) Cheers, D -- David Fetter david at fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote! From rdm at cfcl.com Thu Dec 15 08:56:08 2005 From: rdm at cfcl.com (Rich Morin) Date: Thu, 15 Dec 2005 08:56:08 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215140026.GA19716@fetter.org> References: <20051215064740.GD63981@cfcl.com> <20051215140026.GA19716@fetter.org> Message-ID: [Somehow, I missed the original message, so I'm working from DF's response. Hope I didn't miss anything crucial. -r] QW> I'm looking for a practical, lay book on graph theory, especially QW> one that describes how to represent graphs in RDBMSs. QW> ... QW> I specifically don't want formal proofs of mathematical properties QW> of graphs. What I want is something more emic: What can you QW> represent with x kind of graph? What are its properties? What are QW> the algorithms for traversing (or otherwise processing it)? In QW> short, what is it good for? Before I get into the real question, was "emic" a typo or are you using Pike's neologism in some arcane manner? >As Pike defines it, the emic perspective focuses on the intrinsic cultural >distinctions that are meaningful to the members of a given society (e.g., >whether the natural world is distinguished from the supernatural realm in >the worldview of the culture) in the same way that phonemic analysis >focuses on the intrinsic phonological distinctions that are meaningful to >speakers of a given language (e.g., whether the phones /b/ and /v/ make a >contrast in meaning in a minimal pair in the language). The native >members of a culture are the sole judges of the validity of an emic >description, just as the native speakers of a language are the sole judges >of the accuracy of a phonemic identification. http://faculty.ircc.cc.fl.us/faculty/jlett/Article%20on%20Emics%20and%20Etics.htm I've been looking into graph representations for a while, concentrating on the use of graphs to represent concepts, metadata, etc. As you may know, there are all sorts of graph-based representations for this sort of thing, including Conceptual Graphs, RDF, Topic Maps, ... The variations are both structural and semantic, but assorted efforts are being made at solving the interchange problem, etc. At the risk of being yelled at by DF, I'll note that an easy and flexible way to store a graph in a DBMS is as an edge list, stored in a single table: source | target | edge_type This technique is used by RDF, the Protege folks (http://protege.stanford.edu), etc. Aside from flexibility (adding new structure is REAL easy), it has the advantage that all edges are bi-directional. Finally, it's fairly fast to get answers to questions such as "find all of the nodes that are connected by an edge of type E". In some other representations, this would require walking the entire graph! However, it is not without problems. As DF would point out, it discards many of the benefits of the RDBMS, making the application responsible for ensuring consistency, etc. Also, the apparent simplicity of each edge must be balanced against the number of edges that are needed to do anything useful. Finally, scaling (e.g., performance on large graphs) can be a real issue. I've recently become quite interested in Object-Role Modeling (ORM), which offers a way to map conceptual descriptions into RDBMS tables. It looks like it combines nice semantics with industrial-strength DBMS design. Basically, the ORM approach starts with "examples", such as: Quinn travels by bicycle. David travels by car. It then formalizes these into "facts", adding entity type information, etc. The Person named "Quinn" Travels_by Vehicle "bicycle". The Person named "David" Travels_by Vehicle "car". These facts are used to define "instance diagrams", which are generalized into "conceptual schema diagrams". These diagrams have nodes for entities (e.g., Person, Vehicle) and N-ary relationships: "... travels_by ..." "... traveled_by ... to ... on ..." Relationship nodes are subdivided into "roles", allowing the diagram to show which entity plays which role(s) in each relationship. After assorted constraints (etc) have been added, the diagram can be turned into a set of table definitions. Each relationship turns into a table; each role turns into a column: Travels_by: Person Vehicle ------ ------- Quinn bicycle David car The definitive book on the subject is Information Modeling and Relational Databases: From Conceptual Analysis to Logical Design Terry Halpin Morgan Kaufmann, ISBN 1-55860-672-6 Terry Halpin also maintains a web site at http://www.orm.net. Although no Open Source tools currently exist for ORM, this is in the process of being addressed. Let me know if you want more details... -r P.S. Note that "ORM" is a dangerously overloaded acronym. A Google search for ORM will bring up all sorts of information on Operational Risk Management, Object-Relational Mapping, etc! -- email: rdm at cfcl.com; phone: +1 650-873-7841 http://www.cfcl.com - Canta Forda Computer Laboratory http://www.cfcl.com/Meta - The FreeBSD Browser, Meta Project, etc. From josh at agliodbs.com Thu Dec 15 09:45:57 2005 From: josh at agliodbs.com (Josh Berkus) Date: Thu, 15 Dec 2005 09:45:57 -0800 Subject: [sf-perl] Call for bad code! Spring/summer talk by Dominus. In-Reply-To: <20051215062328.GB63981@cfcl.com> References: <20051215062328.GB63981@cfcl.com> Message-ID: <43A1ABD5.5020809@agliodbs.com> Quinn, > Having lately produced _Higher-Order Perl_, Mark Jason Dominus is > working on yet another book. The catch is, he wants your code to > turn into examples for his book. The nature of the book is such > that he needs bad code, or at least suboptimal code, so that he can > show how to refactor it. Yes, you can contribute anonymously. ;) Wow, what do you know! A contest I can enter! What's the deadline? --Josh From josh at agliodbs.com Thu Dec 15 09:45:57 2005 From: josh at agliodbs.com (Josh Berkus) Date: Thu, 15 Dec 2005 09:45:57 -0800 Subject: [sf-perl] Call for bad code! Spring/summer talk by Dominus. In-Reply-To: <20051215062328.GB63981@cfcl.com> References: <20051215062328.GB63981@cfcl.com> Message-ID: <43A1ABD5.5020809@agliodbs.com> Quinn, > Having lately produced _Higher-Order Perl_, Mark Jason Dominus is > working on yet another book. The catch is, he wants your code to > turn into examples for his book. The nature of the book is such > that he needs bad code, or at least suboptimal code, so that he can > show how to refactor it. Yes, you can contribute anonymously. ;) Wow, what do you know! A contest I can enter! What's the deadline? --Josh From chris at noncombatant.org Thu Dec 15 11:15:43 2005 From: chris at noncombatant.org (Chris Palmer) Date: Thu, 15 Dec 2005 11:15:43 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215140026.GA19716@fetter.org> References: <20051215064740.GD63981@cfcl.com> <20051215140026.GA19716@fetter.org> Message-ID: <20051215191543.GA32539@nodewarrior.org> Like Rich, I also did not get the original message. But here goes. > I'm looking for a practical, lay book on graph theory, especially one > that describes how to represent graphs in RDBMSs. I have *Introductory Graph Theory* by Gary Chartrand (published by Dover). It is approachable and application-oriented, but says nothing about RDBMSs. Why is it necessary to represent graphs in an RDBMS? I can't help but imagine that some graph-specific presistence mechanism would be simpler and more performant. -- http://www.noncombatant.org/ http://www.boshuda.com/ From chris at noncombatant.org Thu Dec 15 11:15:43 2005 From: chris at noncombatant.org (Chris Palmer) Date: Thu, 15 Dec 2005 11:15:43 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215140026.GA19716@fetter.org> References: <20051215064740.GD63981@cfcl.com> <20051215140026.GA19716@fetter.org> Message-ID: <20051215191543.GA32539@nodewarrior.org> Like Rich, I also did not get the original message. But here goes. > I'm looking for a practical, lay book on graph theory, especially one > that describes how to represent graphs in RDBMSs. I have *Introductory Graph Theory* by Gary Chartrand (published by Dover). It is approachable and application-oriented, but says nothing about RDBMSs. Why is it necessary to represent graphs in an RDBMS? I can't help but imagine that some graph-specific presistence mechanism would be simpler and more performant. -- http://www.noncombatant.org/ http://www.boshuda.com/ From josh at agliodbs.com Thu Dec 15 11:28:57 2005 From: josh at agliodbs.com (Josh Berkus) Date: Thu, 15 Dec 2005 11:28:57 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215191543.GA32539@nodewarrior.org> References: <20051215064740.GD63981@cfcl.com> <20051215140026.GA19716@fetter.org> <20051215191543.GA32539@nodewarrior.org> Message-ID: <200512151128.58224.josh@agliodbs.com> Chris, > Why is it necessary to represent graphs in an RDBMS? I can't help but > imagine that some graph-specific presistence mechanism would be simpler > and more performant. As much as I'm an RDBMS geek, I'll have to admit that there's no easy way to do graphs in SQL. The one really big implementation I know of is using a separate graph engine as a pseudotable and plugging that in to their RDBMS. The problem with that approach, of course, is that it's not transaction-compliant. -- __Aglio Database Solutions_______________ Josh Berkus Consultant josh at agliodbs.com www.agliodbs.com Ph: 415-752-2500 Fax: 415-752-2387 2166 Hayes Suite 200 San Francisco, CA From josh at agliodbs.com Thu Dec 15 11:28:57 2005 From: josh at agliodbs.com (Josh Berkus) Date: Thu, 15 Dec 2005 11:28:57 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215191543.GA32539@nodewarrior.org> References: <20051215064740.GD63981@cfcl.com> <20051215140026.GA19716@fetter.org> <20051215191543.GA32539@nodewarrior.org> Message-ID: <200512151128.58224.josh@agliodbs.com> Chris, > Why is it necessary to represent graphs in an RDBMS? I can't help but > imagine that some graph-specific presistence mechanism would be simpler > and more performant. As much as I'm an RDBMS geek, I'll have to admit that there's no easy way to do graphs in SQL. The one really big implementation I know of is using a separate graph engine as a pseudotable and plugging that in to their RDBMS. The problem with that approach, of course, is that it's not transaction-compliant. -- __Aglio Database Solutions_______________ Josh Berkus Consultant josh at agliodbs.com www.agliodbs.com Ph: 415-752-2500 Fax: 415-752-2387 2166 Hayes Suite 200 San Francisco, CA From david at fetter.org Thu Dec 15 11:26:39 2005 From: david at fetter.org (David Fetter) Date: Thu, 15 Dec 2005 11:26:39 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215191543.GA32539@nodewarrior.org> References: <20051215064740.GD63981@cfcl.com> <20051215140026.GA19716@fetter.org> <20051215191543.GA32539@nodewarrior.org> Message-ID: <20051215192638.GA8072@fetter.org> On Thu, Dec 15, 2005 at 11:15:43AM -0800, Chris Palmer wrote: > Like Rich, I also did not get the original message. But here goes. > > > I'm looking for a practical, lay book on graph theory, especially > > one that describes how to represent graphs in RDBMSs. > > I have *Introductory Graph Theory* by Gary Chartrand (published by > Dover). It is approachable and application-oriented, but says > nothing about RDBMSs. > > Why is it necessary to represent graphs in an RDBMS? I can't help > but imagine that some graph-specific presistence mechanism would be > simpler and more performant. I'm sure Quinn can answer this authoritatively, but I have a few ideas. For example, the "nodes" and "edges" might also be other kinds of objects that fit in an RDBMS better than general graphs do, and they might need other properties than whatever a graph-specific storage mechanism would have. Telephone numbers in a telco's billing system would be an example of this. Cheers, D -- David Fetter david at fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote! From david at fetter.org Thu Dec 15 11:26:39 2005 From: david at fetter.org (David Fetter) Date: Thu, 15 Dec 2005 11:26:39 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215191543.GA32539@nodewarrior.org> References: <20051215064740.GD63981@cfcl.com> <20051215140026.GA19716@fetter.org> <20051215191543.GA32539@nodewarrior.org> Message-ID: <20051215192638.GA8072@fetter.org> On Thu, Dec 15, 2005 at 11:15:43AM -0800, Chris Palmer wrote: > Like Rich, I also did not get the original message. But here goes. > > > I'm looking for a practical, lay book on graph theory, especially > > one that describes how to represent graphs in RDBMSs. > > I have *Introductory Graph Theory* by Gary Chartrand (published by > Dover). It is approachable and application-oriented, but says > nothing about RDBMSs. > > Why is it necessary to represent graphs in an RDBMS? I can't help > but imagine that some graph-specific presistence mechanism would be > simpler and more performant. I'm sure Quinn can answer this authoritatively, but I have a few ideas. For example, the "nodes" and "edges" might also be other kinds of objects that fit in an RDBMS better than general graphs do, and they might need other properties than whatever a graph-specific storage mechanism would have. Telephone numbers in a telco's billing system would be an example of this. Cheers, D -- David Fetter david at fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote! From cjm at fruitfly.org Thu Dec 15 11:37:40 2005 From: cjm at fruitfly.org (chris mungall) Date: Thu, 15 Dec 2005 11:37:40 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215191543.GA32539@nodewarrior.org> References: <20051215064740.GD63981@cfcl.com> <20051215140026.GA19716@fetter.org> <20051215191543.GA32539@nodewarrior.org> Message-ID: <8c4c2b0e58941c341cbab6bcb0adf8cb@fruitfly.org> On Dec 15, 2005, at 11:15 AM, Chris Palmer wrote: > Like Rich, I also did not get the original message. But here goes. > >> I'm looking for a practical, lay book on graph theory, especially one >> that describes how to represent graphs in RDBMSs. > > I have *Introductory Graph Theory* by Gary Chartrand (published by > Dover). It is approachable and application-oriented, but says nothing > about RDBMSs. > > Why is it necessary to represent graphs in an RDBMS? I can't help but > imagine that some graph-specific presistence mechanism would be simpler > and more performant. Representing graphs and trees in a RDBMS is vital for certain applications, for example molecular biology: species trees with evolutionary relationships and distances, graphs of interactions between genes, proteins and molecules in different cellular compartment. Having a normalised representation of the graph or tree modeled using the same formalism as the rest of your data allows you to do integrated queries using the same language (eg SQL). Modeling all your data using a graph formalism as opposed to relational is another option, but this can be difficult to scale. Of course if your DBMS doesn't support recursive queries then you have to resort to either ugly imperative code or materializing the transitive closure of the graph (or representing your tree using a nested set model), or perhaps DBMS functions. There's well known techniques for each. There is a good tutorial outlining some of these issues here: http://www.people.virginia.edu/~wrp/papers/ismb02_sql.pdf The examples are geared towards molecular biology, but should be broadly applicable. All the code is perl. Kind of getting off topic for a perl list but if any locals have experience layering semantic web type metamodels (eg graph based formalisms such as RDF) over relational databases and getting decent performance, I'd be interested in chatting with you. > -- > http://www.noncombatant.org/ > http://www.boshuda.com/ > > _______________________________________________ > SanFrancisco-pm mailing list > SanFrancisco-pm at pm.org > http://mail.pm.org/mailman/listinfo/sanfrancisco-pm From cjm at fruitfly.org Thu Dec 15 11:37:40 2005 From: cjm at fruitfly.org (chris mungall) Date: Thu, 15 Dec 2005 11:37:40 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051215191543.GA32539@nodewarrior.org> References: <20051215064740.GD63981@cfcl.com> <20051215140026.GA19716@fetter.org> <20051215191543.GA32539@nodewarrior.org> Message-ID: <8c4c2b0e58941c341cbab6bcb0adf8cb@fruitfly.org> On Dec 15, 2005, at 11:15 AM, Chris Palmer wrote: > Like Rich, I also did not get the original message. But here goes. > >> I'm looking for a practical, lay book on graph theory, especially one >> that describes how to represent graphs in RDBMSs. > > I have *Introductory Graph Theory* by Gary Chartrand (published by > Dover). It is approachable and application-oriented, but says nothing > about RDBMSs. > > Why is it necessary to represent graphs in an RDBMS? I can't help but > imagine that some graph-specific presistence mechanism would be simpler > and more performant. Representing graphs and trees in a RDBMS is vital for certain applications, for example molecular biology: species trees with evolutionary relationships and distances, graphs of interactions between genes, proteins and molecules in different cellular compartment. Having a normalised representation of the graph or tree modeled using the same formalism as the rest of your data allows you to do integrated queries using the same language (eg SQL). Modeling all your data using a graph formalism as opposed to relational is another option, but this can be difficult to scale. Of course if your DBMS doesn't support recursive queries then you have to resort to either ugly imperative code or materializing the transitive closure of the graph (or representing your tree using a nested set model), or perhaps DBMS functions. There's well known techniques for each. There is a good tutorial outlining some of these issues here: http://www.people.virginia.edu/~wrp/papers/ismb02_sql.pdf The examples are geared towards molecular biology, but should be broadly applicable. All the code is perl. Kind of getting off topic for a perl list but if any locals have experience layering semantic web type metamodels (eg graph based formalisms such as RDF) over relational databases and getting decent performance, I'd be interested in chatting with you. > -- > http://www.noncombatant.org/ > http://www.boshuda.com/ > > _______________________________________________ > SanFrancisco-pm mailing list > SanFrancisco-pm at pm.org > http://mail.pm.org/mailman/listinfo/sanfrancisco-pm From rdm at cfcl.com Thu Dec 15 11:44:49 2005 From: rdm at cfcl.com (Rich Morin) Date: Thu, 15 Dec 2005 11:44:49 -0800 Subject: [sf-perl] Duplicate copies of messages Message-ID: I'm seeing quite a few duplicate messages, caused by the following combination of addresses: To: San Francisco Perl Mongers User Group Cc: "San Francisco Perl Users' Group" As these resolve to the same list, you only have to use one of them! -r -- email: rdm at cfcl.com; phone: +1 650-873-7841 http://www.cfcl.com - Canta Forda Computer Laboratory http://www.cfcl.com/Meta - The FreeBSD Browser, Meta Project, etc. From qw at sf.pm.org Thu Dec 15 20:16:16 2005 From: qw at sf.pm.org (Quinn Weaver) Date: Thu, 15 Dec 2005 20:16:16 -0800 Subject: [sf-perl] Call for bad code! Spring/summer talk by Dominus. In-Reply-To: <43A1ABD5.5020809@agliodbs.com> References: <20051215062328.GB63981@cfcl.com> <43A1ABD5.5020809@agliodbs.com> Message-ID: <20051216041616.GB89659@cfcl.com> On Thu, Dec 15, 2005 at 09:45:57AM -0800, Josh Berkus wrote: > Quinn, > > > Having lately produced _Higher-Order Perl_, Mark Jason Dominus is > > working on yet another book. The catch is, he wants your code to > > turn into examples for his book. The nature of the book is such > > that he needs bad code, or at least suboptimal code, so that he can > > show how to refactor it. Yes, you can contribute anonymously. ;) > > Wow, what do you know! A contest I can enter! > > What's the deadline? No deadline; Dominus is not available till April (assuming other groups don't get in in front of us). However, I want to get him as many chunks of code as possible by then. Sooner is better as it will give him time to mull them over. -- qw (Quinn Weaver); #President, San Francisco Perl Mongers =for information, visit http://sf.pm.org/weblog =cut From josh at agliodbs.com Thu Dec 15 21:30:49 2005 From: josh at agliodbs.com (Josh Berkus) Date: Thu, 15 Dec 2005 21:30:49 -0800 Subject: [sf-perl] Duplicate copies of messages In-Reply-To: References: Message-ID: <200512152130.49436.josh@agliodbs.com> Rich, > I'm seeing quite a few duplicate messages, caused by the following > combination of addresses: > > ? To: San Francisco Perl Mongers User Group > ? Cc: "San Francisco Perl Users' Group" > > As these resolve to the same list, you only have to use one of them! The problem is that the messages are going out from the mail server like that. So if somebody (me) hits "reply all" we get both addresses. -- Josh Berkus Aglio Database Solutions San Francisco From vlb at cfcl.com Thu Dec 15 22:29:02 2005 From: vlb at cfcl.com (Vicki Brown) Date: Thu, 15 Dec 2005 22:29:02 -0800 Subject: [sf-perl] Duplicate copies of messages In-Reply-To: <200512152130.49436.josh@agliodbs.com> References: <200512152130.49436.josh@agliodbs.com> Message-ID: At 21:30 -0800 12/15/2005, Josh Berkus wrote: >The problem is that the messages are going out from the mail server like >that. >So if somebody (me) hits "reply all" we get both addresses. Interesting theory. Incorrect, but still interesting. :-) It's been long enough now. I'm pulling the plug on the forward. PAY ATTENTION mail to sfpug at sf.pm.org will now go to the bit bucket the one and only correct address is sanfrancisco-pm at pm.org YOU HAVE BEEN WARNED -- - Vicki ZZZ zzZ San Francisco Bay Area, CA z |\ _,,,---,,_ Books, Cats, Tech zz /,`.-'`' -. ;-;;,_ http://cfcl.com/vlb |,4- ) )-,_. ,\ ( `'-' http://heatercats.com '---''(_/--' `-'\_) http://cfcl.com/vlb/weblog From matt at cloudfactory.org Fri Dec 16 09:26:10 2005 From: matt at cloudfactory.org (Matthew Lanier) Date: Fri, 16 Dec 2005 09:26:10 -0800 (PST) Subject: [sf-perl] Duplicate copies of messages In-Reply-To: Message-ID: oh, that makes me so disappointed, vicki. why must i remember a new address when sfpug at sf.pm.org has worked for so long? anyway, carry on. :-) m@ On Thu, 15 Dec 2005, Vicki Brown wrote: > At 21:30 -0800 12/15/2005, Josh Berkus wrote: > >The problem is that the messages are going out from the mail server like > >that. > >So if somebody (me) hits "reply all" we get both addresses. > > Interesting theory. Incorrect, but still interesting. :-) > > It's been long enough now. I'm pulling the plug on the forward. > > PAY ATTENTION > mail to sfpug at sf.pm.org will now go to the bit bucket > the one and only correct address is sanfrancisco-pm at pm.org > YOU HAVE BEEN WARNED > -- > - Vicki > > ZZZ > zzZ San Francisco Bay Area, CA > z |\ _,,,---,,_ Books, Cats, Tech > zz /,`.-'`' -. ;-;;,_ http://cfcl.com/vlb > |,4- ) )-,_. ,\ ( `'-' http://heatercats.com > '---''(_/--' `-'\_) http://cfcl.com/vlb/weblog > _______________________________________________ > SanFrancisco-pm mailing list > SanFrancisco-pm at pm.org > http://mail.pm.org/mailman/listinfo/sanfrancisco-pm > Matthew D. P. K. Strelchun-Lanier matt at lanier.org From paul.makepeace at realprogrammers.com Fri Dec 16 09:31:21 2005 From: paul.makepeace at realprogrammers.com (Paul Makepeace) Date: Fri, 16 Dec 2005 17:31:21 +0000 Subject: [sf-perl] Duplicate copies of messages In-Reply-To: References: Message-ID: <20051216173121.GM17768@mythix.realprogrammers.com> Je 2005-12-16 17:26:10 +0000, Matthew Lanier skribis: > > > oh, that makes me so disappointed, vicki. > why must i remember a new address when sfpug at sf.pm.org > has worked for so long? > Why not just put in a vacation message for that one (and as a side-effect actually be helpful)? "Hi, sfpug is on a vacation. A very long vacation. Try sanfrancisco-pm instead!" P -- Paul Makepeace .............................. http://paulm.com/inchoate/ "What is the Papa doing with the bishops nuts? Keep your elbow energy." -- http://paulm.com/toys/surrealism/ From vlb at cfcl.com Fri Dec 16 11:58:44 2005 From: vlb at cfcl.com (Vicki Brown) Date: Fri, 16 Dec 2005 11:58:44 -0800 Subject: [sf-perl] Duplicate copies of messages In-Reply-To: References: Message-ID: At 09:26 -0800 12/16/2005, Matthew Lanier wrote: > > oh, that makes me so disappointed, vicki. > why must i remember a new address when sfpug at sf.pm.org > has worked for so long? > Who "remembers"? It's in _my_ address book under the same alias it was always under. And the "why" is because people were abusing it, sending mail to "both". I'll turn it back on if youall promise to *remember* that there is only one SFPM. -- - Vicki ZZZ zzZ San Francisco Bay Area, CA z |\ _,,,---,,_ Books, Cats, Tech zz /,`.-'`' -. ;-;;,_ http://cfcl.com/vlb |,4- ) )-,_. ,\ ( `'-' http://heatercats.com '---''(_/--' `-'\_) http://cfcl.com/vlb/weblog From josh at agliodbs.com Fri Dec 16 12:35:11 2005 From: josh at agliodbs.com (Josh Berkus) Date: Fri, 16 Dec 2005 12:35:11 -0800 Subject: [sf-perl] Duplicate copies of messages In-Reply-To: References: Message-ID: <200512161235.11586.josh@agliodbs.com> Vicki, > I'll turn it back on if youall promise to *remember* that there is only > one SFPM. I'd rather you didn't. There's just no way I can reliable remember to look for duplicates every time I hit "reply all". -- --Josh Josh Berkus Aglio Database Solutions San Francisco From vlb at cfcl.com Fri Dec 16 12:49:39 2005 From: vlb at cfcl.com (Vicki Brown) Date: Fri, 16 Dec 2005 12:49:39 -0800 Subject: [sf-perl] Duplicate copies of messages In-Reply-To: <200512161235.11586.josh@agliodbs.com> References: <200512161235.11586.josh@agliodbs.com> Message-ID: At 12:35 -0800 12/16/2005, Josh Berkus wrote: >Vicki, > >> I'll turn it back on if youall promise to *remember* that there is only >> one SFPM. > >I'd rather you didn't. There's just no way I can reliable remember to >look for duplicates every time I hit "reply all". I would strongly suggest that you train yourself NOT to hit "reply all" (on this or most mailing lists). In our case, the list is configured to reply to list (which WILL include the sender). If you reply to all, by definition you're sending duplicates to somebody. -- - Vicki ZZZ zzZ San Francisco Bay Area, CA z |\ _,,,---,,_ Books, Cats, Tech zz /,`.-'`' -. ;-;;,_ http://cfcl.com/vlb |,4- ) )-,_. ,\ ( `'-' http://heatercats.com '---''(_/--' `-'\_) http://cfcl.com/vlb/weblog From david at fetter.org Fri Dec 16 12:56:05 2005 From: david at fetter.org (David Fetter) Date: Fri, 16 Dec 2005 12:56:05 -0800 Subject: [sf-perl] Duplicate copies of messages In-Reply-To: References: <200512161235.11586.josh@agliodbs.com> Message-ID: <20051216205605.GA4729@fetter.org> On Fri, Dec 16, 2005 at 12:49:39PM -0800, Vicki Brown wrote: > At 12:35 -0800 12/16/2005, Josh Berkus wrote: > >Vicki, > > > >> I'll turn it back on if youall promise to *remember* that there > >> is only one SFPM. > > > >I'd rather you didn't. There's just no way I can reliable > >remember to look for duplicates every time I hit "reply all". > > I would strongly suggest that you train yourself NOT to hit "reply > all" (on this or most mailing lists). > > In our case, the list is configured to reply to list (which WILL > include the sender). If you reply to all, by definition you're > sending duplicates to somebody. With all due respect, I don't believe that the "problem" of duplicate messages is so drastic that it needs a draconian "solution" at the server level. We're talking about an extra email message here, not a napalm strike. How about just leaving it alone and letting people adjust their email clients if they'd like to do so? Cheers, D -- David Fetter david at fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote! From chris at noncombatant.org Fri Dec 16 12:56:06 2005 From: chris at noncombatant.org (Chris Palmer) Date: Fri, 16 Dec 2005 12:56:06 -0800 Subject: [sf-perl] Duplicate copies of messages In-Reply-To: References: <200512161235.11586.josh@agliodbs.com> Message-ID: <20051216205605.GA9671@nodewarrior.org> Vicki Brown writes: > >I'd rather you didn't. There's just no way I can reliable remember > >to look for duplicates every time I hit "reply all". > > I would strongly suggest that you train yourself NOT to hit "reply > all" (on this or most mailing lists). Does anyone here know Perl? Maybe we could have the dead address call a script that kills the message if the message was also sent to the new address, or forward it to the new address if not. > In our case, the list is configured to reply to list (which WILL > include the sender). If you reply to all, by definition you're sending > duplicates to somebody. GNU Mailman can handle this, too. Make the computer do work, not the person -- especially when it's become a religious issue for shut-ins and control freaks as it has. -- http://www.noncombatant.org/ http://www.boshuda.com/ From josh at agliodbs.com Fri Dec 16 13:21:05 2005 From: josh at agliodbs.com (Josh Berkus) Date: Fri, 16 Dec 2005 13:21:05 -0800 Subject: [sf-perl] Duplicate copies of messages In-Reply-To: References: <200512161235.11586.josh@agliodbs.com> Message-ID: <200512161321.05793.josh@agliodbs.com> VIcki, > In our case, the list is configured to reply to list (which WILL include > the sender). If you reply to all, by definition you're sending > duplicates to somebody. Per my private e-mail ... the list is actually not configured with reply-to-list, or it's not working. Here's the mail header: Message-Id: In-Reply-To: <200512161235.11586.josh at agliodbs.com> References: <200512161235.11586.josh at agliodbs.com> X-Mailer: Eudora for Macintosh! Date: Fri, 16 Dec 2005 12:49:39 -0800 To: josh at agliodbs.com, sanfrancisco-pm at pm.org From: Vicki Brown Subject: Re: [sf-perl] Duplicate copies of messages Content-Type: text/plain; charset="us-ascii" There isn't a "Reply To" line which is what the list would use to do reply-to-list. -- --Josh Josh Berkus Aglio Database Solutions San Francisco From vlb at cfcl.com Fri Dec 16 14:20:52 2005 From: vlb at cfcl.com (Vicki Brown) Date: Fri, 16 Dec 2005 14:20:52 -0800 Subject: [sf-perl] Admin: Duplicate copies of messages In-Reply-To: <200512161321.05793.josh@agliodbs.com> References: <200512161235.11586.josh@agliodbs.com> <200512161321.05793.josh@agliodbs.com> Message-ID: I am replying to the list here, (not to all :-) rather than to Josh only. I am doing this because Josh has raised an unfortunately common misunderstanding about email and mailing lists. Getting technical.... At 13:21 -0800 12/16/2005, Josh Berkus wrote: >Per my private e-mail ... the list is actually not configured with >reply-to-list, or it's not working. Here's the mail header: At 13:21 -0800 12/16/2005, Josh Berkus wrote: >In-Reply-To: <200512161235.11586.josh at agliodbs.com> >References: > > > <200512161235.11586.josh at agliodbs.com> >X-Mailer: Eudora for Macintosh! >Date: Fri, 16 Dec 2005 12:49:39 -0800 >To: josh at agliodbs.com, > sanfrancisco-pm at pm.org >From: Vicki Brown >Subject: Re: [sf-perl] Duplicate copies of messages >Content-Type: text/plain; > charset="us-ascii" Yes, that is a mail header. No, it is not the header from the sanfrancisco-pm at pm.org list. (Trust me on this one. I configured the list. I know how it is set up. ;-) Note the headers above _carefully_. You'll see that I From: Vicki Brown sent a message to two recipients: To: josh at agliodbs.com, sanfrancisco-pm at pm.org Therefore, two _separate_ instances of the message were generated and they went their separate ways. Because Josh == josh at agliodbs.com && Josh is also (coincidentally) subscribed to sanfrancisco-pm at pm.org therefore Josh received TWO (separate) pieces of mail. Depending upon the configuration of your email server and client, you may or may not actually see both pieces of mail in your inbox. Some clients can delete "identical" messages. The mail message from which the above headers where clipped is the personal message from vlb at cfcl.com to josh at agliodbs.com - only Josh received this one. It is NOT the list message from vlb at cfcl.com to sanfrancisco-pm at pm.org. Headers on the latter look like this: >List-Id: San Francisco Perl Mongers User Group >List-Unsubscribe: , > >List-Archive: >List-Post: >Sender: sanfrancisco-pm-bounces at pm.org This confusion over which piece of mail is which and how it was sent is one of only many problems people have with email lists. It also plays as an excellent example of WHY it's a bad idea to "reply all" to an email list. Reply to all will send duplicates to at least one person (iff the sender is also a subscriber). As more individuals are added to the To: and Cc: lines, Reply all will send more and more duplicate mail. I ran into this same problem a while back on another list. In that case, a member did a "reply all" (including me) and I responded directly to the personal message, inadvertently taking a conversation offline. Train yourself. Take responsibility for how you address the email you send. Do not reply all to a list (unless you really really meant to do that). Do not Reply all to mail with a Reply-to header. Re-read your headers before sending mail. Consider this a learning experience. -- - Vicki ZZZ zzZ San Francisco Bay Area, CA z |\ _,,,---,,_ Books, Cats, Tech zz /,`.-'`' -. ;-;;,_ http://cfcl.com/vlb |,4- ) )-,_. ,\ ( `'-' http://heatercats.com '---''(_/--' `-'\_) http://cfcl.com/vlb/weblog From josh at agliodbs.com Fri Dec 16 14:35:06 2005 From: josh at agliodbs.com (Josh Berkus) Date: Fri, 16 Dec 2005 14:35:06 -0800 Subject: [sf-perl] Admin: Duplicate copies of messages In-Reply-To: References: <200512161321.05793.josh@agliodbs.com> Message-ID: <200512161435.06541.josh@agliodbs.com> Vicki, > Depending upon the configuration of your email server and client, you > may or may not actually see both pieces of mail in your inbox. Some > clients can delete "identical" messages. Yeah, mine does. It's nice that way. > It is NOT the list message from vlb at cfcl.com to sanfrancisco-pm at pm.org. > Headers on the latter look like this: > >List-Id: San Francisco Perl Mongers User Group > >List-Unsubscribe: > > , > > > >List-Archive: > >List-Post: > >Sender: sanfrancisco-pm-bounces at pm.org Cool, yeah, that seems to be working. I was able to "reply direct" to this one and get the list. > This confusion over which piece of mail is which and how it was sent is > one of only many problems people have with email lists. It also plays as > an excellent example of WHY it's a bad idea to "reply all" to an email > list. Reply to all will send duplicates to at least one person (iff the > sender is also a subscriber). As more individuals are added to the To: > and Cc: lines, Reply all will send more and more duplicate mail. Unfortunately, a lot of OSS project lists are set to "reply to sender". This means that many users get used to using "reply all" because that's the *only* way they can send to the list. Very few e-mail clients support "reply to list" and even those that do (like Kmail) are finicky to configure and maintain. So people need to be relaxed about things. Or you can just kick me off the next time I hit "reply all" and I'll quit SFPerl. Your choice. -- --Josh Josh Berkus Aglio Database Solutions San Francisco From duane.obrien at gmail.com Fri Dec 16 14:33:52 2005 From: duane.obrien at gmail.com (Duane Obrien) Date: Fri, 16 Dec 2005 14:33:52 -0800 Subject: [sf-perl] Admin: Duplicate copies of messages In-Reply-To: References: <200512161235.11586.josh@agliodbs.com> <200512161321.05793.josh@agliodbs.com> Message-ID: > Train yourself. Take responsibility for how you address the email you send. > Do not reply all to a list (unless you really really meant to do that). > Do not Reply all to mail with a Reply-to header. > Re-read your headers before sending mail. Alternately, hit the delete button. I mean, not that it's not entertaining and all? But even not counting my reply this thread, this is the longest thread since that XML discussion in September or so. It's a veritable CAVALCADE of list traffic. I guess what I'm trying to say is KEEP IT DOWN. Derned kids. Some of us are trying to sleep! *throws a boot* -D -- +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Don't ever tell anybody anything. If you do, you start missing everybody. From qw at sf.pm.org Fri Dec 16 15:15:19 2005 From: qw at sf.pm.org (Quinn Weaver) Date: Fri, 16 Dec 2005 15:15:19 -0800 Subject: [sf-perl] Admin: Duplicate copies of messages In-Reply-To: <200512161435.06541.josh@agliodbs.com> References: <200512161321.05793.josh@agliodbs.com> <200512161435.06541.josh@agliodbs.com> Message-ID: <20051216231519.GB53273@cfcl.com> All right, I'm hopping onto this thread late. I'm glad this didn't turn into an actual flame war. ;) (Actually I think it's a testament to the level of discourse on this list, because I have seen people elsewhere get really nasty over these same issues.) The reason the list was CC'ed twice, I _think_, is that someone early in the graph theory thread replied to the wrong sfpug, _and_ someone "CC'ed" (in the To line) the wrong SFPUG--i.e. specified Perl Mongers twice. My original post was to the PostgreSQL group, but the reply went to the Perl group. This is also the reason people complained about not seeing my original post. I am writing a summary of the discussion that will patch together the forked threads on the two lists, which I'll cross-post. Then we can all talk about the same thing. :) However, I won't have time for this till late this afternoon. I think it's fair to say that this is an unusual situation. I personally believe that getting rid of the sfpug at sf.pm.org alias is overkill, so, thanks, Vicki, for keeping it, albeit grudgingly. :) To make life easier... From now on, if someone replies to both aliases, one person, once, should remind the list not to do that. Then we'll have to put up with some annoyances as some more replies trickle in with the same redundant headers. Eventually the thread will die out and/or people will start editing out the extra address. I will gladly take on the role of Reminder. Or I'll delegate it to Vicki, if she chooses. I don't want the whole list to do it, because the deluge of "don't do that" posts could easily become more annoying than the original problem. Anyway, thanks. We now return you to your original programming. (You are programminng in original ways, aren't you?) :) -- qw (Quinn Weaver); #President, San Francisco Perl Mongers =for information, visit http://sf.pm.org/weblog =cut From david at fetter.org Fri Dec 16 16:11:17 2005 From: david at fetter.org (David Fetter) Date: Fri, 16 Dec 2005 16:11:17 -0800 Subject: [sf-perl] Admin: Duplicate copies of messages In-Reply-To: <20051216231519.GB53273@cfcl.com> References: <200512161321.05793.josh@agliodbs.com> <200512161435.06541.josh@agliodbs.com> <20051216231519.GB53273@cfcl.com> Message-ID: <20051217001117.GB10980@fetter.org> On Fri, Dec 16, 2005 at 03:15:19PM -0800, Quinn Weaver wrote: > All right, I'm hopping onto this thread late. I'm glad this didn't > turn into an actual flame war. ;) (Actually I think it's a > testament to the level of discourse on this list, because I have > seen people elsewhere get really nasty over these same issues.) > > The reason the list was CC'ed twice, I _think_, is that someone > early in the graph theory thread replied to the wrong sfpug, That was me. Sorry about that. > _and_ someone "CC'ed" (in the To line) the wrong SFPUG--i.e. > specified Perl Mongers twice. My original post was to the > PostgreSQL group, but the reply went to the Perl group. This is > also the reason people complained about not seeing my original post. > > I am writing a summary of the discussion that will patch together > the forked threads on the two lists, which I'll cross-post. Woohoo! > Then we can all talk about the same thing. :) However, I won't have > time for this till late this afternoon. > > I think it's fair to say that this is an unusual situation. I > personally believe that getting rid of the sfpug at sf.pm.org alias is > overkill, so, thanks, Vicki, for keeping it, albeit grudgingly. :) > > To make life easier... From now on, if someone replies to both > aliases, one person, once, should remind the list not to do that. > Then we'll have to put up with some annoyances as some more replies > trickle in with the same redundant headers. Eventually the thread > will die out and/or people will start editing out the extra address. > > I will gladly take on the role of Reminder. Or I'll delegate it to > Vicki, if she chooses. I don't want the whole list to do it, > because the deluge of "don't do that" posts could easily become more > annoying than the original problem. > > Anyway, thanks. We now return you to your original programming. > (You are programminng in original ways, aren't you?) :) I'm trying to, as appropriate. :) Cheers, D (not into re-inventing the wheel, as a rule) -- David Fetter david at fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote! From qw at sf.pm.org Fri Dec 16 20:56:02 2005 From: qw at sf.pm.org (Quinn Weaver) Date: Fri, 16 Dec 2005 20:56:02 -0800 Subject: [sf-perl] Practical theory: graphs Message-ID: <20051217045602.GA79629@cfcl.com> Oops, this discussion got forked into two threads, one on the SF Perl Users' Group list, one on the SF PostgreSQL Users' Group list. (This was due to the unfortunate similarity of names, which caused an early poster to reply to the wrong SFPUG.) This post attempts to merge the theads by responding to everyone at once ;) It is cross-posted to both lists. I've also attached the full threads as a text file, for those interested in the gory details. * * * At the very end of the thread, Elein made the ridiculous request that I actually explain what I am trying to represent. ;) It's not exactly a secret, so here goes: I am representing a hierarchy of menus in a phone menu system, like the one you get when calling your bank or ISP. Such systems are called IVRs (for Integrated Voice Response). This is for version 2 of a product called Dido. I'm debuting version 1 in a talk at the O'Reilly Emerging Telephony Conference. Dido is a programmer-friendly system for building IVRs. It is built on top of the open-source PBX Asterisk. One of Dido's novel features is that it can reorder menu items according to popularity. So, for instance, if 80% of users are choosing option 3 in submenu 2 of menu 4, Dido can automatically copy that option into the main menu, making callers' lives easier. Another novel feature is that you get a Perl API for programming "dynamic content". Actually it's XML with embedded Perl, very similar to the Web template model of programming. I'd like to gush on about it, but I'm publishing an article on O'Reilly's Web site at some point. When it's up, I'll just post the URL. Before you ask, I do plan to give my O'Reilly talk to San Francisco Perl Mongers. Anyway... The system of nested menus is essentially a graph. Menus are nodes with children (which may themselves be menus). An end node represents the place where you actually get the person (or automated system) that you wanted. In version 1, Dido concerns itself only with the end nodes reached by users (or by an individual user identified by Caller*ID). It logs this information in a database (SQLite--sorry, but I didn't want to force a full PostgreSQL installation. Maybe Version 2 will include an option to use PG.) Periodically Dido reads the DB to see which end nodes are most popular, and moves them up. This makes sense, as what you usually care about it where you end up, not how you got there. However, you can conceive of a scenario where you want to reduce the number of hops needed to reach an end node, without actually changing the order of menus. Maybe. I'm still playing around with the idea. To do this, you need a log of how each users traverses the graph. This seems to suggest a more full-featured representation of the graph in the database. That is, I had expected to use an RDBMs for this. However, some posters have suggested that this is not the best way to represent graphs, and that i should try a graph-specific storage medium rather than a relational one. Chris Palmer was the first to say this directly. Before that, Rich Morin hinted at it, and noted performance problems with representing large graphs. Chris Mungall made a similar observation about performance, based on experience with molecular biology systems. However, he also said that the performance of graph-based systems a problem! Maybe this is just an intrinsic problem to the data structure? In fact, Chris Mungall wrote this plea: > Kind of getting off topic for a perl list but if any locals have > experience layering semantic web type metamodels (eg graph based > formalisms such as RDF) over relational databases and getting decent > performance, I'd be interested in chatting with you. Myself, I'm not worried about performance. My graphs are quite small. (Phone menu systems aren't that big, although they sometimes seem that way to the beleagured user. ;) ) Then Josh Berkus chimed in: > As much as I'm an RDBMS geek, I'll have to admit that there's no easy way > to do graphs in SQL. The one really big implementation I know of is > using a separate graph engine as a pseudotable and plugging that in to > their RDBMS. The problem with that approach, of course, is that it's not > transaction-compliant. Ouch! So maybe an RDBMS is not the best bet for me. What kind of graph-specific representation systems are there? Can people recommend any? Speaking of graph systems versus RDBMS systems, Rich Morin suggested object-role modeling as a third, orthogonal approach. I don't really grok it, but apparently it's a way to generalize specific statements about relationships of things in the world, which can lead you to develop a data model for them. I'm pretty sure I don't need this, because the basic "shape" of a menu system is well-understood and invariant. Is that right, or am I missing the point? Assuiming I do use a graphy, another question was, what kind of graphs are we talking about, anyway? David Fetter pointed out that the tree is the most used kind of graph in RDBMS-land. This was helpful, since I didn't know that. In version 1, menu systems are always trees, for simplicity's sake. However, it is conceivable to allow cycles (e.g. option 3 in menu 2 returns you to option 5 in the main menu, or to some other "sibling" menu elsewhere in the hierarchy). I don't know how much harder this would make my code. This is one of the major things I wanted to find out. David also warned me that I will be stuck with mathematical theory to some extent, because there are important issues like NP hardness that you need to know about. I am OK with stuff like this; I in fact, it's what I want. I want to know general properties of different kinds of graphs. I just don't want to see the proofs or formal statements that lead to them. (To give you an idea, a while ago I read an academic article on Bayesian networks. I got about halfway through before I even understood how they worked, at which point I realized they were useless for what I was doing. [I'd gotten a bad recommendation from a statistician.] _This_ is what I want to avoid.) So texts are important. Chris Palmer recommend _Introductory Graph Theory_, by Gary Chartrand. It sounds as if it deals with graph theory at the level I want, but doesn't deal with RDBMSs at all. This actually sounds like a good bet, for starters. Other books look less promising. Josh Berkus again: > Hmmmm ... does Celko's tree book cover graphs? DF? And David Fetter responding: > Not really. > IMHO, the tree book is a rehash of his other stuff on trees in SQL for > Smarties, 3rd. Ed. But Elein's article looks quite promising: > I have an article with some algorithms for setting up a tree graph > and traversing it, deleting nodes, etc. > > http://www.varlena.com/GeneralBits/65.php That's assuming I use a tree in an RDBMS, not a cyclical graph or a non-RDBMS-based system. Questions, questions! Why do I get the feeling that I'm suffering from Second System Syndrome? ;) Thanks, everybody, for all your suggestions and insights, and for putting up with the long post. I hope there's more good stuff to come. :) -- qw (Quinn Weaver); #President, San Francisco Perl Mongers =for information, visit http://sf.pm.org/weblog =cut -------------- next part -------------- >From sfpug-owner+M1387 at postgresql.org Thu Dec 15 01:44:13 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBF9iDVO029995 for ; Thu, 15 Dec 2005 01:44:13 -0800 Received: (qmail 16314 invoked by alias); 15 Dec 2005 09:44:13 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 5745 invoked from network); 15 Dec 2005 09:44:13 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 09:44:13 -0000 Received: from mx1.hub.org (mx1.hub.org [200.46.208.251]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBF9nNeg052304 for ; Thu, 15 Dec 2005 01:49:24 -0800 (PST) (envelope-from sfpug-owner+M1387 at postgresql.org) Received: from postgresql.org (postgresql.org [200.46.204.71]) by mx1.hub.org (Postfix) with ESMTP id 1D920652F2C; Thu, 15 Dec 2005 05:44:11 -0400 (AST) X-Original-To: sfpug-postgresql.org at localhost.postgresql.org Received: from localhost (av.hub.org [200.46.204.144]) by postgresql.org (Postfix) with ESMTP id 2129D9DCAB2 for ; Thu, 15 Dec 2005 05:44:06 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 50666-08 for ; Thu, 15 Dec 2005 05:44:06 -0400 (AST) X-Greylist: delayed 03:01:28.562777 by SQLgrey- Received: from svr2.postgresql.org (svr2.postgresql.org [65.19.161.25]) by postgresql.org (Postfix) with ESMTP id 0A8029DCB5E for ; Thu, 15 Dec 2005 05:44:02 -0400 (AST) Received: from cfcl.com (cpe-24-221-172-174.ca.sprintbbd.net [24.221.172.174]) by svr2.postgresql.org (Postfix) with ESMTP id A2C7BF0B1C for ; Thu, 15 Dec 2005 06:42:33 +0000 (GMT) Received: from cfcl.com (localhost.cfcl.com [127.0.0.1]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBF6leeg092030 for ; Wed, 14 Dec 2005 22:47:40 -0800 (PST) (envelope-from qweaver at cfcl.com) Received: (from qweaver at localhost) by cfcl.com (8.12.6/8.12.6/Submit) id jBF6lev4092029 for sfpug at postgresql.org; Wed, 14 Dec 2005 22:47:40 -0800 (PST) Date: Wed, 14 Dec 2005 22:47:40 -0800 From: Quinn Weaver To: SF Postgres Subject: [sfpug] Practical theory: graphs Message-ID: <20051215064740.GD63981 at cfcl.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i X-Virus-Scanned: by amavisd-new at hub.org X-Mailing-List: sfpug List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Precedence: bulk Sender: sfpug-owner at postgresql.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 715 Lines: 21 Hi, all, I'm looking for a practical, lay book on graph theory, especially one that describes how to represent graphs in RDBMSs. I fear I am stuck with something by Date, but... Do people have any other recommendations? I specifically don't want formal proofs of mathematical properties of graphs. What I want is something more emic: What can you represent with x kind of graph? What are its properties? What are the algorithms for traversing (or otherwise processing it)? In short, what is it good for? If anyone can come up with this, I owe them a huge debt of gratitude. :) Best regards, -- qw (Quinn Weaver); #President, San Francisco Perl Mongers =for information, visit http://sf.pm.org/weblog =cut >From sanfrancisco-pm-bounces at pm.org Thu Dec 15 06:01:02 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBFE12dv001047 for ; Thu, 15 Dec 2005 06:01:02 -0800 Received: (qmail 27729 invoked by alias); 15 Dec 2005 14:01:02 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 13393 invoked from network); 15 Dec 2005 14:01:02 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 14:01:02 -0000 Received: from x6.develooper.com (x6.develooper.com [63.251.223.186]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFE6Ceg043477 for ; Thu, 15 Dec 2005 06:06:12 -0800 (PST) (envelope-from sanfrancisco-pm-bounces at pm.org) Received: from x6.develooper.com (localhost.localdomain [127.0.0.1]) by x6.develooper.com (Postfix) with ESMTP id 465541777B; Thu, 15 Dec 2005 06:00:59 -0800 (PST) Delivered-To: mailman-sanfrancisco-pm at mailman.pm.dev Received: (qmail 32666 invoked from network); 15 Dec 2005 14:00:51 -0000 Received: from x1a.develooper.com (HELO x1.develooper.com) (216.52.237.111) by lists.develooper.com with SMTP; 15 Dec 2005 14:00:51 -0000 Received: (qmail 27786 invoked by uid 225); 15 Dec 2005 14:00:51 -0000 Delivered-To: sanfrancisco-pm at pm.org Received: (qmail 27782 invoked by alias); 15 Dec 2005 14:00:50 -0000 Received-SPF: neutral (x1.develooper.com: local policy) Received: from cpe-24-221-172-174.ca.sprintbbd.net (HELO cfcl.com) (24.221.172.174) by la.mx.develooper.com (qpsmtpd/0.28) with ESMTP; Thu, 15 Dec 2005 06:00:33 -0800 Received: from fetter.org (dsl092-188-065.sfo1.dsl.speakeasy.net [66.92.188.65]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFE5deg043348 for ; Thu, 15 Dec 2005 06:05:40 -0800 (PST) (envelope-from shackle at fetter.org) Received: from fetter.org (localhost.localdomain [127.0.0.1]) by fetter.org (8.13.4/8.12.10) with ESMTP id jBFE0QdE028659 for ; Thu, 15 Dec 2005 06:00:27 -0800 Received: (from shackle at localhost) by fetter.org (8.13.4/8.13.4/Submit) id jBFE0QIx028658 for sfpug at sf.pm.org; Thu, 15 Dec 2005 06:00:26 -0800 Date: Thu, 15 Dec 2005 06:00:26 -0800 From: David Fetter To: "San Francisco Perl Users' Group" Message-ID: <20051215140026.GA19716 at fetter.org> References: <20051215064740.GD63981 at cfcl.com> Mime-Version: 1.0 Content-Disposition: inline In-Reply-To: <20051215064740.GD63981 at cfcl.com> User-Agent: Mutt/1.4.2.1i Subject: Re: [sf-perl] [sfpug] Practical theory: graphs X-BeenThere: sanfrancisco-pm at pm.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: San Francisco Perl Mongers User Group List-Id: San Francisco Perl Mongers User Group List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sanfrancisco-pm-bounces at pm.org Errors-To: sanfrancisco-pm-bounces at pm.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 1669 Lines: 50 On Wed, Dec 14, 2005 at 10:47:40PM -0800, Quinn Weaver wrote: > Hi, all, > > I'm looking for a practical, lay book on graph theory, especially > one that describes how to represent graphs in RDBMSs. > > I fear I am stuck with something by Date, but... Do people have any > other recommendations? Sure :) First, a few refs on graph theory in general: http://en.wikipedia.org/wiki/Graph_theory The references there include a book from Springer in PDF form :) The problem of is one representing graphs in RDBMSs is at the outer edge of theory right now, so you'll be doing some pretty serious coding to make it happen. The kind of graph where the most has already happened as far as RDBMSs go is a tree. http://www.grzm.com/fornow/archives/2004/07/10/static_hierarchies http://www.mrnaz.com/static/articles/trees_in_sql_tutorial/ http://www.sai.msu.su/~megera/postgres/gist/ltree/ > I specifically don't want formal proofs of mathematical properties > of graphs. What I want is something more emic: What can you > represent with x kind of graph? What are its properties? What are > the algorithms for traversing (or otherwise processing it)? In > short, what is it good for? A lot of the general questions about graphs are essentially mathematical in nature and end up with phrases like "NP-hard" or "NP-complete." > If anyone can come up with this, I owe them a huge debt of > gratitude. :) HTH :) Cheers, D -- David Fetter david at fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote! _______________________________________________ SanFrancisco-pm mailing list SanFrancisco-pm at pm.org http://mail.pm.org/mailman/listinfo/sanfrancisco-pm >From sanfrancisco-pm-bounces+qw=sf.pm.org at pm.org Thu Dec 15 08:57:50 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBFGvoRt003766 for ; Thu, 15 Dec 2005 08:57:50 -0800 Received: (qmail 23218 invoked by alias); 15 Dec 2005 16:56:42 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 203 invoked from network); 15 Dec 2005 16:56:41 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 16:56:41 -0000 Received: from x6.develooper.com (x6.develooper.com [63.251.223.186]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFH1reg007819 for ; Thu, 15 Dec 2005 09:01:53 -0800 (PST) (envelope-from sanfrancisco-pm-bounces+qw=sf.pm.org at pm.org) Received: from x6.develooper.com (localhost.localdomain [127.0.0.1]) by x6.develooper.com (Postfix) with ESMTP id 4E3A3177AF for ; Thu, 15 Dec 2005 08:56:36 -0800 (PST) Delivered-To: mailman-sanfrancisco-pm at mailman.pm.dev Received: (qmail 29036 invoked from network); 15 Dec 2005 16:56:29 -0000 Received: from x1a.develooper.com (HELO x1.develooper.com) (216.52.237.111) by lists.develooper.com with SMTP; 15 Dec 2005 16:56:29 -0000 Received: (qmail 31215 invoked by uid 225); 15 Dec 2005 16:56:28 -0000 Delivered-To: sanfrancisco-pm at pm.org Received: (qmail 31208 invoked by alias); 15 Dec 2005 16:56:28 -0000 Received-SPF: pass (x1.develooper.com: local policy) Received: from cpe-24-221-172-174.ca.sprintbbd.net (HELO cfcl.com) (24.221.172.174) by la.mx.develooper.com (qpsmtpd/0.28) with ESMTP; Thu, 15 Dec 2005 08:56:19 -0800 Received: from [192.168.254.205] ([192.168.254.205]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFH1Oeh007489 for ; Thu, 15 Dec 2005 09:01:25 -0800 (PST) (envelope-from rdm at cfcl.com) Mime-Version: 1.0 Message-Id: In-Reply-To: <20051215140026.GA19716 at fetter.org> References: <20051215064740.GD63981 at cfcl.com> <20051215140026.GA19716 at fetter.org> Date: Thu, 15 Dec 2005 08:56:08 -0800 To: San Francisco Perl Mongers User Group From: Rich Morin Subject: Re: [sf-perl] [sfpug] Practical theory: graphs X-BeenThere: sanfrancisco-pm at pm.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: San Francisco Perl Mongers User Group List-Id: San Francisco Perl Mongers User Group List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sanfrancisco-pm-bounces+qw=sf.pm.org at pm.org Errors-To: sanfrancisco-pm-bounces+qw=sf.pm.org at pm.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 4997 Lines: 123 [Somehow, I missed the original message, so I'm working from DF's response. Hope I didn't miss anything crucial. -r] QW> I'm looking for a practical, lay book on graph theory, especially QW> one that describes how to represent graphs in RDBMSs. QW> ... QW> I specifically don't want formal proofs of mathematical properties QW> of graphs. What I want is something more emic: What can you QW> represent with x kind of graph? What are its properties? What are QW> the algorithms for traversing (or otherwise processing it)? In QW> short, what is it good for? Before I get into the real question, was "emic" a typo or are you using Pike's neologism in some arcane manner? >As Pike defines it, the emic perspective focuses on the intrinsic cultural >distinctions that are meaningful to the members of a given society (e.g., >whether the natural world is distinguished from the supernatural realm in >the worldview of the culture) in the same way that phonemic analysis >focuses on the intrinsic phonological distinctions that are meaningful to >speakers of a given language (e.g., whether the phones /b/ and /v/ make a >contrast in meaning in a minimal pair in the language). The native >members of a culture are the sole judges of the validity of an emic >description, just as the native speakers of a language are the sole judges >of the accuracy of a phonemic identification. http://faculty.ircc.cc.fl.us/faculty/jlett/Article%20on%20Emics%20and%20Etics.htm I've been looking into graph representations for a while, concentrating on the use of graphs to represent concepts, metadata, etc. As you may know, there are all sorts of graph-based representations for this sort of thing, including Conceptual Graphs, RDF, Topic Maps, ... The variations are both structural and semantic, but assorted efforts are being made at solving the interchange problem, etc. At the risk of being yelled at by DF, I'll note that an easy and flexible way to store a graph in a DBMS is as an edge list, stored in a single table: source | target | edge_type This technique is used by RDF, the Protege folks (http://protege.stanford.edu), etc. Aside from flexibility (adding new structure is REAL easy), it has the advantage that all edges are bi-directional. Finally, it's fairly fast to get answers to questions such as "find all of the nodes that are connected by an edge of type E". In some other representations, this would require walking the entire graph! However, it is not without problems. As DF would point out, it discards many of the benefits of the RDBMS, making the application responsible for ensuring consistency, etc. Also, the apparent simplicity of each edge must be balanced against the number of edges that are needed to do anything useful. Finally, scaling (e.g., performance on large graphs) can be a real issue. I've recently become quite interested in Object-Role Modeling (ORM), which offers a way to map conceptual descriptions into RDBMS tables. It looks like it combines nice semantics with industrial-strength DBMS design. Basically, the ORM approach starts with "examples", such as: Quinn travels by bicycle. David travels by car. It then formalizes these into "facts", adding entity type information, etc. The Person named "Quinn" Travels_by Vehicle "bicycle". The Person named "David" Travels_by Vehicle "car". These facts are used to define "instance diagrams", which are generalized into "conceptual schema diagrams". These diagrams have nodes for entities (e.g., Person, Vehicle) and N-ary relationships: "... travels_by ..." "... traveled_by ... to ... on ..." Relationship nodes are subdivided into "roles", allowing the diagram to show which entity plays which role(s) in each relationship. After assorted constraints (etc) have been added, the diagram can be turned into a set of table definitions. Each relationship turns into a table; each role turns into a column: Travels_by: Person Vehicle ------ ------- Quinn bicycle David car The definitive book on the subject is Information Modeling and Relational Databases: From Conceptual Analysis to Logical Design Terry Halpin Morgan Kaufmann, ISBN 1-55860-672-6 Terry Halpin also maintains a web site at http://www.orm.net. Although no Open Source tools currently exist for ORM, this is in the process of being addressed. Let me know if you want more details... -r P.S. Note that "ORM" is a dangerously overloaded acronym. A Google search for ORM will bring up all sorts of information on Operational Risk Management, Object-Relational Mapping, etc! -- email: rdm at cfcl.com; phone: +1 650-873-7841 http://www.cfcl.com - Canta Forda Computer Laboratory http://www.cfcl.com/Meta - The FreeBSD Browser, Meta Project, etc. _______________________________________________ SanFrancisco-pm mailing list SanFrancisco-pm at pm.org http://mail.pm.org/mailman/listinfo/sanfrancisco-pm >From sanfrancisco-pm-bounces+qw=sf.pm.org at pm.org Thu Dec 15 11:17:42 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBFJHgEa006271 for ; Thu, 15 Dec 2005 11:17:42 -0800 Received: (qmail 10087 invoked by alias); 15 Dec 2005 19:17:41 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 4160 invoked from network); 15 Dec 2005 19:17:41 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 19:17:41 -0000 Received: from x6.develooper.com (x6.develooper.com [63.251.223.186]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFJMreg062825 for ; Thu, 15 Dec 2005 11:22:53 -0800 (PST) (envelope-from sanfrancisco-pm-bounces+qw=sf.pm.org at pm.org) Received: from x6.develooper.com (localhost.localdomain [127.0.0.1]) by x6.develooper.com (Postfix) with ESMTP id 7AA72177BD for ; Thu, 15 Dec 2005 11:17:38 -0800 (PST) Delivered-To: mailman-sanfrancisco-pm at mailman.pm.dev Received: (qmail 9633 invoked from network); 15 Dec 2005 19:17:31 -0000 Received: from x1a.develooper.com (HELO x1.develooper.com) (216.52.237.111) by lists.develooper.com with SMTP; 15 Dec 2005 19:17:31 -0000 Received: (qmail 17098 invoked by uid 225); 15 Dec 2005 19:17:30 -0000 Delivered-To: sanfrancisco-pm at pm.org Received: (qmail 17093 invoked by alias); 15 Dec 2005 19:17:30 -0000 Received-SPF: pass (x1.develooper.com: local policy) Received: from 69-12-134-80.dsl.static.sonic.net (HELO alan.noncombatant.org) (69.12.134.80) by la.mx.develooper.com (qpsmtpd/0.28) with ESMTP; Thu, 15 Dec 2005 11:17:22 -0800 Received: by alan.noncombatant.org (Postfix, from userid 1000) id 4309A49F9B; Thu, 15 Dec 2005 11:15:43 -0800 (PST) Date: Thu, 15 Dec 2005 11:15:43 -0800 From: Chris Palmer To: San Francisco Perl Mongers User Group Message-ID: <20051215191543.GA32539 at nodewarrior.org> References: <20051215064740.GD63981 at cfcl.com> <20051215140026.GA19716 at fetter.org> Mime-Version: 1.0 Content-Disposition: inline In-Reply-To: <20051215140026.GA19716 at fetter.org> User-Agent: Mutt/1.5.9i Cc: "San Francisco Perl Users' Group" Subject: Re: [sf-perl] [sfpug] Practical theory: graphs X-BeenThere: sanfrancisco-pm at pm.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: San Francisco Perl Mongers User Group List-Id: San Francisco Perl Mongers User Group List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sanfrancisco-pm-bounces+qw=sf.pm.org at pm.org Errors-To: sanfrancisco-pm-bounces+qw=sf.pm.org at pm.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 720 Lines: 22 Like Rich, I also did not get the original message. But here goes. > I'm looking for a practical, lay book on graph theory, especially one > that describes how to represent graphs in RDBMSs. I have *Introductory Graph Theory* by Gary Chartrand (published by Dover). It is approachable and application-oriented, but says nothing about RDBMSs. Why is it necessary to represent graphs in an RDBMS? I can't help but imagine that some graph-specific presistence mechanism would be simpler and more performant. -- http://www.noncombatant.org/ http://www.boshuda.com/ _______________________________________________ SanFrancisco-pm mailing list SanFrancisco-pm at pm.org http://mail.pm.org/mailman/listinfo/sanfrancisco-pm >From sanfrancisco-pm-bounces at pm.org Thu Dec 15 11:17:50 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBFJHom7006287 for ; Thu, 15 Dec 2005 11:17:50 -0800 Received: (qmail 11192 invoked by alias); 15 Dec 2005 19:17:50 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 13974 invoked from network); 15 Dec 2005 19:17:49 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 19:17:49 -0000 Received: from x6.develooper.com (x6.develooper.com [63.251.223.186]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFJN0eg062905 for ; Thu, 15 Dec 2005 11:23:01 -0800 (PST) (envelope-from sanfrancisco-pm-bounces at pm.org) Received: from x6.develooper.com (localhost.localdomain [127.0.0.1]) by x6.develooper.com (Postfix) with ESMTP id E2703177D4; Thu, 15 Dec 2005 11:17:45 -0800 (PST) Delivered-To: mailman-sanfrancisco-pm at mailman.pm.dev Received: (qmail 9690 invoked from network); 15 Dec 2005 19:17:39 -0000 Received: from x1a.develooper.com (HELO x1.develooper.com) (216.52.237.111) by lists.develooper.com with SMTP; 15 Dec 2005 19:17:39 -0000 Received: (qmail 17155 invoked by uid 225); 15 Dec 2005 19:17:38 -0000 Delivered-To: sanfrancisco-pm at pm.org Received: (qmail 17148 invoked by alias); 15 Dec 2005 19:17:38 -0000 Received-SPF: neutral (x1.develooper.com: local policy) Received: from cpe-24-221-172-174.ca.sprintbbd.net (HELO cfcl.com) (24.221.172.174) by la.mx.develooper.com (qpsmtpd/0.28) with ESMTP; Thu, 15 Dec 2005 11:17:30 -0800 Received: from alan.noncombatant.org (69-12-134-80.dsl.static.sonic.net [69.12.134.80]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFJMXeg062553 for ; Thu, 15 Dec 2005 11:22:38 -0800 (PST) (envelope-from chris at noncombatant.org) Received: by alan.noncombatant.org (Postfix, from userid 1000) id 4309A49F9B; Thu, 15 Dec 2005 11:15:43 -0800 (PST) Date: Thu, 15 Dec 2005 11:15:43 -0800 From: Chris Palmer To: San Francisco Perl Mongers User Group Message-ID: <20051215191543.GA32539 at nodewarrior.org> References: <20051215064740.GD63981 at cfcl.com> <20051215140026.GA19716 at fetter.org> Mime-Version: 1.0 Content-Disposition: inline In-Reply-To: <20051215140026.GA19716 at fetter.org> User-Agent: Mutt/1.5.9i Cc: "San Francisco Perl Users' Group" Subject: Re: [sf-perl] [sfpug] Practical theory: graphs X-BeenThere: sanfrancisco-pm at pm.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: San Francisco Perl Mongers User Group List-Id: San Francisco Perl Mongers User Group List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sanfrancisco-pm-bounces at pm.org Errors-To: sanfrancisco-pm-bounces at pm.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 720 Lines: 22 Like Rich, I also did not get the original message. But here goes. > I'm looking for a practical, lay book on graph theory, especially one > that describes how to represent graphs in RDBMSs. I have *Introductory Graph Theory* by Gary Chartrand (published by Dover). It is approachable and application-oriented, but says nothing about RDBMSs. Why is it necessary to represent graphs in an RDBMS? I can't help but imagine that some graph-specific presistence mechanism would be simpler and more performant. -- http://www.noncombatant.org/ http://www.boshuda.com/ _______________________________________________ SanFrancisco-pm mailing list SanFrancisco-pm at pm.org http://mail.pm.org/mailman/listinfo/sanfrancisco-pm >From sanfrancisco-pm-bounces at pm.org Thu Dec 15 11:27:03 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBFJR3Uh006447 for ; Thu, 15 Dec 2005 11:27:03 -0800 Received: (qmail 13237 invoked by alias); 15 Dec 2005 19:27:02 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 27832 invoked from network); 15 Dec 2005 19:27:00 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 19:27:00 -0000 Received: from x6.develooper.com (x6.develooper.com [63.251.223.186]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFJWAeg068619 for ; Thu, 15 Dec 2005 11:32:12 -0800 (PST) (envelope-from sanfrancisco-pm-bounces at pm.org) Received: from x6.develooper.com (localhost.localdomain [127.0.0.1]) by x6.develooper.com (Postfix) with ESMTP id 306D017789; Thu, 15 Dec 2005 11:26:56 -0800 (PST) Delivered-To: mailman-sanfrancisco-pm at mailman.pm.dev Received: (qmail 10794 invoked from network); 15 Dec 2005 19:26:52 -0000 Received: from x1a.develooper.com (HELO x1.develooper.com) (216.52.237.111) by lists.develooper.com with SMTP; 15 Dec 2005 19:26:52 -0000 Received: (qmail 20418 invoked by uid 225); 15 Dec 2005 19:26:52 -0000 Delivered-To: sanfrancisco-pm at pm.org Received: (qmail 20409 invoked by alias); 15 Dec 2005 19:26:51 -0000 Received-SPF: pass (x1.develooper.com: local policy) Received: from dsl092-188-065.sfo1.dsl.speakeasy.net (HELO fetter.org) (66.92.188.65) by la.mx.develooper.com (qpsmtpd/0.28) with ESMTP; Thu, 15 Dec 2005 11:26:43 -0800 Received: from fetter.org (localhost.localdomain [127.0.0.1]) by fetter.org (8.13.4/8.12.10) with ESMTP id jBFJQd96008137; Thu, 15 Dec 2005 11:26:39 -0800 Received: (from shackle at localhost) by fetter.org (8.13.4/8.13.4/Submit) id jBFJQdeq008136; Thu, 15 Dec 2005 11:26:39 -0800 Date: Thu, 15 Dec 2005 11:26:39 -0800 From: David Fetter To: San Francisco Perl Mongers User Group Message-ID: <20051215192638.GA8072 at fetter.org> References: <20051215064740.GD63981 at cfcl.com> <20051215140026.GA19716 at fetter.org> <20051215191543.GA32539 at nodewarrior.org> Mime-Version: 1.0 Content-Disposition: inline In-Reply-To: <20051215191543.GA32539 at nodewarrior.org> User-Agent: Mutt/1.4.2.1i Cc: "San Francisco Perl Users' Group" Subject: Re: [sf-perl] [sfpug] Practical theory: graphs X-BeenThere: sanfrancisco-pm at pm.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: San Francisco Perl Mongers User Group List-Id: San Francisco Perl Mongers User Group List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sanfrancisco-pm-bounces at pm.org Errors-To: sanfrancisco-pm-bounces at pm.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 1227 Lines: 32 On Thu, Dec 15, 2005 at 11:15:43AM -0800, Chris Palmer wrote: > Like Rich, I also did not get the original message. But here goes. > > > I'm looking for a practical, lay book on graph theory, especially > > one that describes how to represent graphs in RDBMSs. > > I have *Introductory Graph Theory* by Gary Chartrand (published by > Dover). It is approachable and application-oriented, but says > nothing about RDBMSs. > > Why is it necessary to represent graphs in an RDBMS? I can't help > but imagine that some graph-specific presistence mechanism would be > simpler and more performant. I'm sure Quinn can answer this authoritatively, but I have a few ideas. For example, the "nodes" and "edges" might also be other kinds of objects that fit in an RDBMS better than general graphs do, and they might need other properties than whatever a graph-specific storage mechanism would have. Telephone numbers in a telco's billing system would be an example of this. Cheers, D -- David Fetter david at fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote! _______________________________________________ SanFrancisco-pm mailing list SanFrancisco-pm at pm.org http://mail.pm.org/mailman/listinfo/sanfrancisco-pm >From sanfrancisco-pm-bounces at pm.org Thu Dec 15 11:24:25 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBFJOPAj006409 for ; Thu, 15 Dec 2005 11:24:25 -0800 Received: (qmail 3369 invoked by alias); 15 Dec 2005 19:24:25 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 15721 invoked from network); 15 Dec 2005 19:24:23 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 19:24:23 -0000 Received: from x6.develooper.com (x6.develooper.com [63.251.223.186]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFJTPeg066382 for ; Thu, 15 Dec 2005 11:29:25 -0800 (PST) (envelope-from sanfrancisco-pm-bounces at pm.org) Received: from x6.develooper.com (localhost.localdomain [127.0.0.1]) by x6.develooper.com (Postfix) with ESMTP id 1D1191778C; Thu, 15 Dec 2005 11:24:10 -0800 (PST) Delivered-To: mailman-sanfrancisco-pm at mailman.pm.dev Received: (qmail 10510 invoked from network); 15 Dec 2005 19:24:07 -0000 Received: from x1a.develooper.com (HELO x1.develooper.com) (216.52.237.111) by lists.develooper.com with SMTP; 15 Dec 2005 19:24:07 -0000 Received: (qmail 19549 invoked by uid 225); 15 Dec 2005 19:24:07 -0000 Delivered-To: sanfrancisco-pm at pm.org Received: (qmail 19541 invoked by alias); 15 Dec 2005 19:24:06 -0000 Received-SPF: pass (x1.develooper.com: local policy) Received: from server227.ethosmedia.com (HELO davinci.ethosmedia.com) (209.128.84.227) by la.mx.develooper.com (qpsmtpd/0.28) with ESMTP; Thu, 15 Dec 2005 11:23:58 -0800 X-EthosMedia-Virus-Scanned: no infections found Received: from [64.81.245.111] (account josh at agliodbs.com HELO [192.168.1.27]) by davinci.ethosmedia.com (CommuniGate Pro SMTP 4.1.8) with ESMTP id 8695322; Thu, 15 Dec 2005 11:26:33 -0800 From: Josh Berkus Organization: Aglio Database Solutions To: sanfrancisco-pm at pm.org Date: Thu, 15 Dec 2005 11:28:57 -0800 User-Agent: KMail/1.8 References: <20051215064740.GD63981 at cfcl.com> <20051215140026.GA19716 at fetter.org> <20051215191543.GA32539 at nodewarrior.org> In-Reply-To: <20051215191543.GA32539 at nodewarrior.org> MIME-Version: 1.0 Content-Disposition: inline Message-Id: <200512151128.58224.josh at agliodbs.com> Cc: "San Francisco Perl Users' Group" Subject: Re: [sf-perl] [sfpug] Practical theory: graphs X-BeenThere: sanfrancisco-pm at pm.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: josh at agliodbs.com, San Francisco Perl Mongers User Group List-Id: San Francisco Perl Mongers User Group List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sanfrancisco-pm-bounces at pm.org Errors-To: sanfrancisco-pm-bounces at pm.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 835 Lines: 22 Chris, > Why is it necessary to represent graphs in an RDBMS? I can't help but > imagine that some graph-specific presistence mechanism would be simpler > and more performant. As much as I'm an RDBMS geek, I'll have to admit that there's no easy way to do graphs in SQL. The one really big implementation I know of is using a separate graph engine as a pseudotable and plugging that in to their RDBMS. The problem with that approach, of course, is that it's not transaction-compliant. -- __Aglio Database Solutions_______________ Josh Berkus Consultant josh at agliodbs.com www.agliodbs.com Ph: 415-752-2500 Fax: 415-752-2387 2166 Hayes Suite 200 San Francisco, CA _______________________________________________ SanFrancisco-pm mailing list SanFrancisco-pm at pm.org http://mail.pm.org/mailman/listinfo/sanfrancisco-pm >From sanfrancisco-pm-bounces at pm.org Thu Dec 15 11:38:23 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBFJcNr8006636 for ; Thu, 15 Dec 2005 11:38:23 -0800 Received: (qmail 23313 invoked by alias); 15 Dec 2005 19:38:23 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 31052 invoked from network); 15 Dec 2005 19:38:22 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 19:38:22 -0000 Received: from x6.develooper.com (x6.develooper.com [63.251.223.186]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFJhYeg073388 for ; Thu, 15 Dec 2005 11:43:34 -0800 (PST) (envelope-from sanfrancisco-pm-bounces at pm.org) Received: from x6.develooper.com (localhost.localdomain [127.0.0.1]) by x6.develooper.com (Postfix) with ESMTP id DC3E7177D7; Thu, 15 Dec 2005 11:38:19 -0800 (PST) Delivered-To: mailman-sanfrancisco-pm at mailman.pm.dev Received: (qmail 14351 invoked from network); 15 Dec 2005 19:38:08 -0000 Received: from x1a.develooper.com (HELO x1.develooper.com) (216.52.237.111) by lists.develooper.com with SMTP; 15 Dec 2005 19:38:08 -0000 Received: (qmail 24489 invoked by uid 225); 15 Dec 2005 19:38:08 -0000 Delivered-To: sanfrancisco-pm at pm.org Received: (qmail 24484 invoked by alias); 15 Dec 2005 19:38:07 -0000 Received-SPF: neutral (x1.develooper.com: local policy) Received: from cpe-24-221-172-174.ca.sprintbbd.net (HELO cfcl.com) (24.221.172.174) by la.mx.develooper.com (qpsmtpd/0.28) with ESMTP; Thu, 15 Dec 2005 11:37:46 -0800 Received: from mail.fruitfly.org (ci.lbl.gov [131.243.192.220]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFJgteg073158 for ; Thu, 15 Dec 2005 11:42:56 -0800 (PST) (envelope-from cjm at fruitfly.org) Received: from localhost (localhost [127.0.0.1]) by mail.fruitfly.org (Postfix on SuSE Linux eMail Server 3.0) with ESMTP id 3927C24D0B7; Thu, 15 Dec 2005 12:33:12 -0800 (PST) Received: from mail.fruitfly.org ([127.0.0.1]) by localhost (mail.fruitfly.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 09585-04; Thu, 15 Dec 2005 12:33:11 -0800 (PST) Received: from [131.243.195.208] (skerryvore.dhcp.lbl.gov [131.243.195.208]) by mail.fruitfly.org (Postfix on SuSE Linux eMail Server 3.0) with ESMTP id E3AE8247F7B; Thu, 15 Dec 2005 12:33:10 -0800 (PST) In-Reply-To: <20051215191543.GA32539 at nodewarrior.org> References: <20051215064740.GD63981 at cfcl.com> <20051215140026.GA19716 at fetter.org> <20051215191543.GA32539 at nodewarrior.org> Mime-Version: 1.0 (Apple Message framework v619.2) Message-Id: <8c4c2b0e58941c341cbab6bcb0adf8cb at fruitfly.org> From: chris mungall Date: Thu, 15 Dec 2005 11:37:40 -0800 To: San Francisco Perl Mongers User Group X-Mailer: Apple Mail (2.619.2) X-Virus-Scanned: by amavisd-new using ClamAV at fruitfly.org Cc: "San Francisco Perl Users' Group" Subject: Re: [sf-perl] [sfpug] Practical theory: graphs X-BeenThere: sanfrancisco-pm at pm.org X-Mailman-Version: 2.1.6 Precedence: list Reply-To: San Francisco Perl Mongers User Group List-Id: San Francisco Perl Mongers User Group List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: sanfrancisco-pm-bounces at pm.org Errors-To: sanfrancisco-pm-bounces at pm.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 2319 Lines: 56 On Dec 15, 2005, at 11:15 AM, Chris Palmer wrote: > Like Rich, I also did not get the original message. But here goes. > >> I'm looking for a practical, lay book on graph theory, especially one >> that describes how to represent graphs in RDBMSs. > > I have *Introductory Graph Theory* by Gary Chartrand (published by > Dover). It is approachable and application-oriented, but says nothing > about RDBMSs. > > Why is it necessary to represent graphs in an RDBMS? I can't help but > imagine that some graph-specific presistence mechanism would be simpler > and more performant. Representing graphs and trees in a RDBMS is vital for certain applications, for example molecular biology: species trees with evolutionary relationships and distances, graphs of interactions between genes, proteins and molecules in different cellular compartment. Having a normalised representation of the graph or tree modeled using the same formalism as the rest of your data allows you to do integrated queries using the same language (eg SQL). Modeling all your data using a graph formalism as opposed to relational is another option, but this can be difficult to scale. Of course if your DBMS doesn't support recursive queries then you have to resort to either ugly imperative code or materializing the transitive closure of the graph (or representing your tree using a nested set model), or perhaps DBMS functions. There's well known techniques for each. There is a good tutorial outlining some of these issues here: http://www.people.virginia.edu/~wrp/papers/ismb02_sql.pdf The examples are geared towards molecular biology, but should be broadly applicable. All the code is perl. Kind of getting off topic for a perl list but if any locals have experience layering semantic web type metamodels (eg graph based formalisms such as RDF) over relational databases and getting decent performance, I'd be interested in chatting with you. > -- > http://www.noncombatant.org/ > http://www.boshuda.com/ > > _______________________________________________ > SanFrancisco-pm mailing list > SanFrancisco-pm at pm.org > http://mail.pm.org/mailman/listinfo/sanfrancisco-pm _______________________________________________ SanFrancisco-pm mailing list SanFrancisco-pm at pm.org http://mail.pm.org/mailman/listinfo/sanfrancisco-pm >From sfpug-owner+M1388 at postgresql.org Thu Dec 15 10:24:45 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBFIOjcP005273 for ; Thu, 15 Dec 2005 10:24:45 -0800 Received: (qmail 20369 invoked by alias); 15 Dec 2005 18:24:46 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 14826 invoked from network); 15 Dec 2005 18:24:45 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 18:24:45 -0000 Received: from mx2.hub.org (mx2.hub.org [200.46.204.254]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFITveg042934 for ; Thu, 15 Dec 2005 10:29:58 -0800 (PST) (envelope-from sfpug-owner+M1388 at postgresql.org) Received: from postgresql.org (postgresql.org [200.46.204.71]) by mx2.hub.org (Postfix) with ESMTP id 6F4BA512CC7; Thu, 15 Dec 2005 18:24:36 +0000 (GMT) X-Original-To: sfpug-postgresql.org at localhost.postgresql.org Received: from localhost (av.hub.org [200.46.204.144]) by postgresql.org (Postfix) with ESMTP id 549209DCBFD for ; Thu, 15 Dec 2005 14:24:35 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 71314-02 for ; Thu, 15 Dec 2005 14:24:34 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey- Received: from davinci.ethosmedia.com (server227.ethosmedia.com [209.128.84.227]) by postgresql.org (Postfix) with ESMTP id C65A09DCA82 for ; Thu, 15 Dec 2005 14:24:32 -0400 (AST) X-EthosMedia-Virus-Scanned: no infections found Received: from [64.81.245.111] (account josh at agliodbs.com HELO [192.168.1.27]) by davinci.ethosmedia.com (CommuniGate Pro SMTP 4.1.8) with ESMTP id 8695011; Thu, 15 Dec 2005 10:27:11 -0800 From: Josh Berkus Reply-To: josh at agliodbs.com Organization: Aglio Database Solutions To: sfpug at postgresql.org Subject: Re: [sfpug] Practical theory: graphs Date: Thu, 15 Dec 2005 10:29:35 -0800 User-Agent: KMail/1.8 Cc: Quinn Weaver References: <20051215064740.GD63981 at cfcl.com> In-Reply-To: <20051215064740.GD63981 at cfcl.com> MIME-Version: 1.0 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Disposition: inline Message-Id: <200512151029.35826.josh at agliodbs.com> X-Virus-Scanned: by amavisd-new at hub.org X-Mailing-List: sfpug List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Precedence: bulk Sender: sfpug-owner at postgresql.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 201 Lines: 12 Quinn, > If anyone can come up with this, I owe them a huge debt of gratitude. :) Hmmmm ... does Celko's tree book cover graphs? DF? -- --Josh Josh Berkus Aglio Database Solutions San Francisco >From sfpug-owner+M1389 at postgresql.org Thu Dec 15 10:30:15 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBFIUFdN005367 for ; Thu, 15 Dec 2005 10:30:15 -0800 Received: (qmail 4710 invoked by alias); 15 Dec 2005 18:30:16 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 21771 invoked from network); 15 Dec 2005 18:30:15 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 15 Dec 2005 18:30:15 -0000 Received: from mx1.hub.org (mx1.hub.org [200.46.208.251]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBFIZSeg044756 for ; Thu, 15 Dec 2005 10:35:28 -0800 (PST) (envelope-from sfpug-owner+M1389 at postgresql.org) Received: from postgresql.org (postgresql.org [200.46.204.71]) by mx1.hub.org (Postfix) with ESMTP id 3380A6531ED; Thu, 15 Dec 2005 14:30:12 -0400 (AST) X-Original-To: sfpug-postgresql.org at localhost.postgresql.org Received: from localhost (av.hub.org [200.46.204.144]) by postgresql.org (Postfix) with ESMTP id C2B5D9DCC14 for ; Thu, 15 Dec 2005 14:30:08 -0400 (AST) Received: from postgresql.org ([200.46.204.71]) by localhost (av.hub.org [200.46.204.144]) (amavisd-new, port 10024) with ESMTP id 72297-06 for ; Thu, 15 Dec 2005 14:30:07 -0400 (AST) X-Greylist: from auto-whitelisted by SQLgrey- Received: from fetter.org (dsl092-188-065.sfo1.dsl.speakeasy.net [66.92.188.65]) by postgresql.org (Postfix) with ESMTP id 4E5F09DC980 for ; Thu, 15 Dec 2005 14:30:05 -0400 (AST) Received: from fetter.org (localhost.localdomain [127.0.0.1]) by fetter.org (8.13.4/8.12.10) with ESMTP id jBFIU26V007181; Thu, 15 Dec 2005 10:30:03 -0800 Received: (from shackle at localhost) by fetter.org (8.13.4/8.13.4/Submit) id jBFIU2sg007180; Thu, 15 Dec 2005 10:30:02 -0800 Date: Thu, 15 Dec 2005 10:30:02 -0800 From: David Fetter To: Josh Berkus Cc: sfpug at postgresql.org, Quinn Weaver Subject: Re: [sfpug] Practical theory: graphs Message-ID: <20051215183001.GA7089 at fetter.org> References: <20051215064740.GD63981 at cfcl.com> <200512151029.35826.josh at agliodbs.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <200512151029.35826.josh at agliodbs.com> User-Agent: Mutt/1.4.2.1i X-Virus-Scanned: by amavisd-new at hub.org X-Mailing-List: sfpug List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Precedence: bulk Sender: sfpug-owner at postgresql.org X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 418 Lines: 19 On Thu, Dec 15, 2005 at 10:29:35AM -0800, Josh Berkus wrote: > Quinn, > > > If anyone can come up with this, I owe them a huge debt of gratitude. :) > > Hmmmm ... does Celko's tree book cover graphs? DF? Not really. IMHO, the tree book is a rehash of his other stuff on trees in SQL for Smarties, 3rd. Ed. Cheers, D -- David Fetter david at fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote! >From elein at varlena.com Thu Dec 15 17:27:22 2005 Return-Path: Received: from server-a114.beigetower.net (bx19.beigetower [192.168.1.254]) by mail01.beigetower (8.12.11/8.12.11) with SMTP id jBG1RMKk012588 for ; Thu, 15 Dec 2005 17:27:22 -0800 Received: (qmail 16316 invoked by alias); 16 Dec 2005 01:27:22 -0000 Delivered-To: funkspiel.org-quinn at funkspiel.org Received: (qmail 12745 invoked from network); 16 Dec 2005 01:27:21 -0000 Received: from unknown (HELO cfcl.com) (24.221.172.174) by server-a082.beigetower.net with SMTP; 16 Dec 2005 01:27:21 -0000 Received: from a.mail.sonic.net (a.mail.sonic.net [64.142.16.245]) by cfcl.com (8.12.6/8.12.6) with ESMTP id jBG1Waeg095127 for ; Thu, 15 Dec 2005 17:32:37 -0800 (PST) (envelope-from elein at varlena.com) Received: from localhost.localdomain (64-142-36-103.dsl.static.sonic.net [64.142.36.103]) by a.mail.sonic.net (8.13.3/8.13.3) with ESMTP id jBG1RD0I024437 (version=TLSv1/SSLv3 cipher=DES-CBC3-SHA bits=168 verify=NO); Thu, 15 Dec 2005 17:27:14 -0800 Received: from elein by localhost.localdomain with local (Exim 4.50) id 1En4Hx-0000We-1T; Thu, 15 Dec 2005 17:21:37 -0800 Date: Thu, 15 Dec 2005 17:21:36 -0800 To: Quinn Weaver Cc: SF Postgres Subject: Re: [sfpug] Practical theory: graphs Message-ID: <20051216012136.GQ26986 at varlena.com> Mail-Followup-To: Quinn Weaver , SF Postgres References: <20051215064740.GD63981 at cfcl.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20051215064740.GD63981 at cfcl.com> User-Agent: Mutt/1.5.9i From: elein X-Spam-Checker-Version: SpamAssassin 3.0.2 (2004-11-16) on mail01.beigetower X-Spam-Level: X-Spam-Status: No, score=0.1 required=5.0 tests=FORGED_RCVD_HELO autolearn=unavailable version=3.0.2 Status: RO Content-Length: 1129 Lines: 33 On Wed, Dec 14, 2005 at 10:47:40PM -0800, Quinn Weaver wrote: > Hi, all, > > I'm looking for a practical, lay book on graph theory, especially one > that describes how to represent graphs in RDBMSs. > > I fear I am stuck with something by Date, but... Do people have any > other recommendations? > > I specifically don't want formal proofs of mathematical properties of > graphs. What I want is something more emic: What can you represent > with x kind of graph? What are its properties? What are the > algorithms for traversing (or otherwise processing it)? In short, > what is it good for? > > If anyone can come up with this, I owe them a huge debt of gratitude. :) > > Best regards, > > -- > qw (Quinn Weaver); #President, San Francisco Perl Mongers > =for information, visit http://sf.pm.org/weblog =cut > I have an article with some algorithms for setting up a tree graph and traversing it, deleting nodes, etc. It might help. I'd be interested in hearing what exactly you are trying to do--that would lead to more specific suggestions. http://www.varlena.com/GeneralBits/65.php --elein elein at varlena.com From rdm at cfcl.com Fri Dec 16 22:36:34 2005 From: rdm at cfcl.com (Rich Morin) Date: Fri, 16 Dec 2005 22:36:34 -0800 Subject: [sf-perl] Practical theory: graphs In-Reply-To: <20051217045602.GA79629@cfcl.com> References: <20051217045602.GA79629@cfcl.com> Message-ID: As you note, the size of a graph representing the typical voice maze is pretty small (though it may not seem small to the user), so performance is not likely to be an issue. Thus, the critical questions are whether the graph representation you select is easy to work with and flexible enough to support any required actions. I like edge lists, because they are a very general representation, but they may be overkill for this problem. That said, some graph libraries (e.g., Boost Graph Library, Ruby Graph Library) support a variety of representations "under the covers". Just as Object-Relational Mapping maps objects to database tables, BGL and RGL map objects to graph nodes. If you decide to roll your own graph code, it might be interesting to look into this approach. Unfortunately, Googling [BGL Perl] doesn't come up with anything very promising, so I suspect that you might be required to link to the Boost (C++) or Ruby library or translate one of them into Perl. I'd suggest starting with Ruby for any translation, as it won't have all the baggage that the C++ version does. However, be warned that it is Alpha code and the developer is German: http://rubyforge.org/projects/rgl Getting back to your problem description, it sounds like the log doesn't really care about the graph at all. It merely needs to know which nodes got visited in what order. That is, a simple list of node names would suit your purpose. However, the code that migrates nodes up to the "front" of the graph might need to pay attention to the graph structure. The notion of automagically migrating nodes is intriguing, but I worry that resulting menus may not fit any reasonable model that the user might have. Also, messages which work well in one menu may not have sufficient context to be understandable in another. Finally, I wonder whether it might not make sense to assume that the person managing the menus is not a programmer at all. If so, you might want to consider using a GUI-based interface, based on dot, dia, SVG, or ???. Your code could present the current graph (something like a state-transition diagram) and offer the manager the ability to select from suggested re-connections, define new connections, etc. -r -- email: rdm at cfcl.com; phone: +1 650-873-7841 http://www.cfcl.com - Canta Forda Computer Laboratory http://www.cfcl.com/Meta - The FreeBSD Browser, Meta Project, etc. From josh at agliodbs.com Fri Dec 16 23:36:58 2005 From: josh at agliodbs.com (Josh Berkus) Date: Fri, 16 Dec 2005 23:36:58 -0800 Subject: [sf-perl] Practical theory: graphs In-Reply-To: <20051217045602.GA79629@cfcl.com> References: <20051217045602.GA79629@cfcl.com> Message-ID: <200512162336.58618.josh@agliodbs.com> Quinn, > The system of nested menus is essentially a graph. ?Menus are nodes > with children (which may themselves be menus). ?An end node represents > the place where you actually get the person (or automated system) that > you wanted. This doesn't sound like a generalized graph, and certainly not like a node map. It sounds like a heirarchy with shortcuts. This is the reason Elein was very smart to ask you for more details on the real problem; it's easier to solve than the theoretical problem. First off, you don't have to worry about node maps' issue with bidirectionality. Phone menus are always directional ... you're always working "up" the tree, except when you get to a shortcut that takes you somewhere else. Further, you're not concerned with "branch properties"; that is, if menu M has parent menu Q that really doesn't "mean" anything except as a system of navigation. So overall your system is a pure adjacency list. Which is really the simplest type of graph there is. And easily handled by SQL-RDBMSes in a way that social networks are not. You just have to get away from thinking of an adjacency list purely as a heirarchy. You have a simple structure like this: menu name destination_type destination 1 Support menu 2 1 Sales menu 3 2 Home hold queue cheap support phonebank 2 Commercial menu 4 3 Home hold queue junior sales reps 3 Commercial menu 5 4 Small Business hold queue SMBsupport 4 Enterprise direct call support manager 5 Small Business hold queue SMBsales 5 Enterprise direct call sales lead etc. So far it's pretty heirarchical. But it doesn't have to stay that way. For example, you might decide that you want to add options on each menu to go back to the main menu. Also, maybe you get 25% of your calls from businesses for support so you want to add a shortcut. Then you might do: menu name destination_type destination 1 Support menu 2 1 Sales menu 3 1 Commercial Support menu 5 2 Home hold queue cheap support phonebank 2 Commercial menu 4 2 Main Menu menu 1 3 Home hold queue junior sales reps 3 Commercial menu 5 3 Main Menu menu 1 4 Small Business hold queue SMBsupport 4 Enterprise direct call support manager 4 Main Menu menu 1 5 Small Business hold queue SMBsales 5 Enterprise direct call sales lead 5 Main Menu menu 1 This is just a cocktail napkin sketch of an structure, but hopefully it helps you get your head around it. BTW, regarding the user log, it's this simple: sessionid menu from menu to exit? 5001 1 3 N 5001 3 5 N 5001 .... Hmmm, looks like you need option identifiers there too, as well as menu ids. But it's late and hopefully I've inspired something. --Josh -- Josh Berkus Aglio Database Solutions San Francisco From qw at sf.pm.org Fri Dec 16 23:43:03 2005 From: qw at sf.pm.org (Quinn Weaver) Date: Fri, 16 Dec 2005 23:43:03 -0800 Subject: [sf-perl] Practical theory: graphs In-Reply-To: References: <20051217045602.GA79629@cfcl.com> Message-ID: <20051217074303.GA25527@cfcl.com> On Fri, Dec 16, 2005 at 10:36:34PM -0800, Rich Morin wrote: > I like edge lists, because they are a very general representation, > but they may be overkill for this problem. That said, some graph > libraries (e.g., Boost Graph Library, Ruby Graph Library) support > a variety of representations "under the covers". > [or Ruby Graph Library, RGL] Hmmnn. Hmmmn! Interesting. The more I hear about Boost, the more impressed I am. But I don't really want to create the bindings, as you point out. Anyway, thanks for the concrete recommendations; this is exactly what I need. > Getting back to your problem description, it sounds like the log > doesn't really care about the graph at all. It merely needs to > know which nodes got visited in what order. That is, a simple > list of node names would suit your purpose. However, the code > that migrates nodes up to the "front" of the graph might need to > pay attention to the graph structure. This is probably true. In a sense, the system of record is the actual running "dialplan" (my preferred term for the "voice maze" or set of menus). Maybe I shouldn't be duplicating the dialplan in an RDBMS. It's already read in from an XML file (usually dynamically generated), so why complicate things? > The notion of automagically migrating nodes is intriguing, but I > worry that resulting menus may not fit any reasonable model that > the user might have. Also, messages which work well in one menu > may not have sufficient context to be understandable in another. Good point. This is an acknowledged risk of that feature. The only way to avoid it is to design your system properly, or hire me to do it ;) . Actually, you can turn of the reordering feature if you want, but I think it's useful. The XML encourages good design to some extent, but it can't absolutely enforce it. For instance, each node in the graph must have a globally unique name. This name get mapped to a sound file, or, if no sound file is not found, run through text-to-speech. So a node named billing would correspond to a sound file with someone saying "billing". You couldn't have two billing nodes, but you could have a billing_for_consulting node and a billing_for_hardware mode. BTW, high-quality recorded voice prompts, done by good voice actors, are always better than text-to-speech. I can provide these as part of my consulting package. :) Overall my hope is that people will be willing to put in the time or money to design their systems carefully. An IVR is a pretty important window to your customers, so it's worth getting right at the outset. Anyway, you remind me that I need to write some style guidelines for proper IVR design. Hmmnn, article material... > Finally, I wonder whether it might not make sense to assume that > the person managing the menus is not a programmer at all. If so, > you might want to consider using a GUI-based interface, based on > dot, dia, SVG, or ???. Your code could present the current graph > (something like a state-transition diagram) and offer the manager > the ability to select from suggested re-connections, define new > connections, etc. Ho-ho! Very interesting. In fact I have some plans for this, but they're not ready for prime time yet. -- qw (Quinn Weaver); #President, San Francisco Perl Mongers =for information, visit http://sf.pm.org/weblog =cut From elein at varlena.com Mon Dec 19 11:16:17 2005 From: elein at varlena.com (elein) Date: Mon, 19 Dec 2005 11:16:17 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051217074303.GA25527@cfcl.com> References: <20051217045602.GA79629@cfcl.com> <20051217074303.GA25527@cfcl.com> Message-ID: <20051219191617.GE5158@varlena.com> Hmm. Some mails did not make it through on this thread. The menu tree structure is the one that I describe in the example in my article. It was created with the concept of nodes and leaves. It also shows the data storage that Josh was trying to put together. And provides functions for traversing up and down as well as adding and deleting nodes. I would be interested to hear how this is different from your phone tree model needs. elein elein at varlena.com On Fri, Dec 16, 2005 at 11:43:03PM -0800, Quinn Weaver wrote: > On Fri, Dec 16, 2005 at 10:36:34PM -0800, Rich Morin wrote: > > > I like edge lists, because they are a very general representation, > > but they may be overkill for this problem. That said, some graph > > libraries (e.g., Boost Graph Library, Ruby Graph Library) support > > a variety of representations "under the covers". > > > [or Ruby Graph Library, RGL] > > Hmmnn. Hmmmn! Interesting. The more I hear about Boost, the more > impressed I am. But I don't really want to create the bindings, as > you point out. > > Anyway, thanks for the concrete recommendations; this is exactly > what I need. > > > Getting back to your problem description, it sounds like the log > > doesn't really care about the graph at all. It merely needs to > > know which nodes got visited in what order. That is, a simple > > list of node names would suit your purpose. However, the code > > that migrates nodes up to the "front" of the graph might need to > > pay attention to the graph structure. > > This is probably true. In a sense, the system of record is the actual > running "dialplan" (my preferred term for the "voice maze" or set of > menus). Maybe I shouldn't be duplicating the dialplan in an RDBMS. > It's already read in from an XML file (usually dynamically generated), > so why complicate things? > > > The notion of automagically migrating nodes is intriguing, but I > > worry that resulting menus may not fit any reasonable model that > > the user might have. Also, messages which work well in one menu > > may not have sufficient context to be understandable in another. > > Good point. This is an acknowledged risk of that feature. The only > way to avoid it is to design your system properly, or hire me to do it > ;) . Actually, you can turn of the reordering feature if you want, > but I think it's useful. > > The XML encourages good design to some extent, but it can't absolutely > enforce it. For instance, each node in the graph must have a globally > unique name. This name get mapped to a sound file, or, if no sound > file is not found, run through text-to-speech. So a node named > billing would correspond to a sound file with someone saying > "billing". You couldn't have two billing nodes, but you could have a > billing_for_consulting node and a billing_for_hardware mode. > > BTW, high-quality recorded voice prompts, done by good voice actors, > are always better than text-to-speech. I can provide these as > part of my consulting package. :) > > Overall my hope is that people will be willing to put in the time or money > to design their systems carefully. An IVR is a pretty important window to > your customers, so it's worth getting right at the outset. > > Anyway, you remind me that I need to write some style guidelines for > proper IVR design. Hmmnn, article material... > > > Finally, I wonder whether it might not make sense to assume that > > the person managing the menus is not a programmer at all. If so, > > you might want to consider using a GUI-based interface, based on > > dot, dia, SVG, or ???. Your code could present the current graph > > (something like a state-transition diagram) and offer the manager > > the ability to select from suggested re-connections, define new > > connections, etc. > > Ho-ho! Very interesting. In fact I have some plans for this, > but they're not ready for prime time yet. > > -- > qw (Quinn Weaver); #President, San Francisco Perl Mongers > =for information, visit http://sf.pm.org/weblog =cut > From jm at bitpass.com Wed Dec 21 14:42:40 2005 From: jm at bitpass.com (JM Valera) Date: Wed, 21 Dec 2005 14:42:40 -0800 Subject: [sf-perl] Internal Tools Engineer for Financial Transactions Company Message-ID: <96E9D60A6B76344B96FA3144BD1E79D6110DE6@winsvr.bitpass-inc.com> Position: Software Tools Engineer BitPass is a venture-backed startup that offers an exciting and challenging work environment. We're looking for bright, creative, and passionate technology professionals. Your primary responsibility is to develop, execute, and automate the BitPass platform's internal and external APIs. You must be able to work well under tight deadlines and rapidly changing priorities, reliable, able to manage multiple tasks, and goal-oriented. Scope * Develop web and command-line to make use of BitPass APIs * Identify, analyze, and automate processes relevant to team needs * Track and report project development to department manager * Identify and resolve project development requirements through regular communication with project managers and team members Skill Requirements * Strong experience with Perl and mod_perl * Understanding of HTTP and HTTPS protocols * Overall understanding of the software development lifecycle * Ability to work independently in a start up environment * Reporting, writing, analytical, and organizational skills * Ability to follow system design process and documentation of code Minimum Qualifications * 5+ years experience with Perl * 3+ years experience with MySQL developing databases * 4+ years experience with UNIX platform (Linux preferred) * Excellent interpersonal and communication skills * Software automation tools and Java experience are pluses * Familiarity with interface template systems (e.g. Template Toolkit and Smarty) Desired Qualifications * Understanding of PHP, Java and/or C# * HTML, CSS, JavaScript, cross-browser development * User interface development * Suse or RedHat Linux system administration * Prior startup experience * BA/BS or equivalent Contact Us Send your resume to: jobs at bitpass.com Subject line: Job Code STE BitPass, Inc. Equal Opportunity Employer www.bitpass.com -------------- next part -------------- An HTML attachment was scrubbed... URL: http://mail.pm.org/pipermail/sanfrancisco-pm/attachments/20051221/b3bcb861/attachment.html From qw at sf.pm.org Thu Dec 22 09:43:05 2005 From: qw at sf.pm.org (Quinn Weaver) Date: Thu, 22 Dec 2005 09:43:05 -0800 Subject: [sf-perl] [sfpug] Practical theory: graphs In-Reply-To: <20051219191617.GE5158@varlena.com> References: <20051217045602.GA79629@cfcl.com> <20051217074303.GA25527@cfcl.com> <20051219191617.GE5158@varlena.com> Message-ID: <20051222174305.GB97428@cfcl.com> Hello from Indiana. :) I've been away from email for a bit. I just gave a proper read to the article, http://www.varlena.com/GeneralBits/65.php. The article makes a great deal of sense. It's very lucid and easy to follow (even for someone like me with barely a passing knowledge of PL/pgSQL). It even presents one algorithm and code for "reparenting" menus. I think this is what I need. I'm quite gratified that it's all set out and ready to use. On Mon, Dec 19, 2005 at 11:16:17AM -0800, elein wrote: > I would be interested to hear how this is different > from your phone tree model needs. In short, it's not. The only reason I might want to deviate from your model would be to use a "graph-based" storage system (as opposed to an RDBMS). But I'm not convinced that I should do that. The pro of an RDBMS approach is data integrity. If I write a dialplan to the database, I can be sure it will not be corrupted if (e.g.) the system goes down in the middle of the reordering process. The con is that it is trickier to manipulate records in a database than objects in Perl (at least for me). However, as the article shows, it's not that much trickier. It seems to me that safety wins out over False Laziness, so I am leaning towards the RDBMS approach. In other words, I have repented of what I wrote earlier: > In a sense, the system of record is the actual running "dialplan" (my > preferred term for the "voice maze" or set of menus). Maybe I > shouldn't be duplicating the dialplan in an RDBMS. It's already read > in from an XML file (usually dynamically generated), so why complicate > things? ... though I reserve the right to backslide. ;) > Hmm. Some mails did not make it through on this thread. You're right; I seem to have omitted your article in my thread summary. My apologies; it was a mistake. I'm not sure how that happened--especially since it's one of the most useful things in the thread. ;) -- qw (Quinn Weaver); #President, San Francisco Perl Mongers =for information, visit http://sf.pm.org/weblog =cut From rdm at cfcl.com Sun Dec 25 15:16:50 2005 From: rdm at cfcl.com (Rich Morin) Date: Sun, 25 Dec 2005 15:16:50 -0800 Subject: [sf-perl] SF Bay Area Beer and Pizza SIG (RSVP request) Message-ID: Although I don't _need_ RSVPs for this event 12/28 8:00 pm The Beer & Pizza SIG will meet at Wild Pepper (3601 26th. St.; SF, CA). For details, see http://cfcl/rdm/beer_and_pizza. I'd like to be able to give the restaurant some idea of the size of table we'll be needing. So, if you are planning to attend, please drop me a line (including the size of your party). -r -- email: rdm at cfcl.com; phone: +1 650-873-7841 http://www.cfcl.com - Canta Forda Computer Laboratory http://www.cfcl.com/Meta - The FreeBSD Browser, Meta Project, etc. From doom at kzsu.stanford.edu Sun Dec 25 23:15:23 2005 From: doom at kzsu.stanford.edu (Joseph Brenner) Date: Sun, 25 Dec 2005 23:15:23 -0800 Subject: [sf-perl] SF Bay Area Beer and Pizza SIG (RSVP request) In-Reply-To: References: Message-ID: <200512260715.jBQ7FOp99199@mail0.rawbw.com> Rich Morin wrote: > Although I don't _need_ RSVPs for this event > > 12/28 8:00 pm The Beer & Pizza SIG will meet at Wild Pepper > (3601 26th. St.; SF, CA). For details, see > http://cfcl/rdm/beer_and_pizza. > > I'd like to be able to give the restaurant some idea of the size > of table we'll be needing. So, if you are planning to attend, > please drop me a line (including the size of your party). I'm planning on being there, and I think Raven will be with me this time. From qw at sf.pm.org Tue Dec 27 19:09:51 2005 From: qw at sf.pm.org (Quinn Weaver) Date: Tue, 27 Dec 2005 19:09:51 -0800 Subject: [sf-perl] Video projectors? Message-ID: <20051228030951.GA78699@cfcl.com> Dear Perl Mongers / PostgreSQL people, Can anyone recommend a good place to rent a video projector? I need it for (yet another) presentation I'm doing about my product. I don't need it till mid-January, so I have a little time to shop around. My main criteria are a) no-hassle arrangements to try out the projector with my computer _before_ the talk and b) price. Any thoughts? If not, I'll sally forth on my own and post results. Many thanks, Quinn "Everyone Knows My Evil Plan" Weaver -- qw (Quinn Weaver); #President, San Francisco Perl Mongers =for information, visit http://sf.pm.org/weblog =cut From mtheo at amural.com Tue Dec 27 20:40:04 2005 From: mtheo at amural.com (Mark Theodoropoulos) Date: Tue, 27 Dec 2005 20:40:04 -0800 Subject: [sf-perl] Video projectors? In-Reply-To: <20051228030951.GA78699@cfcl.com> References: <20051228030951.GA78699@cfcl.com> Message-ID: <43B21724.5000109@amural.com> > Can anyone recommend a good place to rent a video projector? I need > it for (yet another) presentation I'm doing about my product. Oakland Audio-Visual Services (oavs.com) was great when I needed a projector for my dad's memorial service a couple of years ago. They took a lot of care up front to be absolutely certain everything would work together. Rental includes delivery and setup/takedown, so it's pretty painless. Of course, prices have plummeted recently, and for the cost of three or four bottom-end rentals you can buy a pretty dang nice little projector these days. (For about 1200 bux I picked up a Dell XVGA machine, highly portable, that will allow me to inflict Schoenberg stuff on captive audiences for years to come -- and never have to chase down a rental again.) Worth considering if you expect to do this more than a couple of times. Mark Theodoropoulos Berkeley -- producer / classics without walls the anti-warhorse zone / www.amural.com kusf 90.3fm / san francisco From david at fetter.org Wed Dec 28 10:43:57 2005 From: david at fetter.org (David Fetter) Date: Wed, 28 Dec 2005 10:43:57 -0800 Subject: [sf-perl] Video projectors? In-Reply-To: <20051228030951.GA78699@cfcl.com> References: <20051228030951.GA78699@cfcl.com> Message-ID: <20051228184357.GE15655@fetter.org> On Tue, Dec 27, 2005 at 07:09:51PM -0800, Quinn Weaver wrote: > Dear Perl Mongers / PostgreSQL people, > > Can anyone recommend a good place to rent a video projector? I need > it for (yet another) presentation I'm doing about my product. Dunno about video projector rentals, but the price for buying one is coming down :) Also, re: IVR, see the following link. It occurs to me that if you make entering the IVR system a thing you have to press a button to do, you could have the most popular phone system around :) Cheers, D -- David Fetter david at fetter.org http://fetter.org/ phone: +1 415 235 3778 Remember to vote!