I am an avid runner and many times during my runs the solutions to problems I might have been wrestling with or entirely new ideas pop up while I am putting in my miles. During my run today I was thinking of writing a post that shows a bit of the method I use for tracking sub items on my to do list. In that spirit I will copy below the entire to do section for the feature I have been adding over the last 4 days , private guest message support. You will see at once , how many items had to be changed in order to implement the change but note that some of the lines may be some what redundant, they are definitely not examples of my best grammar or punctuation so please disregard that aspect of them. They are a brain dump of the storm of tasks that deluge my mind once I've isolated a method of solution for a given problem. Some of them are obsoleted as during implementation I find more efficient ways of performing the task, which are most likely noted as another task item. It may look like a confused mess but this method has allowed me to ensure that complex coding tasks are completed without missing important subtasks , many of which many not be essential to the overall functionality created but could significantly enhance the User experience or under scaled and loaded conditions significantly ease the developer and administrator experience! Without much adieu here is the list!
To facilitate guest pm capability for sites I could modify the converse template to support establishing pm’s into the system that tentatively a session between the guest (by ip address) and authenticated Users on the system who have access to a “guest pm dashboard” this dashboard will list incoming guest PM requests and allow authorized users to click on the request to engage the conversation with the guest. This will allow me to license personal help services to other web sites. This was something I thought about doing a while ago and really would be a great “yes we can do that.”
Conversation , might have to modify to allow guest pm’s with hanging end…when a remote guest requests a pm …an unmanaged conversation should be created with its state resident entirely in the participant_queue when a dashboard agent clicks on the waiting guest pm link they complete the participant handshake and can converse. Disable uploads and table file view maintain language options of course (since that’s the secret sauce) Solution: Symmetry
To avoid having to modify conversation it would be nice if I could define a unique characteristic of guest pm’s that can be used to isolate them from standard typed conversations…easy! The conversation id! ..currently negative guest id’s define the guest side , positive user id’s define the user side of conversations of positive value types. To allow guest pm’s if I had zero or negative value conversations I could use them to represent non managed conversations created between users and the guest …these can have hanging ends that can be retrieved for display …simply when a guest makes a request the conversation id being zero or negative means it is a guest request and emit will be modified to create the window, create an unmanaged conversation for it. The guest id can define where the view file will be written for the guest pm session (in a separate folder for guest pm’s) when a valid user accepts a hanging request they can generate the write path of the hanging request and engage the guest allowing both to converse to the same file stream. The only requirement to facilitate this is relaxing the referential constraint on the participant_queue conversation_id table so that zero and negative values are allowed. There will be then no need to modify the dbconversation add,retrieve or update methods for the guest as I can provided the new values to define the uniqueness of the guest pm rows.
DBConversation , add a new method that retrieves all guest pm rows that are hanging (determined by negative or zero value conversation id along with user id job id at zero meaning unengaged request) …will filter by site id.
CreateTable vendor classes updated createUser() to include now DASHBOARD_AGENT field MS, MSS, Ocl
Manually add new field to installed test db’s (mysql2 most important)
User class, new field Boolean int “dashboard_agent” , new get/sets and toXml() variants
DBUser new field and method changes in CRUD methods
Site should have field for allowing or disabling guest pm dashboard, when disabled guest pm links on client sites will link to a “the site is currently not accepting guest pm’s try again at a later date”, this will allow turning on and off the customer service handling based on desired metrics. For authenticated dashboard agents the enav will not display the link to the dashboard since no requests would be pending.
Enav.jsp update to include generation of new link for dashboard when user is agent and site allows use of dashboard.
Site class, new field Boolean int “use_pm_dashboard”, new get/sets and toXml() variants
DBSite new field and method changes in CRUD methods
_user.jsp new form element for processing dashboard_agent field.
_site.jsp new form element for processing
DPSConfig class update the createUser() method to enable pm_dashboard_agent for superuser by default
Test new field through UI
Converse.jsp update to allow creating of guest pm will need to specify unique participant_queue row ..possibly involving both the remote ip address…must ensure new guest pm requests terminate old ones (to prevent dos like attacks from nefarious live agents)…since converse already has live verification logic this threat is significantly reduced compared to competition.
Login.jsp template sometimes returns(when the db is acting up) a session with a zero job id, flag this for redirection to kill the session.
Converse.jsp should have attribute for guestsite name , so that the url itself will indicate the site that the guest window is allowing attachment too….so the url will have the siteid and the sitename , the site id being used of course to associate the pm request row with the correct site…the guest name that the guest uses in the room will be set to the guest user object created and used in the room
On the dashboard side, a link in the dashboard jsp will allow generation of guest pm window code …formatted as described previously (with siteid and sitename) (the url should have the same pop up format as the url for remote access to a conference room generated in the emit.jsp template …see that template to use as reference)
New dashboard.jsp template , should contain page very much like imail.jsp accept listing will be a live query of “hanging” guest pm requests I can use a dynamically updated window to reexecute the query ever few seconds to keep it fresh. Users who are dashboard agents with all global site or conversation permissions will be able to select the site id dashboard to view…users without this implicit or explicit permission will only be able to manage incoming requests to their site id.
Make sure to add custom task to indicate dashboard engage actions by user agents…these metrics will be important for clients to use to gauge the productivity of their agents handling of incoming requests. THIS REQUIRES that the code for the guest request also indicates the action task to an audit trail, the best way would be to keep a log for the dashboard actions (requests and engages )
Site, DBSite, createSite() update to include new field IM_ROOM_ADS , which indicates the default option for display of room advertisements for private messages on a per site basis…this allows site administrators to determine if ad serving is enabled (assuming they have the permission) I realized this was missing when setting the default pm objects for guest pm requests…should take an hour to add in and test, then add as default value for code that instantiates pm rooms.
Change header of dashboard.jsp template so that date is replaced by “agent” ….and a green “engage guest!” displays in the status column when a request is hanging, when it is in progress, the agent column will display an active link of the dashboard agent handling the request…just like pm’s a single agent will be able to handle multiple guest pm requests this is going to be soooo God!
“drop” link would allow killing unattached requests
need a way to drop unanswered hanging requests abandoned by the remote guest (the session should clean it up on unbounding)..make sure this works.
Emit.jsp new clauses to send guest pm requests and answer via guest pm responses.
Request will open a window with a hanging communication stream via a row in the participant_queue
Response will close a targeted unique open stream (ip/type) and pop a window for responder to communicate with guest
So, there it is, currently I am in the process of checking off the items for completion. I usually do this by simply adding in bold "complete!" or "done!" after each item. Pretty low tech, no Microsoft project files, milestones and timelines...just a list of items to do! Works for me, I've added a feature to my collaboration API that forms the foundation of entire businesses (LivePerson is a leading supplier in this space) in 7 days, not bad at all! ;)