Sunday, September 20, 2015

Brainstorming

Yes, I'm starting with the second step in the development/debug process. The process starts with identifying the problem. Let's assume we have the problem well in hand. Now we have to fix it.

Brainstorming has one rule - no judgement. We don't filter. We don't analyse. We don't organize. Throw out any and every idea that comes into your head. Okay, maybe one filter - only ideas relevant to the problem. Suggesting a vacation in Aruba probably doesn't qualify. And yes, you will get some crazy or stupid suggestions. Keep going anyway. Get those creative juices flowing.

As the ideas start coming, excitement sets in. At this point remember, do not explore any of the ideas. Ask questions to understand what someone said. But do not consider feasibility. We don't care if something sounds impractical. That comes later.

Eventually, ideas slow down and start getting ridiculous. It's time to stop. Next we organize the ideas. Again, don't throw out any of them. We're looking for patterns - similarities, dependencies, costs, and duplicates. How you organize the ideas depends on the problem. There is no right answer. The action matters more than the result.

Now comes the good part - what you wanted to do all along. Analyse the ideas and pick one (or how ever many you need). Weed out the bad ideas, the impractical ones, or the ones that cost too much.

Quick and Dirty

So this goes through my head every time I encounter a problem. List ideas, organize, analyse, and pick one. Except no one else can see what's in my head. In a team scenario, it pays to do this out loud, together. Business people call it buy in. We become emotionally invested in our ideas. That's the heart of creativity. Give everyone a voice. Let them choose the solution instead of feeding it to them. Let them connect with it emotionally.

Wednesday, September 2, 2015

Pulse VPN Client

I got to do something new today - setup a VPN connection with work. Okay, that's not entirely new. For the longest time, I used Network Connect for the VPN. It worked great up until a couple of months ago. The VPN was upgraded and Network Connect wen the way of the dodo.

The new VPN uses Pulse Secure. There exists a Windows client and a Mac client. And I must say, they're pretty nice. Nothing for Linux though. A little Google searching and I came across OpenConnect. So I set about installing OpenConnect.

First, I checked the Ubuntu repositories for a pre-built package. The OpenConnect web site says that Juniper support starts in version 7.05. The Ubuntu package topped out at version 6.0. Note: This was Ubuntu 15.04. I found a PPA testing a 7.06 package for the next Ubuntu release. One more release and my success reverts to the dustbin of history.

Next I installed from source. It promptly crashed looking for a script named vpnc-script. On Ubuntu, that script comes from the vpnc package. Then the program crashed looking for a library. The library was built from the same source as the client program. It was loaded into one of the standard library directories. Ugh.

I tried several things. The ultimate solution - run ldconfig. ldconfig added the new library into its index. Ta-da! The client program ran perfectly.

It still, however, would not connect to the VPN. I used the -v option to see what was happening. The client failed parsing the login form. Just before termination, I saw two fields being ignored. Our VPN displays a confirmation dialog box asking you to proceed or cancel. I actually started digging into the source code for this one.

A quick grep found the warning message about ignored fields. The code compared the control names with a string for the submit button. The submit button name comes from the calling code. Nope, wait, it comes from the code that calls the calling code.

I changed the string to match our Proceed button. Compile, run, and Bob's your uncle! The VPN connected. I logged into the internal app server just to be sure.

So to recap...

  1. Install the vpnc package first.
  2. Change the submit button name in the source code.