Many Pies

Many Pies

Tuesday, July 06, 2021

From Causeview to NPSP

It's been a while since I said anything about Salesforce on here. I'm now able to talk about something that's been going on for a while. For the past four years we've been using Causeview (recently acquired by Softerware, the company behind DonorPerfect) for donations processing and events. We've decided to switch to NPSP. It was available at the time we switched to Salesforce from Raiser's Edge, but is looking a better product these days.

It's not a like for like switch, as Causeview includes Gift Aid and Direct Debit handling, which NPSP doesn't, so we're using Findock for those parts.

So far, so executive summary. We're right in the messy middle of the project, with dataloading going on now ready for UAT soon. So there's lot's going on.

Friday, October 25, 2019

Downloading Yahoo Groups emails (and other stuff)

Yahoo is closing its groups website. The email function will still work, but there will be no web presence.

Attention: Starting December 14, 2019 Yahoo Groups will no longer host user created content on its sites. New content can no longer be uploaded after October 28, 2019. Sending/Receiving email functionality is not going away, you can continue to communicate via any email client with your group members.

Recently I downloaded the emails, pictures and files from a group. I found a Python script to do it. I couldn't get it to work with my username and password, even though I generated an application specific password for it. I did get it to work like this though:

  • Log into Yahoo and join the group if you haven't already (if it's a public group you may not need to join it.
  • In Chrome press F12, go to Application Tab, Cookies under Storage and click on
  • Find the line with T in the Name column
  • Right click on the Value column and choose edit
  • Copy the long string and paste it somewhere
  • Repeat for the Y cookie.
  • Edit the file and put the T and Y values into this line:
yga = YahooGroupsAPI(, "T value", "Y value")

Run the script (I'm assuming you know how to do that), and you should find it downloading all emails, files and attachments.

You end up with .eml files for each email. In order to get them into something vaguely readable I used Thunderbird, imported all the eml files into a local folder, and then used the ImportExportTools addon in order to export the folder. You end up with an index.html file with a link to html emails in a subdirectory.

It would be nice if the index file had a threaded view, but that doesn't seem to be in the addon.

Tuesday, October 08, 2019

Ada Lovelace Day 2019 - Julia Evans

For this year's post I'm writing about Julia Evans. She makes really well produced zines about programming - so Linux, HTTP, networking etc. She's gone full-time to do this and recently she posted about the revenue she gets from it, which is useful, because I rarely see how much people make from side-projects and former side-projects.

Tuesday, October 09, 2018

Ada Lovelace Day 2018 - Dr Hannah Fry

I've not done posts for Ada Lovelace Day since 2015, for no good reason I can think of. This year I'm highlighting Dr Hannah Fry.

Her book, Hello World, was released recently, so she's quite active on Twitter at the moment promoting that.

I've picked her because she's a good broadcaster and explainer of maths. I particularly enjoy the Curious Cases of Rutherford & Fry, a 10 minute radio programme where they answer questions put by listeners. Each episode seems much longer as they pack so much in. The podcast version is a lot longer, so worth listening to in preference to the radio show.

You can see a list of other programmes she's done on her media page. I've enjoyed all of those that I've seen. This is my favourite tweet she's done (because I get the joke):

My previous Ada Lovelace Day posts are here.

Thursday, September 13, 2018

Work for me!

We're advertising a Business Systems Assistant job to help share my workload. If you've come here after being there, then full marks for doing your homework. Mention this blog post should you be called to interview and you may get bonus points.

If you think that a Macbook is standard issue, then I'm afraid you're going to be disappointed. That's stock photography for you. I don't much talk about what I do here, because it's mostly behind the firewall. However, with moving to Salesforce and launching a website (within a couple of days of each other) last year, and with moving to SunSystems and Workday later this year, and next year, there's a lot of work to be done. Plus we're doing a lot more in terms of fundraising, which means that people are hungry for data. So I've got enough work for two people, which is why we need another one!

Tuesday, June 26, 2018

Morriss' law(s)

I recently came across a couple of lists of software development laws:
The eponymous laws of software development
Laws of software development

I may or may not have publicly stated Morriss' law:
Every site/program/app attempts to expand until it resembles Twitter
See Facebook, Skype, Confluence

However on one of those lists I cam across:

Zawinski’s Law

This law addresses software bloat and states…
Every program attempts to expand until it can read mail. Those programs which cannot so expand are replaced by ones which can.

I was going to state Morriss' second law, which is like the first one, but has "until it has Stories", but I think there's Morriss' greater law at work here, which is something like:

If they copy you, you're doing something right.
 There's probably a better way of saying it though.

Friday, April 20, 2018

Free Salesforce postcode checker

While you can get Salesforce apps that check postcodes for you, here's a bit of Javascript that will check a UK postcode for you using the API and tell you if it's valid or not. It's not clever enough to suggest what the postcode might be, but then it is free.

Create a new button on the Contact object (Display Type: Detail Page Button, Behaviour: Execute JavaScript) and put this javascript on it:

var postcode = '{!Contact.MailingPostalCode}'; 
if (postcode != '') { 
postcode = postcode.replace(' ','%20'); 
url : ''+postcode+'/validate', 
async : true, 
cache : false, 
method: "GET", 
onSuccess : function(response) { 
if (response.slice(-5) == 'true}') { 
} else { 
alert('Wrong - check using'); 
onFailure : function(response) { alert('ERROR: '+response); } 
For the Account object use

as appropriate.