I Started a New Blog

I am no longer updating this blog.  I started a new blog, Random Eklektos.  Please visit me there.

The Thinker’s Toolkit

I just finished reading a fascinating book titled, The Thinker’s Toolkit:  14 Powerful Techniques for Problem Solving, by Morgan D. Jones.  The book is not new – my version was copyrighted in 1998 – but still a great read.  After an interesting look at how your brain is your own worst enemy when it comes to decision making, Jones lays out 14 techniques (with examples and exercise) to help you make better decisions and overcome your brain’s bad habits.  Some of these techniques are things you already do and didn’t even know had a name or a formal formulation, like Problem Restatement, Pros-Cons-Fixes, or Devil’s Advocacy.  Others you may not have heard of, like Causal Flow Diagramming, Utility Trees, or Weighted Rankings.  Either way, by the end of each chapter you have a good feel for the class of problems each technique is best used for, and how to apply the technique.

Jones’ big thing is structuring and sorting data so you (i.e., your brain) can analyze it more clearly and systematically.  What struck me as I read through the techniques and examples, was how many problems I have encountered in my career in the information management industry where I wish I had used these techniques.  I was able to map some of these techniques to three specific classes of “problems” I have encountered:  innovation and requirements development, software feature ranking, and logic diagramming.  Let me give you a few examples:

Innovation and Requirements Development

Developing innovative ideas and requirements tend to be creative processes where there are no “wrong” ideas, and the more ideas the better.  This process often requires thinking “outside the box”, which are qualities of Divergent-Convergent Thinking.  Jones lays out four principles to help you think outside the box:

  1. The more ideas, the better!  (Quantity of quality at this stage.)
  2. Build one idea upon another (Use the synergy of ideas to propel creativity.)
  3. Wacky ideas are okay (In fact, some become the best and most interesting ideas.)
  4. Don’t evaluate ideas (This occurs later.  Don’t squash creativity at this stage.)

When you are done, cluster and combine similar ideas, throw out the outliers that clearly don’t fit, and select the most practical and promising ideas.

Software Feature Ranking

In Agile development, it is important to select and rank features for inclusion in each Sprint.  The selection and ranking can often get muddled without clear objectives for each Sprint, but even then it is sometimes difficult to be objective.  The Weighted Ranking technique can solve this problem by helping you develop clear objectives and assigning importance (weight) to them.  Then, each software feature is systematically compared to every other software feature (ranking), weights applied, and objective importance is revealed.  This technique ensures all features are ranked using the same criteria (objectives), each criteria is given consistent importance (weight), and each feature is compared to every other feature.

The actual implementation of the Weighted Ranking technique is a little more involved than the description implies and will probably require the use of a spreadsheet, but the book walks through all the steps with examples and exercises.

Logic Diagramming

Documenting decision-making logic in software design documentation is always a challenge.  Sometimes it is even a challenge to document it in a way that it can be discussed and explored during the design phase of software development.  Thus, a consistent and easy to use and understand methodology is important represent ideas and logic flows.  Though Scenario Trees and Causal Flow Diagramming are really decision making techniques, they can be used to document the logic behind decisions also.  The Scenario Tree is just like it sounds:  it is a branch diagram which depicts different outcomes at each decision point in a chain of events.  It is easy to develop if-then-else, Boolean, or case statement logic from the finished Scenario Tree.  The Causal Flow Diagram technique uses a similar approach, but from the perspective of cause-effect relationships instead of decisions at each decision point in the chain of events.  It identifies and diagrams direct effects, inverse effects, and feedback loops (both stable and unstable).  This type of diagramming may be more applicable for system-level modeling than working out nuances of a single logic case like the Scenario Tree.  Regardless, these techniques provide a simple and consistent methodology for the decomposition and discussion of logic events.

Like the Weighted Ranking technique, the book describes the techniques in detail with plenty of examples and exercises.

Jones’ background is Intelligence, not software or information management technology, so none of the mappings I just described exist in the book.  However, I think the fact that the techniques map easily to the information management realm speaks of their worthiness.  I encourage you to pick a copy of The Thinker’s Toolbox to learn about all 14 techniques.  It is an interesting read and may very well change the way you approach problem-solving, no matter your background or industry.

MLB LED Scorboard Layout Tweaks

I’ve been having a lot of fun with my MLB LED Scoreboard.

I started to work with the layout a little to make it more to my liking.  Specifically, I:

  • Added a single line of blank LEDs between the visiting and home teams.  It makes a big difference when the teams use the same colors.
  • Aligned the score and inning numbers and adjusted the top/bottom triangle a little.
  • Centered second base on the scoreboard.
  • Moved batter count and outs left to better use space.

There are a few things like “no hits” and “perfect game” I haven’t encountered yet, so I may need to make some additional adjustments to accommodate them.  But for now, I’m happy with this layout.

Here’s the w64h32.json file that makes it happen. (Note: This layout file is a modification of the default w64h32.json file distributed with version 3.2.1 of the mlb-led-scoreboard code.)

{
  "defaults": {
    "font_name": "4x6"
  },
  "bases": {
    "1B": {
      "x": 37,
      "y": 22,
      "size": 6
    },
    "2B": {
      "x": 32,
      "y": 17,
      "size": 6
    },
    "3B": {
      "x": 27,
      "y": 22,
      "size": 6
    }
  },
  "final": {
    "inning": {
      "x": 32,
      "y": 22
    },
    "scrolling_text": {
      "x": 0,
      "y": 31,
      "width": 64
    },
    "nohit_text": {
      "x": 1,
      "y": 21
    }
  },
  "inning": {
    "break": {
      "number": {
        "x": 32,
        "y": 29
      },
      "text": {
        "x": 32,
        "y": 22
      }
    },
    "number": {
      "x": 62,
      "y": 22
    },
    "arrow": {
      "size": 3,
      "up": {
        "x_offset": -6,
        "y_offset": -4
      },
      "down": {
        "x_offset": -6,
        "y_offset": -2
      }
    }
  },
  "outs": {
    "1": {
      "x": 9,
      "y": 26,
      "size": 2,
      "nohit": {
        "x": 9,
        "y": 28,
        "size": 2
      },
      "perfect_game": {
        "x": 9,
        "y": 28,
        "size": 2
      }
    },
    "2": {
      "x": 13,
      "y": 26,
      "size": 2,
      "nohit": {
        "x": 13,
        "y": 28,
        "size": 2
      },
      "perfect_game": {
        "x": 13,
        "y": 28,
        "size": 2
      }
    },
    "3": {
      "x": 17,
      "y": 26,
      "size": 2,
      "nohit": {
        "x": 17,
        "y": 28,
        "size": 2
      },
      "perfect_game": {
        "x": 17,
        "y": 28,
        "size": 2
      }
    }
  },
  "batter_count": {
    "x": 9,
    "y": 23,
    "nohit": {
      "x": 9,
      "y": 21
    },
    "perfect_game": {
      "x": 9,
      "y": 21
    }
  },
  "nohitter": {
    "x": 9,
    "y": 27,
    "innings_until_display": 5
  },
  "pregame": {
    "scrolling_text": {
      "x": 0,
      "y": 31,
      "width": 64,
      "warmup": {
        "x": 0,
        "y": 31,
        "width": 64
      }
    },
    "start_time": {
      "x": 32,
      "y": 22
    },
    "warmup_text": {
      "x": 32,
      "y": 22
    }
  },
  "standings": {
    "offset": 6,
    "height": 30,
    "width": 64,
    "divider": {
      "x": 13
    },
    "stat_title": {
      "x": 28
    },
    "team": {
      "name": {
        "x": 1
      },
      "record": {
        "x": 31
      },
      "games_back": {
        "x": 64
      }
    }
  },
  "status": {
    "text": {
      "x": 32,
      "y": 22,
      "short_text": false
    },
    "scrolling_text": {
      "x": 0,
      "y": 31,
      "width": 64
    }
  },
  "teams": {
    "background": {
      "away": {
        "width": 64,
        "height": 7,
        "x": 0,
        "y": 0
      },
      "home": {
        "width": 64,
        "height": 7,
        "x": 0,
        "y": 8
      }
    },
    "name": {
      "away": {
        "x": 4,
        "y": 6
      },
      "home": {
        "x": 4,
        "y": 14
      }
    },
    "accent": {
      "away": {
        "width": 2,
        "height": 7,
        "x": 0,
        "y": 0
      },
      "home": {
        "width": 2,
        "height": 7,
        "x": 0,
        "y": 8
      }
    },
    "runs": {
      "away": {
        "x": 62,
        "y": 6
      },
      "home": {
        "x": 62,
        "y": 14
      }
    }
  },
  "offday": {
    "scrolling_text": {
      "x": 0,
      "y": 30,
      "width": 64
    },
    "time": {
      "x": 40,
      "y": 7
    },
    "conditions": {
      "x": 40,
      "y": 15
    },
    "temperature": {
      "x": 10,
      "y": 23
    },
    "wind_speed": {
      "x": 0,
      "y": -2
    },
    "wind_dir": {
      "x": 0,
      "y": -2
    },
    "wind": {
      "x": 40,
      "y": 21
    },
    "weather_icon": {
      "x": 2,
      "y": 1,
      "width": 15,
      "height": 15
    }
  }
}

 

MLB LED Scoreboard for Opening Day 2019

I’ve had my eye on this open source project for a while, and during the off season I finally got around to building it.  Here’s how I did it.

The GitHub project contains nearly all the information you need:  https://github.com/MLB-LED-Scoreboard/mlb-led-scoreboard.  The accompanying WiKi has good info also, including the parts list and some nice startup scripts: https://github.com/MLB-LED-Scoreboard/mlb-led-scoreboard/wiki.

I followed the GitHub and Wiki instructions with the additions noted below.

Parts

I went with this parts list from AdaFruit:

  • 1x – 64×32 RGB LED Matrix – 5mm pitch (PID 2277)
  • 1x – Wireless keyboard and mouse combo – one USB port (PID 1738)
  • 1x – 5V 4A (4000mA) switching power supply (PID 1466)
  • 1x – 5V 2.5A Switching Power Supply with 20AWG MicroUSB Cable (PID1995)
  • 1x – Raspberry Pi 3 – Model B – ARMv8 w/ 1GB RAM (PID 3055)
  • 1x – Adafruit RGB Matrix Bonnet for Raspberry Pi (PID 3211)

Note:  I added the 5V 4Aamp power supply to power the LED; went with the RGB Matrix Bonnet (to avoid soldering); did not need the spacers; did not need the battery (the Bonnet doesn’t use one); and I used my own SD card.

 

WiFi Config

My WiFi SID is hidden, so I made the following configuration changes:

1) /etc/network/interfaces

# interfaces(5) file used by ifup(8) and ifdown(8)
# Please note that this file is written to be used with dhcpcd
# For static IP, consult /etc/dhcpcd.conf and 'man dhcpcd.conf'
# Include files from /etc/network/interfaces.d:
source-directory /etc/network/interfaces.d

####################################################
##### custom stuff to find hidden router SSIDs #####
####################################################
auto lo
iface lo inet loopback
allow-hotplug wlan0
iface wlan0 inet manual
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Note that I only set up loopback and wlan0 (wireless) interfaces, I didn’t need the eth0 (wired connection) interface.

2) /etc/wpa_supplicant/wpa_supplicant.conf

country=US
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
ap_scan=1
update_config=1
network={
scan_ssid=1
ssid="xxx"
psk="xxx"
}

Make sure to set up your country, ssid and psk appropriately. ssid is the hidden SSID of your router or access point. psk is the passphrase to connect and authenticate to the router or access point.

Install MLB-LED-Scoreboard Software

Clone the project from GitHub:  https://github.com/MLB-LED-Scoreboard/mlb-led-scoreboard.

Run the installer script:

cd mlb-led-scoreboard/
sudo ./install.sh

Note: lxml took a long time to install — don’t give up on it.

Conclusion

I setup up VNC to run on the scoreboard so I can interact with it without having to connect it to a monitor and use the USB keyboard.  I did not disable the UI on the scoreboard yet and it may be the source of a small flicker I experience.

That’s about it.  I’ve been fiddling with some of the layouts and may post some of those later.  In the meantime, enjoy baseball season with your new scoreboard!

 

Moving Source Code to GitHub

I am slowly moving source code for my tools, utilities, and applications over to github.com.

xCP Design Patterns

I recently ran across this catalog of xCP design patterns.  It looks like the catalog has been around for a while, but I just recently found it and thought I would share it in case you hadn’t seen it either.  Is there a catalog of patterns for D2, it could really benefit from one?

Captiva Licensing Guide

On the heals of the Captiva License Decoder, I found this handy write up for installing and understanding Captiva licenses:  Captiva Licensing Quick Start Guide.pdf.

 

 

Captiva License Decoder

Nicely done little app to decode those pesky Captiva license files to understand what you really have.  Nice work, Jim and Kevin.

Blog postDirect link.

Webtop 6.8.2 Available

Among the chaos this week, the release of Webtop 6.8.2 was buried.  See Alvaro’s blog post.

Webtop support page on DECN.

 

OpenText to Acquire Documentum

In case you missed it today, OpenText announced that it will purchase Dell-EMC’s Enterprise Content Division (ECD — including Documentum and LEAP among other products).  See the text of the announcement I received from Dell-EMC below (actual letter here).

Today, we are excited to announce that we have reached a definitive agreement with OpenText, a global leader in Enterprise Information Management, to combine the Dell EMC Enterprise Content Division (ECD) and its portfolio (including the Documentum, InfoArchive and LEAP families of products) with OpenText’s existing portfolio of products. We are pleased that this will open up new opportunities for ECD customers, partners and team members. The transaction is expected to close in 90 to 120 days. Terms of the agreement can be viewed in the press release.

In determining the best long-term future for ECD, we wanted to create a business with a leading position in Enterprise Information Management. We looked for a partner that shares our vision for the transformation to digital business, our passion for the role of information in the digital world, and the breadth of capabilities to help our customers like you realize that vision. We also sought a partner that shares our commitment to deliver a world-class total customer experience. And, we wanted a partner that values the industry knowledge, innovative mindset and unique talents of our team. I am very pleased to say that we found all of that in OpenText, an industry leader with 9,200 professionals worldwide.

After the transaction closes, we expect that you will continue to realize value from your ECD investments and gain additional value from OpenText’s enriched portfolio, whose complementary strengths will produce a leader in both ECM and EIM: an organization with the financial strength, talent base, and global go-to-market scale to best serve your organization and its needs.

Additionally, Dell EMC and OpenText will work closely together after the transaction closes for the benefit of our mutual customers. To underscore our joint commitment, OpenText and Dell EMC also announced today our intent to enter into a strategic commercial partnership to expand customer offerings and better serve customer needs.

We are fully committed to providing you with world-class support to ensure your ongoing success during this transition. We believe today’s announcement is great news for you and all of our stakeholders, and we hope you are pleased about the opportunity ahead.

There will be a be a webcast on Sept 14 to discuss the purchase, and presumably what it means for customers and partners.  Register here.

Now you know.

UPDATE:  Blog post form Rohit Ghai.

UPDATE:  Really great analysis from my friends at TSG.

UPDATE:  ECD OpenText FAQ – Partners Only!