<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mikeleib</id>
	<title>Apache OpenOffice Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.openoffice.org/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mikeleib"/>
	<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/wiki/Special:Contributions/Mikeleib"/>
	<updated>2026-05-06T01:29:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.14</generator>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Mikeleib&amp;diff=35577</id>
		<title>User:Mikeleib</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Mikeleib&amp;diff=35577"/>
		<updated>2007-06-19T22:51:02Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* The Recipe to Add a Slave */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mikeleib&amp;#039;s real name is Michael Leibowitz.  Mikeleib works for the Intel Corporation.  Mikeleib is in the United States.  Mikeleib works on performance.  Mikeleib writes very simple sentences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==This is a little scratch space for buildbot==&lt;br /&gt;
&lt;br /&gt;
===What&amp;#039;s New===&lt;br /&gt;
The new (experimental) buildbot differs from the original in several key ways:&lt;br /&gt;
* steps (including configure lines) are defined on the slave&lt;br /&gt;
* file transfer is now in-band (no ssh-key needed)&lt;br /&gt;
* builds are triggered by cvs commits&lt;br /&gt;
* per-cws build is gone (currently)&lt;br /&gt;
* fewer modifications to buildbot sourcecode&lt;br /&gt;
* build results can be emailed to tinderbox&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
* python2.4&lt;br /&gt;
* twisted2.4&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shaun-mcdonalds-computer:~ shaunmcdonald$ twistd --version &lt;br /&gt;
twistd (the Twisted daemon) 2.5.0&lt;br /&gt;
Copyright (c) 2001-2006 Twisted Matrix Laboratories.&lt;br /&gt;
See LICENSE for details.&lt;br /&gt;
shaun-mcdonalds-computer:~ shaunmcdonald$ which twistd&lt;br /&gt;
/sw/bin/twistd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* perl&lt;br /&gt;
* bash&lt;br /&gt;
* 9.83 GB needed for full build including installset on Mac OS X Intel&lt;br /&gt;
&lt;br /&gt;
=== The Recipe to Add a Slave ===&lt;br /&gt;
# grab a copy of the buildbot 0.7.5: [https://sourceforge.net/project/showfiles.php?group_id=73177 source]&lt;br /&gt;
# grab the [http://termite.go-oo.org:8081/~mikeleib/OO-changes.diff diff]&lt;br /&gt;
# unpack the source and apply the diff&lt;br /&gt;
# build buildbot. Note: that if you want to install it to different prefix such as your home directory see the [http://buildbot.net/repos/release/docs/buildbot.html#Installing-the-code manual]&lt;br /&gt;
# create the build-slave.  MASTERHOST:PORT is termite.go-oo.org:9999&lt;br /&gt;
#: &amp;lt;pre&amp;gt;buildbot create-slave BASEDIR MASTERHOST:PORT SLAVENAME PASSWORD&amp;lt;/pre&amp;gt;&lt;br /&gt;
# download the [http://termite.go-oo.org:8081/~mikeleib/scripts.zip scripts] and stuff them into your buildslave dir&lt;br /&gt;
# edit the scripts for your platform (you probably should change #!/bin/bash to #!/usr/bin/env bash at the least)&lt;br /&gt;
# put cwsget.pl in a directory in your PATH&lt;br /&gt;
# email mikeleib to add ur bot&lt;br /&gt;
# start the bot&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Mikeleib&amp;diff=35427</id>
		<title>User:Mikeleib</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Mikeleib&amp;diff=35427"/>
		<updated>2007-06-19T04:10:43Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* What&amp;#039;s New */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mikeleib&amp;#039;s real name is Michael Leibowitz.  Mikeleib works for the Intel Corporation.  Mikeleib is in the United States.  Mikeleib works on performance.  Mikeleib writes very simple sentences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==This is a little scratch space for buildbot==&lt;br /&gt;
&lt;br /&gt;
===What&amp;#039;s New===&lt;br /&gt;
The new (experimental) buildbot differs from the original in several key ways:&lt;br /&gt;
* steps (including configure lines) are defined on the slave&lt;br /&gt;
* file transfer is now in-band (no ssh-key needed)&lt;br /&gt;
* builds are triggered by cvs commits&lt;br /&gt;
* per-cws build is gone (currently)&lt;br /&gt;
* fewer modifications to buildbot sourcecode&lt;br /&gt;
* build results can be emailed to tinderbox&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
* python2.4&lt;br /&gt;
* twisted2.4&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
shaun-mcdonalds-computer:~ shaunmcdonald$ twistd --version &lt;br /&gt;
twistd (the Twisted daemon) 2.5.0&lt;br /&gt;
Copyright (c) 2001-2006 Twisted Matrix Laboratories.&lt;br /&gt;
See LICENSE for details.&lt;br /&gt;
shaun-mcdonalds-computer:~ shaunmcdonald$ which twistd&lt;br /&gt;
/sw/bin/twistd&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* perl&lt;br /&gt;
* bash&lt;br /&gt;
* 9.83 GB needed for full build including installset on Mac OS X Intel&lt;br /&gt;
&lt;br /&gt;
=== The Recipe to Add a Slave ===&lt;br /&gt;
# grab a copy of the buildbot 0.7.5: [https://sourceforge.net/project/showfiles.php?group_id=73177 source]&lt;br /&gt;
# grab the [http://termite.go-oo.org:8081/~mikeleib/OO-changes.diff diff]&lt;br /&gt;
# unpack the source and apply the diff&lt;br /&gt;
# build buildbot. Note: that if you want to install it to different prefix such as your home directory see the [http://buildbot.net/repos/release/docs/buildbot.html#Installing-the-code manual]&lt;br /&gt;
# create the build-slave.  MASTERHOST:PORT is termite.go-oo.org:9999&lt;br /&gt;
#: &amp;lt;pre&amp;gt;buildbot create-slave BASEDIR MASTERHOST:PORT SLAVENAME PASSWORD&amp;lt;/pre&amp;gt;&lt;br /&gt;
# download the [http://termite.go-oo.org:8081/~mikeleib/scripts.zip scripts] and stuff them into your buildslave dir&lt;br /&gt;
# edit the scripts for your platform (you probably should change #!/bin/bash to #!/usr/bin/env bash at the least)&lt;br /&gt;
# email mikeleib to add ur bot&lt;br /&gt;
# start the bot&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Smsm1/ooocon2007&amp;diff=33642</id>
		<title>User:Smsm1/ooocon2007</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Smsm1/ooocon2007&amp;diff=33642"/>
		<updated>2007-05-31T15:50:04Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Abstract Stuff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract Stuff ==&lt;br /&gt;
&lt;br /&gt;
=== Title of your paper ===&lt;br /&gt;
Buildbot: Bigger, Better, Buildier&lt;br /&gt;
&lt;br /&gt;
=== Session description ===&lt;br /&gt;
In this talk we will give a brief introduction the OpenOffice.org buildbot as well as discuss and demonstrate several exciting new features.  Buildbot is a system similar in purpose to tinderbox for the automatic generation of builds on multiple platforms.  However, buildbot very flexible and we have bent it into new shapes for OpenOffice.org.  Our improvements scratch several old itches such as change-triggered builds, easier client-side config, and ready-for-qa triggered install-set generation.  We have also added several exciting new features such as the &amp;quot;try&amp;quot; facility, which allows a developer to build from just a patch.  Additionally, we will demonstrate the new arbitrary data regression system, which enables the regression testing and tracking of nearly any kind of data.   This system is quite powerful because it allows one to track based on groupings such as a cws vs the milestone is based off or the relative memory performance per arch relative to the milestone, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Target Audience ===&lt;br /&gt;
&lt;br /&gt;
Developers&lt;br /&gt;
&lt;br /&gt;
=== Proposed Track ===&lt;br /&gt;
&lt;br /&gt;
Development &amp;gt; Tools for Development&lt;br /&gt;
&lt;br /&gt;
=== Preferred Session Type ===&lt;br /&gt;
Presentation/Case Study/Workshop&lt;br /&gt;
&lt;br /&gt;
== Author Stuff ==&lt;br /&gt;
=== Shaun McDonald ===&lt;br /&gt;
&lt;br /&gt;
==== Short Biography ====&lt;br /&gt;
Shaun McDonald has been working in the OpenOffice.org community for the past 2 years. He has been mostly interested in the Mac Port of OpenOffice.org. He has taken on the Mac Porting Web site revamp, some QA work, and is the owner of the first Mac buildbot. Shaun is just completing his fourth and final year in Computer Science at Heriot-Watt University in Edinburgh.&lt;br /&gt;
&lt;br /&gt;
==== URL of your home page / blog etc ====&lt;br /&gt;
http://shaunmcdonald131.blogspot.com/&lt;br /&gt;
&lt;br /&gt;
====Job Title / Position in the Community ====&lt;br /&gt;
Student / Mac Porting [web] developer/tester&lt;br /&gt;
&lt;br /&gt;
==== Company / OpenOffice.org Project Name ====&lt;br /&gt;
Independent / Porting ooo project&lt;br /&gt;
&lt;br /&gt;
==== Email Address ====&lt;br /&gt;
smsm1@openoffice.org&lt;br /&gt;
&lt;br /&gt;
==== Postal Address ====&lt;br /&gt;
45 Sighthill Terrace, Edinburgh, EH11 4QH, UK&lt;br /&gt;
&lt;br /&gt;
==== Contact Telephone Number ====&lt;br /&gt;
+447879610632&lt;br /&gt;
&lt;br /&gt;
* Request for travel subsidy (amount and reason) optional&lt;br /&gt;
&lt;br /&gt;
=== Michael Leibowitz ===&lt;br /&gt;
==== Short Bio ====&lt;br /&gt;
Michael Leibowitz works for the Intel Corporation as a software engineer.  He currently creates custom tooling to support Channel Software Engineering.  Prior to that, he was a full-time openoffice.org contributor working on performance and more nebulous developer community issues.  He is the founder of the openoffice.org wiki as well as the maintainer of the openoffice.org buildbot.&lt;br /&gt;
&lt;br /&gt;
====email====&lt;br /&gt;
&lt;br /&gt;
mikeleib@openoffice.org&lt;br /&gt;
==== Postal Address ====&lt;br /&gt;
2111 NE 25th Avenue&lt;br /&gt;
JF3-202&lt;br /&gt;
Hillsboro, OR 97124&lt;br /&gt;
USA&lt;br /&gt;
&lt;br /&gt;
==== Telephone ====&lt;br /&gt;
+1 503 264 7621&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Smsm1/ooocon2007&amp;diff=33641</id>
		<title>User:Smsm1/ooocon2007</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Smsm1/ooocon2007&amp;diff=33641"/>
		<updated>2007-05-31T15:48:51Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Telephone = */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract Stuff ==&lt;br /&gt;
&lt;br /&gt;
* Title of your paper (P)&lt;br /&gt;
Buildbot: Bigger, Better, Buildier&lt;br /&gt;
&lt;br /&gt;
* Session description (P)&lt;br /&gt;
In this talk we will give a brief introduction the OpenOffice.org buildbot as well as discuss and demonstrate several exciting new features.  Buildbot is a system similar in purpose to tinderbox for the automatic generation of builds on multiple platforms.  However, buildbot very flexible and we have bent it into new shapes for OpenOffice.org.  Our improvements scratch several old itches such as change-triggered builds, easier client-side config, and ready-for-qa triggered install-set generation.  We have also added several exciting new features such as the &amp;quot;try&amp;quot; facility, which allows a developer to build from just a patch.  Additionally, we will demonstrate the new arbitrary data regression system, which enables the regression testing and tracking of nearly any kind of data.   This system is quite powerful because it allows one to track based on groupings such as a cws vs the milestone is based off or the relative memory performance per arch relative to the milestone, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Target Audience (P)&lt;br /&gt;
&lt;br /&gt;
Developers&lt;br /&gt;
&lt;br /&gt;
* Proposed Track (P) (see the list in the Call for Papers)&lt;br /&gt;
&lt;br /&gt;
Development &amp;gt; Tools for Development&lt;br /&gt;
&lt;br /&gt;
* Preferred Session Type (P) (see the list in the Call for Papers)&lt;br /&gt;
Presentation/Case Study/Workshop&lt;br /&gt;
&lt;br /&gt;
== Author Stuff ==&lt;br /&gt;
=== Shaun McDonald ===&lt;br /&gt;
&lt;br /&gt;
==== Short Biography ====&lt;br /&gt;
Shaun McDonald has been working in the OpenOffice.org community for the past 2 years. He has been mostly interested in the Mac Port of OpenOffice.org. He has taken on the Mac Porting Web site revamp, some QA work, and is the owner of the first Mac buildbot. Shaun is just completing his fourth and final year in Computer Science at Heriot-Watt University in Edinburgh.&lt;br /&gt;
&lt;br /&gt;
==== URL of your home page / blog etc ====&lt;br /&gt;
http://shaunmcdonald131.blogspot.com/&lt;br /&gt;
&lt;br /&gt;
====Job Title / Position in the Community ====&lt;br /&gt;
Student / Mac Porting [web] developer/tester&lt;br /&gt;
&lt;br /&gt;
==== Company / OpenOffice.org Project Name ====&lt;br /&gt;
Independent / Porting ooo project&lt;br /&gt;
&lt;br /&gt;
==== Email Address ====&lt;br /&gt;
smsm1@openoffice.org&lt;br /&gt;
&lt;br /&gt;
==== Postal Address ====&lt;br /&gt;
45 Sighthill Terrace, Edinburgh, EH11 4QH, UK&lt;br /&gt;
&lt;br /&gt;
==== Contact Telephone Number ====&lt;br /&gt;
+447879610632&lt;br /&gt;
&lt;br /&gt;
* Request for travel subsidy (amount and reason) optional&lt;br /&gt;
&lt;br /&gt;
=== Michael Leibowitz ===&lt;br /&gt;
==== Short Bio ====&lt;br /&gt;
Michael Leibowitz works for the Intel Corporation as a software engineer.  He currently creates custom tooling to support Channel Software Engineering.  Prior to that, he was a full-time openoffice.org contributor working on performance and more nebulous developer community issues.  He is the founder of the openoffice.org wiki as well as the maintainer of the openoffice.org buildbot.&lt;br /&gt;
&lt;br /&gt;
====email====&lt;br /&gt;
&lt;br /&gt;
mikeleib@openoffice.org&lt;br /&gt;
==== Postal Address ====&lt;br /&gt;
2111 NE 25th Avenue&lt;br /&gt;
JF3-202&lt;br /&gt;
Hillsboro, OR 97124&lt;br /&gt;
USA&lt;br /&gt;
&lt;br /&gt;
==== Telephone ====&lt;br /&gt;
+1 503 264 7621&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Smsm1/ooocon2007&amp;diff=33623</id>
		<title>User:Smsm1/ooocon2007</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Smsm1/ooocon2007&amp;diff=33623"/>
		<updated>2007-05-31T05:27:28Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: some abstract meat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Abstract Stuff ==&lt;br /&gt;
&lt;br /&gt;
* Title of your paper (P)&lt;br /&gt;
Buildbot: Bigger, Better, Buildier&lt;br /&gt;
&lt;br /&gt;
* Session description (P)&lt;br /&gt;
In this talk we will give a brief introduction the OpenOffice.org buildbot as well as discuss and demonstrate several exciting new features.  Buildbot is a system similar in purpose to tinderbox for the automatic generation of builds on multiple platforms.  However, buildbot very flexible and we have bent it into new shapes for OpenOffice.org  Our improvements scratch several old itches such as change-triggered builds, easier client-side config, and ready-for-qa triggered install-set generation.  We have also added several exciting new features such as the &amp;quot;try&amp;quot; facility, which allows a developer to build from just a patch.  Additionally, we will demonstrate the new arbitrary data regression system, which enables the regression testing and tracking of nearly any kind of data.   This system is quite powerful because it allows one to track based on groupings such as a cws vs the milestone is based off or the relative memory performance per arch relative to the milestone, etc. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Target Audience (P)&lt;br /&gt;
&lt;br /&gt;
Developers&lt;br /&gt;
&lt;br /&gt;
* Proposed Track (P) (see the list in the Call for Papers)&lt;br /&gt;
&lt;br /&gt;
Development &amp;gt; Tools for Development&lt;br /&gt;
&lt;br /&gt;
* Preferred Session Type (P) (see the list in the Call for Papers)&lt;br /&gt;
Presentation/Case Study/Workshop&lt;br /&gt;
&lt;br /&gt;
== Author Stuff ==&lt;br /&gt;
=== Shaun ===&lt;br /&gt;
* Your Full Name (P)&lt;br /&gt;
** Shaun McDonald&lt;br /&gt;
** Michael Leibowtiz&lt;br /&gt;
* Short Biography (P) optional&lt;br /&gt;
** Shaun McDonald has been working in the OpenOffice.org community for the past 2 years. He has been mostly interested in the Mac Port of OpenOffice.org. He has taken on the Mac Porting Web site revamp, some QA work, and is an owner of a Mac buildbot.&lt;br /&gt;
**&lt;br /&gt;
* URL of your home page / blog etc (P) optional&lt;br /&gt;
** http://shaunmcdonald131.blogspot.com/&lt;br /&gt;
** http://&lt;br /&gt;
* Job Title / Position in the Community (P) optional&lt;br /&gt;
** Hopefully Just Graduated Student / Mac Porting [web] developer/tester&lt;br /&gt;
** Developer&lt;br /&gt;
* Company / OpenOffice.org Project Name (P) optional&lt;br /&gt;
** Independent / Porting ooo project&lt;br /&gt;
** Intel&lt;br /&gt;
* Email Address&lt;br /&gt;
** smsm1@openoffice.org&lt;br /&gt;
** mikeleib@openoffice.org&lt;br /&gt;
* Postal Address&lt;br /&gt;
** 45 Sighthill Terrace, Edinburgh, EH11 4QH, UK&lt;br /&gt;
** US&lt;br /&gt;
* Contact Telephone Number (Mobile / cell phone preferred for use at OOoCon) optional&lt;br /&gt;
** +447879610632&lt;br /&gt;
** +1&lt;br /&gt;
* Request for travel subsidy (amount and reason) optional&lt;br /&gt;
&lt;br /&gt;
=== Michael Leibowitz ===&lt;br /&gt;
==== Short Bio ====&lt;br /&gt;
Michael Leibowitz works for the Intel Corporation as a software engineer.  He currently creates custom tooling to support Channel Software Engineering.  Prior to that, he was a full-time openoffice.org contributor working on performance and more nebulous developer community issues.  He is the founder of the openoffice.org wiki as well as the maintainer of the openoffice.org buildbot.&lt;br /&gt;
&lt;br /&gt;
==== Postal Address ====&lt;br /&gt;
2111 NE 25th Avenue&lt;br /&gt;
JF3-202&lt;br /&gt;
Hillsboro, OR 97124&lt;br /&gt;
USA&lt;br /&gt;
&lt;br /&gt;
==== Telephone =====&lt;br /&gt;
+1 503 264 7621&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User:Mikeleib&amp;diff=28898</id>
		<title>User:Mikeleib</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User:Mikeleib&amp;diff=28898"/>
		<updated>2007-03-23T23:54:01Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: buildbot steps&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mikeleib&amp;#039;s real name is Michael Leibowitz.  Mikeleib works for the Intel Corporation.  Mikeleib is in the United States.  Mikeleib works on performance.  Mikeleib writes very simple sentences.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==This is a little scratch space for buildbot==&lt;br /&gt;
&lt;br /&gt;
===What&amp;#039;s New===&lt;br /&gt;
The new (experimental) buildbot differs from the original in several key ways:&lt;br /&gt;
* steps (including configure lines) are defined on the slave&lt;br /&gt;
* file transfer is now in-band (no ssh-key needed)&lt;br /&gt;
* builds are triggered by cvs commits&lt;br /&gt;
* per-cws build is gone (currently)&lt;br /&gt;
* fewer modifications to buildbot sourcecode&lt;br /&gt;
* build results can be emailed to tinderbox, but is not enabled just yet&lt;br /&gt;
&lt;br /&gt;
=== Prerequisites ===&lt;br /&gt;
* python2.4&lt;br /&gt;
* twisted2.4&lt;br /&gt;
* perl&lt;br /&gt;
* bash&lt;br /&gt;
&lt;br /&gt;
=== The Recipe to Add a Slave ===&lt;br /&gt;
# grab a copy of the buildbot 0.7.5: [https://sourceforge.net/project/showfiles.php?group_id=73177 source]&lt;br /&gt;
# grab the [http://termite.go-oo.org:8081/~mikeleib/OO-changes.diff diff]&lt;br /&gt;
# unpack the source and apply the diff&lt;br /&gt;
# build buildbot. Note: that if you want to install it to different prefix such as your home directory see the [http://buildbot.net/repos/release/docs/buildbot.html#Installing-the-code manual]&lt;br /&gt;
# create the build-slave.  MASTERHOST:PORT is termite.go-oo.org:9999&lt;br /&gt;
#: &amp;lt;pre&amp;gt;buildbot create-slave BASEDIR MASTERHOST:PORT SLAVENAME PASSWORD&amp;lt;/pre&amp;gt;&lt;br /&gt;
# download the [http://termite.go-oo.org:8081/~mikeleib/scripts.zip scripts] and stuff them into your buildslave dir&lt;br /&gt;
# edit the scripts for your platform (you probably should change #!/bin/bash to #!/usr/bin/env bash at the least)&lt;br /&gt;
# email mikeleib to add ur bot&lt;br /&gt;
# start the bot&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Getting_the_source&amp;diff=25525</id>
		<title>Getting the source</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Getting_the_source&amp;diff=25525"/>
		<updated>2007-02-20T14:20:17Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: s/CVS/SVN/  wrt gnome-cvs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
=== Source code ===&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded as tarballs eg. [http://download.openoffice.org/2.1.0/source.html here].  It is huge, so it was split to several files:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;OOo_2.1.0_src_core.tar.bz2&amp;lt;/strong&amp;gt; - the necessary part for each build, the other tarballs depend on this one.&lt;br /&gt;
* OOo_2.1.0_src_binfilter.tar.bz2 - the filters for old StarOffice formats.&lt;br /&gt;
* OOo_2.1.0_src_l10n.tar.bz2 - translations to other languages than English and German.&lt;br /&gt;
* OOo_2.1.0_src_sdk.tar.bz2 - OOo SDK (Software Development Kit).&lt;br /&gt;
* OOo_2.1.0_src_system.tar.bz2 - libraries that usually are on a standard (Linux) system and it&amp;#039;s not necessary to build own version.&lt;br /&gt;
&lt;br /&gt;
For a full build you need them all.  For development, &amp;lt;strong&amp;gt;src_core&amp;lt;/strong&amp;gt; is usually all you need.&lt;br /&gt;
&lt;br /&gt;
Download them to one directory and unpack them.  Information how to checkout from CVS follows.&lt;br /&gt;
&lt;br /&gt;
=== Vanilla up-stream ===&lt;br /&gt;
&lt;br /&gt;
You might be interested particulary in the [http://tools.openoffice.org/dev_docs/build_linux.html#GetTheSourceCode Get the source code] section in the build guide (for Linux, but it is quite similar for all the platforms). &lt;br /&gt;
&lt;br /&gt;
 export &amp;#039;CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&amp;#039;&lt;br /&gt;
 cvs login&lt;br /&gt;
 (CVS password: anoncvs)&lt;br /&gt;
 cvs co -r &amp;lt;milestone&amp;gt; OpenOffice2&lt;br /&gt;
&lt;br /&gt;
The tool to browse project [http://tools.openoffice.org/source/browse/tools/ source code online] has some [http://tools.openoffice.org/servlets/ProjectSource additional hints].&lt;br /&gt;
&lt;br /&gt;
If you want just to test development releases, you can download already compiled builds from [http://download.openoffice.org/680/]. List of available Mac builds is in [[Mac OS X Development Builds]].&lt;br /&gt;
&lt;br /&gt;
=== ooo-build ===&lt;br /&gt;
&lt;br /&gt;
There are loads of versions of OO.o, and several choices of&lt;br /&gt;
branch, with multiple outstanding patch sets.&lt;br /&gt;
I recommend you build from up-stream CVS HEAD milestones&lt;br /&gt;
(SRC680 milestones), with patch sets to make them easier to&lt;br /&gt;
build from [http://go-ooo.org/packages/SRC680]&lt;br /&gt;
&lt;br /&gt;
The very latest ooo-build (a small ~1.5Mb build wrapper) can&lt;br /&gt;
be got from SVN thus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.gnome.org/svn/ooo-build/trunk ooo-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Note:&amp;lt;/strong&amp;gt; You are going to need to download&lt;br /&gt;
an additional ~150Mb of compressed source, and have ~3Gb&lt;br /&gt;
of space to unpack and build it in.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
*[[Building]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{{Getting_It|Languages}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Getting_the_source&amp;diff=25524</id>
		<title>Getting the source</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Getting_the_source&amp;diff=25524"/>
		<updated>2007-02-20T14:19:28Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: point to gnome-svn for ooo-build&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|&lt;br /&gt;
|&lt;br /&gt;
=== Source code ===&lt;br /&gt;
&lt;br /&gt;
The source code can be downloaded as tarballs eg. [http://download.openoffice.org/2.1.0/source.html here].  It is huge, so it was split to several files:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;strong&amp;gt;OOo_2.1.0_src_core.tar.bz2&amp;lt;/strong&amp;gt; - the necessary part for each build, the other tarballs depend on this one.&lt;br /&gt;
* OOo_2.1.0_src_binfilter.tar.bz2 - the filters for old StarOffice formats.&lt;br /&gt;
* OOo_2.1.0_src_l10n.tar.bz2 - translations to other languages than English and German.&lt;br /&gt;
* OOo_2.1.0_src_sdk.tar.bz2 - OOo SDK (Software Development Kit).&lt;br /&gt;
* OOo_2.1.0_src_system.tar.bz2 - libraries that usually are on a standard (Linux) system and it&amp;#039;s not necessary to build own version.&lt;br /&gt;
&lt;br /&gt;
For a full build you need them all.  For development, &amp;lt;strong&amp;gt;src_core&amp;lt;/strong&amp;gt; is usually all you need.&lt;br /&gt;
&lt;br /&gt;
Download them to one directory and unpack them.  Information how to checkout from CVS follows.&lt;br /&gt;
&lt;br /&gt;
=== Vanilla up-stream ===&lt;br /&gt;
&lt;br /&gt;
You might be interested particulary in the [http://tools.openoffice.org/dev_docs/build_linux.html#GetTheSourceCode Get the source code] section in the build guide (for Linux, but it is quite similar for all the platforms). &lt;br /&gt;
&lt;br /&gt;
 export &amp;#039;CVSROOT=:pserver:anoncvs@anoncvs.services.openoffice.org:/cvs&amp;#039;&lt;br /&gt;
 cvs login&lt;br /&gt;
 (CVS password: anoncvs)&lt;br /&gt;
 cvs co -r &amp;lt;milestone&amp;gt; OpenOffice2&lt;br /&gt;
&lt;br /&gt;
The tool to browse project [http://tools.openoffice.org/source/browse/tools/ source code online] has some [http://tools.openoffice.org/servlets/ProjectSource additional hints].&lt;br /&gt;
&lt;br /&gt;
If you want just to test development releases, you can download already compiled builds from [http://download.openoffice.org/680/]. List of available Mac builds is in [[Mac OS X Development Builds]].&lt;br /&gt;
&lt;br /&gt;
=== ooo-build ===&lt;br /&gt;
&lt;br /&gt;
There are loads of versions of OO.o, and several choices of&lt;br /&gt;
branch, with multiple outstanding patch sets.&lt;br /&gt;
I recommend you build from up-stream CVS HEAD milestones&lt;br /&gt;
(SRC680 milestones), with patch sets to make them easier to&lt;br /&gt;
build from [http://go-ooo.org/packages/SRC680]&lt;br /&gt;
&lt;br /&gt;
The very latest ooo-build (a small ~1.5Mb build wrapper) can&lt;br /&gt;
be got from CVS thus:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.gnome.org/svn/ooo-build/trunk ooo-build&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Note:&amp;lt;/strong&amp;gt; You are going to need to download&lt;br /&gt;
an additional ~150Mb of compressed source, and have ~3Gb&lt;br /&gt;
of space to unpack and build it in.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
*[[Building]]&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; |&lt;br /&gt;
{{Getting_It|Languages}}&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=22954</id>
		<title>Buildbot Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=22954"/>
		<updated>2007-01-05T23:46:57Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Email botmaster admin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come join the collective! Bots for new platforms or adding bots for for existing platforms will increase the build capabilities available, and are therefore much appreciated. &lt;br /&gt;
&lt;br /&gt;
What you need is a reasonably fast machine, with decent RAM and disk, and of course an Internet connection. It might be easier to first set up the openoffice build environment on this machine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Buildbot Requirements == &lt;br /&gt;
The Buildbot requires: &lt;br /&gt;
* Python 2.3 or later: http://www.python.org &lt;br /&gt;
* Twisted: http://twistedmatrix.com - most recent version is recommended. You&amp;#039;ll need at least &amp;quot;Twisted&amp;quot; (the core package), and you&amp;#039;ll also want TwistedMail, TwistedWeb, and TwistedWords. &lt;br /&gt;
** Note: For Twisted, you first need to install Zope. &lt;br /&gt;
&lt;br /&gt;
== Getting the OpenOffice Buildbot == &lt;br /&gt;
The Buildbot has been customized for Openoffice.org builds. Please checkout buildbot-0.7.3 from [http://cvs.gnome.org/viewcvs/ooo-build/buildbot/ Gnome CVS].  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/buildbot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Buildbot == &lt;br /&gt;
* Note: &lt;br /&gt;
** Detailed instuctions are at http://buildbot.sourceforge.net/manual-0.7.3.html#Requirements&lt;br /&gt;
** The install may need to be to run as root (su). &lt;br /&gt;
After all requirements are met, install buildbot by running following commands in buildbot directory. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python setup.py build&lt;br /&gt;
python setup.py install                                                                    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Test installation is proper by running the command &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;buildbot --version&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install is OK if you see the version information for Buildbot and Twisted.&lt;br /&gt;
* Errors such as &amp;#039;no such command&amp;#039; or &amp;quot;ImportError&amp;quot; means something went wrong.&lt;br /&gt;
* Note: For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Installing-the-code&lt;br /&gt;
&lt;br /&gt;
== Setting up the Buildbot ==  &lt;br /&gt;
Make a buildbot directory on the machine at an appropriate place.&lt;br /&gt;
* The full path name for this directory is hereinafter referred to as &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir buildbot_ooo&amp;lt;/pre&amp;gt;   &lt;br /&gt;
Run the buildbot command to create a build slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot slave &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; buildbot.go-oo.org:9989 &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where&lt;br /&gt;
* Choose a &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; and &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; and report them to botmaster administrator&lt;br /&gt;
* For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildslave&lt;br /&gt;
* For additional creation options see http://buildbot.sourceforge.net/manual-0.7.3.html#Buildslave-Options&lt;br /&gt;
&lt;br /&gt;
Fill in the hostinfo files&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/admin should contain your name and email address. This is the &amp;#039;&amp;#039;&amp;#039;buildslave admin address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/host should be filled with a brief description of the host. For example: OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the version of the buildbot code which is running on the machine. &lt;br /&gt;
&lt;br /&gt;
Checkout some OO build specific scripts from http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/slave/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/buildbot/slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will see the following files: &lt;br /&gt;
* buildbotget.pl - perl script for checking out OO source code from CVS&lt;br /&gt;
* buildoo - script to start OO build process. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
* smoketestoo - script to start OO smoke test after successful compliation. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
Please copy these files to &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Email botmaster admin == &lt;br /&gt;
Once all the above steps are done, please email botmaster administrators: &lt;br /&gt;
* mikeleib at openoffice.org&lt;br /&gt;
&lt;br /&gt;
With the following information.&lt;br /&gt;
* &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;amp; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; : This is the same that you used while creating buildslave.&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; (full path) e.g. /home/bbot/buildslave_ooo&lt;br /&gt;
* The configure command you are using for configuring OO on this build platform. e.g. ./configure --with-system-freetype&lt;br /&gt;
&lt;br /&gt;
The botmaster administrator will then add your buildbot to the OpenOffice.org buildfarm. Your buildbot will then start carrying out OpenOffice.org builds in response to botmaster commands and will be listed on the status page at http://buildbot.go-oo.org&lt;br /&gt;
&lt;br /&gt;
== Start the buildslave ==&lt;br /&gt;
Once buildmaster administrator configures your new buildslave, he will contact you about status.&lt;br /&gt;
Once everything is OK then you can start your buildslave by running following command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot start &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To stop buildslave anytime, please run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot stop &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=22953</id>
		<title>Buildbot Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=22953"/>
		<updated>2007-01-05T23:46:29Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Email botmaster admin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come join the collective! Bots for new platforms or adding bots for for existing platforms will increase the build capabilities available, and are therefore much appreciated. &lt;br /&gt;
&lt;br /&gt;
What you need is a reasonably fast machine, with decent RAM and disk, and of course an Internet connection. It might be easier to first set up the openoffice build environment on this machine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Buildbot Requirements == &lt;br /&gt;
The Buildbot requires: &lt;br /&gt;
* Python 2.3 or later: http://www.python.org &lt;br /&gt;
* Twisted: http://twistedmatrix.com - most recent version is recommended. You&amp;#039;ll need at least &amp;quot;Twisted&amp;quot; (the core package), and you&amp;#039;ll also want TwistedMail, TwistedWeb, and TwistedWords. &lt;br /&gt;
** Note: For Twisted, you first need to install Zope. &lt;br /&gt;
&lt;br /&gt;
== Getting the OpenOffice Buildbot == &lt;br /&gt;
The Buildbot has been customized for Openoffice.org builds. Please checkout buildbot-0.7.3 from [http://cvs.gnome.org/viewcvs/ooo-build/buildbot/ Gnome CVS].  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/buildbot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Buildbot == &lt;br /&gt;
* Note: &lt;br /&gt;
** Detailed instuctions are at http://buildbot.sourceforge.net/manual-0.7.3.html#Requirements&lt;br /&gt;
** The install may need to be to run as root (su). &lt;br /&gt;
After all requirements are met, install buildbot by running following commands in buildbot directory. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python setup.py build&lt;br /&gt;
python setup.py install                                                                    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Test installation is proper by running the command &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;buildbot --version&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install is OK if you see the version information for Buildbot and Twisted.&lt;br /&gt;
* Errors such as &amp;#039;no such command&amp;#039; or &amp;quot;ImportError&amp;quot; means something went wrong.&lt;br /&gt;
* Note: For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Installing-the-code&lt;br /&gt;
&lt;br /&gt;
== Setting up the Buildbot ==  &lt;br /&gt;
Make a buildbot directory on the machine at an appropriate place.&lt;br /&gt;
* The full path name for this directory is hereinafter referred to as &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir buildbot_ooo&amp;lt;/pre&amp;gt;   &lt;br /&gt;
Run the buildbot command to create a build slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot slave &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; buildbot.go-oo.org:9989 &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where&lt;br /&gt;
* Choose a &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; and &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; and report them to botmaster administrator&lt;br /&gt;
* For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildslave&lt;br /&gt;
* For additional creation options see http://buildbot.sourceforge.net/manual-0.7.3.html#Buildslave-Options&lt;br /&gt;
&lt;br /&gt;
Fill in the hostinfo files&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/admin should contain your name and email address. This is the &amp;#039;&amp;#039;&amp;#039;buildslave admin address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/host should be filled with a brief description of the host. For example: OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the version of the buildbot code which is running on the machine. &lt;br /&gt;
&lt;br /&gt;
Checkout some OO build specific scripts from http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/slave/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/buildbot/slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will see the following files: &lt;br /&gt;
* buildbotget.pl - perl script for checking out OO source code from CVS&lt;br /&gt;
* buildoo - script to start OO build process. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
* smoketestoo - script to start OO smoke test after successful compliation. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
Please copy these files to &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Email botmaster admin == &lt;br /&gt;
Once all the above steps are done, please email botmaster administrators: &lt;br /&gt;
* mikeleib at openoffice.org&lt;br /&gt;
&lt;br /&gt;
With the following information.&lt;br /&gt;
* &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;amp; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; : This is the same that you used while creating buildslave.&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; (full path) e.g. /home/bbot/buildslave_ooo&lt;br /&gt;
* The configure command you are using for configuring OO on this build platform. e.g. ./configure --with-system-freetype&lt;br /&gt;
&lt;br /&gt;
The botmaster administrator will then add your buildbot to the OpenOffice.org buildfarm. Your buildbot will then start carrying out OpenOffice.org builds in response to botmaster commands and will be listed on the status page at http://ooo-staging.osuosl.org:8010&lt;br /&gt;
&lt;br /&gt;
== Start the buildslave ==&lt;br /&gt;
Once buildmaster administrator configures your new buildslave, he will contact you about status.&lt;br /&gt;
Once everything is OK then you can start your buildslave by running following command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot start &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To stop buildslave anytime, please run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot stop &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=22952</id>
		<title>Buildbot Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=22952"/>
		<updated>2007-01-05T23:46:04Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Setting up the Buildbot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come join the collective! Bots for new platforms or adding bots for for existing platforms will increase the build capabilities available, and are therefore much appreciated. &lt;br /&gt;
&lt;br /&gt;
What you need is a reasonably fast machine, with decent RAM and disk, and of course an Internet connection. It might be easier to first set up the openoffice build environment on this machine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Buildbot Requirements == &lt;br /&gt;
The Buildbot requires: &lt;br /&gt;
* Python 2.3 or later: http://www.python.org &lt;br /&gt;
* Twisted: http://twistedmatrix.com - most recent version is recommended. You&amp;#039;ll need at least &amp;quot;Twisted&amp;quot; (the core package), and you&amp;#039;ll also want TwistedMail, TwistedWeb, and TwistedWords. &lt;br /&gt;
** Note: For Twisted, you first need to install Zope. &lt;br /&gt;
&lt;br /&gt;
== Getting the OpenOffice Buildbot == &lt;br /&gt;
The Buildbot has been customized for Openoffice.org builds. Please checkout buildbot-0.7.3 from [http://cvs.gnome.org/viewcvs/ooo-build/buildbot/ Gnome CVS].  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/buildbot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Buildbot == &lt;br /&gt;
* Note: &lt;br /&gt;
** Detailed instuctions are at http://buildbot.sourceforge.net/manual-0.7.3.html#Requirements&lt;br /&gt;
** The install may need to be to run as root (su). &lt;br /&gt;
After all requirements are met, install buildbot by running following commands in buildbot directory. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python setup.py build&lt;br /&gt;
python setup.py install                                                                    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Test installation is proper by running the command &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;buildbot --version&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install is OK if you see the version information for Buildbot and Twisted.&lt;br /&gt;
* Errors such as &amp;#039;no such command&amp;#039; or &amp;quot;ImportError&amp;quot; means something went wrong.&lt;br /&gt;
* Note: For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Installing-the-code&lt;br /&gt;
&lt;br /&gt;
== Setting up the Buildbot ==  &lt;br /&gt;
Make a buildbot directory on the machine at an appropriate place.&lt;br /&gt;
* The full path name for this directory is hereinafter referred to as &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir buildbot_ooo&amp;lt;/pre&amp;gt;   &lt;br /&gt;
Run the buildbot command to create a build slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot slave &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; buildbot.go-oo.org:9989 &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where&lt;br /&gt;
* Choose a &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; and &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; and report them to botmaster administrator&lt;br /&gt;
* For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildslave&lt;br /&gt;
* For additional creation options see http://buildbot.sourceforge.net/manual-0.7.3.html#Buildslave-Options&lt;br /&gt;
&lt;br /&gt;
Fill in the hostinfo files&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/admin should contain your name and email address. This is the &amp;#039;&amp;#039;&amp;#039;buildslave admin address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/host should be filled with a brief description of the host. For example: OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the version of the buildbot code which is running on the machine. &lt;br /&gt;
&lt;br /&gt;
Checkout some OO build specific scripts from http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/slave/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/buildbot/slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will see the following files: &lt;br /&gt;
* buildbotget.pl - perl script for checking out OO source code from CVS&lt;br /&gt;
* buildoo - script to start OO build process. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
* smoketestoo - script to start OO smoke test after successful compliation. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
Please copy these files to &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Email botmaster admin == &lt;br /&gt;
Once all the above steps are done, please email botmaster administrators: &lt;br /&gt;
* mikeleib at openoffice.org&lt;br /&gt;
&lt;br /&gt;
With the following information.&lt;br /&gt;
* &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;amp; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; : This is the same that you used while creating buildslave.&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; (full path) e.g. /home/bbot/buildslave_ooostaging&lt;br /&gt;
* The configure command you are using for configuring OO on this build platform. e.g. ./configure --with-system-freetype&lt;br /&gt;
&lt;br /&gt;
The botmaster administrator will then add your buildbot to the OpenOffice.org buildfarm. Your buildbot will then start carrying out OpenOffice.org builds in response to botmaster commands and will be listed on the status page at http://ooo-staging.osuosl.org:8010&lt;br /&gt;
&lt;br /&gt;
== Start the buildslave ==&lt;br /&gt;
Once buildmaster administrator configures your new buildslave, he will contact you about status.&lt;br /&gt;
Once everything is OK then you can start your buildslave by running following command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot start &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To stop buildslave anytime, please run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot stop &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Integrated_Performance_Improvements&amp;diff=19296</id>
		<title>Integrated Performance Improvements</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Integrated_Performance_Improvements&amp;diff=19296"/>
		<updated>2006-10-23T18:41:43Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* add links to issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Integrated Performance Improvements ==&lt;br /&gt;
&lt;br /&gt;
FIXME: this page is new&lt;br /&gt;
&lt;br /&gt;
=== In 2.1 ===&lt;br /&gt;
* [http://qa.openoffice.org/issues/show_bug.cgi?id=54953 #54953 Accelerate PNG import]&lt;br /&gt;
* [http://www.openoffice.org/issues/show_bug.cgi?id=55170 #55170 Allow fast and nicer looking JPEG preview]&lt;br /&gt;
* [http://www.openoffice.org/issues/show_bug.cgi?id=55174 #55174 Allow fast PNG preview]&lt;br /&gt;
* [http://qa.openoffice.org/issues/show_bug.cgi?id=67234 #67234 png export: limit the chunk size]&lt;br /&gt;
* [http://www.openoffice.org/issues/show_bug.cgi?id=67237 #67237 jpeg export: use &amp;quot;jpeg progressive mode&amp;quot; for big images]&lt;br /&gt;
* [http://www.openoffice.org/issues/show_bug.cgi?id=68520 #68520 Improve performance on text formatting, if a lot of objects (&amp;gt;50) have to be considered for text wrapping]&lt;br /&gt;
* [http://www.openoffice.org/issues/show_bug.cgi?id=69915 #69915 Performance: Increase pack velocity ..]&lt;br /&gt;
&lt;br /&gt;
=== In 2.0.4 ===&lt;br /&gt;
* [http://qa.openoffice.org/issues/show_bug.cgi?id=66688 #66688 performance problem when loading many customshapes from the OpenDocument format]&lt;br /&gt;
&lt;br /&gt;
=== In 2.0.3 ===&lt;br /&gt;
&lt;br /&gt;
=== In 2.0.2 ===&lt;br /&gt;
&lt;br /&gt;
=== In 2.0.1 ===&lt;br /&gt;
&lt;br /&gt;
=== In 2.0.0 ===&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot&amp;diff=18434</id>
		<title>Buildbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot&amp;diff=18434"/>
		<updated>2006-10-12T05:52:32Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Features */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A buildbot is now deployed for OpenOffice.org. &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;http://ooo-staging.osuosl.org:8010/&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
From the Buildbot README: http://buildbot.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
Please see how you can &amp;#039;&amp;#039;&amp;#039;[[Buildbot Steps | add your own buildbot]]!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
The BuildBot is a system to automate the compile/test cycle required by most software projects to validate code changes. By automatically rebuilding and testing the tree each time something has changed, build problems are pinpointed quickly, before other developers are inconvenienced by the failure. The guilty developer can be identified and harassed without human intervention. By running the builds on a variety of platforms, developers who do not have the facilities to test their changes everywhere before checkin will at least know shortly afterwards whether they have broken the build or not. Warning counts, lint checks, image size, compile time, and other build parameters can be tracked over time, are more visible, and are therefore easier to improve.&lt;br /&gt;
&lt;br /&gt;
== OpenOffice.org Buildbot == &lt;br /&gt;
The Buildbot will: &lt;br /&gt;
* Build CWS/SVN branches on multiple platforms and make output available to developers&lt;br /&gt;
* Generate and make available install sets for multiple platforms&lt;br /&gt;
* Run tests (smoketest, performance tests, etc.) and make test reports available for tracking and regression. &lt;br /&gt;
&lt;br /&gt;
== Buildbot vs. Tinderbox == &lt;br /&gt;
Currently, there is a [[Tinderbox]]. In fact, the Buildbot uses or adapts several Tinderbox scripts. The Buildbot provides several advantages: &lt;br /&gt;
* At-a-glance, customizable statusboard &lt;br /&gt;
* Flexible, modular, extensible framework &lt;br /&gt;
* Bots can be commanded and coordinated from the botmaster &lt;br /&gt;
&lt;br /&gt;
Both Buildbots and Tinderboxes are easy to setup and can be behind the firewall. Thanks to [[User:Cloph|Cloph]] for reminding about the similarities.&lt;br /&gt;
&lt;br /&gt;
== Deployment &amp;amp; Hardware == &lt;br /&gt;
Currently, the botmaster and several buildbots are hosted at OSU-OSL (http://osuosl.org). Additional machines will be added to the pool. Sun QA/RE plans to host a Solaris bot. &lt;br /&gt;
&lt;br /&gt;
=== Allocation === &lt;br /&gt;
Many buildbot based projects dedicate groups of bots to specific code branches. Thus, for example, checkins to HEAD will automatically trigger the associated pool of machines and the changes built, tested on multiple platforms. See for example: http://www.python.org/dev/buildbot/&lt;br /&gt;
&lt;br /&gt;
However, this is impractical for OpenOffice.org due the numericity of branches (CWS&amp;#039;es). Instead, we focus on creating a reasonable sized pool of machines for each platform/variant, with flexible build policies (see below).&lt;br /&gt;
&lt;br /&gt;
Currently, bots build for: &lt;br /&gt;
* debian&lt;br /&gt;
* suse 10.0&lt;br /&gt;
* suse 10.1 (jre and gij) &lt;br /&gt;
* suse 7.3 (several)&lt;br /&gt;
* windows xp (3+) &lt;br /&gt;
&lt;br /&gt;
== Policies == &lt;br /&gt;
The botmaster will schedule builds based on policies that take into account the pool size, machine status and build time. When a bot is busy doing a build, additional requests are automatically queued. &lt;br /&gt;
&lt;br /&gt;
* At UTC 0200 + random() build HEAD&lt;br /&gt;
* At milestone release build milestone &lt;br /&gt;
* Build manually requested CWS or milestone&lt;br /&gt;
* Build automatically selected CWS&lt;br /&gt;
&lt;br /&gt;
== Features == &lt;br /&gt;
* When no CWS is provided --&amp;gt; checkout HEAD  - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Summaries  - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** tail, warnings, errors, summary log like tinderbox&lt;br /&gt;
** error - show before/after buffer (15, 5) and skip ... between errors&lt;br /&gt;
* Deploy install-sets on bot-master - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Increase length of status page.  - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Email notification of build result (fail, success, install, etc. with link to buildlogs)&lt;br /&gt;
** Send mail to requestor@openoffice.org when finished. (add a hint on the request form) - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
** For CWS - send to CWS owner (from EIS)&lt;br /&gt;
* Fix smoke-test on some hosts  &lt;br /&gt;
* CWS-Oriented View - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
** Add header X axis (timeline)  &lt;br /&gt;
** Three different views - all, ready for QA, new&lt;br /&gt;
* Buildslave info on slave web page&lt;br /&gt;
* Scheduler to prioritize and distribute builds on various slaves&lt;br /&gt;
** Collect changes by one user (settling) in one build&lt;br /&gt;
** AllCVS mailing list listener to auto trigger build on commit notification&lt;br /&gt;
* Header Row - provide number/link to last build (related to status) &lt;br /&gt;
* Extra config switches field in force build form. Developers can specify some extra configure switches specific to there CWSs. - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Add suse 7.3 buildslave&lt;br /&gt;
* Generate buildbot results as RSS feed for planetizing &lt;br /&gt;
* For windows slaves, provide link to html build status page&lt;br /&gt;
* UserId/Password verification for force build and stop buid&lt;br /&gt;
&lt;br /&gt;
== People == &lt;br /&gt;
* Prasad Madhav (pmadhav) deployed and customizes the buildbot &lt;br /&gt;
* mikeleib, kaib, vq, dkeskar support and provide ideas&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Talk:O3-build&amp;diff=17945</id>
		<title>Talk:O3-build</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Talk:O3-build&amp;diff=17945"/>
		<updated>2006-10-04T19:44:46Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What is this?  No links to/from anywhere and no context.&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=16347</id>
		<title>Buildbot Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=16347"/>
		<updated>2006-09-05T17:36:40Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Email botmaster admin */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come join the collective! Bots for new platforms or adding bots for for existing platforms will increase the build capabilities available, and are therefore much appreciated. &lt;br /&gt;
&lt;br /&gt;
What you need is a reasonably fast machine, with decent RAM and disk, and of course an Internet connection. It might be easier to first set up the openoffice build environment on this machine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Buildbot Requirements == &lt;br /&gt;
The Buildbot requires: &lt;br /&gt;
* Python 2.3 or later: http://www.python.org &lt;br /&gt;
* Twisted: http://twistedmatrix.com - most recent version is recommended. You&amp;#039;ll need at least &amp;quot;Twisted&amp;quot; (the core package), and you&amp;#039;ll also want TwistedMail, TwistedWeb, and TwistedWords. &lt;br /&gt;
** Note: For Twisted, you first need to install Zope. &lt;br /&gt;
&lt;br /&gt;
== Getting the OpenOffice Buildbot == &lt;br /&gt;
The Buildbot has been customized for Openoffice.org builds. Please checkout buildbot-0.7.3 from [http://cvs.gnome.org/viewcvs/ooo-build/buildbot/ Gnome CVS].  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/buildbot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Buildbot == &lt;br /&gt;
* Note: &lt;br /&gt;
** Detailed instuctions are at http://buildbot.sourceforge.net/manual-0.7.3.html#Requirements&lt;br /&gt;
** The install may need to be to run as root (su). &lt;br /&gt;
After all requirements are met, install buildbot by running following commands in buildbot directory. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python setup.py build&lt;br /&gt;
python setup.py install                                                                    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Test installation is proper by running the command &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;buildbot --version&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install is OK if you see the version information for Buildbot and Twisted.&lt;br /&gt;
* Errors such as &amp;#039;no such command&amp;#039; or &amp;quot;ImportError&amp;quot; means something went wrong.&lt;br /&gt;
* Note: For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Installing-the-code&lt;br /&gt;
&lt;br /&gt;
== Setting up the Buildbot ==  &lt;br /&gt;
Make a buildbot directory on the machine at an appropriate place.&lt;br /&gt;
* The full path name for this directory is hereinafter referred to as &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir buildbot_ooo&amp;lt;/pre&amp;gt;   &lt;br /&gt;
Run the buildbot command to create a build slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot slave &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; ooo-staging.osuosl.org:9989 &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where&lt;br /&gt;
* Choose a &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; and &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; and report them to botmaster administrator&lt;br /&gt;
* For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildslave&lt;br /&gt;
* For additional creation options see http://buildbot.sourceforge.net/manual-0.7.3.html#Buildslave-Options&lt;br /&gt;
&lt;br /&gt;
Fill in the hostinfo files&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/admin should contain your name and email address. This is the &amp;#039;&amp;#039;&amp;#039;buildslave admin address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/host should be filled with a brief description of the host. For example: OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the version of the buildbot code which is running on the machine. &lt;br /&gt;
&lt;br /&gt;
Checkout some OO build specific scripts from http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/slave/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/buildbot/slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will see the following files: &lt;br /&gt;
* buildbotget.pl - perl script for checking out OO source code from CVS&lt;br /&gt;
* buildoo - script to start OO build process. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
* smoketestoo - script to start OO smoke test after successful compliation. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
Please copy these files to &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Email botmaster admin == &lt;br /&gt;
Once all the above steps are done, please email botmaster administrators: &lt;br /&gt;
* mikeleib at openoffice.org&lt;br /&gt;
&lt;br /&gt;
With the following information.&lt;br /&gt;
* &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;amp; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; : This is the same that you used while creating buildslave.&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; (full path) e.g. /home/bbot/buildslave_ooostaging&lt;br /&gt;
* The configure command you are using for configuring OO on this build platform. e.g. ./configure --with-system-freetype&lt;br /&gt;
&lt;br /&gt;
The botmaster administrator will then add your buildbot to the OpenOffice.org buildfarm. Your buildbot will then start carrying out OpenOffice.org builds in response to botmaster commands and will be listed on the status page at http://ooo-staging.osuosl.org:8010&lt;br /&gt;
&lt;br /&gt;
== Start the buildslave ==&lt;br /&gt;
Once buildmaster administrator configures your new buildslave, he will contact you about status.&lt;br /&gt;
Once everything is OK then you can start your buildslave by running following command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot start &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To stop buildslave anytime, please run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot stop &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=16346</id>
		<title>Buildbot Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=16346"/>
		<updated>2006-09-05T17:33:30Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Getting the OpenOffice Buildbot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come join the collective! Bots for new platforms or adding bots for for existing platforms will increase the build capabilities available, and are therefore much appreciated. &lt;br /&gt;
&lt;br /&gt;
What you need is a reasonably fast machine, with decent RAM and disk, and of course an Internet connection. It might be easier to first set up the openoffice build environment on this machine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Buildbot Requirements == &lt;br /&gt;
The Buildbot requires: &lt;br /&gt;
* Python 2.3 or later: http://www.python.org &lt;br /&gt;
* Twisted: http://twistedmatrix.com - most recent version is recommended. You&amp;#039;ll need at least &amp;quot;Twisted&amp;quot; (the core package), and you&amp;#039;ll also want TwistedMail, TwistedWeb, and TwistedWords. &lt;br /&gt;
** Note: For Twisted, you first need to install Zope. &lt;br /&gt;
&lt;br /&gt;
== Getting the OpenOffice Buildbot == &lt;br /&gt;
The Buildbot has been customized for Openoffice.org builds. Please checkout buildbot-0.7.3 from [http://cvs.gnome.org/viewcvs/ooo-build/buildbot/ Gnome CVS].  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/buildbot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Buildbot == &lt;br /&gt;
* Note: &lt;br /&gt;
** Detailed instuctions are at http://buildbot.sourceforge.net/manual-0.7.3.html#Requirements&lt;br /&gt;
** The install may need to be to run as root (su). &lt;br /&gt;
After all requirements are met, install buildbot by running following commands in buildbot directory. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python setup.py build&lt;br /&gt;
python setup.py install                                                                    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Test installation is proper by running the command &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;buildbot --version&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install is OK if you see the version information for Buildbot and Twisted.&lt;br /&gt;
* Errors such as &amp;#039;no such command&amp;#039; or &amp;quot;ImportError&amp;quot; means something went wrong.&lt;br /&gt;
* Note: For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Installing-the-code&lt;br /&gt;
&lt;br /&gt;
== Setting up the Buildbot ==  &lt;br /&gt;
Make a buildbot directory on the machine at an appropriate place.&lt;br /&gt;
* The full path name for this directory is hereinafter referred to as &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir buildbot_ooo&amp;lt;/pre&amp;gt;   &lt;br /&gt;
Run the buildbot command to create a build slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot slave &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; ooo-staging.osuosl.org:9989 &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where&lt;br /&gt;
* Choose a &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; and &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; and report them to botmaster administrator&lt;br /&gt;
* For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildslave&lt;br /&gt;
* For additional creation options see http://buildbot.sourceforge.net/manual-0.7.3.html#Buildslave-Options&lt;br /&gt;
&lt;br /&gt;
Fill in the hostinfo files&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/admin should contain your name and email address. This is the &amp;#039;&amp;#039;&amp;#039;buildslave admin address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/host should be filled with a brief description of the host. For example: OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the version of the buildbot code which is running on the machine. &lt;br /&gt;
&lt;br /&gt;
Checkout some OO build specific scripts from http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/slave/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/buildbot/slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will see the following files: &lt;br /&gt;
* buildbotget.pl - perl script for checking out OO source code from CVS&lt;br /&gt;
* buildoo - script to start OO build process. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
* smoketestoo - script to start OO smoke test after successful compliation. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
Please copy these files to &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Email botmaster admin == &lt;br /&gt;
Once all the above steps are done, please email botmaster administrators: &lt;br /&gt;
* pmadhav at openoffice.org &lt;br /&gt;
* mikeleib at openoffice.org&lt;br /&gt;
&lt;br /&gt;
With the following information.&lt;br /&gt;
* &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;amp; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; : This is the same that you used while creating buildslave.&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; (full path) e.g. /home/bbot/buildslave_ooostaging&lt;br /&gt;
* The configure command you are using for configuring OO on this build platform. e.g. ./configure --with-system-freetype&lt;br /&gt;
&lt;br /&gt;
The botmaster administrator will then add your buildbot to the OpenOffice.org buildfarm. Your buildbot will then start carrying out OpenOffice.org builds in response to botmaster commands and will be listed on the status page at http://ooo-staging.osuosl.org:8010&lt;br /&gt;
&lt;br /&gt;
== Start the buildslave ==&lt;br /&gt;
Once buildmaster administrator configures your new buildslave, he will contact you about status.&lt;br /&gt;
Once everything is OK then you can start your buildslave by running following command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot start &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To stop buildslave anytime, please run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot stop &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=16345</id>
		<title>Buildbot Steps</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot_Steps&amp;diff=16345"/>
		<updated>2006-09-05T17:32:52Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Getting the OpenOffice Buildbot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Come join the collective! Bots for new platforms or adding bots for for existing platforms will increase the build capabilities available, and are therefore much appreciated. &lt;br /&gt;
&lt;br /&gt;
What you need is a reasonably fast machine, with decent RAM and disk, and of course an Internet connection. It might be easier to first set up the openoffice build environment on this machine. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Buildbot Requirements == &lt;br /&gt;
The Buildbot requires: &lt;br /&gt;
* Python 2.3 or later: http://www.python.org &lt;br /&gt;
* Twisted: http://twistedmatrix.com - most recent version is recommended. You&amp;#039;ll need at least &amp;quot;Twisted&amp;quot; (the core package), and you&amp;#039;ll also want TwistedMail, TwistedWeb, and TwistedWords. &lt;br /&gt;
** Note: For Twisted, you first need to install Zope. &lt;br /&gt;
&lt;br /&gt;
== Getting the OpenOffice Buildbot == &lt;br /&gt;
The Buildbot has been customized for Openoffice.org builds. Please checkout buildbot-0.7.3 from [http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/ Gnome CVS].  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/buildbot&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the Buildbot == &lt;br /&gt;
* Note: &lt;br /&gt;
** Detailed instuctions are at http://buildbot.sourceforge.net/manual-0.7.3.html#Requirements&lt;br /&gt;
** The install may need to be to run as root (su). &lt;br /&gt;
After all requirements are met, install buildbot by running following commands in buildbot directory. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python setup.py build&lt;br /&gt;
python setup.py install                                                                    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Test installation is proper by running the command &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;buildbot --version&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install is OK if you see the version information for Buildbot and Twisted.&lt;br /&gt;
* Errors such as &amp;#039;no such command&amp;#039; or &amp;quot;ImportError&amp;quot; means something went wrong.&lt;br /&gt;
* Note: For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Installing-the-code&lt;br /&gt;
&lt;br /&gt;
== Setting up the Buildbot ==  &lt;br /&gt;
Make a buildbot directory on the machine at an appropriate place.&lt;br /&gt;
* The full path name for this directory is hereinafter referred to as &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;pre&amp;gt;mkdir buildbot_ooo&amp;lt;/pre&amp;gt;   &lt;br /&gt;
Run the buildbot command to create a build slave:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot slave &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; ooo-staging.osuosl.org:9989 &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
where&lt;br /&gt;
* Choose a &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; and &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; and report them to botmaster administrator&lt;br /&gt;
* For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildslave&lt;br /&gt;
* For additional creation options see http://buildbot.sourceforge.net/manual-0.7.3.html#Buildslave-Options&lt;br /&gt;
&lt;br /&gt;
Fill in the hostinfo files&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/admin should contain your name and email address. This is the &amp;#039;&amp;#039;&amp;#039;buildslave admin address&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/host should be filled with a brief description of the host. For example: OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the version of the buildbot code which is running on the machine. &lt;br /&gt;
&lt;br /&gt;
Checkout some OO build specific scripts from http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/slave/&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
no password&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/buildbot/slave&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You will see the following files: &lt;br /&gt;
* buildbotget.pl - perl script for checking out OO source code from CVS&lt;br /&gt;
* buildoo - script to start OO build process. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
* smoketestoo - script to start OO smoke test after successful compliation. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
Please copy these files to &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Email botmaster admin == &lt;br /&gt;
Once all the above steps are done, please email botmaster administrators: &lt;br /&gt;
* pmadhav at openoffice.org &lt;br /&gt;
* mikeleib at openoffice.org&lt;br /&gt;
&lt;br /&gt;
With the following information.&lt;br /&gt;
* &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;amp; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; : This is the same that you used while creating buildslave.&lt;br /&gt;
* &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; (full path) e.g. /home/bbot/buildslave_ooostaging&lt;br /&gt;
* The configure command you are using for configuring OO on this build platform. e.g. ./configure --with-system-freetype&lt;br /&gt;
&lt;br /&gt;
The botmaster administrator will then add your buildbot to the OpenOffice.org buildfarm. Your buildbot will then start carrying out OpenOffice.org builds in response to botmaster commands and will be listed on the status page at http://ooo-staging.osuosl.org:8010&lt;br /&gt;
&lt;br /&gt;
== Start the buildslave ==&lt;br /&gt;
Once buildmaster administrator configures your new buildslave, he will contact you about status.&lt;br /&gt;
Once everything is OK then you can start your buildslave by running following command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot start &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To stop buildslave anytime, please run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
buildbot stop &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot&amp;diff=15155</id>
		<title>Buildbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot&amp;diff=15155"/>
		<updated>2006-08-10T23:21:16Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: fix cvs co command&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A buildbot is now deployed for OpenOffice.org. &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;http://ooo-staging.osuosl.org:8010/&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
From the Buildbot README: http://buildbot.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
The BuildBot is a system to automate the compile/test cycle required by most software projects to validate code changes. By automatically rebuilding and testing the tree each time something has changed, build problems are pinpointed quickly, before other developers are inconvenienced by the failure. The guilty developer can be identified and harassed without human intervention. By running the builds on a variety of platforms, developers who do not have the facilities to test their changes everywhere before checkin will at least know shortly afterwards whether they have broken the build or not. Warning counts, lint checks, image size, compile time, and other build parameters can be tracked over time, are more visible, and are therefore easier to improve.&lt;br /&gt;
&lt;br /&gt;
== OpenOffice.org Buildbot == &lt;br /&gt;
The Buildbot will: &lt;br /&gt;
* Build CWS/SVN branches on multiple platforms and make output available to developers&lt;br /&gt;
* Generate and make available install sets for multiple platforms&lt;br /&gt;
* Run tests (smoketest, performance tests, etc.) and make test reports available for tracking and regression. &lt;br /&gt;
&lt;br /&gt;
== Buildbot vs. Tinderbox == &lt;br /&gt;
Currently, there is a [[Tinderbox]]. In fact, the Buildbot uses or adapts several Tinderbox scripts. The Buildbot provides several advantages: &lt;br /&gt;
* At-a-glance, customizable statusboard &lt;br /&gt;
* Flexible, modular, extensible framework &lt;br /&gt;
* Bots can be commanded and coordinated from the botmaster &lt;br /&gt;
&lt;br /&gt;
Both Buildbots and Tinderboxes are easy to setup and can be behind the firewall. Thanks to [[User:Cloph|Cloph]] for reminding about the similarities.&lt;br /&gt;
&lt;br /&gt;
== Deployment &amp;amp; Hardware == &lt;br /&gt;
Currently, the botmaster and several buildbots are hosted at OSU-OSL (http://osuosl.org). Additional machines will be added to the pool. Sun QA/RE plans to host a Solaris bot. &lt;br /&gt;
&lt;br /&gt;
=== Allocation === &lt;br /&gt;
Many buildbot based projects dedicate groups of bots to specific code branches. Thus, for example, checkins to HEAD will automatically trigger the associated pool of machines and the changes built, tested on multiple platforms. See for example: http://www.python.org/dev/buildbot/&lt;br /&gt;
&lt;br /&gt;
However, this is impractical for OpenOffice.org due the numericity of branches (CWS&amp;#039;es). Instead, we focus on creating a reasonable sized pool of machines for each platform/variant, with flexible build policies (see below).&lt;br /&gt;
&lt;br /&gt;
Currently, bots build for: &lt;br /&gt;
* debian&lt;br /&gt;
* suse 10.0&lt;br /&gt;
* suse 10.1 (jre and gij) &lt;br /&gt;
* suse 7.3 (several)&lt;br /&gt;
* windows xp (3+) &lt;br /&gt;
&lt;br /&gt;
== Policies == &lt;br /&gt;
The botmaster will schedule builds based on policies that take into account the pool size, machine status and build time. When a bot is busy doing a build, additional requests are automatically queued. &lt;br /&gt;
&lt;br /&gt;
* At UTC 0200 + random() build HEAD&lt;br /&gt;
* At milestone release build milestone &lt;br /&gt;
* Build manually requested CWS or milestone&lt;br /&gt;
* Build automatically selected CWS&lt;br /&gt;
&lt;br /&gt;
== Features == &lt;br /&gt;
* When no CWS is provided --&amp;gt; checkout HEAD  - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Summaries&lt;br /&gt;
** tail, warnings, errors, summary log like tinderbox&lt;br /&gt;
** error - show before/after buffer (15, 5) and skip ... between errors&lt;br /&gt;
* Deploy install-sets on bot-master&lt;br /&gt;
* Increase length of status page.&lt;br /&gt;
* Email notification of build result (fail, success, install, etc. with link to buildlogs)&lt;br /&gt;
** Send mail to requestor@openoffice.org when finished. (add a hint on the request form) &lt;br /&gt;
** For CWS - send to CWS owner (from EIS)&lt;br /&gt;
* Show smoke-test results in status -- currently smoketest fails on Linux. &lt;br /&gt;
* CWS-Oriented View &lt;br /&gt;
** Add header X axis (timeline) &lt;br /&gt;
** Three different views - all, ready for QA, new&lt;br /&gt;
* Buildslave info on slave web page&lt;br /&gt;
* Scheduler to prioritize and distribute builds on various slaves&lt;br /&gt;
** Collect changes by one user (settling) in one build&lt;br /&gt;
** AllCVS mailing list listener to auto trigger build on commit notification&lt;br /&gt;
* Header Row - provide number/link to last build (related to status) &lt;br /&gt;
* Extra config switches field in force build form. Developers can specify some extra configure switches specific to there CWSs. - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Add suse 7.3 buildslave&lt;br /&gt;
* Generate buildbot results as RSS feed for planetizing &lt;br /&gt;
* For windows slaves, provide link to html build status page&lt;br /&gt;
* UserId/Password verification for force build and stop buid&lt;br /&gt;
&lt;br /&gt;
== Steps to add a new buildbot ==&lt;br /&gt;
Come join the collective! Bots for new platforms or adding bots for for existing platforms will increase the build capabilities available, and are therefore much appreciated. &lt;br /&gt;
&lt;br /&gt;
What you need is a reasonably fast machine, with decent RAM and disk, and of course an Internet connection. It might be easier to first set up the openoffice build environmnet on this machine. &lt;br /&gt;
&lt;br /&gt;
The Buildbot requires: &lt;br /&gt;
* Python 2.3 or later: http://www.python.org &lt;br /&gt;
* Twisted: http://twistedmatrix.com - most recent version is recommended. You&amp;#039;ll need at least &amp;quot;Twisted&amp;quot; (the core package), and you&amp;#039;ll also want TwistedMail, TwistedWeb, and TwistedWords. &lt;br /&gt;
** Note: For Twisted, you first need to install Zope. &lt;br /&gt;
* The Buildbot has been customized for Openoffice.org builds. Please checkout buildbot-0.7.3 from [http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/ Gnome CVS].  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/configdbbe/buildbot-0.7.3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing the Buildbot: &lt;br /&gt;
* Note: Detailed instuctions are at http://buildbot.sourceforge.net/manual-0.7.3.html#Requirements&lt;br /&gt;
* After all requirements are met, install buildbot by running following commands in buildbot directory. &lt;br /&gt;
* The install may need to be to run as root (su). &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python setup.py build&lt;br /&gt;
python setup.py install                                                                    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test installation is proper by running the command &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;buildbot --version&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Install is OK if you see the version information for Buildbot and Twisted.&lt;br /&gt;
** Errors such as &amp;#039;no such command&amp;#039; or &amp;quot;ImportError&amp;quot; means something went wrong.&lt;br /&gt;
** Note: For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Installing-the-code&lt;br /&gt;
&lt;br /&gt;
Setting up the Buildbot: &lt;br /&gt;
* mkdir &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;   &lt;br /&gt;
** Note : preferable name of &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; : buildslave_ooostaging&lt;br /&gt;
* create a buildslave by running command:&lt;br /&gt;
  buildbot slave &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; &amp;#039;&amp;#039;MASTERHOST&amp;#039;&amp;#039;:&amp;#039;&amp;#039;PORT&amp;#039;&amp;#039; &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039;&lt;br /&gt;
** where, MASTERHOST = ooo-staging.osuosl.org and PORT = 9989&lt;br /&gt;
** Note : You need to report &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; and &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; to buildmaster administrator&lt;br /&gt;
** Note: For more detailed instuctions see [http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildslave]&lt;br /&gt;
** You can specify certain options while creating buildslave. see [http://buildbot.sourceforge.net/manual-0.7.3.html#Buildslave-Options]&lt;br /&gt;
&lt;br /&gt;
* Fill in the hostinfo files&lt;br /&gt;
** &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/admin should contain your name and email address. This is the “buildslave admin address”&lt;br /&gt;
** &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/host should be filled with a brief description of the host: OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the version of the buildbot code which is running the buildslave. &lt;br /&gt;
* Checkout some OO buildslave specific scripts from [http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/slave/]&lt;br /&gt;
** buildbotget.pl - perl script for checking out OO source code from CVS&lt;br /&gt;
** buildoo - script to start OO build process. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
** smoketestoo - script to start OO smoke test after successful compliation. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
* Once all the above steps are done, You need to email buildmaster administrator following stuff:&lt;br /&gt;
** &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;amp; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; : This is the same that you used while creating buildslave.&lt;br /&gt;
** Full path of the &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; e.g. /home/bbot/buildslave_ooostaging&lt;br /&gt;
** platform specific configure command used for configuring OO. &lt;br /&gt;
   e.g. ./configure --with-system-freetype&lt;br /&gt;
* Once buildmaster administrator receives this above information, he will add your buildslave to buildfarm and then your slave will become OOBuildSlave and will be listed on buildmaster status page [http://ooo-staging.osuosl.org:8010]&lt;br /&gt;
&lt;br /&gt;
== People == &lt;br /&gt;
* Prasad Madhav (pmadhav) deployed and customizes the buildbot &lt;br /&gt;
* mikeleib, kaib, vq, dkeskar support and provide ideas&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Buildbot&amp;diff=15154</id>
		<title>Buildbot</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Buildbot&amp;diff=15154"/>
		<updated>2006-08-10T23:11:48Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: gnome-cvs root&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A buildbot is now deployed for OpenOffice.org. &lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;http://ooo-staging.osuosl.org:8010/&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
From the Buildbot README: http://buildbot.sourceforge.net/&lt;br /&gt;
&lt;br /&gt;
The BuildBot is a system to automate the compile/test cycle required by most software projects to validate code changes. By automatically rebuilding and testing the tree each time something has changed, build problems are pinpointed quickly, before other developers are inconvenienced by the failure. The guilty developer can be identified and harassed without human intervention. By running the builds on a variety of platforms, developers who do not have the facilities to test their changes everywhere before checkin will at least know shortly afterwards whether they have broken the build or not. Warning counts, lint checks, image size, compile time, and other build parameters can be tracked over time, are more visible, and are therefore easier to improve.&lt;br /&gt;
&lt;br /&gt;
== OpenOffice.org Buildbot == &lt;br /&gt;
The Buildbot will: &lt;br /&gt;
* Build CWS/SVN branches on multiple platforms and make output available to developers&lt;br /&gt;
* Generate and make available install sets for multiple platforms&lt;br /&gt;
* Run tests (smoketest, performance tests, etc.) and make test reports available for tracking and regression. &lt;br /&gt;
&lt;br /&gt;
== Buildbot vs. Tinderbox == &lt;br /&gt;
Currently, there is a [[Tinderbox]]. In fact, the Buildbot uses or adapts several Tinderbox scripts. The Buildbot provides several advantages: &lt;br /&gt;
* At-a-glance, customizable statusboard &lt;br /&gt;
* Flexible, modular, extensible framework &lt;br /&gt;
* Bots can be commanded and coordinated from the botmaster &lt;br /&gt;
&lt;br /&gt;
Both Buildbots and Tinderboxes are easy to setup and can be behind the firewall. Thanks to [[User:Cloph|Cloph]] for reminding about the similarities.&lt;br /&gt;
&lt;br /&gt;
== Deployment &amp;amp; Hardware == &lt;br /&gt;
Currently, the botmaster and several buildbots are hosted at OSU-OSL (http://osuosl.org). Additional machines will be added to the pool. Sun QA/RE plans to host a Solaris bot. &lt;br /&gt;
&lt;br /&gt;
=== Allocation === &lt;br /&gt;
Many buildbot based projects dedicate groups of bots to specific code branches. Thus, for example, checkins to HEAD will automatically trigger the associated pool of machines and the changes built, tested on multiple platforms. See for example: http://www.python.org/dev/buildbot/&lt;br /&gt;
&lt;br /&gt;
However, this is impractical for OpenOffice.org due the numericity of branches (CWS&amp;#039;es). Instead, we focus on creating a reasonable sized pool of machines for each platform/variant, with flexible build policies (see below).&lt;br /&gt;
&lt;br /&gt;
Currently, bots build for: &lt;br /&gt;
* debian&lt;br /&gt;
* suse 10.0&lt;br /&gt;
* suse 10.1 (jre and gij) &lt;br /&gt;
* suse 7.3 (several)&lt;br /&gt;
* windows xp (3+) &lt;br /&gt;
&lt;br /&gt;
== Policies == &lt;br /&gt;
The botmaster will schedule builds based on policies that take into account the pool size, machine status and build time. When a bot is busy doing a build, additional requests are automatically queued. &lt;br /&gt;
&lt;br /&gt;
* At UTC 0200 + random() build HEAD&lt;br /&gt;
* At milestone release build milestone &lt;br /&gt;
* Build manually requested CWS or milestone&lt;br /&gt;
* Build automatically selected CWS&lt;br /&gt;
&lt;br /&gt;
== Features == &lt;br /&gt;
* When no CWS is provided --&amp;gt; checkout HEAD  - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Summaries&lt;br /&gt;
** tail, warnings, errors, summary log like tinderbox&lt;br /&gt;
** error - show before/after buffer (15, 5) and skip ... between errors&lt;br /&gt;
* Deploy install-sets on bot-master&lt;br /&gt;
* Increase length of status page.&lt;br /&gt;
* Email notification of build result (fail, success, install, etc. with link to buildlogs)&lt;br /&gt;
** Send mail to requestor@openoffice.org when finished. (add a hint on the request form) &lt;br /&gt;
** For CWS - send to CWS owner (from EIS)&lt;br /&gt;
* Show smoke-test results in status -- currently smoketest fails on Linux. &lt;br /&gt;
* CWS-Oriented View &lt;br /&gt;
** Add header X axis (timeline) &lt;br /&gt;
** Three different views - all, ready for QA, new&lt;br /&gt;
* Buildslave info on slave web page&lt;br /&gt;
* Scheduler to prioritize and distribute builds on various slaves&lt;br /&gt;
** Collect changes by one user (settling) in one build&lt;br /&gt;
** AllCVS mailing list listener to auto trigger build on commit notification&lt;br /&gt;
* Header Row - provide number/link to last build (related to status) &lt;br /&gt;
* Extra config switches field in force build form. Developers can specify some extra configure switches specific to there CWSs. - &amp;#039;&amp;#039;&amp;#039;Done&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Add suse 7.3 buildslave&lt;br /&gt;
* Generate buildbot results as RSS feed for planetizing &lt;br /&gt;
* For windows slaves, provide link to html build status page&lt;br /&gt;
* UserId/Password verification for force build and stop buid&lt;br /&gt;
&lt;br /&gt;
== Steps to add a new buildbot ==&lt;br /&gt;
Come join the collective! Bots for new platforms or adding bots for for existing platforms will increase the build capabilities available, and are therefore much appreciated. &lt;br /&gt;
&lt;br /&gt;
What you need is a reasonably fast machine, with decent RAM and disk, and of course an Internet connection. It might be easier to first set up the openoffice build environmnet on this machine. &lt;br /&gt;
&lt;br /&gt;
The Buildbot requires: &lt;br /&gt;
* Python 2.3 or later: http://www.python.org &lt;br /&gt;
* Twisted: http://twistedmatrix.com - most recent version is recommended. You&amp;#039;ll need at least &amp;quot;Twisted&amp;quot; (the core package), and you&amp;#039;ll also want TwistedMail, TwistedWeb, and TwistedWords. &lt;br /&gt;
** Note: For Twisted, you first need to install Zope. &lt;br /&gt;
* The Buildbot has been customized for Openoffice.org builds. Please checkout buildbot-0.7.3 from [http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/ Gnome CVS].  &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome login&lt;br /&gt;
cvs -z3 -d :pserver:anonymous@anoncvs.gnome.org:/cvs/gnome co ooo-build/scratch/configdbbe&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Installing the Buildbot: &lt;br /&gt;
* Note: Detailed instuctions are at http://buildbot.sourceforge.net/manual-0.7.3.html#Requirements&lt;br /&gt;
* After all requirements are met, install buildbot by running following commands in buildbot directory. &lt;br /&gt;
* The install may need to be to run as root (su). &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
python setup.py build&lt;br /&gt;
python setup.py install                                                                    &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Test installation is proper by running the command &lt;br /&gt;
&amp;lt;pre&amp;gt;&amp;quot;buildbot --version&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
** Install is OK if you see the version information for Buildbot and Twisted.&lt;br /&gt;
** Errors such as &amp;#039;no such command&amp;#039; or &amp;quot;ImportError&amp;quot; means something went wrong.&lt;br /&gt;
** Note: For more detailed instuctions see http://buildbot.sourceforge.net/manual-0.7.3.html#Installing-the-code&lt;br /&gt;
&lt;br /&gt;
Setting up the Buildbot: &lt;br /&gt;
* mkdir &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;   &lt;br /&gt;
** Note : preferable name of &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; : buildslave_ooostaging&lt;br /&gt;
* create a buildslave by running command:&lt;br /&gt;
  buildbot slave &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; &amp;#039;&amp;#039;MASTERHOST&amp;#039;&amp;#039;:&amp;#039;&amp;#039;PORT&amp;#039;&amp;#039; &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039;&lt;br /&gt;
** where, MASTERHOST = ooo-staging.osuosl.org and PORT = 9989&lt;br /&gt;
** Note : You need to report &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; and &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; to buildmaster administrator&lt;br /&gt;
** Note: For more detailed instuctions see [http://buildbot.sourceforge.net/manual-0.7.3.html#Creating-a-buildslave]&lt;br /&gt;
** You can specify certain options while creating buildslave. see [http://buildbot.sourceforge.net/manual-0.7.3.html#Buildslave-Options]&lt;br /&gt;
&lt;br /&gt;
* Fill in the hostinfo files&lt;br /&gt;
** &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/admin should contain your name and email address. This is the “buildslave admin address”&lt;br /&gt;
** &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039;/info/host should be filled with a brief description of the host: OS, version, memory size, CPU speed, versions of relevant libraries installed, and finally the version of the buildbot code which is running the buildslave. &lt;br /&gt;
* Checkout some OO buildslave specific scripts from [http://cvs.gnome.org/viewcvs/ooo-build/scratch/buildbot/slave/]&lt;br /&gt;
** buildbotget.pl - perl script for checking out OO source code from CVS&lt;br /&gt;
** buildoo - script to start OO build process. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
** smoketestoo - script to start OO smoke test after successful compliation. Note: You need to properly edit this file to meet your plateform requirement.&lt;br /&gt;
* Once all the above steps are done, You need to email buildmaster administrator following stuff:&lt;br /&gt;
** &amp;#039;&amp;#039;SLAVENAME&amp;#039;&amp;#039; &amp;amp; &amp;#039;&amp;#039;PASSWORD&amp;#039;&amp;#039; : This is the same that you used while creating buildslave.&lt;br /&gt;
** Full path of the &amp;#039;&amp;#039;slavedir&amp;#039;&amp;#039; e.g. /home/bbot/buildslave_ooostaging&lt;br /&gt;
** platform specific configure command used for configuring OO. &lt;br /&gt;
   e.g. ./configure --with-system-freetype&lt;br /&gt;
* Once buildmaster administrator receives this above information, he will add your buildslave to buildfarm and then your slave will become OOBuildSlave and will be listed on buildmaster status page [http://ooo-staging.osuosl.org:8010]&lt;br /&gt;
&lt;br /&gt;
== People == &lt;br /&gt;
* Prasad Madhav (pmadhav) deployed and customizes the buildbot &lt;br /&gt;
* mikeleib, kaib, vq, dkeskar support and provide ideas&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=13539</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=13539"/>
		<updated>2006-07-05T20:18:24Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Performance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our [http://www.moonleib.org/dbbe/html/d2/d65/classconfigmgr_1_1dbbe_1_1BaseLayer.html Layers and UpdatableLayers] that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The [http://www.moonleib.org/dbbe/html/d8/d28/classconfigmgr_1_1dbbe_1_1Record.html Record] object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key.&lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we use a [http://www.moonleib.org/dbbe/html/d6/d36/classconfigmgr_1_1dbbe_1_1BaseStratum.html base class] to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleLayerStratum is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, [http://www.moonleib.org/dbbe/html/d1/dde/classconfigmgr_1_1dbbe_1_1Database.html Database], that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
Just how fast is it?  Benchmarks indicate that it is up to 16% faster on cold-starts.  &lt;br /&gt;
&lt;br /&gt;
The methodology of testing is as follows:  The test machine is a 3.2Ghz P4HT running OpenSuSE 10.0 with 1G of RAM and 120G of SATA attached storage.  OpenOffice is built with ooo-build.  OpenOffice is started by a script in the xession that sleeps for two minutes before launching with the option -norestore -&amp;lt;application&amp;gt;.  The system sleeps for two minutes and then reboots.&lt;br /&gt;
[[Image:Dbbe-vs-localbe-starts.png|frame|Median Time for 100 Cold-Starts]]&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;br /&gt;
&lt;br /&gt;
Also, you can see a doxygen run of dbbe [http://www.moonleib.org/dbbe/html/da/ddb/namespaceconfigmgr_1_1dbbe.html here]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=File:Dbbe-vs-localbe-starts.png&amp;diff=13536</id>
		<title>File:Dbbe-vs-localbe-starts.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=File:Dbbe-vs-localbe-starts.png&amp;diff=13536"/>
		<updated>2006-07-05T20:11:07Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: 100 cold starts of oo.o with dbbe and localbe, showing median time&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;100 cold starts of oo.o with dbbe and localbe, showing median time&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Infrastructure_Maintenance&amp;diff=13125</id>
		<title>Infrastructure Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Infrastructure_Maintenance&amp;diff=13125"/>
		<updated>2006-06-29T16:26:48Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Planned Infrastructure Maintenace Work==&lt;br /&gt;
&lt;br /&gt;
=== Wiki: Starting 2006-06-30 ===&lt;br /&gt;
Starting at 16:00 UTC lasting about 1 hour, the wiki will be donw.  Site upgrade and category plugin installation&lt;br /&gt;
&lt;br /&gt;
==Past maintenance timeframes==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Starting 2006-06-20 ===&lt;br /&gt;
&lt;br /&gt;
On Tuesday 2006-06-20 in evening (GMT) the [[Infrastructure_Upgrade|upgrade]] of the main site is planned. The complete upgrade process takes about 48 hours. The site will be available a bit earlier with some testing and aftertreatment going on. For SSH users it might be helpful to know that the upgraded production site will have a new IP address.&lt;br /&gt;
&lt;br /&gt;
=== anoncvs, eis, wiki: Saturday and Sunday 2006-04-29 ===&lt;br /&gt;
&lt;br /&gt;
Downtime due to rewiring.&lt;br /&gt;
Most of the ...services.openoffice.org machines will not be available.&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Friday 2006-04-28 ===&lt;br /&gt;
&lt;br /&gt;
Starting at 16:00 UTC on Friday, 28 April, and lasting for about 20  minutes, the site will be down for maintenance.  During this period,  email, IssueZilla, CVS, and other site functionality will be  unavailable. &lt;br /&gt;
&lt;br /&gt;
=== wiki: Tuesday 2006-04-18 Evening (GMT) ===&lt;br /&gt;
&lt;br /&gt;
The software running the wiki needs an upgrade to mediawiki 1.6.3. Credits go to [[User:Mikeleib]] for the installation of the new version of mediawiki.&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Monday 2006-04-17 ===&lt;br /&gt;
&lt;br /&gt;
The main site will be undergoing maintenance from 17:30 - 18:00 UTC. It will be off-line.&amp;lt;br&amp;gt;&lt;br /&gt;
(This didn&amp;#039;t happen).&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Saturday Early Morning (GMT) 2006-04-01 ===&lt;br /&gt;
&lt;br /&gt;
Downtime starting at 01:00 (GMT) for about 8 hours due to site maintance.&lt;br /&gt;
&lt;br /&gt;
=== anoncvs, eis, wiki: Saturday and Sunday 2006-04-01 ===&lt;br /&gt;
&lt;br /&gt;
Downtime due to rewiring.&lt;br /&gt;
Most of the ...services.openoffice.org machines will not be available.&lt;br /&gt;
&lt;br /&gt;
=== anoncvs: Tuesday 2006-03-21 ===&lt;br /&gt;
&lt;br /&gt;
Our CVS repository for anonymous access (anoncvs.services.openoffice.org) moved to a new machine under a new IP address.&lt;br /&gt;
&lt;br /&gt;
=== ooo.services.openoffice.org / ftp.stardiv.de: Monday 2006-03-13 ===&lt;br /&gt;
&lt;br /&gt;
During Monday evening (GMT) ooo.services.openoffice.org and ftp.stardiv.de will move to a new IP addresses. This will need a short downtime. Additionally transitional unavailability might be experienced until the new IP addresses have propagated to DNS servers.&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Saturday 2006-02-18 ===&lt;br /&gt;
&lt;br /&gt;
The main site will not be available Saturday 2006-02-18 starting 8:00 GMT for approximately 2 hours.&lt;br /&gt;
&lt;br /&gt;
=== EIS: Friday 2006-02-17 ===&lt;br /&gt;
&lt;br /&gt;
During Friday afternoon (GMT) eis.services.openoffice.org will move to a new IP address (192.18.197.101). This will need a short downtime. Additionally transitional unavailability might be experienced until the new IP address has propagated to DNS servers.&lt;br /&gt;
&amp;lt;math&amp;gt;Insert formula here&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Infrastructure_Overview]]&lt;br /&gt;
* [[Infrastructure_Problems]]&lt;br /&gt;
* [[Infrastructure_Requirements]]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Infrastructure_Maintenance&amp;diff=13123</id>
		<title>Infrastructure Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Infrastructure_Maintenance&amp;diff=13123"/>
		<updated>2006-06-29T16:24:25Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Planned Infrastructure Maintenace Work */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Planned Infrastructure Maintenace Work==&lt;br /&gt;
&lt;br /&gt;
* 6/30/2006 16:00 UTC for 1 hour&lt;br /&gt;
:Site upgrade and category plugin installation&lt;br /&gt;
&lt;br /&gt;
==Past maintenance timeframes==&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Starting 2006-06-20 ===&lt;br /&gt;
&lt;br /&gt;
On Tuesday 2006-06-20 in evening (GMT) the [[Infrastructure_Upgrade|upgrade]] of the main site is planned. The complete upgrade process takes about 48 hours. The site will be available a bit earlier with some testing and aftertreatment going on. For SSH users it might be helpful to know that the upgraded production site will have a new IP address.&lt;br /&gt;
&lt;br /&gt;
=== anoncvs, eis, wiki: Saturday and Sunday 2006-04-29 ===&lt;br /&gt;
&lt;br /&gt;
Downtime due to rewiring.&lt;br /&gt;
Most of the ...services.openoffice.org machines will not be available.&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Friday 2006-04-28 ===&lt;br /&gt;
&lt;br /&gt;
Starting at 16:00 UTC on Friday, 28 April, and lasting for about 20  minutes, the site will be down for maintenance.  During this period,  email, IssueZilla, CVS, and other site functionality will be  unavailable. &lt;br /&gt;
&lt;br /&gt;
=== wiki: Tuesday 2006-04-18 Evening (GMT) ===&lt;br /&gt;
&lt;br /&gt;
The software running the wiki needs an upgrade to mediawiki 1.6.3. Credits go to [[User:Mikeleib]] for the installation of the new version of mediawiki.&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Monday 2006-04-17 ===&lt;br /&gt;
&lt;br /&gt;
The main site will be undergoing maintenance from 17:30 - 18:00 UTC. It will be off-line.&amp;lt;br&amp;gt;&lt;br /&gt;
(This didn&amp;#039;t happen).&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Saturday Early Morning (GMT) 2006-04-01 ===&lt;br /&gt;
&lt;br /&gt;
Downtime starting at 01:00 (GMT) for about 8 hours due to site maintance.&lt;br /&gt;
&lt;br /&gt;
=== anoncvs, eis, wiki: Saturday and Sunday 2006-04-01 ===&lt;br /&gt;
&lt;br /&gt;
Downtime due to rewiring.&lt;br /&gt;
Most of the ...services.openoffice.org machines will not be available.&lt;br /&gt;
&lt;br /&gt;
=== anoncvs: Tuesday 2006-03-21 ===&lt;br /&gt;
&lt;br /&gt;
Our CVS repository for anonymous access (anoncvs.services.openoffice.org) moved to a new machine under a new IP address.&lt;br /&gt;
&lt;br /&gt;
=== ooo.services.openoffice.org / ftp.stardiv.de: Monday 2006-03-13 ===&lt;br /&gt;
&lt;br /&gt;
During Monday evening (GMT) ooo.services.openoffice.org and ftp.stardiv.de will move to a new IP addresses. This will need a short downtime. Additionally transitional unavailability might be experienced until the new IP addresses have propagated to DNS servers.&lt;br /&gt;
&lt;br /&gt;
=== Main Site: Saturday 2006-02-18 ===&lt;br /&gt;
&lt;br /&gt;
The main site will not be available Saturday 2006-02-18 starting 8:00 GMT for approximately 2 hours.&lt;br /&gt;
&lt;br /&gt;
=== EIS: Friday 2006-02-17 ===&lt;br /&gt;
&lt;br /&gt;
During Friday afternoon (GMT) eis.services.openoffice.org will move to a new IP address (192.18.197.101). This will need a short downtime. Additionally transitional unavailability might be experienced until the new IP address has propagated to DNS servers.&lt;br /&gt;
&amp;lt;math&amp;gt;Insert formula here&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[Infrastructure_Overview]]&lt;br /&gt;
* [[Infrastructure_Problems]]&lt;br /&gt;
* [[Infrastructure_Requirements]]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Talk:Infrastructure_Maintenance&amp;diff=12429</id>
		<title>Talk:Infrastructure Maintenance</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Talk:Infrastructure_Maintenance&amp;diff=12429"/>
		<updated>2006-06-14T05:54:26Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Surely, it&amp;#039;s 48 hours and not days?--[[User:Mikeleib|Mikeleib]] 07:54, 14 June 2006 (CEST)&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=11192</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=11192"/>
		<updated>2006-05-26T19:07:08Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Performance */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our [http://www.moonleib.org/dbbe/html/d2/d65/classconfigmgr_1_1dbbe_1_1BaseLayer.html Layers and UpdatableLayers] that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The [http://www.moonleib.org/dbbe/html/d8/d28/classconfigmgr_1_1dbbe_1_1Record.html Record] object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key.&lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we use a [http://www.moonleib.org/dbbe/html/d6/d36/classconfigmgr_1_1dbbe_1_1BaseStratum.html base class] to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleLayerStratum is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, [http://www.moonleib.org/dbbe/html/d1/dde/classconfigmgr_1_1dbbe_1_1Database.html Database], that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
Just how fast is it?  Results seem to indicate that it is nearly 1 second faster on cold-start.  Cold-start performance (on Linux, at least) is very variable, with standard deviations of approximately 2.25 seconds.  DBBE start times, as you can see below have a smaller standard deviation.&lt;br /&gt;
{|&lt;br /&gt;
|colspan=&amp;quot;2&amp;quot; align=&amp;quot;center&amp;quot;|[[Image:Writer-cold-start-graph.png|frame|Cold-start times for Writer with dbbe vs localbe on Linux (80 samples)]]&lt;br /&gt;
|-&lt;br /&gt;
|[[Image:Dbbe-histogram.png|frame|Cold-start times for Writer with dbbe on Linux (80 samples)]]&lt;br /&gt;
|[[Image:Localbe-histogram.png|frame|Cold-start times for Writer with localbe on Linux (80 samples)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;br /&gt;
&lt;br /&gt;
Also, you can see a doxygen run of dbbe [http://www.moonleib.org/dbbe/html/da/ddb/namespaceconfigmgr_1_1dbbe.html here]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=11190</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=11190"/>
		<updated>2006-05-26T17:39:03Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* How fast is it?? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our [http://www.moonleib.org/dbbe/html/d2/d65/classconfigmgr_1_1dbbe_1_1BaseLayer.html Layers and UpdatableLayers] that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The [http://www.moonleib.org/dbbe/html/d8/d28/classconfigmgr_1_1dbbe_1_1Record.html Record] object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key.&lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we use a [http://www.moonleib.org/dbbe/html/d6/d36/classconfigmgr_1_1dbbe_1_1BaseStratum.html base class] to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleLayerStratum is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, [http://www.moonleib.org/dbbe/html/d1/dde/classconfigmgr_1_1dbbe_1_1Database.html Database], that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== Performance ===&lt;br /&gt;
Just how fast is it?  Results seem to indicate that it is nearly 1 second faster on cold-start.  Cold-start performance (on Linux, at least) is very variable, with standard deviations of approximately 2.25 seconds.  DBBE start times, as you can see below have a smaller standard deviation.&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
|[[Image:Dbbe-histogram.png|frame|Cold-start times for Writer with DBBE on Linux (80 samples)]]&lt;br /&gt;
|[[Image:Localbe-histogram.png|frame|Cold-start times for Writer with localbe on Linux (80 samples)]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;br /&gt;
&lt;br /&gt;
Also, you can see a doxygen run of dbbe [http://www.moonleib.org/dbbe/html/da/ddb/namespaceconfigmgr_1_1dbbe.html here]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User_talk:SergeMoutou&amp;diff=11055</id>
		<title>User talk:SergeMoutou</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User_talk:SergeMoutou&amp;diff=11055"/>
		<updated>2006-05-25T17:18:54Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I really appreciate your efforts and don&amp;#039;t want to discourage you.  However, could you flag edits that are simple changes as &amp;quot;minor?&amp;quot;  When I look at recent changes, all I can see are are your edits to a few nodes.  Thanks--[[User:Mikeleib|Mikeleib]] 19:18, 25 May 2006 (CEST)&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Architecture/To-Dos&amp;diff=10886</id>
		<title>Architecture/To-Dos</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Architecture/To-Dos&amp;diff=10886"/>
		<updated>2006-05-24T05:17:35Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* General Refactoring Improvements */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page intends to collect various architectural deficiencies (aka the pet peeves of various people) of OpenOffice.org, and lists the areas where&amp;#039;s work in progress to improve on the architecture.&lt;br /&gt;
&lt;br /&gt;
Depending on the specific count algorithm, OOo consists of approximately 7E6 lines of code (the overwhelming lot being c++, all other being an order of magnitude less (Java, Perl, Basic, Python)). This sheer size in and of itself is a problem - the code base is notorious for crashing or slowing down to a crawl various software engineering tools, from debugger to dependency analysis to reverse design extraction.&lt;br /&gt;
&lt;br /&gt;
The code itself varies greatly in quality, style, and age (the latter invariably leading to the former, if you recall the history and evolvement of c++), with parts being there virtually unmodified for 10+ years, and others just recently written from scratch.&lt;br /&gt;
&lt;br /&gt;
Taken together, this leads to a lot of complexity and [http://artax.karlin.mff.cuni.cz/~kendy/ooo/cut-n-paste/src680-m154.txt.gz redundancy], which is very hard to remove.&lt;br /&gt;
&lt;br /&gt;
Facing this amount of code, the big rules must be:&lt;br /&gt;
*simplify&lt;br /&gt;
**remove internal redundancy&lt;br /&gt;
**remove external redundancy (use external projects, whereever possible)&lt;br /&gt;
**remove unused or dead code&lt;br /&gt;
**remove legacy functionality, which does no longer provide noticeable value (e.g. binfilter)&lt;br /&gt;
&lt;br /&gt;
*refactor for orthogonality&lt;br /&gt;
**make subsystems implement independent functionality&lt;br /&gt;
**enable combinations of those subsystems to be freely combinable&lt;br /&gt;
**carry that to the UI level (no artificial restrictions on what one can do with UI objects - e.g. shapes can be rotated, and clearly text frames should, too)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Infrastructure Improvements==&lt;br /&gt;
&lt;br /&gt;
*[[BuildSpeedup | Speeding up the build system]], and maybe even make it consider global dependencies (currently, OOo has the notion of modules, which approximately map to toplevel directories in the build tree. Automatic build-time dependency calculation is currently only available on the intra-module level).&lt;br /&gt;
&lt;br /&gt;
*Making the actual design more accessible, improving upon existing solutions like [http://ooo.ximian.com/lxr/ LXR] or [http://ooo.ximian.com/bonsai/ Bonsai]. Ultimately, this should result in refactorings of the source code being both much easier and much safer than today, by providing information where and how specific functionality is used. A prerequisite for that would be a parser that &amp;#039;&amp;#039;really&amp;#039;&amp;#039; knows about c++ - [http://www.gccxml.org/ gccxml] might be a starting point.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Runtime System Improvements==&lt;br /&gt;
&lt;br /&gt;
This is about making the implementation languages safer, and easier to use. What follows could also be subsumed under &amp;quot;transparency on the implementation level&amp;quot;. When something can be used transparently, or appears transparent to a user, it is an implementation aspect she need not care about. Being able to program in an environment which is transparent with regard to lots of aspects, empowers the developer to focus on the problem at hand, not having to litter her code with mundane tasks such as memory management or locking.&lt;br /&gt;
&lt;br /&gt;
*Make threading transparent. Currently, fulfilling the contract of a UNO component regarding thread-safeness is&lt;br /&gt;
#tedious work, because normally each involved object has to acquire and release a mutex on method entry and exit, respectively&lt;br /&gt;
#almost impossible to get right, let alone verified to work correctly (no races, no deadlocks), because of the sheer mass of involved objects and mutices (the number of distinct states that would have to be checked for a proper verification is intractable for anything but the most trivial examples). The upcoming [[Uno/Effort/Creating_the_Uno_Threading_Framework | UNO Threading framework]] makes thread-safeness transparent, by automatically locking and unlocking when entering or exiting components on a much coarser level than single methods.&lt;br /&gt;
&lt;br /&gt;
*Make other mundane stuff transparent. Like memory management (via garbage collection, or refcounting via [http://www.boost.org/libs/smart_ptr/index.html smart ptrs], [http://api.openoffice.org/docs/DevelopersGuide/ProfUNO/ProfUNO.htm#1+4+2+7+3+Mapping+of+Interface UNO reference]), or [http://en.wikipedia.org/wiki/Transaction_processing transactionality] (the mode of making changes take place either completely, or not at all. Having a component behave in a non-transactional way in the face of an error makes recovery rather hard. There&amp;#039;s more to transactionality than exception-safeness. Imagine two users collaborating on the same document).&lt;br /&gt;
&lt;br /&gt;
==General Refactoring Improvements==&lt;br /&gt;
For many reasons the OpenOffice.org codebase is difficult to understand and navigate.  On of the reasons is a lack of cleanup in the code.  There is a never ending list of things that ought to be done-- add some of your own.&lt;br /&gt;
&lt;br /&gt;
*Actually remove deprecated things.  Things like String and [http://go-oo.org/lxr/ident?i=UniString UniString] need to go.  svtools and tools have loads of stuff that is duplicated elsewhere or is deprecated.  Getting rid of these sorts of things will make maintaining application code much easier.  &lt;br /&gt;
&lt;br /&gt;
*Document things.  Some of the code has comments that at one time were correct.  Some code has German comments.  While most of the OpenOffice.org programmers sprechen zie Deutsch, there is an unofficial understanding that German comments mean &amp;quot;don&amp;#039;t touch.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Application-specific Improvements==&lt;br /&gt;
&lt;br /&gt;
One of the lingering problems on the application level is the fact that, in spite of modularized lower-level functionality, application functionality cannot be shared &amp;#039;&amp;#039;between&amp;#039;&amp;#039; OOo&amp;#039;s applications (except via embedding of a whole application (OLE)). This is because for neither Calc nor Writer, there are reusable application engines, like a text engine providing text editing and layouting functionality, or a table engine providing formula and calculation support. Draw/Impress already uses a shared engine, dubbed &amp;#039;Drawing Layer&amp;#039;. But there&amp;#039;s still considerable functionality hidden in the application code, which is worth extracting. Especially the missing Writer engine manifests itself in duplicated text editing functionality in EditEngine and TextEngine (used by Impress and Calc for their corresponding text functionality).&lt;br /&gt;
&lt;br /&gt;
Another area of improvement is rendering. Currently, all application&amp;#039;s graphical output is based on the OutputDevice class, which provides only very basic rendering facilities (in fact, besides largely extended text output functionality (to handle OOo&amp;#039;s i18n requirements), this interface has basically remained unchanged for a long time). Specifically, things like performant alpha compositing or anti-aliased geometry rendering are extremely hard to achieve with the current design. Therefore, starting with OOo 2.0, the [http://api.openoffice.org/docs/common/ref/com/sun/star/rendering/XCanvas.html XCanvas] interface is slated to gradually replace OutputDevice in all applications.&lt;br /&gt;
&lt;br /&gt;
===Writer===&lt;br /&gt;
&lt;br /&gt;
*break up the monolith&lt;br /&gt;
*make the import filters more modular&lt;br /&gt;
*port rendering to XCanvas&lt;br /&gt;
&lt;br /&gt;
===Calc===&lt;br /&gt;
&lt;br /&gt;
*break up the monolith&lt;br /&gt;
*[[Calc_Performance | speed improvements]]&lt;br /&gt;
*port rendering to XCanvas&lt;br /&gt;
&lt;br /&gt;
===Draw/Impress===&lt;br /&gt;
&lt;br /&gt;
*break up the monolith&lt;br /&gt;
*become more decoupled from sfx2&lt;br /&gt;
*redesign API ([[Impress_Performance | performance]])&lt;br /&gt;
&lt;br /&gt;
*port Drawing Layer to XCanvas&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10749</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10749"/>
		<updated>2006-05-21T05:25:57Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* SingleStratum/MultiStratum */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our [http://www.moonleib.org/dbbe/html/d2/d65/classconfigmgr_1_1dbbe_1_1BaseLayer.html Layers and UpdatableLayers] that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The [http://www.moonleib.org/dbbe/html/d8/d28/classconfigmgr_1_1dbbe_1_1Record.html Record] object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key.&lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we use a [http://www.moonleib.org/dbbe/html/d6/d36/classconfigmgr_1_1dbbe_1_1BaseStratum.html base class] to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleLayerStratum is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, [http://www.moonleib.org/dbbe/html/d1/dde/classconfigmgr_1_1dbbe_1_1Database.html Database], that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;br /&gt;
&lt;br /&gt;
Also, you can see a doxygen run of dbbe [http://www.moonleib.org/dbbe/html/da/ddb/namespaceconfigmgr_1_1dbbe.html here]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10747</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10747"/>
		<updated>2006-05-21T04:31:03Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Factory/Database Abstraction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our [http://www.moonleib.org/dbbe/html/d2/d65/classconfigmgr_1_1dbbe_1_1BaseLayer.html Layers and UpdatableLayers] that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The [http://www.moonleib.org/dbbe/html/d8/d28/classconfigmgr_1_1dbbe_1_1Record.html Record] object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key.&lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we will use a base class to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleBackend is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, [http://www.moonleib.org/dbbe/html/d1/dde/classconfigmgr_1_1dbbe_1_1Database.html Database], that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;br /&gt;
&lt;br /&gt;
Also, you can see a doxygen run of dbbe [http://www.moonleib.org/dbbe/html/da/ddb/namespaceconfigmgr_1_1dbbe.html here]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10746</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10746"/>
		<updated>2006-05-21T04:30:16Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Layer/Updatable Layer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our [http://www.moonleib.org/dbbe/html/d2/d65/classconfigmgr_1_1dbbe_1_1BaseLayer.html Layers and UpdatableLayers] that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The [http://www.moonleib.org/dbbe/html/d8/d28/classconfigmgr_1_1dbbe_1_1Record.html Record] object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key.&lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we will use a base class to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleBackend is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, Database, that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;br /&gt;
&lt;br /&gt;
Also, you can see a doxygen run of dbbe [http://www.moonleib.org/dbbe/html/da/ddb/namespaceconfigmgr_1_1dbbe.html here]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10745</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10745"/>
		<updated>2006-05-21T04:28:01Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Layer/Updatable Layer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our [http://www.moonleib.org/dbbe/html/d2/d65/classconfigmgr_1_1dbbe_1_1BaseLayer.html Layers and UpdatableLayers] that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The Record object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key.&lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we will use a base class to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleBackend is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, Database, that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;br /&gt;
&lt;br /&gt;
Also, you can see a doxygen run of dbbe [http://www.moonleib.org/dbbe/html/da/ddb/namespaceconfigmgr_1_1dbbe.html here]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10744</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10744"/>
		<updated>2006-05-21T04:23:29Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* The Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our Layers and UpdatableLayers that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The Record object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key. &lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we will use a base class to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleBackend is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, Database, that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;br /&gt;
&lt;br /&gt;
Also, you can see a doxygen run of dbbe [http://www.moonleib.org/dbbe/html/da/ddb/namespaceconfigmgr_1_1dbbe.html here]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10611</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10611"/>
		<updated>2006-05-20T05:01:10Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* The Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our Layers and UpdatableLayers that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The Record object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key. &lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we will use a base class to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleBackend is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, Database, that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;br /&gt;
Also, you can see a doxygen run of dbbe [http://www.moonleib.org/dbbe/html/da/ddb/namespaceconfigmgr_1_1dbbe.html here]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10607</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=10607"/>
		<updated>2006-05-20T00:06:43Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* Futures */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== DBBE ==&lt;br /&gt;
&lt;br /&gt;
We have crafted a new backend, called dbbe that uses xml files encapsulated in berkeley databases.  This backend is similar to localbe in many ways and has some code that is &amp;quot;stolen&amp;quot; from there.  It implements the following services:&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/Layer.html Layer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/UpdatableLayer.html UpdateableLayer]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/SingleLayerStratum.html SingleLayerStratum]&lt;br /&gt;
* [http://api.openoffice.org/docs/common/ref/com/sun/star/configuration/backend/MultiLayerStratum.html MultiLayerStratum]&lt;br /&gt;
&lt;br /&gt;
Additionally, we have a utility that can import and export xcu files into databases for migration.&lt;br /&gt;
&lt;br /&gt;
=== Basic Design ===&lt;br /&gt;
&lt;br /&gt;
The berkeley database stores key/data pairs with no relations.  These pairs are of arbitrary type and size.  We&amp;#039;ve made an  abstraction of the berkeleydb API that can put and get Records by key.  Our Single/MultiLayerStratums list/get Layers that  deal with individual Records.&lt;br /&gt;
&lt;br /&gt;
=== Layer/Updatable Layer ===&lt;br /&gt;
&lt;br /&gt;
We define a schema for our Layers and UpdatableLayers that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
Note: the use of the word sublayer is somewhat misleading.  The Record object does not differntiate sublayer blobs from anonymous configuration &amp;quot;particles&amp;quot;  It calls both sublayers.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer is implemented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We use the URL property, but define the &amp;quot;URL&amp;quot; as &amp;lt;dbPath&amp;gt;:Key. &lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we will use a base class to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleBackend is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.  We do this by checking if the Layer has any sublayers and if the database it came from is read-only.&lt;br /&gt;
&lt;br /&gt;
=== Factory/Database Abstraction ===&lt;br /&gt;
&lt;br /&gt;
We have a class, Database, that abstracts the berkelyDB API from the rest of dbbe.  This is done to consolodate access to database internal settings so that they can all be changed in one place.&lt;br /&gt;
&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we provide a factory that can instantiate databases.  This allows the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* import files&lt;br /&gt;
* export files&lt;br /&gt;
* integrity check&lt;br /&gt;
* statistics on database (list keys)&lt;br /&gt;
&lt;br /&gt;
For import and export, we use a &amp;quot;code&amp;quot; to mangle/demangle key names into file paths/names for localbe.  The scheme that localbe uses is automatically detected, and a correct code is supplied.  However, for other cases, it is possible to supply a code for how names are mapped to keys.  The code is very simple; it just specifies what parts of the path are namespaces, layers, and &amp;quot;sublayers.&amp;quot;  The Mangler class handles this name mangling/demangling and the respository class handles the import/export of keys.&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in CWS: configdbbe&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DE/ReviewUI/Verschiedenes_Bild_bearbeiten&amp;diff=9854</id>
		<title>DE/ReviewUI/Verschiedenes Bild bearbeiten</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DE/ReviewUI/Verschiedenes_Bild_bearbeiten&amp;diff=9854"/>
		<updated>2006-05-09T20:04:47Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1147199054, changed back to last version by Rainer Bielefeld&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ReviewUI|Bild bearbeiten]]&lt;br /&gt;
Die Schritte, die für bestimmte Bild-Bearbeitungsschritte ausgeführt werden müssen, underscheiden sich teilweise in den verschiedenen OOo- Modulen. Die folgenden Tabellen zeigen die Unterschiede (Inkonsistenzen):&lt;br /&gt;
&lt;br /&gt;
== Unterschiedliches Ergebnis der gleichen Aktion ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
!Funktion&lt;br /&gt;
!in DRAW&lt;br /&gt;
!in IMPRESS&lt;br /&gt;
!in WRITER&lt;br /&gt;
!in CALC&lt;br /&gt;
!Einschätzung&lt;br /&gt;
|-&lt;br /&gt;
|Doppelklick auf &amp;#039;&amp;#039;.png&amp;#039;&amp;#039;-Bild&lt;br /&gt;
|Textmodus wird geöffnet&lt;br /&gt;
|wie DRAW&lt;br /&gt;
| style=&amp;quot;background-color:#00FF00&amp;quot; | Bildbearbeitungsdialog wird geöffnet&lt;br /&gt;
|wie DRAW&lt;br /&gt;
|kein gravierendes Problem&lt;br /&gt;
|-&lt;br /&gt;
|Klick auf [http://artax.karlin.mff.cuni.cz/~kendy/ooo/icons/status/reference/res/commandimagelist/lc_toggleanchortype.png Anker]-[http://artax.karlin.mff.cuni.cz/~kendy/ooo/icons/status/crystal/res/commandimagelist/lc_toggleanchortype.png Button] nach Wählen eines (.png-) Bildes&lt;br /&gt;
|./.&lt;br /&gt;
|./.&lt;br /&gt;
|Auswahl-Pulldown öffnet beim Anklicken&lt;br /&gt;
|style=&amp;quot;background-color:#FFCBCB&amp;quot; |Verankerung wechselt sofort beim Anklicken&lt;br /&gt;
|[http://www.openoffice.org/issues/show_bug.cgi?id=64417 Issue 64417]&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|..&lt;br /&gt;
|...&lt;br /&gt;
|....&lt;br /&gt;
|.....&lt;br /&gt;
|......&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Unterschiedliches Aktion für gleichen Bearbeitungswunsch ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
!Bearbeitungswunsch&lt;br /&gt;
!in DRAW&lt;br /&gt;
!in Impress&lt;br /&gt;
!in WRITER&lt;br /&gt;
!in CALC&lt;br /&gt;
!Einschätzung&lt;br /&gt;
|-&lt;br /&gt;
|(.png-) Bild zuschneiden&lt;br /&gt;
|Ausschließlich über Button [http://artax.karlin.mff.cuni.cz/~kendy/ooo/icons/status/reference/res/commandimagelist/lc_grafattrcrop.png &amp;#039;&amp;#039;Zuschneiden&amp;#039;&amp;#039;] möglich&lt;br /&gt;
|wie DRAW&lt;br /&gt;
| style=&amp;quot;background-color:#00FF00&amp;quot; | Doppelklick auf Bildobjekt - Bildbearbeitungsdialog - Zuschneiden &amp;lt;small&amp;gt;&amp;#039;&amp;#039;Zuschneiden&amp;#039;&amp;#039;-Button wird nicht angeboten&amp;lt;/small&amp;gt;&lt;br /&gt;
|wie DRAW&lt;br /&gt;
|Kein gravierendes Problem&lt;br /&gt;
|-&lt;br /&gt;
|.png-) Bild Umrandung&lt;br /&gt;
|Nur über Umwege möglich, keine direkte Umrandungsfunktion&lt;br /&gt;
|wie DRAW&lt;br /&gt;
| style=&amp;quot;background-color:#00FF00&amp;quot; |&amp;#039;&amp;#039;Bild-Doppelklick&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;Konextemnü&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;Button Umrandung&amp;#039;&amp;#039; oder &amp;#039;&amp;#039;Menü: Format - Bild - Umrandung&amp;#039;&amp;#039;&lt;br /&gt;
|wie DRAW&lt;br /&gt;
|kein gravierendes Problem&lt;br /&gt;
|-&lt;br /&gt;
|URL verlinkter (.png-) Bild ändern&lt;br /&gt;
|1. Bild anklicken, &amp;#039;&amp;#039;Menü: Einfügen - Bild - aus Datei&amp;#039;&amp;#039; &amp;lt;br /&amp;gt;2. &amp;#039;&amp;#039;Menü: Bearbeiten - Verknüpfungen&amp;#039;&amp;#039; &lt;br /&gt;
|wie DRAW&lt;br /&gt;
| style=&amp;quot;background-color:#00FF00&amp;quot; |1. Sinngemäß wie &amp;#039;&amp;#039;1. DRAW&amp;#039;&amp;#039; &amp;lt;br /&amp;gt;2. Sinngemäß wie &amp;#039;&amp;#039;2. DRAW&amp;#039;&amp;#039; &amp;lt;br /&amp;gt;3. &amp;#039;&amp;#039;Bild-Doppelklick - Bild-Dialog&amp;#039;&amp;#039;&lt;br /&gt;
|wie DRAW&lt;br /&gt;
|1. Draw ist verwirrend, da alte URL nicht angezeigt wird.&lt;br /&gt;
|-&lt;br /&gt;
|.&lt;br /&gt;
|..&lt;br /&gt;
|...&lt;br /&gt;
|....&lt;br /&gt;
|.....&lt;br /&gt;
|......&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Weiteres ==&lt;br /&gt;
&lt;br /&gt;
Nach Wissensstand &amp;#039;&amp;#039;[[User:Rainer Bielefeld|Rainer Bielefeld]]&amp;#039;&amp;#039; aus Erfahrungen mit  &amp;quot;2.0.2  German version WIN XP: [680m5(Build9011)]&amp;quot; und &amp;quot;2.0.1 RC5 English version WIN XP: [680m1(Build8990)]&amp;quot; ist die englische OOo-Version gleichermaßen betroffen.&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DerivedWorks&amp;diff=9853</id>
		<title>DerivedWorks</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DerivedWorks&amp;diff=9853"/>
		<updated>2006-05-09T20:02:27Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1147199174, changed back to last version by Timarandras&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page will track derivatives of OpenOffice.org.  Feel free to add to it if you know of any, and please include URLs.  A derived work listed here could be free or proprietary, and should not be limited to language or platform.  It may include those works that use OpenOffice.org in part or in whole.  As well, a separate section could also track distributions, e.g., by Novell or Debian or Ubuntu. We are listing these mainly to track them and not for advertising purposes. Some of the companies listed below may no longer be producing derivatives of OpenOffice.org, as the license for the source changed in 2005, with 2.0, when we dropped the [http://www.openoffice.org/license.html SISSL] and moved to using the LGPL exclusively.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Preliminary List ==&lt;br /&gt;
&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=3&lt;br /&gt;
!Product name&lt;br /&gt;
!Company&lt;br /&gt;
!Windows&lt;br /&gt;
!Mac OS X&lt;br /&gt;
!Linux&lt;br /&gt;
!Solaris&lt;br /&gt;
!License&lt;br /&gt;
!Web Site&lt;br /&gt;
|-&lt;br /&gt;
|ChinaOffice&lt;br /&gt;
|GoldSoft&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.goldsoft.net/&lt;br /&gt;
|-&lt;br /&gt;
|Co-Create Office&lt;br /&gt;
|Co-Create&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|Free&lt;br /&gt;
|http://www.ccoss.com.cn/&lt;br /&gt;
|-&lt;br /&gt;
|EuroOffice 2005&lt;br /&gt;
|Multiráció Kft.&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.eurooffice2005.com/&lt;br /&gt;
|-&lt;br /&gt;
|KaiOffice&lt;br /&gt;
|KaiSource&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.kaisource.com/&lt;br /&gt;
|-&lt;br /&gt;
|Lycoris&lt;br /&gt;
|Lycoris (now Mandriva)&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|?&lt;br /&gt;
|http://www.lycoris.com/products/ppak/ (broken)&lt;br /&gt;
|-&lt;br /&gt;
|MagyarOffice&lt;br /&gt;
|Multiráció Kft.&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.magyaroffice.hu/&lt;br /&gt;
|-&lt;br /&gt;
|NeoOffice&lt;br /&gt;
|Planamesa&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|GPL&lt;br /&gt;
|http://neooffice.org/&lt;br /&gt;
|-&lt;br /&gt;
|NextOffice&lt;br /&gt;
|Well Develop&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.nextoffice.net/&lt;br /&gt;
|-&lt;br /&gt;
|OfficeOne&lt;br /&gt;
|?&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://shop.avanquest.com/france/produits/prod.php?pid=120/&lt;br /&gt;
|-&lt;br /&gt;
|OfficeTLE&lt;br /&gt;
|?&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.thaisoftware.co.th/index.php?tpid=pro:AR-0028&lt;br /&gt;
|-&lt;br /&gt;
|OpenOfficePL&lt;br /&gt;
|?&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.openoffice.com.pl/index.php?id=176&lt;br /&gt;
|-&lt;br /&gt;
|Pladao Office&lt;br /&gt;
|?&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|LGPL&lt;br /&gt;
|http://pladao.org/index.php?newlang=english&lt;br /&gt;
|-&lt;br /&gt;
|RedOffice&lt;br /&gt;
|?&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.ch2000.com.cn/&lt;br /&gt;
|-&lt;br /&gt;
|StarOffice&lt;br /&gt;
|Sun&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|X&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.sun.com/software/star/staroffice/index.jsp&lt;br /&gt;
|-&lt;br /&gt;
|SunShine Office&lt;br /&gt;
|CS2C&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|?&lt;br /&gt;
|http://www.cs2c.com.cn/&lt;br /&gt;
|-&lt;br /&gt;
|ThizOffice&lt;br /&gt;
|ThizTech&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|?&lt;br /&gt;
|http://www.thizlinux.com.cn/&lt;br /&gt;
|-&lt;br /&gt;
|Workspace&lt;br /&gt;
|IBM&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www-142.ibm.com/software/workplace/products/product5.nsf/wdocs/workplacehome&lt;br /&gt;
|-&lt;br /&gt;
|WPS Office&lt;br /&gt;
|KingSoft&lt;br /&gt;
|X&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|&lt;br /&gt;
|Commercial&lt;br /&gt;
|http://www.wps.com.cn/&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Autopackage_distribution&amp;diff=9852</id>
		<title>Autopackage distribution</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Autopackage_distribution&amp;diff=9852"/>
		<updated>2006-05-09T20:01:23Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1147199174, changed back to last version by St&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Wikipedia:Autopackage|Autopackage]] is a new package management system intended to be usable across multiple Linux distributions. Unlike traditional package formats such as [[Wikipedia:RPM_Package_Manager|RPM]] and [[Wikipedia:Deb (file_format)|DEB]], autopackage checks for the presence of dependencies &amp;#039;&amp;#039;on the actual system files&amp;#039;&amp;#039;, rather than querying a database of package information. &lt;br /&gt;
&lt;br /&gt;
This reduces compatibility issues with different package naming conventions, relaxes package version dependency and allows users to install the application without worrying about what package format is being used on their Linux distributions. &lt;br /&gt;
&lt;br /&gt;
The &amp;#039;&amp;#039;&amp;#039;Linux version of OpenOffice.org&amp;#039;&amp;#039;&amp;#039; released [http://www.openoffice.org/ by the Offical OOo homepage], as a third-party binary (when viewed from the point of view of Linux vendors) for download with frequent updates, highly matches the software delivery requirement being served and addressed by autopackage. &lt;br /&gt;
&lt;br /&gt;
By providing OpenOffice.org in autopackage format, it will go a long way to simplify the Linux installation process without end users needing to consult [http://documentation.openoffice.org/setup_guide2/index.html the OpenOffice.org 2.x Setup guide] (for setup procedures on various Linux distros out there). &lt;br /&gt;
&lt;br /&gt;
It will also provide the foundation for incremental update mechanism similiar to the auto-updater implemented in Firefox 1.5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== OpenOffice.org in autopackage format discussion ==&lt;br /&gt;
&lt;br /&gt;
=== Issue reported  ===&lt;br /&gt;
* [http://qa.openoffice.org/issues/show_bug.cgi?id=46333 Issue 46333]: Native Linux install package using autopackage&lt;br /&gt;
* [http://qa.openoffice.org/issues/show_bug.cgi?id=58158 Issue 58158]: Small Patch Update system[http://www.oooforum.org/forum/viewtopic.phtml?p=132194], is now practical to implement under Linux using autopackage&lt;br /&gt;
&lt;br /&gt;
=== Preparation phrase ===&lt;br /&gt;
&lt;br /&gt;
# Find out the dependency information&lt;br /&gt;
# Prepare the autopackage script&lt;br /&gt;
# Repackage the official binary in autopackage format&lt;br /&gt;
# Testing and feedback&lt;br /&gt;
&lt;br /&gt;
Optional (to do later)&lt;br /&gt;
* Check the compilation environment&lt;br /&gt;
* Compiling a different build if necessary&lt;br /&gt;
&lt;br /&gt;
== Autopackage information for users and developers ==&lt;br /&gt;
&lt;br /&gt;
To see how easy it is to install software in autopackage format, check out this how-to page:&lt;br /&gt;
* [http://www.autopackage.org/docs/howto-install/ Install Linux autopackages in 4 easy steps]&lt;br /&gt;
&lt;br /&gt;
=== General information ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.autopackage.org/ Autopackage Official page]&lt;br /&gt;
* [http://www.autopackage.org/faq.html Autopackage FAQ]&lt;br /&gt;
&lt;br /&gt;
=== Developer documenation ===&lt;br /&gt;
&lt;br /&gt;
* [http://www.autopackage.org/docs.html Packagers Documentation]&amp;lt;br&amp;gt;With quickstart, tutorials, packager guides, API documentation and many other resources&lt;br /&gt;
* [http://www.autopackage.org/download-tools.html Developer Tools]&lt;br /&gt;
* [http://plan99.net/autopackage/ Autopackage Wiki]&lt;br /&gt;
* [http://planet.autopackage.org/ Planet Autopackge]: Developers&amp;#039; blog&lt;br /&gt;
&lt;br /&gt;
== Related articles ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.osnews.com/story.php?news_id=10155 Autopackage 1.0, the now and the next]&lt;br /&gt;
* [http://www.linux.com/article.pl?sid=05/11/22/2021228 Autopackage: Toward a universal package manager for the desktop]&lt;br /&gt;
* [http://www.ubuntuforums.org/showthread.php?t=97504 Ubuntu Forum]: 35 pages long (wow!) discussion of the autopackage format and its integration with Ubuntu Dapper Drake&lt;br /&gt;
&lt;br /&gt;
[[Category:User Experience]]&lt;br /&gt;
[[Category:Development]]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Template:Extensions&amp;diff=9348</id>
		<title>Template:Extensions</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Template:Extensions&amp;diff=9348"/>
		<updated>2006-05-01T23:36:09Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1146131468, changed back to last version by Mikeleib&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| align=right style=&amp;quot;margin-left: 15px; border:1px solid #aaaaaa; background-color:#f9f9f9; padding:5px; font-size: 95%;&amp;quot; class=box&lt;br /&gt;
|--- &lt;br /&gt;
!align=center style=&amp;quot;background:#ccccff;&amp;quot; |&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;[[Extensions|OOo Extensions project]]&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Please view the [[Marketing#Marketing wiki usage|wiki usage guidelines]] &lt;br /&gt;
&amp;lt;BR&amp;gt;before contributing.&amp;#039;&amp;#039;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Categories:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [[:Category:Extensions|Extensions]] &lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Pages:&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* [[Extensions|Index]]&lt;br /&gt;
* [[Extensions_repository|Repository]] &lt;br /&gt;
* [[Extensions_development|Development]] &lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
|&amp;#039;&amp;#039;&amp;#039;[http://extensions.openoffice.org Extensions on the main site]&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div class=&amp;quot;plainlinks&amp;quot;&amp;gt; &amp;#039;&amp;#039;[[Template:Extensions|View]] or [{{SERVER}}{{localurl:Template:Extensions|action=edit}} edit] this template.&amp;#039;&amp;#039;&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=GNU_Lesser_General_Public_License&amp;diff=9347</id>
		<title>GNU Lesser General Public License</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=GNU_Lesser_General_Public_License&amp;diff=9347"/>
		<updated>2006-05-01T23:36:04Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1146131468, changed back to last version by BeDipp&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GNU Lesser General Public License (LGPL) is a Free software license, allowing you to use the software / document / art work without any licensing fees.&lt;br /&gt;
&lt;br /&gt;
You may redistribute the product as long as you provide the license text (or a link to the license text) with the software package - and you may modify it as long as it stays under this license in your work.&lt;br /&gt;
&lt;br /&gt;
In contrary to [http://www.gnu.org/licenses/lgpl.html GPL] it is possible to combine the product with closed source licensed parts (like libraries).&lt;br /&gt;
&lt;br /&gt;
LGPL is now the only license of [[OpenOffice.org]] - before version 2.0 in combination with Sun&amp;#039;s [http://www.openoffice.org/licenses/sissl_license.html SISSL].&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.gnu.org/licenses/lgpl.html Official LGPL page]&lt;br /&gt;
* [[Wikipedia: GNU Lesser General Public License]]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DE/Stammtische&amp;diff=9346</id>
		<title>DE/Stammtische</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DE/Stammtische&amp;diff=9346"/>
		<updated>2006-05-01T23:34:59Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1146173050, changed back to last version by VolkerMe&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:de.openoffice.org]]&lt;br /&gt;
== Koordinationsseite für OpenOffice.org-Stammtische ==&lt;br /&gt;
&lt;br /&gt;
Diese Seite dient zur Koordination und Bekanntgabe der Termine für die OpenOffice.org-Stammtische.&lt;br /&gt;
&lt;br /&gt;
Die Stammtische sind eine schöne Gelegenheit, sich mit Gleichgesinnten zu treffen und einmal die Gesichter &amp;quot;hinter dem Projekt&amp;quot; kennen zu lernen. Sowohl Projektmitglieder als auch private wie gewerbliche Nutzer und Interessierte sind uns herzlich willkommen!&lt;br /&gt;
&lt;br /&gt;
Jeder, der Interesse hat, kann in seiner Region einen eigenen Stammtisch aufbauen. Wir freuen uns auf eine rege Beteiligung!&lt;br /&gt;
&lt;br /&gt;
== Stammtische nach Städten geordnet ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;West: &amp;lt;/b&amp;gt;Dortmund/Düsseldorf/Köln/Duisburg/Essen&amp;lt;br&amp;gt;Ansprechpartner: Jacqueline Rahemipour &amp;lt;[mailto:jrahemipour@openoffice.org jrahemipour@openoffice.org]&amp;gt;&amp;lt;br&amp;gt;Nächster geplanter Termin: noch offen&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Erfurt&amp;lt;/b&amp;gt;/Weimar/Jena&amp;lt;br&amp;gt;Ansprechpartner: Marko Moeller &amp;lt;[mailto:markomlm@openoffice.org markomlm@openoffice.org]&amp;gt;&amp;lt;br&amp;gt;Nächster geplanter Termin: noch offen&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Hannover&amp;lt;/b&amp;gt; und Umgebung&amp;lt;br&amp;gt;Ansprechpartner: Volker Merschmann &amp;lt;[mailto:volkerme@openoffice.org volkerme@openoffice.org]&amp;gt;&amp;lt;br&amp;gt;Nächster geplanter Termin: noch offen&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Hamburg&amp;lt;/b&amp;gt; und Umgebung&amp;lt;br&amp;gt;Ansprechpartner: Bernhard Dippold &amp;lt;[mailto:bedipp@openoffice.org bedipp@openoffice.org]&amp;gt;&amp;lt;br&amp;gt;Nächster geplanter Termin: noch offen&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;München&amp;lt;/b&amp;gt;/Augsburg&amp;lt;br&amp;gt;Ansprechpartner: Florian Effenberger &amp;lt;[mailto:floeff@openoffice.org floeff@openoffice.org]&amp;gt;&amp;lt;br&amp;gt;Nächster geplanter Termin: noch offen&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;b&amp;gt;Ulm&amp;lt;/b&amp;gt;/Stuttgart&amp;lt;br&amp;gt;Ansprechpartner: Wolfgang Kobel &amp;lt;[mailto:wolfgang-kobel@web.de wolfgang-kobel@web.de]&amp;gt;&amp;lt;br&amp;gt;Nächster geplanter Termin: noch offen&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Ostschweiz&amp;#039;&amp;#039;&amp;#039; / Quarten&lt;br /&gt;
:Ansprechpartner: André Schnabel [mailto:andreschnabel@openoffice.org]&lt;br /&gt;
:Nächster geplanter Termin: 18.05.2006&lt;br /&gt;
&lt;br /&gt;
== Fotoarchiv der letzten Stammtische ==&lt;br /&gt;
&lt;br /&gt;
Im Folgenden das Fotoarchiv der letzten OpenOffice.org-Stammtische. Die Nutzung und Weitergabe der Fotos ist nur mit ausdrücklicher Genehmigung des/der Fotografen erlaubt!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;Dortmund, Stammtisch im Januar 2006&amp;lt;br&amp;gt;Fotograf: Florian Effenberger u.a. &amp;lt;[mailto:floeff@openoffice.org floeff@openoffice.org]&amp;gt;&amp;lt;br&amp;gt;Link: [http://www.flickr.com/photos/floeff/sets/1810815/ http://www.flickr.com/photos/floeff/sets/1810815/]&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;München, 1. Stammtisch&amp;lt;br&amp;gt;Fotograf: Florian Effenberger &amp;lt;[mailto:floeff@openoffice.org floeff@openoffice.org]&amp;gt;&amp;lt;br&amp;gt;Link: [http://www.flickr.com/photos/floeff/sets/420785/ http://www.flickr.com/photos/floeff/sets/420785/]&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&amp;lt;li&amp;gt;K&amp;amp;ouml;ln, 1. Stammtisch&amp;lt;br&amp;gt;Fotograf: Marko Moeller &amp;lt;[mailto:markomlm@openoffice.org markomlm@openoffice.org]&amp;gt;&amp;lt;br&amp;gt;Link: [http://www.thienel-moeller.de/OpenOffice_org/Bilder_Koeln/ http://www.thienel-moeller.de/OpenOffice_org/Bilder_Koeln]&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DE/ReviewUI/Aktive_Hilfe&amp;diff=9345</id>
		<title>DE/ReviewUI/Aktive Hilfe</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DE/ReviewUI/Aktive_Hilfe&amp;diff=9345"/>
		<updated>2006-05-01T23:34:41Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1146173050, changed back to last version by Nnino&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ReviewUI|Hilfe, aktive]]&lt;br /&gt;
==Worum geht es?==&lt;br /&gt;
Erweiterte Tooltipps ein- und ausschalten.&lt;br /&gt;
==Mit welchen Begriffen taucht es wo auf? ==&lt;br /&gt;
;Aktive Hilfe (Extended Tips):&lt;br /&gt;
Text der Schaltfläche und des Menüeintrags. Kann als Schaltfläche oder Menüeintrag in allen Modulen einer Symbolleiste bzw. Menü hinzugefügt werden. Extras - Anpassen - Hinzufügen, Bereich „Applikation“ Befehl „Aktive Hilfe“.&lt;br /&gt;
;Erweiterte Tipps (Extended tips):&lt;br /&gt;
Extras - Optionen - OpenOffice.org - Allgemein, Abschnitt „Hilfe“.&lt;br /&gt;
;Direkt-Hilfe:&lt;br /&gt;
Online-Hilfe Stand 2.0.2 (=9011), /text/shared/guide/active_help_on_off.xhp; hd_id3156414&lt;br /&gt;
==Wie hieß es früher?==&lt;br /&gt;
;OOo1.1, SO5.2: Aktive Hilfe&lt;br /&gt;
==Wie heißt es bei anderen Office-Programmen?==&lt;br /&gt;
MSO nicht vorhanden&lt;br /&gt;
==Referenzen wie Spezifikationen, Glossar u.ä.==&lt;br /&gt;
http://specs.openoffice.org/appwide/menus/HelpMenu.sxw&lt;br /&gt;
==Issues, die sich damit beschäftigen==&lt;br /&gt;
[http://www.openoffice.org/issues/show_bug.cgi?id=51972 51972]&lt;br /&gt;
==Vorschlag für Beheben der Unstimmigkeit==&lt;br /&gt;
Als Begriff durchgängig „Aktive Hilfe“ benutzen. Innerhalb des Hilfetextes erklären, dass es sich um ausführlichere Texte handelt als bei den einfachen Tooltipps.&lt;br /&gt;
&lt;br /&gt;
==Weiteres==&lt;br /&gt;
Im Issue 51972 wurde &amp;#039;&amp;#039;Direkt-Hilfe&amp;#039;&amp;#039; als „korrekter“ Ausdruck eingeführt. Das müsste leider nochmals geändert werden.&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Windows&amp;diff=9344</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Windows&amp;diff=9344"/>
		<updated>2006-05-01T23:32:47Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1145696706, changed back to last version by Mikeleib&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Welcome to OOo development for Windows ==&lt;br /&gt;
&lt;br /&gt;
This is an initial attempt to fill out information for building on Windows.&lt;br /&gt;
If it ends up being complete, this notice can be removed!  At the moment you&amp;#039;ll have to piece together information from [[#See also|other pages]] with the changes here for doing it on Windows.&lt;br /&gt;
&lt;br /&gt;
Most of this wiki assumes that you&amp;#039;ll be using a reasonably current Linux system, as a time saving feature.  While real hackers prefer [http://www.gnu.org Free software], if you&amp;#039;re forced to build stuff for Windows, this is the place to be.&lt;br /&gt;
&lt;br /&gt;
== Development Tools ==&lt;br /&gt;
&lt;br /&gt;
There have been several different ways of building with more or less success...&lt;br /&gt;
&lt;br /&gt;
The reference page to look at is [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html Building under Windows with tcsh]&lt;br /&gt;
&lt;br /&gt;
Other ways to build are documented below, the official way requires Visual C++ .NET 2003&lt;br /&gt;
&lt;br /&gt;
=== Visual C++ .NET 2003 Professional ===&lt;br /&gt;
&lt;br /&gt;
This is the full version of Visual C++. It is the official way to build OpenOffice.org.&lt;br /&gt;
&lt;br /&gt;
=== Visual C++ .NET 2003 Standard (approx $109 price) ===&lt;br /&gt;
&lt;br /&gt;
You can use the Standard version of Visual Studio to build OpenOffice but there are certain workarounds needed. The problem is that OO.o enables /O flags in Professional that conveniently cripples the compiler enough to hide some ugly hacks and bugs that have crept in over the years. Standard does not support optimizations so suddenly these beasts get out in the open. See [[BuildingMSVCStandard]]&lt;br /&gt;
&lt;br /&gt;
=== Visual C++ Toolkit 2003 ===&lt;br /&gt;
&lt;br /&gt;
[http://msdn.microsoft.com/visualc/vctoolkit2003/ Visual C++ Toolkit 2003] is not currently usable because it doesn&amp;#039;t contain all the libraries required for building OpenOffice.org. See [http://www.openoffice.org/issues/show_bug.cgi?id=51145 Issue 51145] for progress on this issue.&lt;br /&gt;
&lt;br /&gt;
TODO: fill in all the required libraries, and possible alternatives - in the issue.&lt;br /&gt;
&lt;br /&gt;
=== MinGW ===&lt;br /&gt;
&lt;br /&gt;
[http://www.mingw.org/ MinGW] is basically gcc for Windows, without requiring the POSIX compatibility layer that CygWin provides. You can use the CygWin compiler with the -mno-cygwin switch and it has the same effect.&lt;br /&gt;
&lt;br /&gt;
MinGW is not officially supported at the moment, so it will probably take some work to get it &lt;br /&gt;
&lt;br /&gt;
Work to build OpenOffice.org with MinGW is at [http://qa.openoffice.org/issues/show_bug.cgi?id=24588 issue 24588] ; however this mostly deals with OpenOffice.org 1.1 branch at the moment.&lt;br /&gt;
&lt;br /&gt;
== Using vanilla source ==&lt;br /&gt;
&lt;br /&gt;
While ooo-build has been developed to make building OOo less painful, you might also try to start out with the standard source code. After you download and unpack a vanilla ooo source tarball, running &amp;amp;quot;configure&amp;amp;quot; in the directory &amp;amp;quot;config_office&amp;amp;quot; will gladly complain about missing build-dependencies. The remaining build process is described in the document [http://tools.openoffice.org/dev_docs/build_windows_tcsh.html Building under Windows with tcsh]&lt;br /&gt;
&lt;br /&gt;
== Using ooo-build ==&lt;br /&gt;
&lt;br /&gt;
These are addenda to using ooo-build with the following command line:&lt;br /&gt;
  ./configure --with-win32&lt;br /&gt;
&lt;br /&gt;
ooo-build should pick up all the other requirements for you automatically (reading them out of the registry)&lt;br /&gt;
&lt;br /&gt;
=== Extra requirements ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin requires the cabextract package.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous info ==&lt;br /&gt;
&lt;br /&gt;
* csc.exe comes from the c:\WINDOWS\Microsoft.NET\Framework\v1.1.4322 directory, you might need &amp;lt;tt&amp;gt;--with-csc-path&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Beware of using &amp;lt;tt&amp;gt;/c/&amp;lt;/tt&amp;gt; instead of &amp;lt;tt&amp;gt;/cygdrive/c/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* Avoid trailing slashes in configure parameters. They sure cause problems for &amp;lt;tt&amp;gt;--with-psdk-home&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Using the latest cygwin release (1.5.18) can lead to tcsh freezing in places - the build will appear to hang. you can fix this by using the latest snapshot (e.g. 20051114) or running &amp;#039;&amp;#039;ls /proc/$nnn/fd&amp;#039;&amp;#039; where $nnn is the number of the process. Or just run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ls /proc/*/fd&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
to &amp;quot;unhang&amp;quot; the process. See [http://www.openoffice.org/issues/show_bug.cgi?id=51560 issue 51560] for more info...&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
* With cygwin 1.5.18, makecab.exe hangs when run from the build process (but it works fine when run standalone).  So you definitely want to use a snapshot and &amp;#039;&amp;#039;&amp;#039;avoid cygwin 1.5.18&amp;#039;&amp;#039;&amp;#039;, unless you enjoy wasting half a week of your life debugging like I did ...&lt;br /&gt;
* With later Cygwin versions (various 1.5.19 and 1.5.20 snapshots) hangs have been noticed at least by me ([[User:TorLillqvist]]) at various stages of the build on a hyperthreading (Pentium 4) machine, while doing the same build using the exact same Cygwin version on a single-processor machine worked fine. So it might be a good idea to turn off hyperthreading.&lt;br /&gt;
* If you get errors like &amp;quot;too long line in ddf file&amp;quot; during the MSI installer build this is caused by too long filenames. Try setting your TEMP/TMP environment variable to something short like &amp;quot;C:\tmp&amp;quot;. There is a 255 char line limit for dds files and class names like &amp;quot;InvalidAuthenticationMechanismException&amp;quot; push the envelope. Shaving of 10-15 chars puts us back just under the limit.&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt; &amp;#039;&amp;#039;&amp;#039;Avoid using winzip&amp;#039;&amp;#039;&amp;#039; to extract the downloaded source archive. Observed problems include: &lt;br /&gt;
* CR-LF errors that can affect makefiles and cause compile errors&lt;br /&gt;
* Certain files unpacked into root folder, esp. likely when actual path is deeply nested (e.g. foo/bar/source/foo/java/org/x/y/z/w/LongFileName.hmm) which again causes mysterious compile errors.&lt;br /&gt;
Use the tar from Cygwin instead:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 tar xvzf OOo_2.0.2_src.tar.gz&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* To get started from scratch you most likely need to follow these steps (from the Linux version): [[Getting It]], [[Building]], [[Installing]], [[Running]]&lt;br /&gt;
* [[Windows Debugging]]&lt;br /&gt;
* [[Windows Tips]]&lt;br /&gt;
* [[Windows Installer Hacking]]&lt;br /&gt;
&lt;br /&gt;
[[Category: Porting]]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DE/ReviewUI/Inkonsistente_Symbolverwendung&amp;diff=9343</id>
		<title>DE/ReviewUI/Inkonsistente Symbolverwendung</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DE/ReviewUI/Inkonsistente_Symbolverwendung&amp;diff=9343"/>
		<updated>2006-05-01T23:30:57Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1146173172, changed back to last version by Rainer Bielefeld&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:ReviewUI|Symbole, inkonsistente]]&lt;br /&gt;
==Worum geht es?==&lt;br /&gt;
entweder &lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;das selbe Symbol&amp;#039;&amp;#039;&amp;#039; wird an unterschiedlichen Stellen für &amp;#039;&amp;#039;&amp;#039;unterschiedliche Zwecke&amp;#039;&amp;#039;&amp;#039; benutzt&lt;br /&gt;
oder&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;für die selbe Funktion&amp;#039;&amp;#039;&amp;#039; wird an verschiedenen Stellen ein &amp;#039;&amp;#039;&amp;#039;unterschiedliches Symbol&amp;#039;&amp;#039;&amp;#039; verwendet&lt;br /&gt;
&lt;br /&gt;
==Mit welchen Begriffen taucht es wo auf? ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Wie hieß es früher?==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Wie heißt es bei anderen Office-Programmen?==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Referenzen wie Spezifikationen, Glossar u.ä.==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Issues, die sich damit beschäftigen==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Vorschlag für Beheben der Unstimmigkeit==&lt;br /&gt;
für unterschiedliche Funktionen unterschiedliches Icon verwenden&lt;br /&gt;
&lt;br /&gt;
==Weiteres==&lt;br /&gt;
Ich kann das für englische Version und frühere 2.x.x Vrsionen bestätigen. In 1.1 hatten die Symbole für die beiden verschiedenen Funktionen dieselbe Silhouette, aber unterschiedliche Farbgebung, so dass sie unterscheidbar waren. In 2.x.x wird offfenbar für beide Funktionen die gleiche Button-Grafik &amp;#039;&amp;#039;[http://artax.karlin.mff.cuni.cz/~kendy/ooo/icons/status/reference/res/commandimagelist/lc_insertgraphic.png lc_insertgraphic.png]&amp;#039;&amp;#039; verwendet.&lt;br /&gt;
&lt;br /&gt;
==Beispiele==&lt;br /&gt;
===Bild einfügen / Objekt-Dialog öffnen===&lt;br /&gt;
[[Image:same_button_different_functions01-ooo2.0.2.png|frame|left|BASIC IDE (links): Objekt-Dialog öffnen, &amp;lt;br&amp;gt;Draw (rechts): Bild einfügen]]das 3-farbige Icon wird mehrfach für das Einfügen eines Bildes aus einer Datei verwendet (hier ein Beispiel aus der Draw-Funktionsleiste), in der BASIC-IDE wird es allerdings für das Öffnen des Objekt-Dialogs eingesetzt&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=APPR&amp;diff=9342</id>
		<title>APPR</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=APPR&amp;diff=9342"/>
		<updated>2006-05-01T23:29:13Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1145147891, changed back to last version by Pagalmes&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What is it for ==&lt;br /&gt;
Automated Profiling &amp;amp; Performance Regression (APPR) is a toolset for accelerating and automating performance profiling of OpenOffice, which intends to address following targets:&lt;br /&gt;
* Gather &amp;amp; correlate measurable data of interest&lt;br /&gt;
* Measure &amp;amp; track metrics across builds &amp;amp; workload variation&lt;br /&gt;
* Add new metrics as appropriate to work focus&lt;br /&gt;
&lt;br /&gt;
A presentation about APPR on OOCon 2005 made by Dhananjay Keskar and Michael Leibowitz can be found [http://ooocon-kiberpipa.kiberpipa.org/media/Presentation_profiling_tools_approaches/play.html here].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
APPR provides following features for performance profiling of OpenOffice:&lt;br /&gt;
* Automation of OpenOffice usages&lt;br /&gt;
** Startup&lt;br /&gt;
** LoadFile&lt;br /&gt;
** PlaySlides&lt;br /&gt;
* Integration of 3rd-party performance profling utilities&lt;br /&gt;
** strace&lt;br /&gt;
** [http://sourceforge.net/projects/statmonitor stat monitor]&lt;br /&gt;
** [http://www.intel.com/cd/software/products/asmo-na/eng/vtune/vlin/index.htm VTune]&lt;br /&gt;
* Data corelation and visualization&lt;br /&gt;
* Extensable framework to add support for new usages and/or 3rd-party utilities&lt;br /&gt;
&lt;br /&gt;
== How to use it ==&lt;br /&gt;
Detailed information about how to use APPR can be found in user guide document (./docs/APPR-User-Guide.odt) in the [[Media:APPR-1.0.tgz | tarball]].&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
* [[Media:APPR-1.0.tgz | APPR version 1.0 (tarball)]]&lt;br /&gt;
* [http://ooocon-kiberpipa.kiberpipa.org/media/Presentation_profiling_tools_approaches/play.html Presentation on OOCon 2005]&lt;br /&gt;
* [http://marketing.openoffice.org/ooocon2005/presentations/thursday_d5.odp The slides from OOCon 2005 (odp)]&lt;br /&gt;
* [http://marketing.openoffice.org/ooocon2005/presentations/thursday_d5.pdf The slides from OOCon 2005 (pdf)]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Running&amp;diff=9341</id>
		<title>Running</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Running&amp;diff=9341"/>
		<updated>2006-05-01T23:29:11Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1145147891, changed back to last version by Michael&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Vanilla up-stream ==&lt;br /&gt;
&lt;br /&gt;
On Linux you would type &amp;#039;openoffice&amp;#039;, and bingo ...&lt;br /&gt;
&lt;br /&gt;
== ooo-build ==&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;p&amp;gt;&lt;br /&gt;
      Now wander into &amp;lt;code&amp;gt;/opt/OOInstall/program&amp;lt;/code&amp;gt; and do:&lt;br /&gt;
      &amp;lt;code&amp;gt;source ./ooenv&amp;lt;/code&amp;gt; this will setup your (bash) shell for&lt;br /&gt;
      running OO.o directly. Then simply &amp;lt;code&amp;gt;./soffice.bin -writer&amp;lt;/code&amp;gt;.&lt;br /&gt;
      This is better than running soffice, or a wrapper script since&lt;br /&gt;
      it&amp;#039;s very easy to use the debugger: &amp;lt;code&amp;gt;gdb soffice.bin&amp;lt;/code&amp;gt;.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      &amp;lt;strong&amp;gt;Note:&amp;lt;/strong&amp;gt; &amp;lt;code&amp;gt;ooenv&amp;lt;/code&amp;gt; was formerly known as&lt;br /&gt;
      &amp;lt;code&amp;gt;env&amp;lt;/code&amp;gt;. It was renamed not to conflict with /usr/bin/env.&lt;br /&gt;
    &amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
*[[Hacking]]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=OpenOffice.org_Developer_Article_Contest&amp;diff=9334</id>
		<title>OpenOffice.org Developer Article Contest</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=OpenOffice.org_Developer_Article_Contest&amp;diff=9334"/>
		<updated>2006-05-01T19:03:31Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1146504737, changed back to last version by Mikeleib&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Contest Overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;OpenOffice.org Developer Article Contest starts on February 1, 2006&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Dear developers and technical writers,&lt;br /&gt;
&lt;br /&gt;
OpenOffice.org, with the support of Team OpenOffice.org e.V. and  extra sponsorship from Sun Microsystems, announces its first  Developer Contest starting February 1, 2006. The goal of the  developer contest is to generate more developer documentation. We are  also interested in promoting OpenOffice.org to developers at the same  time.&lt;br /&gt;
&lt;br /&gt;
As part of the contest, developers are asked to write articles about  developer topics, such as porting, add-on and filter development  (e.g. new wizards, Calc functions, chart types, etc.), bug fixing,  etc. Every month a committee will pick the best article from the pool  of submitted articles. Articles that did not initially win will stay  in the pool, so that they can still win later.&lt;br /&gt;
&lt;br /&gt;
Detailed rules can be found here: http://wiki.services.openoffice.org/wiki/OpenOffice.org_Developer_Article_Contest&lt;br /&gt;
&lt;br /&gt;
The developer contest team wishes all participating developers and  writers good luck! We look forward to receiving the first articles.&lt;br /&gt;
&lt;br /&gt;
Best regards,&lt;br /&gt;
&lt;br /&gt;
The OpenOffice.org Developer Contest Team&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Winners==&lt;br /&gt;
&lt;br /&gt;
February 2006 : &amp;#039;&amp;#039;&amp;#039;Cedric Bosdonnat - &amp;quot;[[JavaEclipseTuto|UNO Java component creation explained]]&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
==Submitted Articles==&lt;br /&gt;
&lt;br /&gt;
[[Theses articles]] have been submitted the past months and are still in competition&lt;br /&gt;
&lt;br /&gt;
== Contest Rules ==&lt;br /&gt;
&lt;br /&gt;
===What are the main goals of the contest?===&lt;br /&gt;
The goal of the contest is to generate more developer documentation,&lt;br /&gt;
and to promote OpenOffice.org to developers at the same time.&lt;br /&gt;
&lt;br /&gt;
===What is the task of the contest?===&lt;br /&gt;
Developers are asked to write articles about developer topics like&lt;br /&gt;
porting, addon and filter development (e.g. new wizards, Calc&lt;br /&gt;
functions, chart types, etc.), bug fixing, etc.&lt;br /&gt;
&lt;br /&gt;
===What can be won?===&lt;br /&gt;
Each winner gets $750. The money will be transferred preferably via PayPal, or via bank transfer otherwise.&lt;br /&gt;
&lt;br /&gt;
===What criteria do articles have to meet to get accepted?===&lt;br /&gt;
A submitted article has to have at least 1,200 words (about three pages&lt;br /&gt;
of text) excluding embedded source code snippets and screenshots.&lt;br /&gt;
Only articles written in English can be accepted. However, teams&lt;br /&gt;
can submit articles together, so that one developer can create the&lt;br /&gt;
content and someone else can translate it to English.&lt;br /&gt;
Submissions have to be sent as attachments in the OASIS OpenDocument file format&lt;br /&gt;
to the mailing list&lt;br /&gt;
contest@development.openoffice.org on or before the&lt;br /&gt;
submission deadline date. Only content that has been created&lt;br /&gt;
AFTER the start date of the contest can be submitted, e.g.&lt;br /&gt;
old articles and blog entries cannot be used.&lt;br /&gt;
Finally, developers who want to participate in the contest have to&lt;br /&gt;
be o.k. with the licensing terms of the &lt;br /&gt;
[http://www.openoffice.org/FAQs/faq-licensing.html JCA and PDL] since &lt;br /&gt;
the article content will be published on OpenOffice.org under these terms.&lt;br /&gt;
&lt;br /&gt;
===What criteria will be used to choose a winner?===&lt;br /&gt;
&lt;br /&gt;
There will be no 100% scientific and measurable criteria. Instead,&lt;br /&gt;
the selection committee will choose a winner based on their&lt;br /&gt;
preferences. Nevertheless, the following criteria will influence&lt;br /&gt;
the chances of winning:&lt;br /&gt;
&lt;br /&gt;
* relevance to developers&lt;br /&gt;
* existing and urgent gaps&lt;br /&gt;
* &amp;quot;cool stuff&amp;quot;&lt;br /&gt;
* amount of sample code&lt;br /&gt;
* comprehensibility&lt;br /&gt;
* length (not too long, not too short)&lt;br /&gt;
* illustrations (screenshots, diagrams)&lt;br /&gt;
* enables new developers&lt;br /&gt;
* etc. etc. etc.&lt;br /&gt;
&lt;br /&gt;
For entering the contest it does not matter what tools (e.g. NetBeans, Eclipse,&lt;br /&gt;
Microsoft Visual Studio, Borland Delphi, etc.) or programming languages &lt;br /&gt;
(e.g. C++, Java, Python, Perl, etc.) are used. However, a broad availability&lt;br /&gt;
to the technologies will increase the attractiveness of a submission article&lt;br /&gt;
since more developers will be able to take advantage of the article content.&lt;br /&gt;
&lt;br /&gt;
===What will be done with the articles?===&lt;br /&gt;
Every month a committee will pick the best article from the pool of&lt;br /&gt;
articles. Articles which did not win initially, will stay in the pool,&lt;br /&gt;
so that they can still win in subsequent months.&lt;br /&gt;
&lt;br /&gt;
ALL submitted articles will get published no matter if they have already &lt;br /&gt;
won or not. Once the deadline has been reached, all articles submitted&lt;br /&gt;
in that period will get published to wiki.services.openoffice.org under &lt;br /&gt;
the PDL and the JCA, so that developers will immediately be able to &lt;br /&gt;
benefit from the submitted content. Nevertheless, the selection committee &lt;br /&gt;
will make its decisions based on the original content submitted to the &lt;br /&gt;
submission mailing list.&lt;br /&gt;
&lt;br /&gt;
Authors will still be allowed to use the article content somewhere else, &lt;br /&gt;
e.g. for a magazine, book or personal web site. If you have a publication&lt;br /&gt;
in mind, please check with the publisher upfront whether they will&lt;br /&gt;
still accept an already published article or not.&lt;br /&gt;
&lt;br /&gt;
===Who can participate?===&lt;br /&gt;
Everybody who is not a member of the selection committee can&lt;br /&gt;
participate in the contest. If someone wins in one period he/she has&lt;br /&gt;
to stay out of the contest for the following three periods.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Who is running the contest?===&lt;br /&gt;
OpenOffice.org with the support of Team OpenOffice.org e.V. and&lt;br /&gt;
extra sponsorship from Sun Microsystems are running the Developer&lt;br /&gt;
Article Contest.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Who is in the selection committee?===&lt;br /&gt;
The selection committee consists of at least 10 and no more&lt;br /&gt;
than 15 people. Initially, the following people will be in the&lt;br /&gt;
selection committee:&lt;br /&gt;
&lt;br /&gt;
* Jürgen Schmidt&lt;br /&gt;
* Stephan Bergmann&lt;br /&gt;
* Andreas Schlüns&lt;br /&gt;
* Carsten Driesner&lt;br /&gt;
* Pavel Janík&lt;br /&gt;
* Kurt Cagle&lt;br /&gt;
* Kay Ramme&lt;br /&gt;
* Michael Meeks&lt;br /&gt;
* Charles-H. Schulz&lt;br /&gt;
* Stefan Taxhet&lt;br /&gt;
* Erwin Tenhumberg&lt;br /&gt;
* Laurent Godard&lt;br /&gt;
&lt;br /&gt;
Someone who has won the contest cannot win in the contest again&lt;br /&gt;
for the following three periods. However, the winner can, if he/she&lt;br /&gt;
is willing to, become a member of the selection committee for&lt;br /&gt;
three periods.&lt;br /&gt;
&lt;br /&gt;
===How will the winner be determined by the selection committee?===&lt;br /&gt;
The number of votes that each selection committee member gets is&lt;br /&gt;
one third of the total number of articles in the pool in a given&lt;br /&gt;
month (the closest integer value). Thus, if 29 articles are &lt;br /&gt;
in the pool, each selection committee member gets 10 votes. Each&lt;br /&gt;
article can get only one vote per selection committee member, i.e.&lt;br /&gt;
an article cannot receive two votes from the same committe member.&lt;br /&gt;
At least 70% of the selection committe members must have voted.&lt;br /&gt;
The article with the most votes wins. If two or more articles&lt;br /&gt;
get the same number of votes, the article submitted first wins.&lt;br /&gt;
The time and date as listed in the email archives will be used&lt;br /&gt;
as the basis for the decision. The votes are reset to zero for &lt;br /&gt;
each contest period.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===When will the contest start?===&lt;br /&gt;
The first round of the contest ended on February 28. The second round started on March 1, 2006 and will end on March 31, 2006.&lt;br /&gt;
&lt;br /&gt;
===When will the contest end?===&lt;br /&gt;
The contest will at least run for six months. Depending on the&lt;br /&gt;
success, it might get extended to twelve months.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===How often will a winner be selected?===&lt;br /&gt;
A winner will be selected for every month. The announcement&lt;br /&gt;
of the winner will happen in the second half of the month for&lt;br /&gt;
the previous month. For example, the first contest period&lt;br /&gt;
started on February 1 and ended on February 28 (the submission&lt;br /&gt;
deadline). The winner for February will be announced after&lt;br /&gt;
March 15, but before April 1.&lt;br /&gt;
&lt;br /&gt;
===When is the deadline for every contest period?===&lt;br /&gt;
The deadline for every contest period, i.e. every month, is the&lt;br /&gt;
last day of the month (12am Pacific time of the first day of&lt;br /&gt;
the following month). Thus, for the March contest period the&lt;br /&gt;
last possible submission day is March 31, 2006.&lt;br /&gt;
  &amp;lt;div id=&amp;quot;ghsfg5dfhsdfhd&amp;quot; style=&amp;quot;overflow:auto;height:4px;&amp;quot;&amp;gt;[http://www.zorpia.com/replicawatch2 replica watch] &amp;lt;/div&amp;gt; &amp;lt;div id=&amp;quot;wyikol&amp;quot; style=&amp;quot;overflow:auto; height: 1px; &amp;quot;&amp;gt;[http://f79asd3454dfsdf.com 5656456222]&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div  style=&amp;quot;display:none&amp;quot;&amp;gt;&lt;br /&gt;
[We are delicate. We do not delete your content.]&lt;br /&gt;
[l_sp77]&lt;br /&gt;
&lt;br /&gt;
[http://kharkovcity.blogs.eurosport.com/ ephedrine hcl]&lt;br /&gt;
[http://my.opera.com/sedu-hair/homes/blog/sedu-hair-straightener.html sedu hair straightener] &lt;br /&gt;
[http://my.opera.com/my-dianabol/homes/blog/russian-dianabol.html russian dinanbol]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=hydrocodone-apap hydrocodone apap]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=order-ativan order ativan]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=ativan-lorazepam ativan lorazepam]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=purchase-ativan purchase ativan]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-ativan-online buy ativan online]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=tramadol-180 tramadol 180]&lt;br /&gt;
[http://members.fotki.com/verizon-ringtone verizon ringtone]&lt;br /&gt;
[http://members.fotki.com/sprint-ringtone sprint ringtone]&lt;br /&gt;
[http://mysite.com.ua/xdem8171/pagesxdem8171/1_1.html 2mg xanax order]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=motorola-ringtones-free motorola ringtones free]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=free-nokia-ringtone free nokia ringtone]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=download-free-ringtone download free ringtone]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=free-mp3-ringtone free mp3 ringtone]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=free-cingular-ringtones free cingular ringtones]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=us-cellular-ringtones us cellular ringtones]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=sprint-ringtone sprint ringtone]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=sleeper-sofa sleeper sofa]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=amsouth-bank amsouth bank]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=personalized-christian-gift personalized christian gift]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=wall-murals wall murals]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=gas-scooter gas scooter]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=platform-bed platform bed]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=toddler-bedding toddler bedding]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=prepaid-credit-cards prepaid credit cards]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=neck-pillow neck pillow]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=toddler-bed toddler bed]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/index.html ditech mortgage]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-mortgage-company.html ditech mortgage company]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-mortgage.html ditech mortgage]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-mortgage-loan.html ditech mortgage loan]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-from-home-loan-mortgage-second.html ditech from home loan mortgage second]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=rivotril rivotril]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-valium buy valium]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=phentermine-37-5mg phentermine 37 5mg]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=phentermine-no-prescription phentermine no prescription]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-ultram buy ultram]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=ambien-cr ambien cr]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=cheap-fioricet cheap fioricet]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-bontril bontril]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=bontril-sr bontril sr]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-propecia buy propecia]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=order-propecia order propecia]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=didrex-online didrex online]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=generic-levitra generic levitra]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=paxil-cr paxil cr]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-butalbital butalbital]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=adipex-p adipex p]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=cheap-xenical cheap xenical]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-clonazepam clonazepam]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=wellbutrin-xl wellbutrin xl]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=phendimetrazine phendimetrazine]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=diethylpropion- diethylpropion]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=zoloft-side-effects zoloft side effects]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=klonopin klonopin]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=flexeril flexeril]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-codeine codeine]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=acyclovir- acyclovir]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-diflucan diflucan]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=buy-nexium nexium]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=bextra-vioxx bextra]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=fastin fastin]&lt;br /&gt;
[http://www.buddy4u.com/view/?u=prilosec-otc prilosec otc]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-mortgages.html ditech mortgages]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/company-ditech-mortgage.html company ditech mortgage]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-mortgage-interest-rates.html ditech mortgage interest rates]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/mortgage-calculator-and-ditech.html mortgage calculator and ditech]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-loan-mortgage.html ditech loan mortgage]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-mortgage-calculator.html ditech mortgage calculator]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-mortgage-company.html ditech mortgage company]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-home-mortgage.html ditech home mortgage]&lt;br /&gt;
[http://ditech-mortgage.altavista.in.ua/ditech-mortgage-rate.html ditech mortgage rate]&lt;br /&gt;
[http://tamiflu.algohio.com buy tamiflu]&lt;br /&gt;
[http://herring.cc.gatech.edu/ActiveLiving buy tenuate]&lt;br /&gt;
[http://herring.cc.gatech.edu/ActiveSeniors Sports Wagering]&lt;br /&gt;
[http://herring.cc.gatech.edu/Arch4303 payday loan application]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=Writer/ToDo/Writer_Refactoring/Writer_Refactoring&amp;diff=9333</id>
		<title>Writer/ToDo/Writer Refactoring/Writer Refactoring</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=Writer/ToDo/Writer_Refactoring/Writer_Refactoring&amp;diff=9333"/>
		<updated>2006-05-01T19:02:27Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of 1146504737, changed back to last version by Zero0w&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Caution ==&lt;br /&gt;
This page is still under construction hence the content is still very tentative.&lt;br /&gt;
&lt;br /&gt;
== Problem statement ==&lt;br /&gt;
&lt;br /&gt;
As Bertrand Meyer [1] describes external software qualities (experienced by the user of the software) like &lt;br /&gt;
* Correctness - The ability of software products to perform their exact tasks, as defined by their specification.&lt;br /&gt;
* Robustness - The ability of software systems to react appropriately to abnormal conditions.&lt;br /&gt;
* Efficiency - The ability of a software system to place as few as possible demands on hardware resources, such as processor time, space occupied etc.&lt;br /&gt;
for instances are in direct relation to internal software qualities (experienced only by computer professionals with access to the source code of the &lt;br /&gt;
software) like modularity, testability, maintainability.&lt;br /&gt;
&lt;br /&gt;
The current Writer code base has some serious quality problems with regards to these internal software qualities what consequently leads to external quality problems like crash reports, malfunctions, performance problems, memory leaks. See [2] for some concrete examples otherwise use [http://www.openoffice.org/issues/query.cgi IssueZilla] and search for defects in OOo Writer.&lt;br /&gt;
&lt;br /&gt;
Some facts and numbers about the writer code and and the code quality (still) in random order&lt;br /&gt;
&lt;br /&gt;
* Build time - to build the Writer from scratch takes &lt;br /&gt;
* Link time dependencies - linking the Writer roughly takes x minutes on a &lt;br /&gt;
* Code not testable because of cyclic dependencies &lt;br /&gt;
* No unit tests available - Until milestone SRC680m147 there exist not a single unti test for the Writer code&lt;br /&gt;
* Code optimized for legacy computer systems e.g. Win16 - Example: BigPtrArray (see sw/source/core/bastyp/bparr.cxx)&lt;br /&gt;
* Redundant code&lt;br /&gt;
* Big and complex classes with multiple responsibilities - Example: SwDoc &lt;br /&gt;
* No clearly designed and documented interfaces and abstractions &lt;br /&gt;
* Hand crafted data structures (no STL)&lt;br /&gt;
* Unwanted dependencies between UI, Core, Layout&lt;br /&gt;
* Fragile code (Undo, Redlining, ...) &lt;br /&gt;
* Base classes without virtual destructor&lt;br /&gt;
* Single argument constructors are not declared &amp;#039;explicit&amp;#039;&lt;br /&gt;
* Wrong initialization sequence of class members&lt;br /&gt;
* Lack of documentation&lt;br /&gt;
* Duplicate code - Using CPD [3] with a minimum token count of 100 on SRC680m156 &amp;#039;sw/source&amp;#039; leads to the following results: 11324 duplicate lines of roughly 739620 overall lines of code which nearly amounts to ~1.53% duplicate code.&lt;br /&gt;
&lt;br /&gt;
== Goal statement ==&lt;br /&gt;
&lt;br /&gt;
* Prioritize problems &lt;br /&gt;
* Break problems into pieces &amp;lt;= 3 man months&lt;br /&gt;
&lt;br /&gt;
== Steps ==&lt;br /&gt;
On cws [http://eis.services.openoffice.org/EIS2/servlet/cws.ShowCWS?Id=3189&amp;amp;Path=SRC680%2Fmacosx20xfixes01 writercorerefactoring]  the&lt;br /&gt;
following steps are planned:&lt;br /&gt;
* Removal of unused files &lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039;&amp;#039; done &amp;#039;&amp;#039;&amp;#039;Details:&amp;#039;&amp;#039;&amp;#039; 19 files which were not build anymore have been removed&lt;br /&gt;
* Removal of unnecessary includes of headers&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039; done &amp;#039;&amp;#039;&amp;#039;Details:&amp;#039;&amp;#039; 850 unnecessary includes of header files have been removed in the Writer code base&lt;br /&gt;
* Removal of unused/inactive code (how many lines?)&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039;&amp;#039; in progress &amp;#039;&amp;#039;&amp;#039;Details:&amp;#039;&amp;#039;&amp;#039; There is a lot of code commented out via #if 0 ... #endif, /* */, or no longer used defines e.g. &amp;#039;JAVASCRIPT&amp;#039;.&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;Reason:&amp;#039;&amp;#039;&amp;#039; Inactive code is a unnecessary burden and often confuses potential maintainer of the code. &lt;br /&gt;
* Minimize code duplication&lt;br /&gt;
  &amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039;&amp;#039; new &amp;#039;&amp;#039;&amp;#039;Details:&amp;#039;&amp;#039;&amp;#039; Using CPD [3] with a minimum token count of 100 on SRC680m156 &amp;#039;sw/source&amp;#039; leads &lt;br /&gt;
   to the following results: 11324 duplicate lines of code of roughly 739620 overall lines of code which nearly amounts to &lt;br /&gt;
   ~1.53% duplicate code. &amp;#039;&amp;#039;&amp;#039;Reason&amp;#039;&amp;#039;&amp;#039; Less duplicate code means less code to maintain. Bugs in duplicated code need &lt;br /&gt;
   to be fixed in all duplicate places which are hard to detect without the help of tools, so less duplicate code means &lt;br /&gt;
   fewer redundant sources of bugs.&lt;br /&gt;
* Write unit test &lt;br /&gt;
   &amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039;&amp;#039; in progress &amp;#039;&amp;#039;&amp;#039;Details:&amp;#039;&amp;#039;&amp;#039; 1 unit test for BigPtrArray has been introduced&lt;br /&gt;
* Make SwDoc interface based, changes clients of SwDoc to just include the header files for these interfaces instead of the whole doc.hxx&lt;br /&gt;
   &amp;#039;&amp;#039;&amp;#039;Goal:&amp;#039;&amp;#039;&amp;#039; Reduce unnecessary build time dependencies, first step to break SwDoc into managable and testable pieces&lt;br /&gt;
   &amp;#039;&amp;#039;&amp;#039;Status:&amp;#039;&amp;#039;&amp;#039; in progress &lt;br /&gt;
   &amp;#039;&amp;#039;&amp;#039;Details:&amp;#039;&amp;#039;&amp;#039; SwDoc (see sw/inc/doc.hxx) is a huge class with more than 130 data members and hundreds of member functions. This class &lt;br /&gt;
     has mutliple responsibilities this implies that SwDoc has a lot of different clients. Each of these clients usually requires just a small part &lt;br /&gt;
     of the SwDoc interface. With SRC680m146 434 of 763 source code files directly or indirectly include doc.hxx in which the interface of &lt;br /&gt;
     SwDoc is declared. This results in undesirable build times when changing doc.hxx. &lt;br /&gt;
     X Interfaces for SwDoc have been introduced related code has been changed to use these interfaces instead of the whole doc.hxx&lt;br /&gt;
&lt;br /&gt;
* Replace Writer only OLE objects with Draw OLE objects &lt;br /&gt;
* Replace hand-made bulk data types with STL means (e.g. BigPtrArray, SvPtrArr)&lt;br /&gt;
 &lt;br /&gt;
== References ==&lt;br /&gt;
[1] Betrand Meyer, [http://www.amazon.com/gp/product/0136291554/qid=1135936830/sr=8-1/ref=pd_bbs_1/002-2294048-8616869?n=507846&amp;amp;s=books&amp;amp;v=glance Object Oriented Software Construction], ISBN: 0-13-629155-4&lt;br /&gt;
&lt;br /&gt;
[2] Long existing, hard to fix quality problems in OOo Writer (to be extended)&lt;br /&gt;
* Cannot select whole document when table is at beginning&lt;br /&gt;
* Backspace may take several seconds in documents with many hidden redlines&lt;br /&gt;
* Undo-delete still doesn&amp;#039;t work in all circumstances (section-to-section)&lt;br /&gt;
&lt;br /&gt;
[3] Copy Past Detector (CPD) http://pmd.sourceforge.net/cpd.html&lt;br /&gt;
&lt;br /&gt;
[[Category:Development]]&lt;br /&gt;
[[Category:Writer issues]]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=9271</id>
		<title>DbConfig</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=DbConfig&amp;diff=9271"/>
		<updated>2006-04-29T05:58:39Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: /* The Code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Motivation ==&lt;br /&gt;
In our initial investigations of cold-start performance, we theorized that the impact of having hundreds of small xml files to be crawled had a negative impact on performance.  We reasoned that combining the hundreds of files into one or two containers would greatly improve the ability of the buffer-cache to work effectively and reduce the startup time.&lt;br /&gt;
&lt;br /&gt;
== Experiments ==&lt;br /&gt;
We performed several experiments to get an estimate of the performance gains that could be had.  We tried three methodologies that all indicated that we could expect roughly a 1 second improvement on a cold-start of writer.  Our test machine for these experiments was a 3.2Ghz Pentium 4HT with 1 gigabyte of RAM, a 120GB 7200rpm SATA drive, running NLD9.&lt;br /&gt;
&lt;br /&gt;
=== Prestuff ===&lt;br /&gt;
In this experiment, we pre-stuffed the buffer-cache with the xcu files before startup.  This was accomplished by running cat:&lt;br /&gt;
&amp;lt;pre&amp;gt;cat xcu_file_list | xargs cat | cat &amp;gt; /dev/null&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ramdisk ===&lt;br /&gt;
We created two ramdisks and put the configuration data in them.  This was a little coarser, because the contents registry was the ramdisk, which also includes the cache.&lt;br /&gt;
&lt;br /&gt;
=== Const Char* ===&lt;br /&gt;
We created a header file that had all of the contents of the xcu files as const character strings.  A simple search function was crafted that took a URL and found the appropriate string.  We changed the implimentation of XLayer.readData to look into the strings instead of the disk.  Writes were left going to the disk.   &lt;br /&gt;
&lt;br /&gt;
== Approaches == &lt;br /&gt;
At first, we tried to modify localbe to use one large xml file rather than hundreds of smaller ones.  This proved to be quite difficult, because the &amp;quot;canned&amp;quot; parser does not expect multiple components per file.  Because of the expat interface, it is difficult to craft a system of querying the xml parser for relavent tags and sorting the data.  Thus, it was decided that a database system would yeild the fastest implimentation rate.  &lt;br /&gt;
&lt;br /&gt;
BerkelyDB was chosen because it was used elsewhere in the code, and is very simple.  A simple schema was implimented, where there the key was the url of the xcu file and the value was a struct with the timestamp and the xml blob.  There was also a special key, the list of keys, so that searching for children could be done in a moderately efficient manner.&lt;br /&gt;
&lt;br /&gt;
== Prototype Changes to localbe ==&lt;br /&gt;
The changes were to BasicLocalFileLayer::readData and replaceWith.  Additionally, the LocalMultiStratum::listLayerId had to be changed.  These changes were quick and dirty, and in no way production quality.  We left LocalSingleBackend and LocalHierarchyBrowserSvc alone, because they weren&amp;#039;t used in simple uses of openoffice, and this was just an experiment.  We also introduce Database, a singleton that encapsulates the two databases.&lt;br /&gt;
&lt;br /&gt;
== Results == &lt;br /&gt;
Our performance testing methodology was to use a script that launched openoffice and had it output RTL_LOG data.  After a short delay (roughly one minute), the system would be rebooted and the process would repeat. Our comparison is based on a build that is built with ooo-build.  The version of ooo-build is ooo-build-2.0.0.2 and it is compiled with TIMELOG and -g.   The tested machine for these tests is a IBM T42 Thinkpad, (1.7 Ghz Centrino) with 1 gigabyte of RAM and 40G 5400rpm drive running NLD9.&lt;br /&gt;
&lt;br /&gt;
For starting writer, the startup gain was again roughly 1 second.    Our average start time of the unmodified build is 10.589 seconds, and our modified version&amp;#039;s average start time is 9.234 seconds with 5 samples.  However, we cannot simply claim a 1.3 second improvement, because we have modified our startup script to prestuff the buffer-cache with the two database files.  This takes 440 milliseconds, so our net gain is 915 milliseconds.  While this is only 5 samples, a similar test that just started the framework/shell (soffice, with no arguments) of 50 runs showed a net gain of ~750 milliseconds.  On a sample set of 20, starting calc is also accelerated by a net gain of 967 milliseconds.&lt;br /&gt;
&lt;br /&gt;
It should be noted, however, that the results vary across machines, in particular the speedup for desktops is less noticeable.   &lt;br /&gt;
&lt;br /&gt;
*[[Image:Importer.c.gz|Database importer utility]]&lt;br /&gt;
*[[Image:Db_config.diff.gz|Experimental database modification]]&lt;br /&gt;
&lt;br /&gt;
== Futures ==&lt;br /&gt;
&lt;br /&gt;
For these performance gains to be realized in any way, the backend must be crafted to be a correct production backend.  The approach outlined in the Devloper&amp;#039;s Guide is to impliment either the service Backend or SingleBackend.  By looking at localbe, one can conclude that this not the whole truth.  The localbe impliments several UNO Services:&lt;br /&gt;
* SingleBackend&lt;br /&gt;
* HierarchyBrowser&lt;br /&gt;
* Layer&lt;br /&gt;
* CompositeLayer&lt;br /&gt;
* SingleStratum&lt;br /&gt;
* MultiStratum&lt;br /&gt;
&lt;br /&gt;
However, the approach we will take for the databse backend is slightly different.  We will impliment only the following UNO serivices:&lt;br /&gt;
* Layer&lt;br /&gt;
* CompsiteLayer&lt;br /&gt;
* SingleStratum&lt;br /&gt;
* MultiStratum&lt;br /&gt;
&lt;br /&gt;
=== Layer/Composite Layer ===&lt;br /&gt;
&lt;br /&gt;
We will define a schema for our Layers and UpdatableLayers that uses a namespace prefix concatinated with the Configuration Item as a key.  The namespace convention we will use is the same as localbe for it&amp;#039;s three managed stratums: res, data, modules.  We use the :: seperator because (as far as I know), this is not valid in a path and it makes a nice convention.  Additionally, we will use another :: seperator after the Configuration Item name to signify a sublayer.  So for example, we would have the keys:&lt;br /&gt;
* data::org.openoffice.Office.Labels&lt;br /&gt;
* modules::org.openoffice.TypeDetection.Types.fcfg_math_types&lt;br /&gt;
&lt;br /&gt;
For sublayers, the mapping would be as follows:&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-draw.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-writer.xcu&lt;br /&gt;
* /registry/modules/org/openoffice/Setup/Setup-calc.xcu&lt;br /&gt;
::get mapped to: &lt;br /&gt;
* modules::org.openoffice.Setup::Setup-draw&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-writer&lt;br /&gt;
* modules::org.openoffice.Setup::Setup-calc&lt;br /&gt;
&lt;br /&gt;
Note: localbe uses a strange system for language packs that we will not adopt.  So, in localbe, we have:&lt;br /&gt;
/res/en-US/org/openoffice/Office/UI/BasicIDECommands, where en-US is a sublayer.  In our backend, dbbe, we would have:&lt;br /&gt;
res::org.openoffice.Office.UI.BasicIDECommands::en-US, where en-US is a sublayer.&lt;br /&gt;
&lt;br /&gt;
The data can be though of as a struct defined as so:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
struct Record&lt;br /&gt;
{&lt;br /&gt;
    sal_Int64  date;          /** Unix Epoch */&lt;br /&gt;
    sal_uInt32 blobSize;      /** XML Blob Size */&lt;br /&gt;
    sal_uInt32 numSubLayers;&lt;br /&gt;
    sal_Char   *pSubLayers;   /** ARGV style vector */&lt;br /&gt;
    sal_Char   *pBlob;        /** XML Blob */&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Each layer will be implimented in a similar way to localbe, with a base class for the simple aspects of XLayer and XTimeStamped and a base class for the common elements of XCompositeLayer and XTimeStamped.  The readData method will be implimented like in the experiment, with comphelper creating a stream from a ByteSequence.  We will not use the readonly property URL, as it has no meaning.  The getTimeStamp method will return a concatination of the size and creation date, but in epoch format.&lt;br /&gt;
&lt;br /&gt;
=== SingleStratum/MultiStratum ===&lt;br /&gt;
&lt;br /&gt;
Like in localbe, we will use a base class to impliment XBackendEntities and then have a single MultiStratum class to provide XMultiStratum.  However, the approach in localbe for SingleBackend is a now somewhat archaic.  To refresh, in localbe:&lt;br /&gt;
* LocalStratumBase&lt;br /&gt;
** LocalSingleStratum Base&lt;br /&gt;
*** LocalDataStratum&lt;br /&gt;
*** LocalReadOnlyStratum&lt;br /&gt;
*** LocalResourceStratum&lt;br /&gt;
*** LocalSingleStratum&lt;br /&gt;
&lt;br /&gt;
In our implimentation, we will have a simplier class heirchy with only two derivative classes for the BaseStratume that impliment XMultiLayerStratum and XSingleLayerStratum.  We use ask the database for a given layer if it has any &amp;quot;SubLayers&amp;quot; to see if getLayer and the like should return a CompositeLayer, Layer, or the updatable version of each.&lt;br /&gt;
&lt;br /&gt;
=== Factory ===&lt;br /&gt;
Because we have multiple stratum services that are using the same database (just namepsaces within them), we will provide a factory service that can instantiate databases.  This will allow the services specified in the configmgrc to specify a database path and namespace prefix to work in.  Additionally, this allows for the case of more than the original two envisioned databases to be used.  However, making more databases will degrade performance.&lt;br /&gt;
&lt;br /&gt;
=== Import/Export ===&lt;br /&gt;
Because this is a fundamentally non-human-editable data store, we will provide a utility to populate and edit the contents of the database.  This utility will be a stand-alone binary suitable for packages to use in their post-install scripts.  We will support the following basic operations:&lt;br /&gt;
* list contents&lt;br /&gt;
* &amp;quot;checkout&amp;quot; Items&lt;br /&gt;
* &amp;quot;checkin&amp;quot; Items&lt;br /&gt;
* delete Items&lt;br /&gt;
* import Items&lt;br /&gt;
&lt;br /&gt;
=== The Code ===&lt;br /&gt;
The code is in [http://cvs.gnome.org/viewcvs/ooo-build/scratch/dbbe/ ooo-build/scratch/dbbe]&lt;br /&gt;
&lt;br /&gt;
The code is being migrated to a CWS: configdbbe&lt;br /&gt;
&lt;br /&gt;
Aditionally, you need the following issues to make it work: [http://www.openoffice.org/issues/show_bug.cgi?id=61354 IZ#61354], [http://www.openoffice.org/issues/show_bug.cgi?id=63775 IZ#63775]&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
	<entry>
		<id>https://wiki.openoffice.org/w/index.php?title=User_talk:St&amp;diff=9270</id>
		<title>User talk:St</title>
		<link rel="alternate" type="text/html" href="https://wiki.openoffice.org/w/index.php?title=User_talk:St&amp;diff=9270"/>
		<updated>2006-04-29T05:29:50Z</updated>

		<summary type="html">&lt;p&gt;Mikeleib: Reverted edit of The thing, changed back to last version by Mikeleib&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Consider to implement the spam blacklist, see&lt;br /&gt;
http://en.wikipedia.org/wiki/Wikipedia:Spam#External_link_spamming&lt;br /&gt;
--[[User:SpamKiller|SpamKiller]] 11:05, 13 December 2005 (CET)&lt;br /&gt;
&lt;br /&gt;
Hi, can you help check the [[Pending JCAs]] and locate the JCA submission I wrote on that page? Thanks.&lt;br /&gt;
--[[User:Zero0w|Zero0w]] 06:07, 30 March 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
Repeated spam effort by the same user on the [[Debugging]] page, please check it out. --[[User:Zero0w|Zero0w]] 18:52, 6 April 2006 (CEST)&lt;br /&gt;
&lt;br /&gt;
Blocked that user for two weeks--[[User:Mikeleib|Mikeleib]] 19:09, 6 April 2006 (CEST)&lt;/div&gt;</summary>
		<author><name>Mikeleib</name></author>
	</entry>
</feed>