Skip to content

Instantly share code, notes, and snippets.

@scottwalters
Last active August 29, 2015 14:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scottwalters/039e4688e83f2240f178 to your computer and use it in GitHub Desktop.
Save scottwalters/039e4688e83f2240f178 to your computer and use it in GitHub Desktop.
=head1 Adapt a Perl CMS Targetting Enterprise Installations to Compete with WordPress
=over 1
=item Name:
Scott Walters
=item Amount Requested:
USD 5,000
=back
=head2 Synopsis
Perl presently lacks serious competition to PHP's WordPress CMS.
Successfully entering this space would create demand for Perl programmers and market Perl as a relevant and capable platform.
I propose adapting an existing CMS called WebGUI that's written in Perl, GPL licensed, feature rich, and popular in the real world.
Tasks involved are automating the install process, modernizing the themes, collaborating with developers to build a slick JS admin interface, fixing major bugs,
and working with the vendor and wG and Perl communities to develop establish a community development model.
Additionally, I want to champion within the Perl community the idea of bringing Perl out into the real world by contributing to applications
intended for end users, helping out friends and clubs by setting up Perl applications for them, and to generally take interest in the fine apps written in Perl.
=head2 Deliverables
=over 1
=item Fix bugs (but not features) marked "Blocking/Required" on the WebGUI8 bug tracker: L<http://www.webgui.org/8>
=item Fix other serious bugs discovered during testing and development
=item Work with PlainBlack Corp to attempt to set up a process whereby "community" versions are the basis of official PlainBlack releases
=item Create and announce a "community" beta release of version 8
=item Update and finish my curses based installer at L<https://gist.github.com/scrottie/2973558>
=item Use mst's remote server deployment logic to offer via the Web one step deployment to Pair, linode, or one other similar host
=item Draft a community process document and solicit feedback [done: L<https://github.com/scrottie/webgui/issues/4>]
=item Create a neutral GitHub account for the project
=item Develop a reasonably attractive GitHub Pages site for the community project; proudly display a Perl banner
=item Coordinate and support volunteers on FreeNode #webgui and GitHub Issues tickets
=item Create a new slick JS admin using modern toolkits by contributing code and labor necessary to complete the project to danny_mk (Daniel Maldonado)'s existing project at L<https://github.com/dannymk/webgui/tree/NewAdminInterface> (of these tasks, this has by far the largest scope)
=item Create one WebGUI "theme" (HTML/CSS available as a selectable site-wide appearance) that satisifies current design aesthetics, perhaps using BootStrap
=back
=head2 Benefits to the Perl Community
Completing this project would have possible positive effects, but would also avoid the undesirable situation
where sites currently using WebGUI feel they have to migrate to another (probably non-Perl) CMS as
PlainBlack is no longer doing forward reaching development on this product.
The most explicit statement about development being stopped before a beta release of wG8 was made in forum post here: L<http://www.webgui.org/etcetera/is-webgui-dead->.
Creating a community driven process and releasing a beta of wG8 would help connect to the Perl community the hundreds of people who presently host, support, extend, or use WebGUI.
WebGUI reflects well on Perl.
Whereas other systems are plauged with poor architecture, poor APIs, and poor security records, WebGUI is cleanly OO, designed from the start to be extensible,
and practively secure with features like tiered group permissions and CSRF protection.
There's a lot of frustration with CMSes written in other languages, and this gives the Perl community an opportunity to demonstrate to the world that it can
do a superior job of Software Engineering.
Or, as aulix wrote, L<https://twitter.com/scrottie/status/486659745751642112/photo/1>.
Quality software bring people to think favorably of the language it was written in.
Most significantly, the CMS is currently the preferred way to start a dynamic site.
CMS uses enjoy user accounts, password recovery, messaging, karma points, and a long list of features out of the box, as well as online markets with extensions that can be dropped in
to create different types of sites or add vraious functionalities.
CMSes are preferred over frameworks for most new sites.
Having a solid Perl offering in this space creates jobs for Perl programmers as site owners seek to hire people to further develop their site.
Indeed, there is an existing ecosystem here that could be greatly grown.
=head2 Project Details
The WordPress CMS is hugely popular. L<http://wordpress.com> has a global rank of 23 according to Alexa.
To market Perl to the masses as a capable, relevant language, it behooves us also to have our name on popular software products.
WebGUI is a popular GPL'd CMS written in Perl targetting "enterprise" deployments that has recently lost active
forward development from the company that made it, PlainBlack Corp.
PlainBlack has expressed a willingness to work with the community to see the product continued.
Here's a small selection of sites built on WebGUI:
=over 1
=item L<http://donor.com>
=item L<http://globalnoc.iu.edu/>
=item L<http://www.law.umn.edu/>
=item L<http://usembassy.gov>
=item L<http://america.gov>
=back
The goal is to position WebGUI to more directly compete with WordPress.
A community development process would focus less on the high end features and more on usability by casual users, as well as on aesthetics.
The community development process would also emphasize the fact that this is a Perl project, written in Perl and using Perl modules, tools, and infrastructure.
WebGUI8 was an ambitious effort by PlainBlack to modernize WebGUI's internals.
Code was reworked to run on top of Plack rather than mod_perl.
Moose was used internally as well as being the basis of the new extension mechanism as illustrated by this example "asset": L<http://slowass.net/~scott/tmp/Battleship.pm.txt>.
The admin interface was redone in JS to be faster.
The project was effectively cancelled before a beta release probably due to an excessively long development cycle,
as well as due to lack of commercial interest, which was still favoring the stable 7 release: L<http://www.webgui.org/etcetera/is-webgui-dead->.
Brining version 8 to the point of being ready for a beta release is a major goal of this project.
That primarily involves fixing bugs reported to the bug tracker.
WebGUI has always accepted "pull requests" and L<http://webgui.org> hosted developer discussion forums, but the process for participation was not previously formalized.
Actively working with predominately volunteer programmers will require more engagement.
There are various other fantastic Perl CMSes out there which are worthy in their own right.
I've selected this one primarily out of familiarity, but also because of its active user base, resonance with real world users, and maturity.
As it is completely themeable, I feel it will be easier to make it attractive than to make a newer system feature complete.
My experience is that, as is the case with programming languages, users have many needs, and generally all of them must be satisified.
Here's the official but incomplete feature list: L<http://www.webgui.org/learn/features>.
The Content Manager's Guide and Administers Guide at L<http://www.webgui.org/user-guides> show more and give more detail.
Still, I strongly support the efforts of other systems.
I am not the primary maintainer, merely one contributor with commit access and the most active contributor in recent history:
L<https://github.com/plainblack/webgui/commits/master>.
Most of my recent work has been in another repo on the curses installer at L<https://gist.github.com/scrottie/2973558>.
Should I succeed in creating an active community fork to feed in to the official PlainBlack fork, I would be the primary maintainer of that, and my development work for this project
would be done there.
The curses installer would be merged in there, and I would work closely with danny_mk on the replacement JS admin UI, pulling his work into a branch.
This grant proposal is not sponsored or endorced by PlainBlack but is entirely my own doing.
=head2 Inch-stones
There are three distinct projects in this proposal.
The Deliverables section does a good job of outlining work to establish a community development process for this product.
The "reworked admin" task and "getting 8 to beta" task overlap somewhat as replacing the wG8 admin with danny_mk's modernized admin would make those bugs irrelevant, and
most of the reported bugs in wG8 are in the current wG8 admin.
Beta blocking bugs will either be repaired or made irrelevent through the new admin.
=head3 Reworked Admin
=over 1
=item Admin on/off toggle activates a JavaScript routine rather than reloading the page [done]
=item Generic WebGUI::Asset method to publish the asset (generally an asset subclass) as JSON for the admin [done]
=item Generic WebGUI::Asset method to accept POSTs of JSON updating the asset instances state
=item All WebGUI::Form subclasses (which include various controls used by built-in config screens as well as automatically generated CRUDs and used by authors of custom assets) ported to JavaScript for use in the JS based admin
=item New Content admin, used to add various types of assets (shops, message boards, etc) to a page
=item Asset Manager admin, including reorder, delete, cut, and paste
=item User creation/edit/delete screens
=item Group creation/edit/delete/trees/add to other group screens
=item Site settings config screen (including dynamically added form controls for site extensions)
=item Dynamically generated asset edit screens (the edit screen is generated from the asset definition; this needs to happen in the JS admin as well now)
=item Various and numerous other configuration screens, such as LDAP configuration, may or may not be redone in this style or migrated back to pure HTML
=back
=head3 Beta Release
=over 1
=item L<http://www.webgui.org/community/webgui-8/issues/11850> Convert tests using Test::WWW::Mechanize
=item L<http://www.webgui.org/community/webgui-8/issues/11844> Remove seldom-used assets from core into add-on
=item L<http://www.webgui.org/community/webgui-8/issues/11831> Can Edit If Locked should show tag name and join link
=item L<http://www.webgui.org/community/webgui-8/issues/11826> Remove all . from template variable names
=item L<http://www.webgui.org/community/webgui-8/issues/12432> Create Shortcut - Admin bar clipboard display
=item L<http://www.webgui.org/community/webgui-8/issues/12431> Asset Console does not talk to Admin Bar
=item L<http://www.webgui.org/community/webgui-8/issues/12430> Sorting the assets in Tree mode does not work.
=item L<http://www.webgui.org/community/webgui-8/issues/12429> Visitor can access admin mode
=item L<http://www.webgui.org/community/webgui-8/issues/12428> wg7 admin console plugins have bad styling in 8
=item L<http://www.webgui.org/community/webgui-8/issues/12427> Logout from admin mode leaves drag bars
=item L<http://www.webgui.org/community/webgui-8/issues/12426> Group manager buttons are missing
=item L<http://www.webgui.org/community/webgui-8/issues/12425> Asset Package functions missing
=item L<http://www.webgui.org/community/webgui-8/issues/12424> Save button in Export as HTML has bad styl
=item L<http://www.webgui.org/community/webgui-8/issues/12394> wgd reset --upgrade
=item L<http://www.webgui.org/community/webgui-8/issues/12022> Large whitespace in some edit forms
=back
=head2 Project Schedule
Due 10 months from grant approval.
I expect this project will take 6 months of full time work.
=head2 Completeness Criteria
=over 1
=item Bugs marked "Blocking/Required" on the WebGUI8 bug tracker fixed; features marked "Required" will not necessarily be implemented, however
=item An admin interface for editing and creating content, managing users, and adjusting settings that appears modern and visually pleasing
=item A GitHub Pages site that's current and useful for getting new contributors connected as well as providing the latest version of the code to end users
=item At least one very easy way to deploy WebGUI on a server
=item One WebGUI "theme" (HTML/CSS available as a selectable site-wide appearance) that satisifies current design aesthetics and at least one person out of ten would say looks good
=item A reasonable community beta release of WebGUI8 with no serious bugs, published on the project's GitHub Pages site
=back
In order to accomplish this, I may move some lesser used functionality off into optional modules, and I will build upon efforts aleady started by other people
as well as work I've done previously.
=head2 Bio
I am a former PlainBlack employee, having done numerous and large client custom development projects on top of WebGUI over the course of two years,
and then continuing as a consultant after that for about two more years.
When on staff, I helped fix core bugs reported by users, as well as merging features developed for clients into core.
I have also been the most active helper on the IRC channel, #webgui on FreeNode, the past few years.
On CPAN, I authored and maintain L<autobox::Core>, L<WWW::Workflowy>, L<Math::Preference::SVD>, and forego good sense with Acme style
modules such as L<Code::Splice> and L<autobox::Bless>.
Various past incarnations of myself have taught Perl to biology graduate students at Arizona State University as a Special Guest Lecturer,
spent four years in a startup developing a first of its kind next-gen modular videoslots/videopoker platform for the Las Vegas gaming market,
wrote _Perl 6 Now: The Core Ideas Illustrated with Perl 5_ for APress,
tech edited the _Secure C Programming Cookbook_ for O'Reilly (ISBN 0-596-00394-3),
tech edited _How To Program Perl_ (ISBN 0130284181) and cried,
and had stints at Mayo Clinic Scottsdale, Shopzilla, LiquidWeb, and Motorola, where I was ordered to learn Perl and handed a copy of The Camel.
I'm also involved with Tempe Bicycle Action Group, where I've coordinated the annual Tempe Bike Count for the past three years, developed a billboard campaign, and other projects.
=cut
@lindleyw
Copy link

Re the lead-in, «Perl presently lacks serious competition to PHP's WordPress CMS», it may be useful to say we want this not as a trophy for Perl, but because we (The Community) want to use our skills and the capabilities of modern Perl to replace the widespread vulnerability called WordPress that has become a chore we dread administering, to replace it with a system that can build on everything in CPAN and is made with awareness of mobile-first (I hate to say that), responsive layout, non-blocking, asynchronous, object-oriented design.

TL;DR: Because we want to have fun creating websites again.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment