From darren at DarrenDuncan.net Mon Apr 4 01:30:04 2005 From: darren at DarrenDuncan.net (Darren Duncan) Date: Mon Apr 4 01:30:26 2005 Subject: [VPM] ANNOUNCE: SQL-Routine/Rosetta developer release #2 - in Perl 6 too Message-ID: 2005-04-03 Darren Duncan -------------------------------------------------- I am now pleased to announce the second developer release of my Rosetta rigorous database portability library, currently featuring the SQL::Routine module. (Considering the huge number of changes since the first developer release, 2004-08-07, I'll just provide a re-introduction rather than a delta.) The module set that can be broadly referred to as the 'Rosetta Framework' is composed of the following 5 distributions, which should appear on your favorite CPAN mirrors within the next few hours or days; all of them are in native Perl 5 versions, and the 2 most mature ones are also in native Perl 6 versions (useable soon with Pugs or Parrot): Native Perl 5 versions: 1. Locale-KeyedText-1.03.tar.gz 2. SQL-Routine-0.58.tar.gz (dep on 1) 3. Rosetta-0.43.tar.gz (dep on 1, 2); also holds Rosetta::Validator 4. SQL-Routine-SQLBuilder-0.17.tar.gz (dep on 2) 5. Rosetta-Engine-Generic-0.17.tar.gz (dep on 1, 2, 3, 4) Native Perl 6 versions: http://freepan.org/modules.html 1. http://tpe.freepan.org/repos/duncand/Locale-KeyedText/ 2. http://tpe.freepan.org/repos/duncand/SQL-Routine/ (dep on 1) 3. N/A 4. N/A 5. N/A (Note that the Perl 6 modules all use language features, such as objects, which Pugs doesn't yet support, but should in a month or so given its excellent progress so far. They are as correct as humanly possible considering this fact. At the present time they are also the only/first database related Perl 6 modules that exist, as far as I know.) My CPAN maintainer ID is DUNCAND. In addition to CPAN, you should also find the Perl 5 modules here: http://darrenduncan.net/d/perl/ . I welcome and encourage any and all feedback on these modules that you can give me. It would be VERY helpful to me. I am also grateful if you can find these modules useful in your own work. Likewise, if you have any questions, I will do my best to answer them. If you wish to help with their development in some way, I am also open to such offers. Each of these 5 distributions is independently useful of the whole so-called framework, and I strongly encourage you to use them independently. Each one also has a set of POD documentation with it, so you should look at that to best understand them; however, a brief intro for each follows here: ---------- 1. Locale::KeyedText can be used for any type of application or library. Locale::KeyedText (LKT) provides a simple but effective mechanism for applications and modules that empowers single binaries to support N locales or user types simultaneously, and that allows any end users to add support for new languages easily and without a recompile (such as by simply copying files), often even while the program is executing. This module is the most mature and is fully tested; dev status of '(R)eleased'. This module is registered with the Perl 5 Module List. It can be used in your programs immediately. ---------- 2. SQL::Routine can be used in any SQL using environment, regardless of what you use to bridge with databases. The SQL::Routine (SRT) Perl 5 module provides a container object that allows you to create specifications for any type of database task or activity (eg: queries, DML, DDL, connection management) that look like ordinary routines (procedures or functions) to your programs; all routine arguments are named. SQL::Routine can broadly represent, as an abstract syntax tree (a cross-referenced hierarchy of nodes), code for any programming language, but many of its concepts are only applicable to relational databases, particularly SQL understanding databases. It is reasonable to expect that a SQL:2003 compliant database should be able to implement nearly all SQL::Routine concepts in its SQL stored procedures and functions, though SQL:2003 specifies some of these concepts as optional features rather than core features. SQL::Routine is intended to be used by an application in place of using actual SQL strings (including support for placeholders). You define any desired actions by stuffing atomic values into SQL::Routine objects, and then pass those objects to a compatible bridging engine that will compile and execute those objects against one or more actual databases. Said bridge would be responsible for generating any SQL or Perl code necessary to implement the given SRT routine specification, and returning the result of its execution. SQL::Routine is also intended to be used as an intermediate representation of schema definitions or other SQL that is being translated from one database product to another. See the module's SYNOPSIS for examples such as how to define DOMAIN, TABLE, VIEW database schema objects, as well as routines for doing SELECTs and INSERTs of single or multiple rows (one of which also opens and closes a db connection). This module is the next most mature and the tests probably cover 70-80% of it; dev status of '(a)lpha'. This module is registered with the Perl 5 Module List. It can be used in your programs immediately. ---------- 3. SQL::Routine::SQLBuilder can be used in any SQL using environment. It will generate ANSI/ISO SQL:2003 and other SQL variants from SQL::Routine models, and serves as a reference implementation of that functionality. This module is pre-alpha development status and has no tests written for it yet, other than that it compiles. ---------- 4.1 The Rosetta Perl 5 module defines a complete and rigorous API for database access that provides hassle-free portability between many dozens of database products for database-using applications of any size and complexity, that leverage all sorts of advanced database product features. The Rosetta Native Interface (RNI) allows you to create specifications for any type of database task or activity (eg: queries, DML, DDL, connection management) that look like ordinary routines (procedures or functions) to your programs, and execute them as such; all routine arguments are named. One of the main goals of Rosetta is similar to that of the Java platform, namely "write once, run anywhere". Code written against the RNI will run in an identical fashion with zero changes regardless of what underlying database product is in use. Rosetta is intended to help free users and developers from database vendor lock-in, such as that caused by the investment in large quantities of vendor-specific code. It also comes with a comprehensive validation suite that proves it is providing identical behaviour no matter what the underlying database vendor is. The Rosetta module does not talk to or implement any databases by itself; it is up to separately distributed Engine modules to do this. You can see a reference implementation of one in the Rosetta::Engine::Generic module. Rosetta is conceptually a DBI wrapper, whose strongest addition is SQL generation, but it also works without the DBI, and with non-SQL databases; it is up to each Engine to use or not use DBI, though most will use it because the DBI is a high quality and mature platform to build upon. The choice between using DBI and using Rosetta seems to be analogous to the choice between the C and Java programming languages, respectively, where each database product is analogous to a hardware CPU architecture or wider hardware platform. The DBI is great for people who like working as close to the metal as possible, with direct access to each database product's native way of doing things, those who *want* to talk to their database in its native SQL dialect, and those who want the absolute highest performance. Rosetta is more high level, for those who want the write-once run-anywhere experience, less of a burden on their creativity, more development time saving features, and are willing to sacrifice a modicum of performance for the privilege. 4.2 The Rosetta::Validator Perl 5 module is a common comprehensive test suite to run against all Rosetta Engines. You run it against a Rosetta Engine module to ensure that the Engine and/or the database behind it implements the parts of the Rosetta API that your application needs, and that the API is implemented correctly. Rosetta::Validator is intended to guarantee a measure of quality assurance (QA) for Rosetta, so your application can use the database access framework with confidence of safety. Alternately, if you are writing a Rosetta Engine module yourself, Rosetta::Validator saves you the work of having to write your own test suite for it. You can also be assured that if your module passes Rosetta::Validator's approval, then your module can be easily swapped in for other Engine modules by your users, and that any changes you make between releases haven't broken something important. Rosetta::Validator would be used similarly to how Sun has an official validation suite for Java Virtual Machines to make sure they implement the official Java specification. This module is pre-alpha development status. This module is registered with the Perl 5 Module List. Since Rosetta requires an Engine to be useful (as DBI requires a driver), it does not have its own test suite except for that it compiles. However, the following Generic Engine module does, and so its test suite also tests Rosetta itself. ---------- Rosetta::Engine::Generic is a catch-all Engine for any DBI-supported SQL database. The Rosetta::Engine::Generic Perl 5 module is a functional but quickly built Rosetta Engine that interfaces with a wide variety of SQL databases. Mainly this is all databases that have a DBI driver module for them and that support SQL natively; multi-database DBD modules like DBD::ODBC are supported on equal terms as single-database ones like DBD::Oracle. I created this module to be a "first line of support" so that Rosetta works with a variety of databases as soon as possible. This module has a Rosetta::Validator-based test suite which currently exercises its ability to connect to and disconnect from a database, and get a list of automatically visible database instances. In the near future it will also implement typical DDL and DML operations, at which point it should be generally useful. ---------- I welcome and encourage any and all feedback on these modules that you can give me. It would be VERY helpful to me. I am also grateful if you can find these modules useful in your own work. Likewise, if you have any questions, I will do my best to answer them. If you wish to help with their development in some way, I am also open to such offers. Thank you and have a good day. -- Darren Duncan From Peter at PSDT.com Mon Apr 4 12:51:05 2005 From: Peter at PSDT.com (Peter Scott) Date: Mon Apr 4 12:50:28 2005 Subject: [VPM] April 19 meeting Message-ID: <6.1.2.0.2.20050404124735.01cc2b08@shell2.webquarry.com> I propose to talk about Damian Conway's upcoming Perl Best Practices book. As a technical reviewer, I have had access to preliminary copies and will talk about some of his recommendations and upcoming modules. The book won't be available until August so this information can't be gotten elsewhere... How's that sit with folks? Abram, would you reserve the room please? -- Peter Scott Pacific Systems Design Technologies http://www.perldebugged.com/ http://www.perlmedic.com/ From darren at DarrenDuncan.net Mon Apr 4 13:27:15 2005 From: darren at DarrenDuncan.net (Darren Duncan) Date: Mon Apr 4 13:27:37 2005 Subject: [VPM] April 19 meeting In-Reply-To: <6.1.2.0.2.20050404124735.01cc2b08@shell2.webquarry.com> References: <6.1.2.0.2.20050404124735.01cc2b08@shell2.webquarry.com> Message-ID: At 12:51 PM -0700 4/4/05, Peter Scott wrote: >I propose to talk about Damian Conway's upcoming Perl Best Practices >book. As a technical reviewer, I have had access to preliminary >copies and will talk about some of his recommendations and upcoming >modules. The book won't be available until August so this >information can't be gotten elsewhere... > >How's that sit with folks? Abram, would you reserve the room please? Sounds good to me, Peter. Make it so! -- Darren Duncan From glim at mycybernet.net Sun Apr 10 09:12:00 2005 From: glim at mycybernet.net (Gerard Lim) Date: Sun Apr 10 09:31:28 2005 Subject: [VPM] Reminder: Yet Another Perl Conference in Toronto, June 27 - 29 Message-ID: Yet Another YAPC::NA 2005 Conference Reminder --------------------------------------------- YAPC::NA 2005 is Yet Another Perl Conference, North America, this year to be held in downtown Toronto, Ontario, Canada, Mon - Wed 27 - 29 June 2005. Important Dates/Deadlines ------------------------- April 18 -- deadline for paper submissions May 12 -- last day of guaranteed accommodations YAPC::NA is a grassroots, all-volunteer conference. The speaker quality is high, the participants lively, and there are many extra social activities scheduled. We expect a bit over 400 people this year, and registration is proceeding faster this year than in the past. The registration cost is USD$85. Information on registration: http://yapc.org/America/register-2005.shtml http://yapc.org/America/registration-announcement-2005.txt Direct link to registration: http://donate.perlfoundation.org/index.pl?node=registrant%20info&conference_id=423 Want to be a speaker? Deadline for proposal submission is April 18, just over 1 week from now. Go to: http://yapc.org/America/cfp-2005.shtml Need accommodations in Toronto? Go to: http://yapc.org/America/accommodations-2005.shtml If you book before May 13 you will be guaranteed a hotel space. After that getting accommodations will become progressively more difficult. Prices we have arranged are in two different price ranges: approximately US$50 for a dorm room, US$72 for a decent hotel room. All accommodations are very nearby the conference venue. This message comes from the YAPC::NA 2005 organizers in Toronto.pm, http://to.pm.org/, on behalf of The Perl Foundation, http://www.perlfoundation.org/ We look forward to seeing you in Toronto! If you have any questions please contact na-help@yapc.org From Peter at PSDT.com Mon Apr 11 11:55:26 2005 From: Peter at PSDT.com (Peter Scott) Date: Mon Apr 11 11:53:53 2005 Subject: [VPM] Victoria Perl Mongers meeting: April 19 Message-ID: <6.1.2.0.2.20050411115140.01d69e78@shell2.webquarry.com> Victoria.pm will meet at its regular date, time, and nearly the same place on Tuesday, April 19, 7pm, at UVic. The location is Harry Hickman Building room * 116 * (the Building Formerly Known As the Centre for Innovative Teaching). See http://uvic.ca for maps if necessary. This is a different room from usual. I will present selections from Damian Conway's upcoming O'Reilly book "Perl Best Practices". This will not be published before August; I have seen it as a technical reviewer. So I will be showing parts of it that are identical or close to what will finally be printed. I will not make copies available in any form for obvious reasons. Other topics to be covered as time permits; make requests for anything particular. (Courtesy copy to VLUG members by permission of the list manager. Victoria.pm's home page is .) -- Peter Scott Pacific Systems Design Technologies http://www.perldebugged.com/ http://www.perlmedic.com/ From Peter at PSDT.com Thu Apr 14 13:06:39 2005 From: Peter at PSDT.com (Peter Scott) Date: Thu Apr 14 13:07:25 2005 Subject: [VPM] Fun with random numbers Message-ID: <6.1.2.0.2.20050414130232.01d9ea68@shell2.webquarry.com> Some students at MIT wrote a program called SCIgen - An Automatic CS Paper Generator. From their website: SCIgen is a program that generates random Computer Science research papers, including graphs, figures, and citations. What's amazing is that one of their randomly generated papers was accepted to WMSCI 2005. Now they are accepting donations to fund their trip to the conference and give a randomly generated talk. http://www.pdos.lcs.mit.edu/scigen/ -- Peter Scott Pacific Systems Design Technologies http://www.perldebugged.com/ http://www.perlmedic.com/ From carl.constantine at gmail.com Thu Apr 14 13:52:13 2005 From: carl.constantine at gmail.com (Carl Constantine) Date: Thu Apr 14 13:52:23 2005 Subject: [VPM] Fun with random numbers In-Reply-To: <6.1.2.0.2.20050414130232.01d9ea68@shell2.webquarry.com> References: <6.1.2.0.2.20050414130232.01d9ea68@shell2.webquarry.com> Message-ID: On 4/14/05, Peter Scott wrote: > Some students at MIT wrote a program called SCIgen - An Automatic CS > Paper Generator. From their website: SCIgen is a program that > generates random Computer Science research papers, including graphs, > figures, and citations. What's amazing is that one of their randomly > generated papers was accepted to WMSCI 2005. Now they are accepting > donations to fund their trip to the conference and give a randomly > generated talk. > > http://www.pdos.lcs.mit.edu/scigen/ That's pretty funny, and pretty cool at the same time. -- Carl B. Constantine carl.constantine@gmail.com From Peter at PSDT.com Thu Apr 14 14:15:02 2005 From: Peter at PSDT.com (Peter Scott) Date: Thu Apr 14 14:15:30 2005 Subject: [VPM] Fun with random numbers In-Reply-To: References: <6.1.2.0.2.20050414130232.01d9ea68@shell2.webquarry.com> Message-ID: <6.1.2.0.2.20050414141441.01d9ea68@shell2.webquarry.com> At 01:52 PM 4/14/2005, Carl Constantine wrote: >On 4/14/05, Peter Scott wrote: > > Some students at MIT wrote a program called SCIgen - An Automatic CS > > Paper Generator. From their website: SCIgen is a program that > > generates random Computer Science research papers, including graphs, > > figures, and citations. What's amazing is that one of their randomly > > generated papers was accepted to WMSCI 2005. Now they are accepting > > donations to fund their trip to the conference and give a randomly > > generated talk. > > > > http://www.pdos.lcs.mit.edu/scigen/ > >That's pretty funny, and pretty cool at the same time. And it uses Perl! -- Peter Scott Pacific Systems Design Technologies http://www.perldebugged.com/ http://www.perlmedic.com/ From Peter at PSDT.com Mon Apr 18 01:55:00 2005 From: Peter at PSDT.com (Peter Scott) Date: Mon Apr 18 08:53:40 2005 Subject: [VPM] Victoria Perl Mongers meeting tomorrow Message-ID: <6.1.2.0.2.20050411115528.01d63a20@shell2.webquarry.com> Victoria.pm will meet at its regular date, time, and nearly the same place tomorrow, Tuesday, April 19, 7pm, at UVic. The location is Harry Hickman Building room * 116 * (the Building Formerly Known As the Centre for Innovative Teaching). See http://uvic.ca for maps if necessary. This is a different room from usual. I will present selections from Damian Conway's upcoming O'Reilly book "Perl Best Practices". This will not be published before August; I have seen it as a technical reviewer. So I will be showing parts of it that are identical or close to what will finally be printed. I will not make copies available in any form for obvious reasons. Other topics to be covered as time permits; make requests for anything particular. (Courtesy copy to VLUG members by permission of the list manager. Victoria.pm's home page is .) -- Peter Scott Pacific Systems Design Technologies http://www.perldebugged.com/ http://www.perlmedic.com/ From darren at DarrenDuncan.net Fri Apr 22 17:17:07 2005 From: darren at DarrenDuncan.net (Darren Duncan) Date: Fri Apr 22 17:17:24 2005 Subject: [VPM] ANNOUNCE: SQL-Routine 0.59 (and Rosetta 0.44) Message-ID: 2005-04-22 Darren Duncan -------------------------------------------------- Version 0.59 of SQL::Routine (SRT), a fully atomic and portable abstract syntax tree to define any database tasks, has been released on CPAN. http://search.cpan.org/dist/SQL-Routine/ This release is primarily a feature upgrade that takes care of the long-standing circular reference situation that prevented SRT models from being automatically garbage collected when external refs to them expired. You no longer have to (and in fact can't) explicitly destroy a model using destroy() any more. Following the change, SQL::Routine should be considerably easier to use. SQL::Routine now has a new external dependency on Scalar::Util v1.11+ (bundled with Perl 5.8.x); SQL::Routine now uses its weaken() feature to enable half-weak circular references. Thanks to Stevan Little for introducing me to that module last month. Caveat: As a result of this change, you can no longer maintain just an external reference to a 'well known' SRT Node by which its host Container is accessed; you must keep a reference to the Container itself to keep it from disappearing. Considering this, version 0.44 of Rosetta, which serves as a bridge between SQL::Routine and DBI, has also been released on CPAN. http://search.cpan.org/dist/Rosetta/ This release is entirely a compatability update, since the changes to SQL::Routine broke the old version, which only maintained a reference to SRT Nodes internally. The Changes files for both releases contain more details than are shown in this announcement email. Any questions, feedback, requests, or offers of assistence with these modules are welcome and appreciated. Thank you and have a good day. -- Darren Duncan From darren at DarrenDuncan.net Mon Apr 25 11:15:28 2005 From: darren at DarrenDuncan.net (Darren Duncan) Date: Mon Apr 25 11:15:45 2005 Subject: [VPM] OSCON, YAPC::NA and other conferences Message-ID: I'm seeking a bit of advice here concerning the various Perl-specific and Perl-including FOSS conferences out there. Preferably from people have gone to them and are going to upcoming ones. I would like to start attending these events, but am not sure which ones I should be focusing on, nor how to do it inexpensively. And money is more of an issue right now. While I may be getting some income soon, and it would be prudent to wait until after I do to register, that would also probably miss certain deadlines for event registration or hotels or travel for the events this summer. So, are any of you going to either YAPC::NA or OSCON or another similar event this year, or know local people who are? If I wanted to go, is it possible for me to combine on anything with you to save us both some money and/or for other benefits? My understanding with YAPC::NA ( http://www.yapc.org/America/ ) this year is that the conference is cheap, but travel expensive due to distance to Toronto. But it is in Canada so no cross-border stuff. OSCON ( http://conferences.oreillynet.com/os2005/ ) the conference is expensive, but the travel would be relatively cheap (?) due to its short distance, which is possibly driveable or charterable, and there is cross-border to the US. Note that I'm not interested in the conference cruises at this time. Thank you. -- Darren Duncan From darren at DarrenDuncan.net Tue Apr 26 01:43:11 2005 From: darren at DarrenDuncan.net (Darren Duncan) Date: Tue Apr 26 01:43:42 2005 Subject: [VPM] ANNOUNCE: SQL-Routine 0.60 Message-ID: 2005-04-25 Darren Duncan -------------------------------------------------- Version 0.60 of SQL::Routine (SRT), a fully atomic and portable abstract syntax tree to define any database tasks, has been uploaded to CPAN; it should appear on your favorite mirror within the next few hours. http://search.cpan.org/dist/SQL-Routine/ This release is primarily to remove a large and long-standing but dubious feature where a SQL::Routine Node is valid to exist outside of a Container, which is the context by which it associates with other Nodes to form trees. So there was a fair amount of code that had to work under both conditions of 'alone' and 'well known', and there was a fair amount of documentation that had to differentiate between the two statuses. As of this release 0.60, Nodes may only exist within a Container (aka 'well known'). As a result of this change, the main executable code is about 10% smaller, and executes about that much faster. More importantly, the code (and the documentation too) should now be fully twice as easy for a novice to understand and debug and extend. It will even be a fair bit easier for me to continue maintaining the module. A small part of the low-level public API has changed; if you invoked any of the following 6 functions or methods directly, you will have to change your code: new_node(), Node.new(), clear_node_id(), put_in_container(), take_from_container(), build_lonely_node(). But the change should be simple, helped by search-n-replace. Where you used to do this: my $model = SQL::Routine->new_container(); my $node = SQL::Routine->new_node( 'table' ); $node->set_node_id( 42 ); # ... up to now, you can do use $node in its 'alone' state ... $node->put_in_container( $model ); # ... now the $node is 'well known' ... $node->set_literal_attribute( 'si_name', 'persons' ); You now do this: my $model = SQL::Routine->new_container(); my $node = SQL::Routine->new_node( $model, 'table', 42 ); # ... the $node is akin to 'well known' ... $node->set_literal_attribute( 'si_name', 'persons' ); Of course, if you used the higher-level API that is shown in the SYNOPSIS, you may have done this all along instead and weren't affected by the change: my $model = SQL::Routine->new_container(); my $node = $model->build_node( 'table', { 'id' => 42, 'si_name' => 'persons' } ); Where you used to do this: $node->take_from_container(); # ... the $node is 'alone' again but still useable # ... $node is garbage collected when it goes out of scope You now do this: $node->delete_node(); # ... $node has mostly been destroyed by now Where you used to do this: $node->clear_node_id(); You now can't do that anymore; a Node always has an id set; you can still change its value to another defined value using set_node_id(), however, or just delete the Node. Where you used to do this: my $model = SQL::Routine->new_container(); my $node = SQL::Routine->build_lonely_node( 'table', 42 ); $node->put_in_container( $model ); You now do this: my $model = SQL::Routine->new_container(); my $node = $model->build_node( 'table', 42 ); There are no other API changes that would break external code. The Changes files for this release contains a lot more details than are shown in this announcement email; the Changes does not contain any before/after code, however. Any questions, feedback, requests, or offers of assistence with the module are welcome and appreciated. Thank you and have a good day. -- Darren Duncan