Paul M. Jones

Don't listen to the crowd, they say "jump."

Solar: Future Plans

With the new release of Solar 0.6.0, one user has asked if there is a roadmap for future releases. (Solar is a simple object library and application repository in the spirit of PEAR and Horde.)

I'm afraid there's no roadmap, but there is a to-do list. I wrote it specifically in response to the roadmap question, and the initial contents are as follows. As you can see, it's relatively ambitious; if anybody would like to join the project, just contact me by email; this is a good time to for interested developers to get in on the ground floor and make a name for themselves.

  • Document and write tests for existing classes
    • which will result in API changes as discrepancies are revealed
    • may add new minor classes as refactoring occurs
  • The last of the docs and testing will be the Sql class
    • they are the most complex
    • Sql_Driver classes will be converted to PDO
    • Sql_Entity class needs refactoring (far too complicated, try separate Table and Select classes)
    • Possible addition of portable pseudo-SQL string and date functions
  • Then new classes (in no particular order)
    • Foundation classes
      • Solar_Log, universal logger (c.f. PEAR Log)
      • Solar_Event, universal event dispatcher
    • Solar_Text, text manipulation classes
      • Solar_Text_Markup, transformation for BBCode, ReST, Textile, Wiki, etc (c.f. PEAR Text_Wiki)
      • Solar_Text_Diff, difference engine (c.f. PEAR Text_Diff)
    • User classes
      • Solar_User_Prefs, user preferences collection
      • Solar_User_Perms, user permissions collection
    • Cells
      • Solar_Cell_Bayes, universal Bayes filtering (for comments, trackbacks, edits, etc)
      • Solar_Cell_Hits, hit counting for page views, visitors, referrers, etc
      • Solar_Cell_Prefs, user and application preferences storage
      • Solar_Cell_Perms, user permissions storage
  • Then new apps:
    • Solar_App_Wiki (the follow-on to YaWiki)
    • Solar_App_Blog (using the Wiki engine)

A universal content model is under development as well.



But I Want To Kennel With Zoe

It's been pretty hot in Memphis lately -- 100 degrees Fahrenheit today, but with the humidity it felt closer to 105. Often, I'll leave the dogs outside while I'm at work, but in this heat that's dangerous (even though they quickly retire to the much-cooler under-the-deck climate).

So for the first time in a couple of weeks, I ordered them to kennel before leaving for work. "Dogs! Kennel!" Zoe, being the good one, went to kennel straight away. Wendy, being clever and diggy and generally more naughty (although still very cute) slowed her way between the bedroom and the foyer, not wanting to go into my home office (where the kennels are). After repeated "Wendy, no! Wendy, kennel! ... Kennnnellll... No! Kennel!" for about two minutes, she slouched into the office ... and into Zoe's kennel with Zoe.

Zoe & Wendy In Kennel

(Wendy is the one sitting up, patiently waiting for me to close the kennel door.)

Aw -- she didn't want to be separated from her sister for the day. How adorable. (Not allowed, of course, but adorable nonetheless. :-)


Solar 0.5.0 Released

Hot on the heels of Friday's 0.4.0 release, we have today's 0.5.0 release of Solar, the simple object library and application repository for PHP. It's mostly minor bugfixes, with a couple of minor feature adds, all as a result of the ongoing end-user documentation effort.

You can view the change log here, but the highlights are:

* Unit tests for Solar_Base, _Cache, _Error, and _Locale

* End-user documentation (not just API docs) for those same classes, plus the overarching Solar class itself

I guess it's been a productive few days. :-)

UPDATE (2005-06-29): Looks like there may be some weirdness with the channel server; you might have to install from the tarball (pear install http://solarphp.com/get/Solar-0.5.0.tgz) instead.

UPDATE 2: Solution is to issue "pear clear-cache" if you can't seem to get 0.5.0 to install or upgrade. Thanks to Clay Loveless, who found the solution from Greg Beaver's website.


Solar: Documentation Binge

I've been working on new end-user documentation for Solar, both for the general principles (in the Main area) and for the various classes (in the Solar* areas). You can see the results of these efforts here:

* http://solarphp.com/home/index.php?area=Main&page=SolarDocs

* http://solarphp.com/home/index.php?area=Solar

* http://solarphp.com/home/index.php?area=Solar_Error

* http://solarphp.com/home/index.php?area=Solar_Locale

One of the really nice things about using YaWiki for end-user docs is that you can very easily link to methods and properties of other classes simply by typing the name of that element. For example, typing "Solar::get()" automatically links to the page named "get()" in the "Solar" area of the wiki; similarly, typing "Solar::$config" goes to the "$config" page in the Solar area. No need to remember a complex hierarchy of pages every time you want to reference a method or property, as with (say) DocBook. ;-)

To get that auto-linking behavior, I created a custom Text_Wiki rule based on the default Interwiki rule. In that custom rule, all I did was edit the regular expression to accept double-colons as the area/page separator. Then I told YaWiki, via the config file, that custom rules were in a specific directory. Voila: auto-linking of class-named areas with pages names for methods and properties.

So, who says wikis are not for documentation? ;-)


PMJ is ZCE

I just got this via email: "Congratulations on passing the Zend PHP Certification exam! " Woohoo!

But please, no applause; just throw money. ;-)


Solar 0.4.0

My earlier statement that I would be concentrating on administrative tasks notwithstanding ;-) I just released Solar 0.4.0 a few minutes ago. This is because the documentation process has allowed me to discover some inconsistencies and other issues.

A few highlights about this release:

* Thanks to Clay Loveless, who set up the packaging-script to use Greg Beaver's PackageFileManager2. This makes us more forward-compatible with upcoming PEAR releases.

* Thanks to Dan Cain, who pointed out that double-underscores in names are reserved for core PHP functionality, so I've changed the __solar() hook method to just solar() instead.

* Thanks to Travis Swicegood, Matthew Weier O'Phinney, et. al. for pointing out that the general $config property made more sense as a protected, rather than public, property. In most cases those options never got changed after instantiation; in the few cases where a $config option is allowed to be modified, I have added getter and setter methods.

* Thanks to Jason Sweat for hounding me earlier this year about unit testing. I have added a .phpt unit test set for Solar_Cache_File. Seeing as this one test set has already made my life much easier, there will be more coming for other parts of Solar.

For the whole list, just read the change log at our channel server. (Yes, the CSS is still ugly, sorry.)

Solar is a simple object library and application repository for E_STRICT PHP5 in the mode of PEAR, Horde, and other similar frameworks.

UPDATE (2005-06-28): There is new end-user documentation as well as a new 0.5.0 release.


Property Rights Lose, 5-4

The Supreme Court has just ruled that governments can seize private property under eminent domain and give that property to other private holders.

The case in question was about a developer who claimed he could generate more tax revenue for local government with a particular piece of land, except the landholder wasn't selling. The Supreme Court has effectively ruled that increased tax revenue is a legitimate point of "public interest"; as such, governments can take your property and give it to other people who promise to pay more taxes than you do.

I'm so mad I can't see straight.

UPDATE: Here's a link with a good overview from AP News MyWay.

UPDATE: Another overview from the NY Times.


Batman Begins

Not only is Batman Begins the best film/TV Batman, it's one of the best action superhero films ever, on par with the first Superman, Spider-Man 1 and 2, and Unbreakable. Genuinely moving and powerful. I give it my highest rating: worth full evening price, twice. In fact, you will enjoy it even more on second viewing, because once you know the plot, you can concentrate on all the beautiful little details.

Please note the PG-13 rating; parts of Batman Begins are far too disturbing for little children (almost too disturbing for adults approaching middle age).

This film is exceptionally good: strong characters, solid storyline, mostly believable technology, moving soundtrack, and great performances (but for Katie Holmes, who pretty but bland and kind of weak). When Scarecrow puts the Fear on people, you get to see what they see, and it is nightmarish. The supporting cast really are "supporting" -- they're all strong in they're own right, but they know they are there to help Batman when he needs it. Brilliant writing.

And the soundtrack! It has the distinction of being the work of two distinctly different composers: James Newton Howard (e.g. Unbreakable) and Hans Zimmer (e.g. various action films and Rain Man). You can hear their different styles come through in different places, but sometimes you don't know which is which. Frankly, I never thought a two-note theme could *be* a theme ... but it is, at least when you have the underlying foundation of the rest of the composition. The first note builds, and builds, and then breaks to the second note just as an important scene element tips on-screen; it's a very powerful element, even though you may not always notice it on first viewing.

For those of us who care about this kind of thing, there are plenty of nods to Jung, and to the Sodom-and-Gomorrah story. The storyline is almost point-for-point in line with the Joseph Campbell heroic monomyth.

If you want to hear more about it, read on, but be warned: there are spoilers below.

WARNING! SPOILERS BELOW!

I don't want to review the movie, exactly, but I do want to point out some highlights. Before I do, though, I want to say that you really should read "The Hero With A Thousand Faces" by Joseph Campbell.

Campbell researched a great deal of mythology and religious stories, everything from the Babylonian mythos to the Egyptians, Greek and Roman myths, Hindu, native American, northern European, Judaism, Christian, and Islam. In his research, he noticed that the same basic 15 points came up in all the "hero" stories, regardless of the time period or the geographic region. He called this the "monomyth" template.

It turns out that we're telling the same stories to each other even now: Star Wars, the Matrix, Superman, and many other sci-fi and fantasy and comic-book plots have most or all of the elements of the Campbell monomyth. Perhaps I'll write more about the monomyth in another post some time, but this overview should provide a good introduction with some good highlights from pop culture.

Now, back to Batman Begins:

The film opens with Bruce Wayne as a child of 7 or 8; he steals from his playmate Rachel an arrowhead she has found. He runs, and almost immediately plunges into a poorly covered well. In the well, there is a cave entrance, and bats flock out of it to surround the terrified boy; this is one of the traumas that leads to the origin of Batman (the other is the murder of his parents). That the film begins with an act of theft by its hero (who will go on to combat thieves), and that it leads him to the Cave of his subconscious, is clearly aspect of the Campbell monomyth and the work of Jung.

As a young man of 21 or 22, Bruce confronts his own desire to commit murder when the killer of his parents is released on parole; he does not commit the act, but only because the killer is gunned down in front of him. Rachel, now a lawyer, takes him to the underside of Gotham where he gets to see the face of true criminality; after that, he sets out on a journey to learn about the criminal mind. At the end of his seven years in the wilderness (reflections of Buddha Siddhartha), he is approached by the League of Shadows and is trained to fight evil, which he begins in earnest on the night of his 30th birthday (reflections of Christ). Again, we see points of the monomyth described by Campbell: the passing of the first veil, the descent into the underworld, the gift of special powers, and the return from the underworld to bring new knowledge.

***

Batman Begins reflects another ancient tale, that of the destruction of Sodom and Gomorrah.

In the Judeo-Christian telling, Abraham has just finished hosting two angels and the Lord at a meal when God tells Abraham that he (the Lord) is going to destroy two cities that have become evil and wicked beyond His forbearance. Abraham asks God to withhold his wrath, and bargains with Him; eventually the Lord says he won't destroy these cities, but only if Abraham is able to find ten righteous men living there. (Abraham himself never goes to the city.)

The narrative then turns to a man named Lot, who lives in Sodom. He takes in the two angels who just left Abraham. There is an altercation with the men of the town, who want to rape the messengers of the Lord. The angels tell Lot to escape the city, and then lay waste to the it before the Lord rains fire down on the whole plain (including Sodom, Gomorrah, and other towns in between).

In Batman Begins, we never see the Lord directly, but we sure do see the angels of destruction; they are the minions of Ras al Ghul, leader of the League of Shadows, who are planning the destruction of Gotham. Bruce Wayne/Batman, as a combined Abraham/Lot character, bargains for the corrupted Gotham/Gomorrah. As in the Jewish tale, the angels of the League proceed with their plans to destroy the city.

But this is where the narratives diverge: Batman, as a dark angel of salvation, stands in the way of the immediate destruction of Gotham and defeats Ras al Ghul himself, even though the League's plan partially succeeds with the release of Arkham inmates (the worst of the worst) into the city. As such, the dark Batman is the savior character, and the destroyers are a corrupted evil, a significant twist on the original Sodom and Gomorrah tale.


Solar 0.3.0 released

I released Solar 0.3.0 on May 30 (the change log is gigantic), but didn't want to blog about it until I had some more non-code work completed. That work has begun, and I'm satisfied enough with it to talk about it publicly now.

In short, we have a PEAR channel thanks to Clay Loveless, a complete site re-do using YaWiki (with a customized theme), some good example docs, a Hello World example app, and full auto-generated API docs. The next tasks, aside from fixing reported bugs, are to continue writing documentation and to start on a testing suite (hi Jason Sweat ;-).

Solar is a "Simple Object Library and Application Repository" for PHP5; please see the Solar site for full information.