You can subscribe to this list here.
| 2000 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(5) |
Aug
(1) |
Sep
|
Oct
|
Nov
|
Dec
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|
From: <Sel...@ao...> - 2002-04-21 21:39:04
|
i need info on be-bop 1950's. i need it on the business and history of be-bop. i need it asap! so if u got any info please send... to sel...@ao... thanx |
|
From: John S. J. A. <ja...@ge...> - 2000-08-07 04:06:39
|
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Greetings all --
I figured I should drop y'all a line and let you know what's going on
with BOP.
A couple of weeks ago, I decided I didn't care for the way I'd split
functions across the various parts of BOP. One thing lead to another,
and I ended up chucking everything except Bop.pm, and re-writing
everything so that the different kinds of BOP objects are all accessed
via the same API.
Since then, I've been working on finishing up the 'base' release,
defined as something that would allow management of static content
(with the exception of 'blog-style Entry objects). I'm getting close
to that -- sometime this week, I hope to finish up the last little
bits that remain. Once that's done, I'll do the BOP website (just for
practice), and then release a 0.1 version.
After that, I'll be working on getting Entry support to work, and then
embedded Perl. Those will be the 0.2 and 0.3 releases, respectively.
I'd also like to get some user feedback before the 0.1 release; I
realize this may not be possible, because the documentation, umm,
sucks. Pretty hard, too. (Anyone who wanted to volunteer to work on
fixing that would earn my eternal gratitude, by the way.)
In order to kludge around the lack of documentation, I'm going to spew
a bit about the way BOP is designed to work. At some point, this is
going to _become_ the documentation, so feedback here is welcomed to.
BOP is designed to work with pieces of HTML (and eventually) Perl that
are encapsulated into objects. Some attributes of these objects are
accessible and editable by the user, and some are only available to
the inner workings of BOP. BOP objects come in five different flavors:
TEMPLATEs, PAGEs, INCLUDEs, ENTRYs, and GLOSSs.
Before getting into the specifics of each of these types of objects,
let's talk about what they have in common: Each object supports three
basic methods: new(), edit(), and insert(). Generally, these will be
called in exactly that order.
new(), as might be expected, creates and returns a BOP object. You
should call it with a single parameter, a string containing the type
of object you want back. The call will bless() and return the
appropriate object type, like so:
$page = Bop->new( 'PAGE' );
If you call new() with a second string parameter containing the name
of an object that's already in the database, that object will be
retrieved and returned:
$index = Bop->new( 'PAGE' , 'index page' );
Note that the namespaces for the different object types are separate,
so specifying the right object type is important.
The second general method is edit(). This object method allows the
user to use their text editor to modify the values of an object. It
handles both new objects (which are generally lacking data) and
existing objects (which have a copy of information from the
database). It also handles converting to and from internal/external
data formats where needed.
The final general method is insert(). This object method takes the
data present in an object and inserts it into the database. It handles
the differences between new objects (INSERTS into the database) and
existing objects (UPDATES of the database). It also updates the
various internal tables that track which objects contain other objects
and which pages have been changed and need to be re-published (see
below).
Oh -- I forgot -- there's a fourth method: is(). When passed an object
type string, this object method returns true or false, depending on
the type of the calling object. That is:
my $page = Bop->new( 'PAGE' );
$page->is( 'TEMPLATE' );
# false
$page->is( 'PAGE' );
# true
OBJECT EMBEDDING
As alluded to above, objects can contain references to other objects,
which cause the contents of the embedded object to be inserted into
the containing object when the latter is published. Not all objects
can contain other objects. In a special case of embedding, each PAGE
object contains a reference to a TEMPLATE object, but the PAGE content
is inserted into the TEMPLATE at the time of publishing. TEMPLATES and
PAGES can contain INCLUDEs, ENTRYs, and GLOSSs, while INCLUDEs and
ENTRYs can contain INCLUDEs and GLOSSs.
Actually embedding an object is easy: just insert the following bit of
pseudo-HTML into the text part on an object:
<%O:name%>
where 'O' is an object type code, and 'name' is the name of an
object. The object type codes are as follows:
p = page
e = entry
g = gloss
i = include
(Note 1: ENTRY objects don't really work yet. In fact, they don't work
at all -- so it's probably better to leave them alone.)
(Note 2: Embedding a page actually causes a _link_ to that page to be
generated. It's subject to the GLOSS object name remapping described
below. Real Soon Now, proper relative paths will be calculated for the
URLs of intra-page links, but this is currently not being done.)
GLOSS objects can use a special syntax to re-map the anchor string of
the glossary item to something else. For example, if there is a
glossary item named 'genehack' that causes
<A HREF="http://genehack.org">Genehack</A>
to be inserted into the page, using this syntax:
<%g:genehack=John's page%>
will cause this insertion upon publication:
<A HREF="http://genehack.org">John's page</A>
One thing that I'm pretty happy about is that BOP keeps track of which
objects are embedded in which other objects, back up to the PAGE
level, which means that when an INCLUDE is changed, all the PAGEs and
TEMPLATEs that contain that INCLUDE are flagged as changed too --
which means that a later Bop->publish_changed() call will result in
them all being re-output.
PUBLISHING
Once objects have been added to the database, HTML files need to be
generated from those objects and uploaded to a server. The publish()
method allows this to happen. Only PAGE objects support the publish()
method; calling publish() on another object type will result in an
error.
Calling publish() results in a copy of the PAGE object's text
attribute, with all embedded references chased down and inserted, to
be output. The output file is named from a combination of the output
directory and the PAGE object URL attribute (and this too needs to be
a bit more intelligent). Basically, the end result is a local mirror
of the web site, rooted in the output directory.
There are also a couple of class methods (publish_changed() and
publish_all()), but they have yet to be implemented. When they are,
they'll do what you think they will.
SUMMARY
Hopefully that should be enough to get you started playing around with
BOP; for now, the basic cycle should look like:
use Bop;
$object = Bop->new( $OBJECT_TYPE );
$object->edit();
$object->insert();
if( $object->is( 'PAGE' )) {
$object->publish();
}
Of course, soon that conditional and publish() call will be replaced
with a single Bop->publish_changed() call.
OK, I think that's it, for now. If you made it all the way through
this, thanks! Any feedback (positive or negative) is very, very
welcome.
john.
- --
- ----------------------------------------------------------------------------
[ John S Jacobs Anderson ]------><URL:mailto:ja...@ge...>
[ Genehack: Not your daddy's weblog ]------><URL:http://genehack.org>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.2 (GNU/Linux)
Comment: Mailcrypt 3.5.5 and Gnu Privacy Guard
iD8DBQE5jjXkWRJRdOm3KFARAoEFAKCpD5g95EkgjdTVUH+ETD6MABc+1gCeJuLa
dwif41Xx6H5BGNNwx+HAaZo=
=WYxo
-----END PGP SIGNATURE-----
|
|
From: John S. J. A. <ja...@ge...> - 2000-07-17 02:58:37
|
Greetings -- I've actually managed to get some BOP hacking done this weekend, so I thought I'd share my progress, and see if I can't flush out some feedback. I've fixed several stupid typo-level bugs, and flushed out a logic error or two along the way. There are now scripts in the bin/ directory that should make the process of adding things to the database a little easier to stomach. Finally, I've laid out the road to the next couple of releases in the TODO file -- I've got another 4 or 5 hours of work (total guesstimate), including getting the bop.sourceforge.net site working under bop, before the 0.1 release will be finished. (I've included the Changelog for these updates below, in case anyone's interested.) WHAT YOU CAN DO: Grab the CVS sources, play around a little bit, and send feedback, feedback, feedback! If you're feeling really ambitious, pick an item from the TODO file, and talk to me about implementing it. See ya later -- john. <CHANGELOG> 2000-07-16 John S. J. Anderson <ja...@ge...> * TODO: Revised list to reflect work that I've done. * bin/add_glossary_item: Finished this script. Removed edit_glossary, because calling add_glossary with a template name as argument does the same thing. * Template.pm (get_template_object_by_name): Improved error handling. * Glossary.pm (edit): Fixed brain-dead error where template was being writen to STDOUT instead of tmp file. (error_save): Wrote this function, which dumps the information from a Glossary object to disk. It should be called when an error prevents inserting the information into the database. (insert): Refined error handling; fixed error in return() call. (get_gloss_object_by_name): Refined error handling. * Template.pm (edit): Fixed brain-dead error that made editing existing objects fail. (error_save): Wrote this function, which dumps the information from a Template object to disk. It should be called when an error prevents inserting the information into the database. (get_template_object_by_uin): Fixed typo that made return of true into return of false. * bin/add_template: Finished this script. Removed edit_template, because calling add_template with a template name as argument does the same thing. * bin/add_page: Finished this script. Removed edit_page, because calling add_page with a page title as argument does the same thing. * Page.pm (error_save): Wrote this function, which dumps the information from a Page object to disk. It should be called when an error prevents inserting the information into the database. (get_page_object_by_title): Modified error handling so that when no rows match, the Right Thing happens. (insert): Fixed typo in SQL UPDATE statement. * Bop.pm (init_env): Moved the code from this function into the 'global' section of the file, so that it gets run when the file is use()'d. Also moved the $dbh from the main namespace into Bop's. No more need to call this function; just use Bop(). 8^)= (global): Added use() calls for Entry.pm (commented out at the moment), Glossary.pm, Page.pm, and Template.pm. This way, scripts just have to 'use Bop;' and they get everything; no need to remember what's where. (misc): Code clean-ups and tweaks. </CHANGELOG> -- ---------------------------------------------------------------------------- [ John S Jacobs Anderson ]------><URL:mailto:ja...@ge...> [ Genehack: Not your daddy's weblog ]------><URL:http://genehack.org> |
|
From: John S. J. A. <ja...@ge...> - 2000-07-07 03:27:44
|
>>>>> "Rafe" == Rafe Colburn <ra...@rc...> writes:
Rafe> Depending on how this turns out, I may shut down my project and
Rafe> start using BOP, or if we can collaborate on solving some
Rafe> problems that we both face.
Welcome Rafe!
Either of those alternatives would be great; I imagine you've already
solved some problems that I don't yet realize I have.
BOP probably isn't going to ready for prime time for awhile, and the
initial focus is definitely on static publishing, rather than the
dynamic renders I think you're currently doing, but it will be great
to have somebody with your prior experience commenting on BOP as it
'grows up'.
john.
--
----------------------------------------------------------------------------
[ John S Jacobs Anderson ]------><URL:mailto:ja...@ge...>
[ Genehack: Not your daddy's weblog ]------><URL:http://genehack.org>
|
|
From: John S. J. A. <ja...@ge...> - 2000-07-07 03:20:36
|
>>>>> "Dan" == Dan Fitch writes: ..already in progress... (Dan and I have been having an exchange about BOP that pre-dates this list; I noticed that Dan joined the list, so I'm taking it upon myself to move the discussion over here, so everybody can play. Dan, if this isn't okay, please feel free to smack me around.) Dan> Ohtay, I'm actually going to spend some time tonight looking at Dan> this again.. went around to the existing things, and there are Dan> some nice ones; Mason in particular is really neat, but it Dan> doesn't have a prefab "page" system, per se. It does the Dan> evaluating I babble about later, tho. Vcool. I've been using genpage for a while now. It does a similar thing -- evaluation of arbitrary Perl during publication. I fully intend to rip this off^W^W^Wincorperate this idea into BOP; it's just too useful. It's probably not going to happen until somewhat later, however -- I'd like to get more basic stuff working first. >> The other reason for getting the current CVS repository is that >> glossary items have been implemented. Add something, and then you >> can put (for example) <"apathy"> into a page, and have it change to >> <a href="apathy.pitas.com">apathy</a> when you publish the >> page. I'm going to implement an anchor rewrite, too, so doing >> <"apathy:dan fitch"> will use "dan fitch" for the anchor. Dan> Rightyo, that's awesome. Here's a question... would it be Dan> possible to make that <"whatever"> tag also evaluate? Well, Dan> heading into full state on a page, so here's what I'm picturing Dan> anyway. Tell me if I'm way off. Dan> See, if you have more than one conceptual "level" to your site, Dan> you might want to keep that in mind. I've got a "level" called Dan> "Comix", for example. Would it be possible to somehow define Dan> variables like "level" for the page? Then something like Dan> <"$level"> would include them. Okay, I think I see what you're getting at. One thing that I plan to do (but, of course, haven't yet) is have multiple levels of fall back in the glossary insert mechanism -- so, for example if you do <"foo">, but don't have a glossary item named "foo", other things will be checked -- for example, one obvious fallback is to look for a page with the title of "foo", and then use the URL field of the page record to put in a link to that page. I'm not sure what other "fallbacks" to have -- suggestions? (Obviously, the last one should output some sort of error message and maybe just insert the anchor text into the page, perhaps wrapped in <b> tags or something.) As far as dynamic evaluation to select a glossary item -- I think the best thing to do there would be to embed some Perl in the page that generates the string corresponding to the glossary item name, and then calls Glossary->get_object_by_name() directly. Or something. It also occurs to me that you might be asking about something else -- the ability to include a 'chunk' of text in multiple places. That will also be showing up, using a mechanism to be determined. genpage lets you do this, and it's very useful for navigation bars and such -- the "Section" headers on genehack.org use these, and evaluate some embedded Perl to figure out what the current page is, so that link is replaced with <b>bolded</b> text -- see <URL:http://genehack.org/personal/> for an example. It might be worthwhile to have a quick look at genpage (see <URL:http://www.freddyfrog.com/hacks/index.shtml>, although much of the site seems to be br0ken currently...). I've been using it for ~1 year, and I'm pretty used to the feature set, so I can't see giving up anything I can currently do. So, BOP will be able to do (at a minimum) anything genpage can do, with the addition of database backing and other assorted goodies. Dan> I'm gonna peek at the CVS version, pick something from your TODO Dan> to hammer at, and see if I can't help you out. It's going to be Dan> really handy when there's a working example. Heheh. Yes indeed-y. I'm already coming up with ways that this can make my life easier -- now I just have to do the damn coding. Tonight looks to be shot, but I hope to get some stuff done this weekend, even if it's only code cleanup, insertion of (better) error handling, and writing those front-end script things to make the current stuff (somewhat) usable. To everybody else: if you've got time, inclination, and/or skill, please also feel free to grab an item from the TODO basket and hack on it. If you're worried about somebody else working on the same thing, just drop a note to the list claiming your territory. john, looking for about six extra hours per day... -- ---------------------------------------------------------------------------- [ John S Jacobs Anderson ]------><URL:mailto:ja...@ge...> [ Genehack: Not your daddy's weblog ]------><URL:http://genehack.org> |
|
From: Rafe C. <ra...@rc...> - 2000-07-06 13:50:24
|
I just wanted to introduce myself to the members of the list now that I've joined. I run the blog rc3.org Daily which has a content management system written in Perl and PHP3. I also have a project started for the code at Sourceforge, but I'm ashamed to admit that I have not yet checked any code into the repository there. Depending on how this turns out, I may shut down my project and start using BOP, or if we can collaborate on solving some problems that we both face. --Rafe -- rc3.org Daily http://rc3.org |
|
From: John S. J. A. <ja...@ge...> - 2000-07-06 03:55:42
|
Greetings --
I see a couple lurkers on this list, so I figured I'd start making
some announcements, and try to drum up some discussion.
First, the CVS repository on Sourceforge has been updated. The big new
thing is that glossary objects work. After you add an entry to the
glossary table, you can put the name of the entry in a page like this:
<"name">, and have it be replaced with <a href="url">anchor</a> when
the page is published.
There are still quite a few rough edges, however, so be careful out
there!
Second, if you've got the time, I'd like to hear why you joined the
list; what features you're looking for in a piece of software like
BOP; and, well, anything else you'd like to tell me about why you're
here. 8^)=
Thanks!
john.
--
----------------------------------------------------------------------------
[ John S Jacobs Anderson ]------><URL:mailto:ja...@ge...>
[ Genehack: Not your daddy's weblog ]------><URL:http://genehack.org>
|