2016 Looking Back

Taking Russ’ lead, and following up on something I’ve wanted to do for several years now, here is a quick summary of 2016 for me, personally and professionally.

January 2016

  • launched the most comprehensive XPages project I’ve ever built, excellent learning, especially using the OpenNTF Domino API
  • started my 50th trip around the sun
  • awesome little riding vacation to Palm Springs with Sandi and friends
  • began a year of helping a less forunate member of my family as his mother (my cousin) passed

February 2016

  • daughter #1 turned 20
  • daughter #3 would have turned 14
  • said goodbye to a special little girl who only made one trip around the sun
  • met with friends and colleagues in Orlando for Connect 2016, spoke with my colleague Delores who was on stage for the first time after 20-something trips to Lotusphere herself

March 2016

  • completed my 25th year of coaching hockey, my last for a while
  • 1 year since my Mom passed

April 2016

  • celebrated my wife’s birthday
  • attended a memorial for my cousin – cancer strikes again

May 2016

  • daughter #2 turned 18
  • Dad turned 77
  • attended a memorial for a very special uncle – yes, cancer

June 2016

  • attended Social Connections in Toronto and reprised our presentation from Connect
  • daughter #2 graduated high school with several scholarships in tow – very proud Dad
  • saw the completion of a renovation to our basement with a beautiful live edge mantle on a newly rebuilt fireplace
  • the hockey world lost Gordie Howe

July 2016

  • annual vacation to Christina Lake with the family, some beautiful bike rides

August 2016

  • harvested about 180 heads of garlic from my garden – sadly I didn’t dry them properly so the crop isn’t as nice as years past
  • completed my 7th Ride to Conquer Cancer in honour of my cousin and my uncle

September 2016

  • sadly watched as our yellow sphere ate itself up over the future of Notes and the lack of direction from IBM, and in spite of that continued to build meaningful applications using Notes and Domino for my customers
  • both daughters began post-secondary education
  • marked the 8th year since Brynne passed
  • initiated efforts to restart the Canadian Notes user group

October 2016

  • poured a small foundation in the back yard that will become my smoke house
  • bucket list vacation to French Polynesia, madly worked out to shed some weight before the trip and got down to my lowest weight in 27 years
  • Brytek wrapped it’s 7th year in business with our busiest of the last 5 years, with a significant sale of ProjExec and growth in the IBM Collaboration space with our customers

November 2016

December 2016

  • hosted the Cross Canada Collaboration User Group with the help of a lot of people
  • attended a memorial for a family friend, another young man gone too soon
  • named an IBM Champion for the first time
  • celebrated our 23rd wedding anniversary
  • snow for Christmas! lots of snow – our first white Christmas in 6 years
  • received a very thoughful gift from my daughters for Christmas – my kids get me
Posted in Uncategorized

C3UG Agenda for Nov. 17 Meeting

c3ug_icon

Our meeting scheduled for Thursday November 17 is finalized. The agenda is here. Please register for the event, indicating if you will attend in person or online. This event is available to everyone in the collaboration community regardless of if you are in Canada or not.

We will be live in four cities: Montreal, Toronto, Calgary, and Vancouver. The meeting starts at 1:00 pm Atlantic / 12:00 pm Eastern / 11:00 am Central / 10:00 am Mountain / 9:00 am Pacific.

We will have 6 presentations, on topics including IBM Notes and Domino XPages, IBM Connections and IBM Watson. Please join us.

Posted in Uncategorized

Accepting Abstracts to Present at C3UG

Abstract submission is open for the next Cross Canada Collaboration User Group. The deadline is Friday, October 21. The event is on Thursday, November 17.

We have presentation time slots of 45, 30, and 15 minutes, and are inviting 5 minute lightning talks too. We are looking to cram as much good content into 4 hours as we can. Our preference is to have each speaker be at one of our live locations but we will also consider online presentations too.

We have tracks for Development and Infrastructure, Administration, Customer Case Studies and solutions, and IBM Technology. We expect to have a session that highlights announcements from World of Watson.

You can find more information and the abstract submission form at our web site, powered by Domino and OpenNTF.

Posted in Collaboration

Cross Canada Collaboration User Group

Announcing the revival of what was previously known as the Cross-Country Lotus User Group (CCLUG) with a new name: Cross Canada Collaboration User Group (C3UG).

Work is well underway to plan this event, with more information and announcements to come shortly.  We will be accepting abstracts to present in the coming days.

This event will happen in person and online, so people in remote locations as well as locations around the world will all be welcome to participate.

Save the date: Thursday, November 17, 2016.  We are currently planning for a four hour event, although that may change.  Tentative times are 1:00pm – 4:00pm Eastern, 10:00am – 2:00pm Pacific.

Posted in Uncategorized

Working with Multi-Value Date Fields Using the OpenNTF Domino API

I completed a task yesterday that caused me no small amount of grief and wanted to write down what I learned, primarily for myself so I don’t forget, but also to share with others who may be struggling with the transition to using Java in your XPages applications.  I also want to say thank you to the people who offered support, and probably have them and more correct my mistakes. 🙂

Let me set up the scenario.  This task was an enhancement to an existing application I had built at the end of last year.  It was my first successful foray into using Java for all business logic in an XPages application.  Of note, I used the OpenNTF Domino API.  I built it with Bootstrap too, to support both desktop and iPad users.

The application is a task management system.  A task is assigned.  It is followed up on by an individual, and in it they provide proof that they have completed the task.  The task is then assigned back to a supervisor for review.  The supervisor may verify that the task is complete, may indicate that it is tentatively approved for cases where an on-site inspection is required, or may indicate that the proof is insufficient, and assign the task back to the individual.  For cases where the proof is tentatively accepted, it may then either be verified or the task returned.

The enhancement was to track how long it takes for the supervisor to review the proof.  If it is longer than 2 business days the system will note that the supervisor action was within the target period.  It will also track if the action took longer than 2 business days.

I added a date field to track the date that the proof was supplied and another to track when the action was taken, and a third field to track if the action was taken within the target period.  Given that the supervisor could send the task back the requirement was to track each time there was an exchange.  So that meant two multi-value date fields and a multi-value text field.

Anyone who has worked with multi-value Notes date fields and java before will be likely be smiling by now.  Little old me was walking into a blizzard without adequate supplies.  For those of you who can make LotusScript do magical things you can already craft a solution in your head, as did I.  When proof is supplied, grab the first date field, append a value to the field, and save.  When an action is taken, grab the second date field, append a value, grab the text field, calculate and append a value, and save.  We will ignore the fact that in the case of a tentatively accepted proof we don’t have to take the second step when the proof is ultimately verified.

Rather than talk about my struggles I will talk about the solution, other than to say that a Date object in Java is not the same as a DateTime object in Notes, and a Date object in Java is deprecated meaning you should really use a Calendar object, except that it’s okay to use a Date in Java when working in Notes.

The call to use is document.getItemValueDateTimeArray.  Unfortunately, this call returns a Vector<Base<?>> object.  People who have been using Java for a while will be able to explain what this is and why it makes sense.  To a newbie it caused no shortage of pain.  In very simple terms, what is returned is a list of values, as objects.  Those object values happen to be Notes DateTime objects.  The trick is that the compiler doesn’t know that they are DateTime objects.  Naturally the next step is to turn them into DateTime objects, but as I said above we then need to turn them into Java Date objects.

There is some code missing before this step, but this explains what I’ve just said above (it’s the step that reads the values from the field when we first open the document):

    Vector<Base<?>> tempProofSupplied = new Vector<Base<?>>();
    Vector<Date> tempPs = new Vector<Date>();
    tempProofSupplied = docAction.getItemValueDateTimeArray("ProofSupplied");
    if (tempProofSupplied != null) {
        for (Object obj : tempProofSupplied) {
            if (obj != null) {
                DateTime dtPs = (DateTime) obj;
                tempPs.add(dtPs.toJavaDate());
            }
        }
        this.setProofSupplied(tempPs);
    }

After I figured out the part above, the rest of the code pretty much fell into place.  For example, to add a new date to the list:

    public void trackProofSupplied(Date dateProofSupplied) {
        try {
            if (null == this.proofSupplied) {
                this.proofSupplied = new Vector<Date>();
            }
            this.proofSupplied.add(dateProofSupplied);
        } catch (Exception e) {
            System.out.println(" ERROR ! action.trackProofSupplied: " + e.toString());
        }
    }

I also want to say a big Thank You to Frank Van Der Linden who posted a snippet of Java Date utilities to OpenNTF, including one very useful function: calculateBusinessDays.  Saved me having to figure that one out myself.  Fair warning: it includes Calendar objects that I hadn’t used in the code above.  Calendars are really useful by the way, and worth investing the time to understand if you haven’t yet.

Posted in Uncategorized

What You Do When No One is Watching

This isn’t a post about technology.  It’s a quick story about a wonderful customer service experience I had yesterday and a good lesson for anyone in business.

My daughter has been trying to sell her car for the past few months.  I haven’t been involved to any great degree, but yesterday she was meeting a potential buyer who contacted her via Craigslist and she wanted me to join her as she wasn’t sure who she was meeting.  It turns out the buyer was a young man, and after the test drive he said he wanted to buy the car.  They agreed on the price, and he asked if he could pay and take the car home right away.  It was close to 5:00 pm on a Sunday.  He had to get the money from his bank and then we had to find an insurance agent that was open for him to get the insurance.  Believe it or not, we found one close by that was open until 6:00 pm.

He went off to get the money and we agreed to meet him at the insurance broker.  When we arrived we found out that the bank branch he went to was closed and he asked if he could do an online transfer instead.  We agreed.  It was approximately 5:30 pm by this time.  The online transfer was sent to my daughter via e-mail to confirm.  We waited for her to receive it.

The insurance broker office had 2 people in front of us waiting for service, and the man behind the counter told us that we would have a short wait.  In the time that it took for him to help the people in front of us the e-transfer still hadn’t showed up.  Another person had come in to the office, so we let him go ahead of us.  Now it was 5:55 pm, 5 minutes before closing.  While he was serving this new customer I overheard the person from the insurance office say that this was his last day on the job.  I was worried that the transfer wouldn’t happen and that he would ask us to leave.  I think we were all nervous.  I know the young man wanting the purchase the car was because he had an hour drive to get home and he wouldn’t want to have to come back again.

The last customer finished his business, and by then the man at the insurance office had started to help with our transaction, but I let him know that the financial part needed to happen before any insurance transfer, and that we were still waiting for the e-transfer notification.  Thinking we would be asked to come back tomorrow, he instead responded saying that it wouldn’t be a problem since he had lots more work to do still and that he would get our paperwork ready but then catch up on his additional work while we waited.

It took another half hour before the transfer finally happened.  6:30 pm!  In the mean time he offered his restroom for anyone that needed it.  He helped the young man purchasing the car first, and then helped my daughter with her paperwork.  We were very grateful for his patience and his help.  He told us she was his last customer, and that he appreciated that she was cheerful and understanding.  Sounds like he may have had a difficult customer or two to deal with that day.  We thanked him again and were on our way.  What a wonderful experience for my daughter.

I like the odd inspirational saying, and saw one on the wall as we were being helped by this person.  Character: What you do when no one is watching.

I would like to again thank Roger.  It was his last day.  He wasn’t getting paid after the store closed (I heard him say so).  He stayed open late just for us, and he did so while none of his co-workers or the managers of the store were there.

Posted in Uncategorized

IBM Connect Session: Why We Selected GoodReader

As we work through the details behind our presentation at IBM Connect 2016 this post is about our choice to select GoodReader as the app for our users. As we detailed in the presentation, our challenge was to replace three full large binders of paper with an app on a tablet. The material in the binders was being made available in advance of a series of strategy planning meetings that included 18 people over 23 days. The expectation is that all of the participants would have the ability to review the material and make notes to be able to speak to the content in the meetings. Did we mention this were senior managers and executives?

Our Change Agent, Terry, came to us with the request to figure out how to put the material on his iPad and give him the ability to annotate it with his notes using a stylus and eliminate all that paper. It also needed to be secure. He uses an app called Notes Plus and asked us to start there.

By this time I had an iPad so I purchased the app and started to learn how to use it. Notes Plus is a very useful tool that I am only scratching the surface on how to use. I use it primarily to scribble my notes and comments when in meetings. You start with a blank canvas and use your stylus to write notes. Pretty simple. It can also edit PDF files, so it seemed like a good fit for what we wanted. The trick was getting the material into the app. For that we looked to use the Connections app to transfer the files to the iPad.

The Connections app is great, and we have several users who are using it regularly, and a larger number of people using it off and on. For my test I built a Community and put some sample PDF files into it. I synched those files to my iPad using the app and then set about trying to figure out how to open those files in the Notes Plus app. It’s worth stating at this point that the Connections app doesn’t provide the ability to annotate files, so in terms of meeting our needs, despite the security in the app, it wasn’t going to be able to do what we needed it to.

While I was able to select a file in the Connections app and go through the process of opening that file in the Notes Plus app, editing the file, saving it and getting back to it, and keeping everything secure was going to be a challenge in terms of user experience. We wanted to give our users a seamless experience or it wasn’t going to work. I’ve already posted about the challenge we faced with the negative perception of Connections, so for this to work it needed to be easy and intuitive. So our search continued.

The next thing that happened was that I found this blog post from Luis Benitez. It pointed to the exact solution we were looking for. It specifically named GoodReader as an app that can be used with Connections to synch files, annotate them, and keep everything secure. It required that we install FileJockey on our Connections server to enable the WebDav protocol that GoodReader uses as one method to synch files, and after that we were off to the races.

My next posts will include how we set up GoodReader, including its fabulous security, and how we set up FileJockey.

Tagged with: , , ,
Posted in Collaboration