Updates from Mike "dukebag" Whitfield Toggle Comment Threads | Keyboard Shortcuts

  • Mike "dukebag" Whitfield 8:08 pm on August 17, 2010 Permalink | Reply  

    GSoC Conclusion 

    Hey all,

    Hope everyone had an awesome summer.  I had an awesome time participating in GSoC this year.  It was a very different experience, and even though there was no office or faces to connect with, the experience was valuable and unique.   My project initially set out to orient new users to WordPress, and though the final result is not quite a LinkedIn-esque setup completion bar, I sincerely believe the result maintains and accomplishes the overreaching goal.  There were a lot of rewrites that took place over the course of development, and ultimately I learned that each “task” had to be treated individually.  There were a lot of factors considered while developing, and they included:

    • keeping the code reliable for future WP updates
    • drawing productive commonalities between tasks
    • integrating with an existing system in the least invasive, most straightforward way

    Never before had I integrated with such a wide-reaching system.  My background is mostly 3D game development, and whereas game development tends to be esoteric and isolated, changes made to WPress must be neatly encapsulated and play nice with the rest of the system as well as foreseeable 3rd party components.  I learned a lot about stepping through design decisions carefully and thinking about them in an iterative context.  Even though web development is much more focused on stability and accounting for a variety of end-user environments/contexts, you still ultimately need to code something (that’s the iterative part).  As a result of working with my mentor, Mark Jaquith, I am now enjoying David Allen’s Getting Things Done (http://www.amazon.com/Getting-Things-Done-Stress-Free-Productivity/dp/0142000280).  I am happy to have started developing for WordPress, which was a goal I had prior to GSoC and which also served as the impetus for getting involved.  Thank you to everyone else involved 🙂

    EDIT: I have posted a more in-depth Post Mortem on my page which I will update soon-ish: https://gsoc2010.wordpress.com/mike-whitfield-setup-meter/

    Here’s a video below of the work completed.  Please note that the mic I recorded with could not pick up sound well, so the volume is low.

     
    • Stas Sușcov 9:14 pm on August 17, 2010 Permalink | Reply

      That’s sweet, this should help a lot of newcomers adapt to WordPress.
      I would opt this to become a recommended plugin in plugins directory.
      🙂

      • scribu 12:38 pm on August 18, 2010 Permalink | Reply

        Yeah, this would be especially useful on hosted solutions like wp.com

  • Mike "dukebag" Whitfield 7:59 pm on August 12, 2010 Permalink | Reply  

    Week #12 

    Making lots of progress in this final week.  Progressing a lot of the features, fleshing out the tasks, and doing a lot of polish work.  Also working with my mentor every day which is good.  Look forward to releasing something 🙂

     
  • Mike "dukebag" Whitfield 6:28 pm on August 4, 2010 Permalink | Reply  

    11 more days 

    11 more days, and I’ve got a good amount to finish.  The goal is to have 15 tasks in (currently at 11), each displaying detailed task instructions as well as tracking their completion with additional messages.  I’ve now added task highlighting which helps aid where the relevant task is on the page.  Then it’s onto accounting for security/localization/etc.

     
  • Mike "dukebag" Whitfield 5:57 pm on July 28, 2010 Permalink | Reply  

    This week I have been working on yet ano… 

    This week I have been working on yet another code rewrite.  Perhaps I should think of these “rewrites” actually just as refactoring sessions, though I have tended to revamp the entire callstack each time.  Still, I am satisfied with the direction it has gone in.  The major change is that classes now encompass the segmentation youd expect to see in a theme file (e.g. categories, tags, posts, etc).  This makes a lot more sense as an API for other plugins to just have 1 task file.  Hook events are now thought of more as notices, where a display event may respond to WP’s default hooks or to task-specific hooks.  I must admit, I need to carefully plan what I plan to produce for the end of term.  There are a lot of features, for instance user specific tasks, which will just fall outside the scope with the way I’ve reconsidered the role of tasks.  That is, because tasks are now used much more as context-driven suggestions, keeping a separate priority queue for each user may prove out of the feasible scope.  Still, I want to see this through to what the system is supposed to be.  I know GSoC specifies that students should offer a plan for continued support, which I hope can accommodate these items.

    You can check out my page for a little more updated info.

     
  • Mike "dukebag" Whitfield 3:21 pm on July 21, 2010 Permalink | Reply  

    Message in a bottle 

    This week, I have further explored task messaging.  The discovery I’ve made is that there is much more use to event-triggered messages than there is for random or even prioritized selection of messages.  Before, the idea was to show messages on a dashboard widget and then display notification messages for select events such as when a new comment is posted.  Now, I have found it is useful to display messaging in a relevant context, hopefully in response to something the user does.

    True too, there must come a point where prioritization must play some role to limit the number of messages going through.  Pictured below is what happens after a user makes a new post with no category.  For this particular message to display, the following conditions must also be met:

    • more than 8 posts total
    • more uncategorized posts than categorized
    • there is at least 1 categorized post
    • the new post our message is displayed in response to is also uncategorized

    You’ll notice the options given after the message, albeit a simple Yes/No.  The power of that “No” button is that we can inform the displaying tasks that the user is not interested.  This was more the original intention of priority, whereby we can down the road decide not to respond to an event whatsoever.  The new twist this week is that I’m now realizing the power of chaining task messages.  Here, the “add_category” task is responding to an event the “add_post” task throws.  If the user responds by hitting “No”, eventually the system can learn that the user is not interested in messages after posting whatsoever.

     
  • Mike "dukebag" Whitfield 12:00 pm on July 14, 2010 Permalink | Reply  

    The codebase is now further solidified. … 

    The codebase is now further solidified.  Task implementation has a very nice and easy syntax that yields a lot of power:

        // function to establish WP hooks
        function init() {
    	$this->add_hook("edit_post", "post_edited");
    	$this->on_completion("edit_tagline", 2);
        }

    In doing this rewrite, Tasks and Task feedback have been given more definition. I reflected those updates on my page. Even though the only display is a suggestion of what the user might do next, the complexity comes in targeting those messages correctly.

    Priority is the main value, and it is a simple scalar value at that. A variety of functions assess feedback in ways that conveniently affect priority. For instance, if a user gets 3 comments pending authorization and has visited the backend 10 times, we can reflect that in a message asking them if they’d like to change their comment authorization settings:

            function init() {
    	    $num_comments_pending = sizeof( get_comments(array("status"=>0)));
    	    $this->add_hook_my_args($num_comments_pending, "wp_insert_comment", "comment_inserted");
    	}
    	
    	function comment_inserted($num_comments_pending, $id, $comment) {
    	    $PRIORITY_DELTA = 4;
    	    if ( $num_comments_pending < 3 )
    		$this->on_time( time()+2*24*60*60, $PRIORITY_DELTA );
    	    else
    		$this->add_hook_on_page_visits(10, "notify_change_options");
    	}
    
    	function notify_change_options() {
    	    $this->send_message( "You have unattended comments pending authorization.  Would you like to change your options?")
    	}
    

    So tasks can either passively note priority to the TaskManager or take direct action based on given feedback. Hope to really flesh out the priority code in the next week.

     
  • Mike "dukebag" Whitfield 10:06 am on July 8, 2010 Permalink | Reply  

    Setup Completion – Week #7 

    Done a rewrite of the codebase, incorporating a lot of what I’ve learned and the revised scope/goal of the project. This includes redundancy with custom actions for the task system as well as use of the transients/options/user_meta APIs. Starting to put some thought into task priority, which is interesting. What I’m learning is that any kind of hook is just a means of giving generic feedback to a task, rather than simply completion data. For instance, as a “Find widgets on WP.org” task, I might be interested when the “Update Sidebar” task is completed. That is, a task can hook in when a certain task completes, notify the system ‘hey urgent need here!’ and then have a message likely displayed as a result.  This is very beneficial for determining context, which I think is largely where this plugin can be useful.

    Hope to get out of the whole rewrite and back into more display/results soon.

     
  • Mike "dukebag" Whitfield 10:05 pm on July 2, 2010 Permalink | Reply  

    Setup Completion – week 6 

    Missed my posting day of Wednesday for a variety of reasons.  Am pleased to report that direction of the setup completion is taking a slightly different, more encompassing direction.  That is, rather than a concrete list of 10 or so tasks to be performed upon installation, tasks are now assigned on a dynamic basis.  This means if a user creates a category and their default category is still “uncategorized”, the user can now be nudged that they might like to change the default category.  This usage can be extended into a variety of areas, and can even lend itself to 3rd party plugins/content.

    Code-wise, not much progress.  Of course it is always ideal to stuff planning away into a glass jar early on, but it is nonetheless what makes coding so darn interesting (in a darn difficult sort of way).  The plan from here is to restructure the already coded tasks, lensing them with this newfound perspective.  Following that, the new dynamics can be accounted for on a API-basis.

     
  • Mike "dukebag" Whitfield 3:59 am on June 24, 2010 Permalink | Reply  

    Week 5 – Setup Meter 

    Spent this week orienting and changing some of the Setup Meter codebase to WP 3.0.  Plan to wrap up that codebase rather than make it something more complicated than it needs to be.  Kind of the adage of “know when you’re finished”.  One of my goals in participating in GSoC with WordPress was to use it as an opportunity to get more involved with WordPress in general.  Though not directly related, I have set up my blog at http://www.thedukebag.com.  I plan to use it as an opportunity to examine further work I want to contribute to WP.

     
  • Mike "dukebag" Whitfield 6:54 pm on June 16, 2010 Permalink | Reply  

    Week 4 – What next? 

    This week has been primarily planning how to add further to the Dashboard Completion module. Had to move out of my apartment, so that has taken a good chunk of my time this week. When my proposal was initially drafted, the focus was on achievements. As I looked into it, it made sense to complete the Dashboard Completion module, per the original WP ideas list. From there, I would be free to move onto achievements. At this point, however, it looks like a lot of the achievement-like functionality can in fact be built into a Dashboard Completion module. The focus would be slightly shifted from the social aspect to giving task feedback and guidelines as to what a user can do next. This makes sense in lieu of not being able to host a central achievements server, which would be necessary for the social aspect. Alternatively, working achievements into BuddyPress may spread the time for this project too thin, not being able to reach the potential of the Dashboard Completion module.

    In building a list of tasks, I have noted that there are few “bare bones” tasks, items you’d consider unanimously necessary for any WP install. There are many conditional tasks that I foresee as triggerable, such as after you’ve gotten your first comment.  This is where tasks start to look like achievements with a slightly different focus.  For instance, it may make sense after you’ve posted a lot to trigger a “create/organize your posts into categories” task.  Other, more involved tasks could include linking with other websites.

    In addition to a larger set of hooks and tasks, there are improvements that can be made to give users task highlighting.  As a user clicks on a task to the relevant page, the specific field or relevant area to the task would be highlighted.  This type of additional feedback could be provided in other ways such as listing the tasks that can be completed on a certain page.  Another idea is to provide specific and discoverable information for each task.  Presently, there are check-mark, x-mark and addition icons indicating task status/information.  A question mark icon would be added which would expand into detailed task information when clicked.  This information could foreseeably include links to external resources.

    Two thoughts override and emerge from all of these ideas.  First, there is no sense in going far beyond what need a Dashboard Completion module  is supposed to fulfill.  A Dashboard Completion module is meant to be a simple roadmap of what new users or experienced users can easily have feedback on basic setup tasks.  Second, the basic overlap between achievements and the Dashboard module is the monitoring user activity.  As users interact with WordPress, the system logs that activity and then displays it in a certain way.  This type of functionality may be applied in a potentially more useful way for the scope of this project.  My initial thoughts are to work some kind of analytics type feedback tool, specifically working with WordPress hooks, but I have done little research into this.

    Some of what I’ve posted here is straightforward and worthwhile, while some is still very undecided.  Any feedback you would like to provide is greatly appreciated.

     
c
Compose new post
j
Next post/Next comment
k
Previous post/Previous comment
r
Reply
e
Edit
o
Show/Hide comments
t
Go to top
l
Go to login
h
Show/Hide help
shift + esc
Cancel