Skip to main content

implementation of guest messaging done ....

...but now comes the testing. I was up late last night testing , or rather getting rid of a bug in the implementation code from last night. Considering the large number of changes I made before testing two hours of bug quashing wasn't bad at all. Though , more efficient code and test practices would have ensured that I performed a unit test after each change , the nature of this addition makes that some what impractical due to the dependencies among the various things that needed to be changed , regardless the bug is gone and now it is time to continue the testing.

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!

GuestPM dashboard

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
Enable_dashboard field.

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! ;)


Popular posts from this blog

Highly targeted Cpg vaccine immunotherapy for a range of cancer


This will surely go down as a seminal advance in cancer therapy. It reads like magic:

So this new approach looks for the specific proteins that are associated with a given tumors resistance to attack by the body's T cells, it then adjusts those T cells to be hyper sensitive to the specific oncogenic proteins targeted. These cells become essentially The Terminator​ T cells in the specific tumor AND have the multiplied effect of traveling along the immune pathway of spreading that the cancer many have metastasized. This is huge squared because it means you can essentially use targeting one tumor to identify and eliminate distal tumors that you many not even realize exist.

This allows the therapy for treating cancer to, for the first time; end the "wack a mole" problem that has frustrated traditional shot gun methods of treatment involving radiation and chemotherapy ...which by their nature unfortunately damage parts of the body that are not cancer laden but …

Engineers versus Programmers

I have found as more non formally trained people enter the coding space, the quality of code that results varies in an interesting way.

The formalities of learning to code in a structured course at University involve often strong focus on "correctness" and efficiency in the form of big O representations for the algorithms created.

Much less focus tends to be placed on what I'll call practical programming, which is the type of code that engineers (note I didn't use "programmers" on purpose) must learn to write.

Programmers are what Universities create, students that can take a defined development environment and within in write an algorithm for computing some sequence or traversing a tree or encoding and decoding a string. Efficiency and invariant rules are guiding development missions. Execution time for creating the solution is often a week or more depending on the professor and their style of teaching code and giving out problems. This type of coding is devo…

AgilEntity Architecture: Action Oriented Workflow

Permissions, fine grained versus management headache
The usual method for determining which users can perform a given function on a given object in a managed system, employs providing those Users with specific access rights via the use of permissions. Often these permissions are also able to be granted to collections called Groups, to which Users are added. The combination of Permissions and Groups provides the ability to provide as atomic a dissemination of rights across the User space as possible. However, this granularity comes at the price of reduced efficiency for managing the created permissions and more importantly the Groups that collect Users designated to perform sets of actions. Essentially the Groups serve as access control lists in many systems, which for the variable and often changing environment of business applications means a need to constantly update the ACL’s (groups) in order to add or remove individuals based on their ability to perform certain actions. Also, the…