Just a Theory

Black lives matter

Posts about Bricolage

Bricolage-Devel 1.7.1

It gives me great pleasure to announce the release of Bricolage-Devel 1.7.1, the second development release for what will eventually become Bricolage 1.8.0. This version of the open-source content management system addresses all of the bugs discovered since the release of the first development release, 1.7.0. The most significant changes include:

  • Eliminated the need for the Apache::ConfigFile module, and thus some annoying problems with the CPAN indexer when trying to install it. [David]

  • Passwords can be changed again. [Mike Slattery]

  • It is now virtually impossible to create media type or story type elements without site and output channel associations. This should eliminate errors when users try to create documents based on types without output channel associations. [David]

  • The “Output Channel” item for templates on desks now displays properly. [David]

  • Eliminated bogus “Use of element’s ’name’ field is deprecated” warnings. Key names are allowed to have digits and underscores, and we weren’t consistent about that. [David]

  • The display_element() method in the Mason burner once again passes component arguments on to components. And now, so does sdisplay_element(). [David]

  • Fixed favicon.ico code so that the browser and server don’t go into an infinite loop with redirects of redirects. The favicon.ico still doesn’t pop up in the location field in my browser, but it does display properly if I point my browser at it. [David]

  • An attempt to create a document with the same URI as an existing document no longer litters the database with broken stories. Thanks to Arthur for the spot. [David]

  • Redirection after some publishes and previews works again, instead of returning a text page to the browser. [David]

  • Now displaying the name of the site each story and media document is in in Find Stories and Find Media. Suggested by Arthur. [David]

  • A number of fixes for the bric_media_upload contrib script:

    • Made it work with the 1.7.0 XML Schema.

    • Fixed a bug in its use of File::Find.

    • Fixed problem in calculating category names when given a directory to upload.

    • Added --bric_soap and --site options.

    See the script’s usage info for details. [Dave Rolsky]

  • Changing a media item’s category and then saving caused an error. [Dave Rolsky]

  • Changing a media document’s cover date no longer causes the URI to disappear. Thanks to Dave Rolsky for the spot. [David]

  • Attempting to preview a story for which there are no associated destinations no longer causes the error ‘Can’t call method “ACCESS” without a package or object reference’. Thanks to Earle Martin for the spot! [David]

  • Added output_channel_id parameter to the list() method of Bric::Biz::Site in order to prevent sites without output channel associations from being listed in the select list for story type and media type elements. [David]

  • When a document fails to publish because there are no destinations configured, the UI no longer displays a message saying that it was published. [David]

  • Fixed page logging so that redirects to the page before the current page can work correctly. It was most noticeably broken when trying to associate a contributor with a document. [David]

  • The upgrade process no longer moves media document files to where Bricolage can’t find them. If this happened to you, just mv $BRICOLAGE_ROOT/comp.old/data $BRICOLAGE_ROOT/comp. [David]

  • Performing an action in the contributor and category association interfaces in the story and media profiles no longer causes an empty search to be performed and return all contributors or categories. This could be a pain for organizations with 1000s of contributors or categories. Thanks to Scott for the report! [David]

  • The Key Name field in the element profile is no longer editable. Only new elements can type in the key name field. Thanks to Arthur for the spot! [David]

  • The Template toolkit burner now correctly uses element key names instead of names to find corresponding templates. [David]

  • Management of user groups in a double list manager UI no longer causes an SQL error. Spotted by Alexander Ling. [David]

  • Sites added to a site group will now be listed as members of the site group in the site group’s profile. Thanks to Alexander Ling for the spot. [David]

  • Improved permission checking in the virtual FTP server. [David]

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

David

Originally published on use Perl;

Bricolage 1.6.8

I’m pleased to announce the release of Bricolage 1.6.8. This maintenance release addresses a few issues discovered since the release of version 1.6.7. Here is the complete list of changes for this release:

  • Custom select fields now correctly pay attention to the size attribute. Reported by Dave Rolsky. [David]

  • The element type manager now displays “Subelement” instead of “Story” for subelement element types. Suggested by Dave Rolsky. [David]

  • Updated to work with PostgreSQL 7.4. [David]

  • Improved error message in Bric::Util::Trans::SFTP. [David]

  • It’s possible to create new stories again without running into errors saying that a URI is not unique because the cover date and slug were accidentally excluded from the URI. [David]

  • Mason story templates now inherit from all category templates, thus enabling the access of <%attr>s and calling of <%method>s in category templates from story templates. [David]

  • Permission to edit element fields is now based on the permissions granted to edit the elements they belong to. This means that users other Global Admin group members can now edit fields. [David]

  • Dates are no longer editable if a user doesn’t have permission to edit them. [David]

  • Users without EDIT access to an element no longer see a link to Edit fields of that element, but a link to View them, instead. They will also no longer see an “Add Subelements” button. [David]

  • Fixed bug that triggered an invalid error message when a story URI is non-unique. Reported by Kevin Elliott. [David]

  • Assets with the same IDs but in different classes (media vs. stories vs. templates) no longer prevent each other from being added to a desk that can contain different classes of assets. Thanks to Scott for the spot and doing the research that lead to the replication of the problem. [David]

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason and HTML::Template support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

David

Originally published on use Perl;

Bricolage-Devel 1.7.0

It give me great pleasure to announce the release of Bricolage-Devel 1.7.0, the first development release for what will eventually become Bricolage 1.8.0. In addition to all of the bug fixes included in the 1.6.x series, this version of the open-source content management system adds a number of significant new features. The most significant changes include:

  • Added multisite support. Now all stories, media, output channels, templates, categories, and workflows may be associated with different sites, and even have the same names in different sites. This simplifies the management of multiple Web sites with Bricolage. Story type and media type elements may be shared between sites. Funded by Portugal Telecom Multimedia.

  • Added document aliasing. Stories and media in a site may now be aliased and published in another site, as long as the elements on which they are based are shared between sites. Control over the content of aliased documents remains in the original site, thus ensuring the editorial integrity of the document for that site. Funded by Portugal Telecom Multimedia.

  • Added $burner->sdisplay_element method to Bric::Util::Burner. This is a sprintf-style version of $burner->display_element.

  • Added the YEAR_SPAN_BEFORE and YEAR_SPAN_AFTER bricolage.conf directives. These directives enable control how many years before and after the current year to display in the list of years in the date and time select widget. The default values are 10 for each, meaning that if the current year is 2003, then the date span will be from 1993 to 2013.

  • Added “Email” action, which can be used to email the files generated by a publish to one or more email addresses. Funded by ETonline.

  • Callbacks were moved from Mason components to modules based on Params::Callback and managed by MasonX::Interp::WithCallbacks. This makes the UI layer more responsive and enhances maintainability.

  • Optimized performance of URI uniqueness checks by adding database tables to do the job, rather than constructing the URIs for all other documents in the same categories as the document being checked. This was the last major bottleneck affecting SOAP performance, as well as document editing in general. Funded by Kineticode.

  • Added output_channel_id parameter to the list() methods of Story and Media to enable querying for documents in output channels other than the primary output channel.

  • Added Keyword Management interface to centrally manage keywords.

  • Added HTML::Mason Custom tags support, allowing template developers to write code blocks that are context sensitive.

  • Added new page extension support to the burner, which allows template developers to set string extensions to use for successive file names, rather than the traditional use of numeric file name extensions for successive file names.

  • Added “Text to search” option in the Advanced search of Media and Stories to search for documents based on the contents of their field.

  • All preview links are now generated by a single widget. This widget adds the story or media URI to the title attribute of the link tag (which is modern browsers will automatically work as a roll-over tooltip), makes the story or media URI copyable (by relying on JavaScript to actually open a new window for the preview), and manages selecting an output channel in which to preview a story.

  • Made User Group Permissions UI wieldy with larger numbers of users by adding a select list to choose which type of Permission to look at.

  • Added contrib_id parameter to the list() methods of Bric::Biz::Asset::Business::Story and Bric::Biz::Asset::Business::Media to return a list of story or media documents associated with a given contributor.

  • Switched Bric::Util::CharTrans from using Text::Iconv to Encode, thus removing the dependency on a C library (libiconv). Note that this has changed the API of Bric::Util::CharTrans. Its to_utf8() and from_utf8() methods now always convert the argument passed in in place. They did this before for references, but now they do it for plain strings, as well. Also note that use of character translation also now requires Perl 5.8.0 or later.

  • Added MediaType, Site, and Keyword SOAP modules.

  • Added element attribute to Bric::Util::Burner so that $burner->get_element should always return the element currently being burned.

  • Added a throw_error() method to Bric::Util::Burner so that template developers can easily throw an exception that their users will see in the UI.

  • Moved category selection from Media and Story Profiles into their own separate components so that organizations with hundreds or thousands of categories don’t have to load them into a dropdown list every time an asset is edited. The category “browser” uses an interface similar to ‘Associate Contributors’, which has the advantage of being searchable rather than looking through a “long list of all categories”. This feature can be enabled via the new ENABLE_CATEGORY_BROWSER bricolage.conf directive.

  • Added list paging to Desks and My Workspace.

  • Added the ability to test templates without having to deploy them by using “template sandboxes” for each template developer.

  • Added Template Toolkit burner support.

  • Added support for installing and upgrading Bricolage with PostgreSQL on a separate host.

  • Added context-sensitive help for pages that were missing it.

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason, HTML::Template, and Template Toolkit support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

David

Originally published on use Perl;

Bricolage 1.6.7

I’m pleased to announce the release of Bricolage 1.6.7. This maintenance release addresses a few issues discovered since the release of version 1.6.6. Some of the more important changes include:

  • Fixed “bric_soap” to accept a “–server” argument starting with “https”, which is more friendly to an SSI environment.

  • The PostgreSQL admin username and password arguments were reversed during “make upgrade”.

  • Added partial index to speed queries against the job table, and thus to speed distribution.

  • Updated slug RegExen. They were a bit too strict, and should be better now, allowing dots, dashes, and underscores.

  • Inactive alert types no longer trigger the sending of alerts.

  • Fixed “element_data_id” parameter to Bric::Biz::Asset::Business::Parts::Tile::Data to actually work.

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason and HTML::Template support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

David

Originally published on use Perl;

Bricolage 1.6.6 Released

I’m pleased to announce the release of Bricolage 1.6.6. This maintenance release addresses a number issues discovered since the release of version 1.6.5. Some of the more important changes include:

  • Added README.Solaris.

  • When an asset is published or deployed directly from the asset profile, it is now properly removed from the publish or deploy desk.

  • Templates now display their output channel associations instead of their element associations on desks. This seems to be more useful, since the element association is usually obvious from the name.

  • The category URI is now displayed for assets on desks, rather than the name. This is consistent with the display of the category elsewhere.

  • Elements to which no subelements can be added will no longer display an empty select list and “Add Element” button.

  • Bug fix when deploying to multiple output channels. If the output channel IDs matched each other partly, it could cause a file to be removed after it just had been uploaded.

  • Users with CREATE access to a start desk can once again create stories on that desk even when they don’t have CREATE access to “All Stories.”

  • Each upgrade script is now run within the confines of a single database transaction. If any database changes within an upgrade script encounter an error, all of the changes in that script will be rolled back.

  • An upgrade script failure will now cause “make upgrade” to halt installation so that any issues are immediately identified and correctable.

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason and HTML::Template support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

David

Originally published on use Perl;

Bricolage 1.6.5 Released

I’m pleased to announce announce the release of Bricolage 1.6.5. This maintenance release addresses a number issues discovered since the release of version 1.6.4. Some of the more important changes include:

  • Previewing stories with related media that have no associated file no longer causes an error.

  • Switched to using DBI->connect_cached() from using our own database connection caching. This change does bump up the minimum required version of DBI to 1.18, though the latest version is always recommended. It’s also the right thing to do.

  • Fixed issue that could cause Bric::Util::DBI to create inconsistent transaction states.

  • Passing an undef via the workflow__id parameters to the list() method of Story, Media, or Template really does again cause Bricolage to correctly return only those assets that are not in workflow. It wasn’t as fixed in 1.6.3 as I had thought.

  • Vastly improved the speed of the query that lists events, and added an index to help it along, as well.

  • The FTP mover now properly deletes files rather than erroring out.

  • Users without EDIT access to the start desk in a workflow can no longer create assets in that workflow. Nor can they check out assets from the library, as there’s no start desk for them to check them in to. But they can still check them out from other desks that they have EDIT access to.

  • Time zone issues have been fixed to be more portable. Some platforms that experienced Bricolage unexpectedly shifting cover dates and other dates and times by several hours should no longer see this problem.

  • Adding a new element type with the same name as an existing or deleted element type no longer causes an SQL error.

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason and HTML::Template support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

David

Originally published on use Perl;

Pittsburgh.pm

I’m doing another PerlMongers talk, this time for the Pittsburgh Mongers. I’ll be doing my introduction to Bricolage talk. In the area on Tuesday, September 2, 2003 at 7 pm? Come for the talk!

See the announcement for details. Food will be involved.

Thanks to Casey West for putting this together!

Originally published on use Perl;

Bricolage at the Forge

  • “Toolbox at the Forge” columnist Reuven Lerner has published the first in a series of articles about Bricolage. This is a good, technically-oriented article that gets into the guts of Bricolage’s data model and really shows off what a great database PostgreSQL is, too. So go read it!

— David

Originally published on use Perl;

Bricolage 1.6.4

I’m abashed to announce announce the release of Bricolage 1.6.4, mere hours after the release of 1.6.3. This maintenance release addresses a number issues discovered since the release of version 1.6.2, plus one serious issue in version 1.6.3. Some of the more important changes since 1.6.2 include:

  • Preview works again (it was broken only during 1.6.3’s brief life).

  • Document and contributor type field information (label, options) is no longer pushed through Locale::Maketext, thus preventing errors when element and contributor type administrators create field options with brackets in them.

  • Documents associated with categories that have been deleted will once again work properly. Even though a category may be deactivated, any documents previously put into that category should still work, and still treat the category as a working category. And so they do.

  • Permissions granted on the “All” groups work again.

  • Resize now works in super bulk edit.

  • When a template is deployed, Bricolage now checks to see if its file name has changed since it was last deployed, and if it has, it deletes the old file.

  • Optimized performance of Bric::Dist::Resource queries and wrote lots of tests for them.

  • When a story or media document is published, Bricolage now looks to see if any files distributed for previous versions of the document are no longer associated with the document, and expires them if they are. It does so on a per-output channel basis, so note that if output channel settings have changed since the document was last published, the expiration may miss some stale files. The same goes for when destinations are changed. But this should cover the vast majority of cases.

  • Text input fields no longer impose a default maximum field length. This is so that element fields that have their maximum length set to 0 can truly be unlimited in length.

  • Passing an undef via the workflow__id parameters to the list() method of Story, Media, or Template once again causes Bricolage to correctly return only those assets that are not in workflow.

  • Extra blank lines between subelement tags in super bulk edit no longer causes an error.

  • Searches no longer return unexpected results or all objects when pagination is enabled.

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason and HTML::Template support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

— David

Originally published on use Perl;

Bricolage 1.6.3 Released

I’m pleased to announce announce the release of Bricolage-Devel 1.6.3. This maintenance release addresses a number issues discovered since the release of version 1.6.2. Some of the more important changes since 1.6.2 include:

  • Document and contributor type field information (label, options) is no longer pushed through Locale::Maketext, thus preventing errors when element and contributor type admins create field options with brackets in them.

  • Documents associated with categories that have been deleted will once again work properly. Even though a category may be deactivated, any documents previously put into that category should still work, and still treat the category as a working category. And so they do.

  • Permissions granted on the “All” groups work again.

  • Resize now works in super bulk edit.

  • When a template is deployed, Bricolage now checks to see if its file name has changed since it was last deployed, and if it has, it deletes the old file.

  • Optimized performance of Bric::Dist::Resource queries and wrote lots of tests for them.

  • When a story or media document is published, Bricolage now looks to see if any files distributed for previous versions of the document are no longer associated with the document, and expires them if they are. It does so on a per-output channel basis, so note that if output channel settings have changed since the document was last published, the expiration may miss some stale files. The same goes for when destinations are changed. But this should cover the vast majority of cases.

  • Text input fields no longer impose a default maximum field length. This is so that element fields that have their maximum length set to 0 can truly be unlimited in length.

  • Passing an undef via the workflow__id parameters to the list() method of Story, Media, or Template once again causes Bricolage to correctly return only those assets that are not in workflow.

  • Extra blank lines between subelement tags in super bulk edit no longer causes an error.

  • Searches no longer return unexpected results or all objects when pagination is enabled.

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason and HTML::Template support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

— David

Originally published on use Perl;

Bricolage 1.6.2

I’m pleased to announce announce the release of Bricolage-Devel 1.6.2. This maintenance release addresses numerous issues discovered since the release of version 1.6.1. Some of the more important changes since 1.6.1 include:

  • New help pages for the destination, server, and action profiles.

  • Fixed issue where new output channels added to a document type element were not always actually saved as a part of that element.

  • Fixed installer to again work with versions of PostgreSQL prior to 7.3.

  • Alert types can once again be deleted from the alert type profile.

  • Users can now only add subelements to a story if they have at least READ permission to those subelements.

  • The media type profile again allows extensions to be added and removed.

  • Perl 5.8.0 or later is now strongly recommended for better Unicode support.

  • Fixed deleting an Alert Type Rule. Also fixed Editing Alert Type Recipients.

  • Clicking “Cancel” in an element no longer saves the changes in that element before going up to the parent element.

  • Added Localization support to widgets that were missing it. Added pt_pt localized images.

  • Documents are no longer distributed to deleted (deactivated) destinations.

  • Eliminated several error log authentication message such as “No cookie found.” These tended only to confuse users when they were just starting to use Bricolage.

  • Elements added with the same name as an existing, active or inactive element no longer trigger an SQL error to be displayed.

  • Fixed issue where adding an output channel to a document type element removed that output channel from another document type element.

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason and HTML::Template support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

— David

Originally published on use Perl;

Bricolage 1.6.1

I’m pleased to announce announce the release of Bricolage-Devel 1.6.1. This maintenance release addresses a number of issues in version 1.6.0. Some of the more important changes since 1.6.0 include:

  • Bricolage now works with HTML::Mason 1.20 and later.

  • Added Chinese (Traditional) localization.

  • make clone has been fixed and improved.

  • The Media Type manager works again.

  • Various localization improvements and fixes.

  • “Image”, “Audio”, and “Video” documents now properly show up on desks.

  • Fixed alerts so that alerts are once again sent to the members of groups and deleted alerts no longer appear in the UI.

  • The virtual FTP server no longer displays templates in subcategories of the current subcategory directory.

  • Fixed Element profile so that Output Channel associations can be deleted and deleted fields no longer appear in the UI.

For a complete list of the changes, see the changes file.

ABOUT BRICOLAGE

Bricolage is a full-featured, enterprise-class content management and publishing system. It offers a browser-based interface for ease-of use, a full-fledged templating system with complete HTML::Mason and HTML::Template support for flexibility, and many other features. It operates in an Apache/mod_perl environment, and uses the PostgreSQL RDBMS for its repository. A comprehensive, actively-developed open source CMS, Bricolage has been hailed as “Most Impressive” in 2002 by eWeek.

Learn more about Bricolage and download it from the Bricolage home page.

Enjoy!

Originally published on use Perl;

Bricolage News

There’s been a fair bit of press coverage of Bricolage lately, which, since it’s all positive, is very satisfying. In addition to the article in IT-Director.com that I mentioned a week ago, a new article, “The Register signs up for Bricolage,” appeared today in – where else? – The Register. They write:

More than 30 companies contacted us with a view to pitching. Thanks guys, but we have made our CMS decision. Step forward Bricolage.

It’s powerful, it’s flexible, it’s a perfect fit for the content we currently handle and the kind of content we want to handle in the future. As a bonus, Bricolage is open source, which we like.

An article also appeared in Intranet Journal, entitled “:Faster, More Flexible Bricolage Challenges CM Vendors” There Michael Pastore observes:

The acceptance of Linux as a viable OS in the enterprise has opened some doors for open-source enterprise applications, and in the Web content management space there has been a decent amount of buzz surrounding Bricolage.

It turns out that Pastore also talked to Jupiter Communications about Bricolage:

Matthew Berk, senior analyst for site technologies and operations at Jupiter Research, said Bricolage is one of the open-source projects that has proved to be a black eye for high-end content management vendors. (Jupiter Research is a division of Jupitermedia, the publisher of this Web site.)

“[Bricolage] is one of the first projects to claim that ‘Hey, this stuff that Vignette said is rocket science, isn’t,’” Berk said. According to research done by Jupiter, eight out of 10 companies surveyed can meet their content management requirements with an open-source system.

I’m pleased that the big IT analyst firms are paying attention to Bricolage. The success of Bricolage at well-known enterprises such as Macworld Magazine, MacCentral, The World Health Organization and The Reg have caused so many in the industry to sit up and take notice. It’s great for open source, for Perl, and hopefully for my business, too.

Speaking of Kineticode, I should also point out that we’ve not launched a series of Bricolage support plans. We hope that these will help to keep steady revenues coming to Kineticode, as well as to validate Bricolage as a product. Wish us luck!

Originally published on use Perl;

Bricolage Stands Out

IT-Director.com has published an article, Open Source Content Management arrives, in which Bricolage is the only content management system mentioned:

However as these software applications mature and lose their uniqueness, they become candidates for the open source movement. In the case of content management, a number of open source contenders are emerging but Bricolage, in particular, stands out in terms of capability.

Bricolage is an actively developed content management system with a browser-based interface. It has most of the features you would expect from a full-featured content management system, including distributed authoring of content, workflow and support for user roles and groups. The product was built to run Salon.com. Visiting this site gives a useful and interesting demonstration of its capabilities.

The interesting thing is that if you follow the link for the author, Martin Langham, you’ll see that he works for a company called Bloor Research, and is working on a Report to be published in December for UK£296 (US$467 / €438) all about content management. The upshot is that it’s great that a research firm says that 1) Open-source CMS is coming into its own; 2) Bricolage is the standout in that field; 3) No other open-source CMS is mentioned; and 4) they’re publishing an Content Management report. This makes me think that Bricolage could fare very well indeed when that report comes out. It would be interesting to see.

The article was also published in The Register.

Originally published on use Perl;

eWeek Does it Again

In In eWeek’s 2002: The Tech Good, Bad and Ugly year-end round-up, Analyst Jim Rapoza hailed Bricolage as “Most Impressive”:

When an open-source application developed by a few authors and maintained mainly by one guy beats the pants off million-dollar competitors in pretty much every way, I’m impressed. The Bricolage project provides highly capable and extremely customizable Web content management capabilities, suitable for running even the biggest and most complex Web sites.

Woo-hoo!!

Originally published on use Perl;

My Adventures with Mac OS X

I recently decided to make the leap from Yellow Dog Linux to Mac OS X on my Titanium PowerBook. Getting everything to work the way I wanted proved to be a challenge, but well worth it. This document outlines all that I learned, so that neither you nor I will have to experience such pain again. The overall goal was to get Bricolage up and running, figuring that if it worked, then just about any mod_perl based solution would run. I’m happy to say that I was ultimately successful. You can be, too.

In the descriptions below, I provide links to download the software you’ll need, as well as the shell commands I used to compile and install each package. In all cases (except for the installation of the Developer Tools), I saved each package’s sources to /usr/local/src and gunzipped and untarred them there. I also carried out each step as root, by running sudo -s. If you’re not comfortable using a Unix shell, you might want to read up on it, first. All of my examples also assume a sh-compatible shell, such as bash or zsh. Fortunately, zsh comes with OS X, so you can just enable it for yourself in NetInfo Manager by setting users -> <username> -> shell to “/bin/zsh”, where <username> is your user name.

Developer Tools

All of the software that I describe installing below must be compiled. To compile software on Mac OS X, you need to install the Mac OS X Developer Tools. These provide the cc compiler and many required libraries. Conveniently, these come on a CD-ROM with the Mac OS X Version 10.1 upgrade kit. I just popped in the CD and installed them like you’d install any other OS X software. I needed administrative access to OS X to install the Developer Tools (or, indeed, to install any of the other software I describe below), but otherwise it posed no problems.

The best time to install the Developer Tools is immediately after upgrading to OS X version 10.1. Then run the Software Update applet in the System preferences to get your system completely up-to-date. By the time I was done, I had the system updated to version 10.1.3.

Emacs

The first step I took in the process of moving to OS X was to get working the tools I needed most. Essentially, what this meant was GNU Emacs. Now I happen to be a fan of the X version of Emacs – not XEmacs, but GNU Emacs with X support built in. I wasn’t relishing the idea of having to install X on OS X (although there are XFree86 ports that do this), so I was really pleased to discover the Mac-Emacs project. All I had to do was patch the GNU Emacs 21.1 sources and compile them, and I was ready to go! GNU Emacs works beautifully with the OS X Aqua interface.

There were a few configuration issues for me to work out, however. I have become addicted to the green background that an old RedHat .XConfig file had set, and I wanted this feature in OS X, too. Plus, the default font was really ugly (well, too big, really – anyone know how to make it smaller in Emacs?) and the Mac command key was working as the Emacs META key, rather than the option key. So I poked around the net until I found the settings I needed and put them into my .emacs file:

(custom-set-faces
'(default ((t (:stipple nil
  :background "DarkSlateGrey"
  :foreground "Wheat"
  :inverse-video nil
  :box nil
  :strike-through nil
  :overline nil
  :underline nil
  :slant normal
  :weight normal
  :height 116
  :width normal
  :family "apple-andale mono"))))
'(cursor ((t (:background "Wheat"))))
; Use option for the meta key.
(setq mac-command-key-is-meta nil)

Installing Emacs is not required for installing any of the other packages described below – it just happens to be my favorite text editor and IDE. So I don’t provide the instructions here; the Mac-Emacs project does a plenty good job. If you’re not comfortable with Unix editors, you can use whatever editor you like. BBEdit is a good choice.

GDBM

Mac OS X doesn’t come with a DBM! But since mod_ssl needs it, we have to install it. Fortunately, I found this PDF detailing someone else’s adventures with mod_ssl on OS X, and it provided decent instructions for installing GDBM. First, I created a new user for GDBM. In NetInfoManager, I created a duplicate of the “unknown” user and named it “bin”. Then, I downloaded GDBM from the FSF, and installed it like this:

cd /usr/local/src/gdbm-1.8.0
cp /usr/libexec/config* .
./configure
make
make install
ln -s /usr/local/lib/libgdbm.a /usr/local/lib/libdbm.a

That did the trick. Nothing else was involved, fortunately.

Expat

Who doesn’t do something with XML these days? If your answer is, “not me!”, then you’ll need to install the Expat library in order to work with XML::Parser in Perl. Fortunately it’s relatively easy to install, although support for the -static flag appears to be broken in cc on OS X, so it needs to be stripped out. I downloaded it from its project bpage, and then did this:

cd /usr/local/src/expat-1.95.2
./configure
perl -i.bak -p -e \
  's/LDFLAGS\s*=\s*-static/LDFLAGS=/' \
  examples/Makefile
perl -i.bak -p -e \
    's/LDFLAGS\s*=\s*-static/LDFLAGS=/' \
    xmlwf/Makefile
make
make install

Perl

Although Mac OS X ships with Perl (Yay!), it’s the older 5.6.0 version. There have been many bug fixes included in 5.6.1, so I wanted to make sure I got the latest stable version before I built anything else around it (mod_perl, modules, etc.).

Being a Unix program, Perl doesn’t expect to run into the problems associated with a case-insensitive file system like that Mac OS X’s HFS Plus. So there are a couple of tweaks to the install process that make it slightly more complicated than you would typically expect. Fortunately, many have preceded us in doing this, and the work-arounds are well-known. Basically, it comes down to this:

cd /usr/local/src/perl-5.6.1/
export LC_ALL=C
export LANG=en_US
perl -i.bak -p -e 's|Local/Library|Library|g' hints/darwin.sh
sh Configure -des -Dfirstmakefile=GNUmakefile -Dldflags="-flat_namespace"
make
make test
make install

There were a few errors during make test, but none of them seems to be significant. Hopefully, in the next version of Perl, the build will work just as it does on other platforms.

Downloads

Before installing Open SSL, mod_ssl, mod_perl, and Apache, I needed to get all the right pieces in place. The mod_ssl and mod_perl configure processes patch the Apache sources, so the Apache sources have to be downloaded and gunzipped and untarred into an adjacent directory. Furthermore, the mod_ssl version number corresponds to the Apache version number, so you have to be sure that they match up. Normally, I would just download the latest versions of all of these pieces and run with it.

However, Bricolage requires the libapreq library and its supporting Perl modules to run, and these libraries have not yet been successfully ported to Mac OS X. But worry not; fearless mod_perl hackers are working on the problem even as we speak, and there is an interim solution to get everything working.

As of this writing, the latest version of Apache is 1.3.24. But because I needed libapreq, I had to use an experimental version of Apache modified to statically compile in libapreq. Currently, only version 1.3.23 has been patched for libapreq, so that’s what I had to use. I discovered this experimental path thanks to a discussion on the Mac OS X Perl mail list.

So essentially what I did was download the experimental apache.tar.gz and the experimental lightweight apreq.tar.gz packages and gunzip and untar them into /usr/local/src. Then I was ready to move on to Open SSL, mod_ssl, and mod_perl.

Open SSL

Compiling Open SSL was pretty painless. One of the tests fails, but it all seems to work out, anyway. I download the sources from the Open SSL site, and did this:

cd /usr/local/src/openssl-0.9.6c
./config
make
make test

mod_ssl

The mod_ssl Apache module poses no problems whatsoever. I simply downloaded mod_ssl-2.8.7-1.3.23 from the mod_ssl site (note that the “1.3.23” at the end matches the version of Apache I downloaded) and gunzipped and untarred it into /usr/local/src/. Then I simply excuted:

./configure --with-apache=/usr/local/src/apache_1.3.23

mod_perl

Configuring and installing mod_ssl was, fortunately, a relatively straight-forward process. Getting Apache compiled with mod_perl and mod_ssl, however, was quite tricky, as you’ll see below. A number of braver folks than I have preceded me in installing mod_perl, so I was able to rely on their hard-earned knowledge to get the job done. For example, Randal Schwartz posted instructions to the mod_perl mail list, and his instructions worked well for me. So I downloaded the sources from the mod_perl site, and did this:

cd /usr/local/src/mod_perl-1.26
perl Makefile.PL \
  APACHE_SRC=/usr/local/src/apache_1.3.23/src \
  NO_HTTPD=1 \
  USE_APACI=1 \
  PREP_HTTPD=1 \
  EVERYTHING=1
make
make install

Apache

Getting Apache compiled just right was the most time-consuming part of this process for me. Although many had gone before me in this task, everybody seems to do it differently. I had become accustomed to just allowing Apache to use most of its defaults when I compiled under Linux, but now I was getting all kinds of errors while following different instructions from different authorities from around the web. Sometimes Apache wouldn’t compile at all, and I’d get strange errors. Other times it would compile, pass all of its tests, and install, only to offer up errors such as

dyld: /usr/local/apache/bin/httpd Undefined symbols: _log_config_module

when I tried to start it. It turns out that the problem there was that I had a number of modules compiled as DSOs – that is, libraries that can be loaded into Apache dynamically – but wasn’t loading them properly in my httpd.conf. This was mainly because I’ve grown accustomed to Apache having all the libraries I needed compiled in statically, so I simply didn’t have to worry about them.

But I finally hit on the right incantation to get Apache to compile with everything I need added statically, but still with support for DSOs by compiling in mod_so. I present it here for your viewing pleasure:

SSL_BASE=/usr/local/src/openssl-0.9.6c/ \
  ./configure \
  --with-layout=Apache \
  --enable-module=ssl \
  --enable-module=rewrite \
  --enable-module=so \
  --activate-module=src/modules/perl/libperl.a \
  --disable-shared=perl \
  --without-execstrip
make
make certificate TYPE=custom 
make install

This series of commands successfully compiled Apache with mod_perl and mod_ssl support statically compiled in, along with most of the other default modules that come with Apache. In short, everything is there that you need to run a major application with security such as Bricolage.

Note that make certificate will lead you through the process of creating an SSL certificate. I like to use the “custom” type so that it reflects the name of my organization. But you can use whatever approach you’re most comfortable with. Consult the mod_ssl INSTALL file for more information.

libapreq

Once Apache is installed with mod_perl and mod_ssl, the rest is gravy! The experimental libapreq library I downloaded installed without a hitch:

cd /usr/local/src/httpd-apreq
perl Makefile.PL
make
make install

PostgreSQL

PostgreSQL is a sophisticated open-source Object-Relational DBMS. I use it a lot in my application development, and it, too, is required by Bricolage. I was a bit concerned about how well it would compile and work on Mac OS X, but I needn’t have worried. First of all, Apple has provided some pretty decent instructions. Although they mainly document how to install MySQL, a competing open-source RDBMS, many of the same concepts apply to PostgreSQL.

The first thing I had to do was to create the “postgres” user. This is the system user that PostgreSQL typically runs as. I followed Apple’s instructions, using NetInfo Manager to duplicate the default “www” group and “www” user and give the copies the name “postgres” and a new gid and uid, respectively.

Next I downloaded the PostgreSQL version 7.2.1 sources. Version 7.2 is the first to specifically support Mac OS X, so going about the install was as simple as it is on any Unix system:

./configure --enable-multibyte=UNICODE
make
make install

That was it! PostgreSQL was now installed. Next I had to initialize the PostgreSQL database directory. Again, this works much the same as it does on any Unix system:

sudo -u postgres /usr/local/pgsql/bin/initdb \
  -D /usr/local/pgsql/data

The final step was to start PostgreSQL and try to connect to it:

sudo -u postgres /usr/local/pgsql/bin/pg_ctl start \
  -D /usr/local/pgsql/data /usr/local/pgsql/bin/psql -U postgres template1

If you follow the above steps and find yourself at a psql prompt, you’re in business! Because I tend to use PostgreSQL over TCP, I also enabled TCP connectivity by enabling the “tcpip_socket” option in the postgresql.conf file in the data directory created by initdb:

tcpip_socket = true

If you’re like me, you like to have servers such as PostgreSQL start when your computer starts. I enabled this by creating a Mac OS X PostgreSQL startup bundle. It may or may not be included in a future version of PostgreSQL, but in the meantime, you can download it from here. Simply download it, gunzip and untar it into /Library/StartupItems, restart OS X, and you’ll see it start up during the normal Mac OS X startup sequence. I built this startup bundle by borrowing from the existing FreeBSD PostgreSQL startup script, the Apache startup script that ships with OS X, and by reading the Creating SystemStarter Startup Item Bundles HOWTO.

XML::Parser

At this point, I had most

of the major pieces in place, and it was time for me to install the Perl modules I needed. First up was XML::Parser. For some reason, XML::Parser can’t find the expat libraries, even though the location in which I installed them is pretty common. I got around this by installing XML::Parser like this:

perl Makefile.PL EXPATLIBPATH=/usr/local/lib \
  EXPATINCPATH=/usr/local/include
make
make test
make install

Text::Iconv

In Bricolage, Text::Iconv does all the work of converting text between character sets. This is because all of the data is stored in the database in Unicode, but we wanted to allow users to use the character set with which they’re accustomed in the UI. So I needed to install Text::Iconv. Naturally, Mac OS X doesn’t come with libiconv – a library on which Text::Iconv depends – so I had to install it. Fortunately, it was a simple process to download it and do a normal build:

cd /usr/local/src/libiconv-1.7
./configure
make
make install

Now, Text::Iconv itself was a little more problematic. You have to tell it to look for libiconv by adding the -liconv option to the LIBS key in Makefile.PL. I’ve simplified doing this with the usual Perl magic:

perl -i.bak -p -e \
  "s/'LIBS'\s*=>\s*\[''\]/'LIBS' => \['-liconv'\]/" \
  Makefile.PL
perl Makefile.PL
make
make test
make install

DBD::Pg

Although the DBI installed via the CPAN module without problem, DBD::Pg wanted to play a little less nice. Of course I specified the proper environment variables to install it (anyone know why DBD::Pg’s Makefile.PL script can’t try to figure those out on its own?), but still I got this error during make:

/usr/bin/ld: table of contents for archive:
/usr/local/pgsql/lib/libpq.a is out of date;
rerun  ranlib(1) (can't load from it)

But this was one of those unusual situations in which the error message was helpful. So I took the error message’s advice, and successfully compiled and installed DBD::Pg like this:

ranlib /usr/local/pgsql/lib/libpq.a
export POSTGRES_INCLUDE=/usr/local/pgsql/include
export POSTGRES_LIB=/usr/local/pgsql/lib
perl Makefile.PL
make
make test
make install

LWP

The last piece I needed to worry about customizing when I installed it was LWP. Before installing, back up /usr/bin/head. The reason for this is that LWP will install /usr/bin/HEAD, and because HFS Plus is a case-insensitive file system, it’ll overwrite /usr/bin/head! This is a pretty significant issue, since many configure scripts use /usr/bin/head. So after installing LWP, move /usr/bin/HEAD, GET, & POST to /usr/local/bin. Also move /usr/bin/lwp* to /usr/local/bin. Then move your backed-up copy of head back to /usr/bin.

Naturally, I didn’t realize that this was necessary until it was too late. I installed LWP with the CPAN module, and it wiped out /usr/bin/head. Fortunately, all was not lost (though it took me a while to figure out why my Apache compiles were failing!): I was able to restore head by copying it from the Mac OS X installer CD. I Just popped it in an executed the command:

cp "/Volumes/Mac OS X Install CD/usr/bin/head" /usr/bin

And then everything was happy again.

Bricolage

And finally, the pièce de résistance: Bricolage! All of the other required Perl modules installed fine from Bundle::Bricolage:

perl -MCPAN -e 'install Bundle::Bricolage'

Then I simply followed the directions in Bricolage’s INSTALL file, and started ’er up! I would document those steps here, but the install process is currently in flux and likely to change soon. The INSTALL file should always be current, however – check it out!

To Be Continued

No doubt my adventures with Unix tools on Mac OS X are far from over. I’ve reported to various authors on the issues I’ve described above, and most will soon be releasing new versions to address those issues. As they do, I’ll endeavor to keep this page up-to-date. In the meantime, I am thoroughly enjoying working with the first really solid OS that Apple has released in years, and thrilled that I can finally have the best of both worlds: a good, reliable, and elegant UI, and all the Unix power tools I can stand! I hope you do, too.

Looking for the comments? Try the old layout.