Grant Proposal: Revitalize blogs.perl.org

The Grants Committee has received the following grant proposal for the May/June round. Before the Committee members vote, we would like to solicit feedback from the Perl community on the proposal. Review the proposal below and please comment here by June 15th, 2017. The Committee members will start the voting process following that and the conclusion will be announced approximately in one week. # Revitalize blogs.perl.org - Name: Andr� Walker - Amount Requested: USD 3,000 ## Synopsis [blogs.perl.org](http://blogs.perl.org) is in need of replacement. I am applying for finishing the work to replace it. ## Benefits to the Perl Community For a long time now, BPO (blogs.perl.org) has suffered from [numerous issues](https://github.com/blogs-perl-org/blogs.perl.org/issues). It is running on a custom MovableType which we cannot fix, has many bugs in its behavior, and frankly requires being replaced. There was a grant request to this effect in 2015, but development stalled, and I would like to complete the work. What I propose to deliver will have many of the same benefits to the Perl Community: - A simple, stable blogging platform for the Perl Community - Migrated content from the current system - Open sourced, hackable, publicly available on Github ## Deliverables - Host blogs.perl.org source on a public GitHub repository - Add continuous integration and testing - Migrate MovableType.org database to blogs.perl.org schema (posts, comments, and users) - Basic set of features: - Registration of new users - Login / Reset password (something missing in BPO now) - Content editing: Create / Update / Delete - Support for tags and categories - Support for comments (create, delete) - Host a preview version for current users to test - Release and publish final blogs.perl.org - Research and resolve hosting platform - After release, respond to issues as they come up ## Project Details There are currently at least three forks of the PearlBee project. The original project, a fork for the 2015 grant (intended for post-grant merge), and another created by myself with additional people from Booking.com. I plan to review the differences between the BPO-specific version and the upstream and merge any useful commits. I intend to remove the snowflake nature of BPO and provide a general-purpose blogging platform software in Perl which could be used outside BPO. This blogging platform (written to host BPO) will be written on top of Dancer2, DBIx::Class, and DBI, with a PostgreSQL database imported from the existing BPO, and session management provided by Memcached. The nature of the work will allow making adjustments to this setup, as I will implement generic interfaces instead of depending on specific technologies (PostgreSQL, Memcached, etc.). Unit and integration tests will be performed through Travis CI, and source code made available on GitHub. I'll begin by reviewing the code of both forks and preparing a suitable base. The fork on which I worked provides a good start, as it cleaned up the code considerably and changed the API endpoints to a more consistent interface. On top of this, I will work on cherry-picking any valuable commits from Evozon's official and BPO forks, as noted above. Next, I'll make sure all the basic features work, preferably covered by tests. Abilities like registering, adding a post, editing, commenting, etc. Then I would focus on migrating the existing database into the new schema. As the previous grant request stated, it's possible to reuse the password hashing scheme so people can log in without having to reset their passwords. If I find this to be an issue, we will work on a plan for migrating users' accounts without breakage. Existing user accounts will be covered in the grant work regardless of which approach I take. I will maintain support for the following content formats: HTML, Rich Text, and Markdown. I will also verify whether other formats (such as Textile 2) are used and require supporting or converting. When migrating the posts, I'll also make sure to maintain a compatibility layer with existing URLs, so that search engine content, as well as existing links online, are preserved. ## Inch-stones - Setup - Trello dashboard - Main Github repo under BPO - Add any possible contributors - Research - Review forks and differences - Classify all tickets - Decide on commits and changes to merge - Implementation work - Implement the remaining endpoints - Add support for content formats - Verify all required features - Write tests to verify behavior - Configure Travis CI to maintain working conditions - Set up hosted version for public testing - Migration - User migration - Content migration - Additional testing - Open beta test for finished product ## Project Schedule I'll be able to begin work by the end of June. I have the following estimates for the timeline, but this will be subject to slippage, which I will reflect in reports and communication. - 1. Setup: 19/06 - 25/06 - 2. Research: 26/06 - 09/07 - 3. Implementation work: 10/07 - 06/08 (\*) - 4. Migration: 07/08 - 10/09 (\*\*) - 5. Open beta: 11/09 - 25/09 - 6. Planned release: 26/09 **Notes:** (\*) At this point, I should have merged all relevant commits from different forks, implemented all the essential features that BPO will require, covered with tests. This is just before The Perl Conference in Amsterdam. Ideally, we can have a hosted preview version of it for people to experiment. (\*\*) This is a longer period because it includes The Perl Conference and a personal vacation. ## Completeness Criteria - Users can register, post, and browse - Blog text, code snippets, quoting, and comments display - Existing users imported - Existing content imported from MT to the new platform ## Bio I am a Brazilian developer currently working in Amsterdam at Booking.com. I've been interested in programming since I can remember. I'm quite passionate about it! I'm experienced with web development in Perl, having used extensively popular frameworks such as Moose, DBIx::Class, and Template::Toolkit. I'm also familiar with the project I intend to work on with this grant, PearlBee, since I refactored a big chunk of it to make it more extensible and robust, along with Sawyer X and other people at Booking.com. In 2011, I completed a Google Summer of Code project for the Perl Foundation for replacing Catalyst's inversion of control system with Bread::Board, mentored by Tomas Doran and Eden Cardim.

Comments (1)

I'd love to see this grant finally move to completion. Please take the blogs-perl-org fork with my blessings and any help I can give you, ask TPF for my private email and I'll do my best to answer any and all questions you have.



The code does in fact run and as best as I remember I could download the project, use the migration tool to copy an existing MovableType database, populate the search engine, and we were off and running. The reasons the grant expired are ... well, I've talked about those before and won't go over them again.



It's rather JavaScript heavy, and it was partially my fault for letting that get away from me, but I was dragged into both lead development *and* team management, so I had my hands full between getting the back end into shape, merging everyone's branches (usually under my name) and resolving code conflicts among the team.



You can probably reuse the migration tool, back-end schema (paying attention to the hashing protocol used for MT passwords) and maybe some elements of the front end. While the front-end team did the best with what they had, it turned out very JS-heavy and that was a consistent criticism of the site.



Again, I wish Andre' and friends from Booking all the best of luck, and I'll do my best to support them in finally getting this out the door. While I've thought several times about trying to take this over myself, I've not been in a situation where I have both the free time and cash flow to make this happen. I'd ordinarily say that I don't really have the web design skills to pull this off, but I think by now I could make something passable.



Andre, ask TPF for my email address and I'll answer any questions you might have about the current state of the project.

