From: dbucklin@sdf.org Date: 2018-06-16 Subject: Introducing bbook Hunting for a job usually involves talking to a lot of people. It's important to keep track of who you want to talk to, who you've already talked to, and what you talked to them about. The world is awash in contact management applications, everything from the ad- dress book on your phone to software suites like Goldmine, Zoho, Salesforce, and SugarCRM. The first application I worked on was a contact management system for insurance marketing firms. Now that contact management is an important part of my life, I should have a tool that's suited for the task. Storing and orga- nizing contact information is the defining feature of a contact management system. Recording interactions with contacts is a key feature that I don't see very often outside of the larger suites. Previously, I wrote about a DIY contact management solution I cob- bled together using ranger and vim. That was certainly a workable solution, but I felt up to the challenge of creating something more streamlined and purpose-built. I created bbook to track my interactions with recruiters. When I'm facing the end of a contract (or the sudden lack of any contract), I write a short letter to my contacts at local staffing firms. I tell them what kind of work I've been doing and tell them what kind of work I'm looking for. This is less about naming titles and more about describing the role I play within a team. I also make sure to attach an up-to-date resume, include my phone number, and pro- vide my availability for a phone call over the next several days. When I get a call or email back, I can use the search function in bbook to quickly find their contact information and interaction history. I add a new note to summarize the content of that call or email. If there is something I need to do, like return their call, or send a completed form, I can include that in the note and flag the contact for follow-up in bbook. When I want to make sure I'm caught up, I can filter on the follow-up flag and see only the con- tacts I need to get back to. I keep only the most basic demographic information about each per- son: name, company, and email. I don't even keep a phone number. While it's important to have this information, it's not terribly useful if I don't also track my interactions with each person. To do that, bbook has a notes section that shows a reverse-chronologi- cal list of the notes I've entered for each contact. The notes tell me when I last interacted with each person and what that in- teraction was about. I chose to write bbook in bash because bash is widely available. If you are already running bash as your shell, then there is virtu- ally no additional overhead. I considered using ncurses or `dia- log` for screen-painting operations, but I decided to keep things simple with `tput`. I've also been looking for an excuse to use GNU recutils, and these relatively simple data strucures seemed like a good fit. Recutils lets me keep all the data in a textual, human-readable format. This makes it a lot easier to migrate ex- isting contact information into the bbook database. bbook uses simple data models and operations, but they get the job done. It's also extensible; I can add and change features, or just perform operations on the data outside of the application. For ex- ample, in the scenario where I need to send an email to all my con- tacts, I could write a script to read in a boilerplate message, swap in the contact name and email, send the email, and then add a note to the contact record. If this sounds valuable to you, I hope you'll give bbook a try. Take a look at the source and, if you're up to it, customize it for your particular situation. If you think your customization is gen- erally applicable, feel free to send a merge request or patch. References 1. http://davebucklin.com/work/2018/01/06/ranger-vim-crm.html 2. https://gitlab.com/davebucklin/bbook 3. https://www.gnu.org/software/recutils/