Tag Archives: Applications

Microsoft for Non-Profits / NGOs

I’ve been getting emails from Microsoft for the past several weeks about a new (?) initiative for non-profits. While it is always a little suspicious about getting help from the Microsoft behemouth (“We’re from Microsoft, and we’re here to help”) its also worth a look. To cut the chase, it looks as if Microsoft is de-emphasizing traditional programs that run on your own computer that you obtain with a perpetual license in favor of pushing people towards their subscription model.

Its not as if we’re not using Microsoft already. Windows, Microsoft Office, and various cloud services from Microsoft already make a lot of sense even before their new push into the non-profit sector.

How much?

Microsoft 365 Business Premium

So, a cursory glance a the the web site, suggests that you can receive all of the services and applications in Microsoft 365 Business Premium for free for up to ten users. The rack rate appears to be $20.00 per user per month….so this is a pretty good deal.

The Premium service also includes the familiar desktop versions of the Microsoft applications, including Outlook, Word, Excel, PowerPoint and Teams. That said, I have been trying the web versions of these applications through my web browser on my aging Mac, and those seem to work reasonably well. The web versions are free to anyone with a “home” Microsoft account, like a hotmail.com account.

Traditionally, our advice has always been to look to TechSoup for heavily discounted software products. It looks like they are on top of the changes that Microsoft is expecting to have in place by April 2022, and they have a detailed discussion of what the program will look like.

FileMaker 15

filemaker

FileMaker has updated to version 15 for all platforms. This version includes a ton of bug fixes, heightened security, and some internal changes, as opposed to visual changes. In fact it almost looks and acts the same as version 14.

There is a fair amount of grousing going on in the FileMaker forums about the paucity of new features and (yet another) increase in the effective price. I’m afraid that FileMaker is pricing themselves completely out of the low-end market, although a single copy can be had for education or nonprofits for $197 on Amazon. (Regular price $329).  This is a perfectly respectable deal, and you might want to consider at least one copy for end-user database needs especially if you use Macs, or loath Microsoft Access. FileMaker is my database of choice for front-ends for mySQL (via ODBC), managing eMail lists, and creating tables and inspecting data of all kinds.

FileMaker comes with some pre-built database applications called “Starter Solutions”. Some of these  have been updated for version 15.  I did my expense reporting for a recent trip in the Expense solution, and it makes an attractive listing sorted by categories of all your trip expenses.  Here’s the data entry screen.

Screenshot_051716_035903_PM

Here’s the report:

Expense Report

The application can be hosted on FileMaker server and accessed in a web browser, or run within a standalone copy of FileMaker on a Mac or PC, or run on an iPhone or iPad using the free FileMaker Go app.

There is provision for storing an image of each receipt.  If you run the application on an iPad, you can snap a picture of a paper receipt, or enter a bar-code.  Pretty slick!

 

LimeSurvey: Reset User Names and Passwords

We use LimeSurvey for receiving grant applications. These applications sometimes take a while to fill out, and the applicants have the opportunity to save an existing application with a name and password for re-use later.

Once they save, the LimeSurvey server will send them an eMail with their name and password, and a link to get back into the existing application to continue working.

Inevitably, people forget their name and password, or misplace the email.

Incredibly, even after all these years, LimeSurvey doesn’t have a one-click solution for fixing the problem at the administrator level  or  a “forgot your password?” link on the login screen.

So, this becomes a tech support issue, and significant time sink.  The only solution that I know of is for the administrator to go into the database  back-end which stores all of the LimeSurvey tables, and reset the user’s password to a known password.  Here is how I do this.

  1. Once contacted by a user in distress, I search the listings to find their application, and view the contents.  If there isn’t any significant work done there, (i.e. they have just started the application), I’ll delete it and have them create a new one.  Otherwise,  I will note the eMail password and the user name.
  2. I then SSH into the mySQL back-end (or whatever database you are using).
  3.  mysql -pmypassword
  4. use limesurvey;
  5. select scid, identifier, access_code, email from lime_saved_control;
    This select statement displays the list of all the LimeSurvey users. Scanning this list, you’ll find your user’s email address or name.  You can then isolate that particular record by repeating the query with a where clause.
  6. select scid, identifier, access_code, email from lime_saved_control where scid=’81’
    The result record will look something like the following:
    Screenshot_030916_124232_PM
  7. Note in the diagram above the field names:
    identifier = the name under which the user saved their application
    access_code = a hash value of the password that they used.
    These two items are what the user needs to be able to go into their existing grant application.
  8. You could run the hash through a reverse hash calculator to recover their existing password. However, I prefer simply to  put in a new password:
    update lime_saved_control set access_code = MD5(‘12345′) where scid=’81’;
  9. At this point I can send the user an eMail  message showing what name the application was saved under and the new password of 12345.

Naturally this solution is fraught with danger…. so I’d recommend that you rehearse this procedure on your installation.

Sharing QuickBooks 2014

Having recently converted from Peachtree to QuickBooks, we wanted to add an additional person on QB so that both our accountant, and our CFO could work in QB at the same time. We started out sharing the data file from the CFOs computer, but that bogged things down.

The solution is a “server”….  which runs the QuickBooks Database Manager program.  We repurposed an older but reliable HP workstation by installing a fresh copy of Windows 7.  Then, we ran the QuickBooks installation program from their support  link.

While it looks as if you are installing the full QuickBooks program, an initial screen asks what kind of installation you want:

  • Use QuickBooks on this machine, and access a company file stored elsewhere on the network 
  • Use QuickBooks on this machine and host the company file for others on the network 
  • Host the company file on this machine, but access it from Quickbooks on other machines 

By choosing the hosting option, the installation program will install the QuickBooks Database Manager program only, on your server machine.

Networking

Assuming you are not on a domain network, (i.e. your users’ machines are set to be a workgroup) you need to create user accounts on the server machine which match the Windows 7 user accounts that users use to log into their personal workstations.  This will allow people to connect to the server machine using their usual account name, without having to enter it a second time.

Set up the data folder 

Create a folder on the server machine to hold the QuickBooks company file. Copy the company file into that folder.

This needs to be  a shared folder on the network. The QuickBooks file doctor program will turn on folder sharing, and make the folder accessible. Download and run this program on the server.

Finalizing

At this point, you have the company file loaded on the server. Now, run the QuickBooks database manager program.  This will ask you for your company folder so it can find the company file.
Note that the database manager runs as a background service,  so you can exit the program, and the file will still be available to the network.

Now you can go to each workstation, and access the file over the network. I edited the opening QuickBooks screen to show just the networked copy of the file. The next time the user starts QuickBooks, it should automatically open the file without requiring a Windows network log in. Of course, the QuickBooks log in is still required.

Licensing

Using the database server does not require a QuickBooks user license. You can safely move a company file to a server, and have the same number of users access the file. 

Details at:
https://support.quickbooks.intuit.com/support/Articles/HOW13004

Powershell: Basic Address List Processing

One of the great things that was always a little bit fun (well, for some us… what passes for fun) is processing lists using Unix/Linux shell scripts and tools. When you are in practice, you can perform miracles; leap tall buildings in a single bound. Let’s see what we can do with a file using Powershell commands.

I received a file of “lapsed” donors. These are donors to our organization that gave to one of our campaigns in the past, but haven’t given recently. We know they were our friends in the past, and we think they still are, so we’d like to contact them for a one-time mailing, and/or add them to our master mailing lists.

The file is named “lapsed.csv”. The csv extension suggests this is a text file with a “comma separated values. And indeed, if I look at this file, at the powershell prompt, it is easily visible.

PS C:UsersLarrypowershell> cat lapsed.csv

This shows a comma delimited file with a header line:

Addressee,first,spouse,Organization,Street,City,State,ZIP
Joe Blow, Joe,,,123 W 57TH St Apt 123,New York,NY,10019
Jill Smith,Jill,Howard Services,123 Poor Farm Rd,Colchester,VT,05446

Our standard is:

Org, fname, lname, address1, address2, city, state, zip

So, among other things, we’re going to want to change the order of the information in the fields, as well as the field names.

First thing to do is to import the file into a single PowerShell variable, and then see what we’ve got.

PS>$lapsed= Import-CSV lapsed.csv
PS>$lapsed

Addressee : Joe Blow
 first : Joe
 spouse :
 Organization : Paul C Bunn Elementary
 Street : 123 W 57TH St Apt 123
 City : New York
 State : NY
 ZIP : 10019
Addressee : Jill Smith
 first : Jill
 spouse :
 Organization : Howard Services
 Street : 123 Poor Farm Rd
 City : Colchester
 State : VT
 ZIP : 05446

Using import-CSV, the file is converted into a series of custom objects with members that correspond to the existing field names …so further manipulations can be done using object manipulations, instead of just a bunch of searching and replacing. (Well that’s the theory anyway).

We can find out the number of records we have by looking at the count attribute.
 PS>$lapsed.count
 553

And we can see the “members” or field names of each record by using Get-Member

PS>$Lapsed |Get-Member

TypeName: System.Management.Automation.PSCustomObject
Name MemberType Definition
 ---- ---------- ----------
 Equals Method bool Equals(System.Object obj)
 GetHashCode Method int GetHashCode()
 GetType Method type GetType()
 ToString Method string ToString()
 Addressee NoteProperty System.String Addressee=Joe Blow
 City NoteProperty System.String City=New York
 first NoteProperty System.String first=Joe
 Organization NoteProperty System.String Organization=Paul C Bunn Elementary
 spouse NoteProperty System.String spouse=
 State NoteProperty System.String State=NY
 Street NoteProperty System.String Street=123 W 57TH St Apt 123
 ZIP NoteProperty System.String ZIP=10019

Ok…we knew the field names before by just looking at the raw .CSV file. But now we have seen how the Import-CSV command converts the .CSV file to an array of objects with a type of PSCustomObject.  Since each address record is an object, the way we manipulate it is to use object methods.

1. Add a lname field for the last name
PS>$lapsed | Add-Member -Name “lname”

That takes the $lapsed table and pipes it to the Add-Member cmdlet. This adds the the member to EACH object in the table, rather than adding it to the table itself.

2. Add a fname and lname fields for the first and last name
PS>$lapsed | Add-Member -Name “fname” -MemberType NoteProperty -Value “”

PS>$lapsed | Add-Member -Name “lname” -MemberType NoteProperty -Value “”

Now the fields look like this:
Addressee : Joe Blow
 first : Joe
 spouse :
 Organization : Paul C Bunn Elementary
 Street : 123 W 57TH St Apt 123
 City : New York
 State : NY
 ZIP :
 lname : ""
 fname : ""

3. Copy data from the first name and organization fields to their new fields.
PS>$lapsed | ForEach-Object ($_.fname) {$_.fname=$_.first}
PS>$lapsed | ForEach-Object ($_.org) {$_.org=$_.Organization}
This leaves us with a record looking like this.

Addressee : Joe Blow
 first : Joe
 spouse :
 Organization : Paul C Bunn Elementary
 Street : 123 W 57TH St Apt 123
 City : New York
 State : NY
 ZIP : 10019
 lname :
 fname : Joe
 org : Paul C Bunn Elementary

6. Having copied the data from the old fields to the new ones, we can delete the old fields.
There isn’t a cmdlet to remove an object member, so the you have to use a different nomenclature. (Note To Self… opportunity to make a custom cmdlet?)

PS> $lapsed | ForEach-Object ($_){$_.PsObject.Members.Remove(‘Organization’)}
PS>$lapsed | ForEach-Object ($_){$_.PsObject.Members.Remove(‘first’)}
PS>$lapsed | ForEach-Object ($_){$_.PsObject.Members.Remove(‘spouse’)}

Now a typical record is starting to look much more like what we want it to look like.

 Addressee : Joe Blow
 Street : 123 W 57TH St Apt 123
 City : New York
 State : NY
 ZIP : 10019
 lname :
 fname : Joe
 org : Paul C Bunn Elementary

7. We still need to pick out the last name from the Addressee field.
There might be a couple approaches to this using regular text search methods:
a. Given a string “Joe Blow”, we could find the first blank character, and then take anything to the right of if as our last name.
b. We could start at the right hand side and count backwards until we get to a space.
c. If there are word functions, we can choose the right-most word in the string.
d. Use the split function. This is what we’ll use.

PS> $lapsed | ForEach-Object ($_){$_.lname=$_.Addressee.split()[-1]}

8. Finally, we can eliminate the “Addressee” field
PS> $lapsed | ForEach-Object ($_){$_.PsObject.Members.Remove(‘Addressee’)}

Street : 123 W 57TH St Apt 123
 City : New York
 State : NY
 ZIP : 10019
 lname : Blow
 fname : Joe
 org : Paul C Bunn Elementary

9. Time to export back to a CSV file.
PS> $lapsed | Export-Csv -Confirm -Path “C:UsersLarryPowershellulapsed.csv” -NoTypeInformation

10. Almost done. The one frost is that the field order isn’t exactly as I’d like. This can be fixed with the Select-Object cmdlet.

PS > $lapsed | Select-Object -Property fname,lname,org,street,city,state,zip |
Export-CSV -Path “C:UsersLarryPowershellulapsed.csv” -NoTypeInformation

Recall when typing a string of commands with a pipeline, the pipe delimter will also act as a “newline”, so you can break the command up over the course of a couple of lines and have the full pipeline execute as one command.

Notes:

As they say on public television: “Many thanks to the following:”

“jrv” on Microsoft Technet
http://goo.gl/1Kyw07

“Root Loop” on StackOverflow
http://stackoverflow.com/questions/22029944/batch-or-powershell-how-to-get-the-last-word-from-string

More Info:
http://windowsitpro.com/powershell/csv-excel-or-sql-it-doesnt-matter-powershell

More about the split function in Powershell help
PS> Get-Help about_Split

Better than eMail: Slack for Workgroup Communication

We’re slacking off here at our non-profit organization, having discovered Slack, a cloud-based communication application that combines the functions of eMail, chat, a bit of artificial intelligence (called the Slackbot), and the ability to exchange transactions with a growing number of third-party applications including the Trello project manager. Slack solves the problem of team communication for specific topics or projects.

Let’s say you are launching an e-Shop. You have the web developer, the graphic designer, the photographer, the shop manager, the back-end developer and the testers working on the project. You have calendar schedules, product photos, text copy, html and .css files all in half-a-dozen sites and places; Google Drive, Trello, your calendar, the file server, the production web site, and the sandbox web site. All this is glued together using eMails with copies to the team… each person has their own copy of the email (you hope), and relevant attachments or links to files on Google Drive, Dropbox,  your web server, or your file server. Its all a bit diffuse, and if anyone wanted to come up to speed on the whole project, then it would probably be pretty tough, because everything about the project isn’t in one place.

Nine years ago, I was using Basecamp for several projects including grant applications. I have used Basecamp for many years, and sung its praises for writing grants, which is by nature a collaborative process with multiple players. About 2012, Basecamp got a major upgrade which seemed to break my workflow and processes. So, I started looking around at the alternatives, and there are a bunch.

The basic unit of Slack is the team.

Teams can create channels. Channels can be for a single department, or a single project. So, for our team we created a channel for each department:

  • creative
  • development
  • admin
  • it
  • programs
Departments store their ongoing conversations within their channels. These are things that might have been communicated via eMails and attachments.  Slack can store text in a couple of structured ways; you can have a message, a snippet, or a post. A message is a simple unformatted text message similar to a chat message. (You can include emoticons). A snippet can be formatted for programming code. Finally, a post is similar to a blog post, it includes a title, and allows formatting
with fonts and bullets.

For current projects that cross individual departments, we created specific channels.

  • eStore-Launch
  • XYZ Grant Application
  • 2015 Audit
Team members can be part of any channel, and you can invite guests who are external to the team to participate in an individual channel.  
This would all be pretty spectacular on its own, but one of the strengths of Slack is the ability to integrate with other third-party applications. We are using Slack with Trello, so that any changes made on a Trello project, get reflected in the appropriate Slack project. The integration results in what amounts to a major enhancement of both applications. 
Slack is free for basic functionality, and maybe all you ever need. Worth a look! 

A Database for Grant Research

I put together a grants database screen (click to view full size) to consolidate information for funding sources, and to track dates and interactions.

It is definitely an evolving project, but contains the basic information need to contact the funder, the deadline dates involved, the funder’s areas of interest, and the typical range of a grant award.

So far, I’ve been concentrating on foundation funding. Many foundations typically ask for a letter of interest before you put together a full proposal. So, I’ve included multiple date fields, a deadline for a letter of interest, a deadline for a full proposal, and a date when they announce their award.

Originally I thought that this database would be mostly for research, but after working with the online grants database, Grantstation, I think I will reserve this database for funders that I really expect to submit to. Some ideas for future enhancements include:

  • Links to standard “boilerplate” paragraphs that are used in an application. 
  • Links to edit the proposal or letter directly in Word. 
  • Links to the PDFs of the proposal. 
  • Reports that create a grants calendar. 
Before anyone comments that “you should really use X software” for this purpose, I just want to say that I’ve used several in the past, including DonorPerfect and Blackbaud, and evaluated many others. Right now, I’m in the process of rethinking my entire workflow automation from the ground up, and this very lightweight approach is just what I’m looking for. Plus its in FileMaker, so I can run it on my Windows machines at work, or my Macs at home.