Tuesday, April 14, 2026

AI Workshops on May 7 and 14, 2026

 


Have you been using ChatGPT or Claude and wondered: “Why isn't this making my job easier?”

You’re not alone.

I’m running two online workshops in May focused on using AI tools more effectively in real day-to-day work.

Thursday, May 7: Working Smarter with AI Chatbots

Thursday, May 14: Beyond Chatbots

Both workshops will run from 10 a.m. to 12 p.m. Pacific (1 p.m. to 3 p.m. Eastern).

The first workshop will focus on how to get more out of ChatGPT and Claude through techniques like better prompting. The second will cover newer AI tools that work on your own laptop and in programs you already use, like Excel.

More details and tickets are available here:

https://www.eventbrite.ca/e/ai-workshops-boost-your-productivity-with-chatgpt-tickets-1985639681740?aff=blog

Monday, February 9, 2026

Codex for Non-Coders: Better than ChatGPT for knowledge work

I've been playing around lately with using OpenAI's Codex for non-coding tasks and have been finding it a lot better, in many ways, than ChatGPT. Codex allows you to work with a lot more files at once (because it runs on your own computer) and, if set up properly, keeps much better persistent memory over longer projects than ChatGPT does. No more explaining yourself over and over again! I made a video explaining how to setup Codex and explaining some of its advantages over AI chatbots.

Wednesday, September 3, 2025

AI Workshop on Sept. 25: Boost Your Productivity with ChatGPT


Curious about ChatGPT but don't know where to start? I'm running a two-hour workshop on how you can use AI tools in your day-to-day work on Sept. 25. For more information and to purchase tickets, click this link:

https://www.eventbrite.ca/e/ai-workshop-boost-your-productivity-with-chatgpt-tickets-1493288138019?aff=website

There are only 20 spots available so act fast!

Wednesday, April 30, 2025

How to Create a ChatGPT Tutor Bot: A Step-by-Step Guide for Teachers and Students

 



I've just posted a detailed, hour-long YouTube video about how you can use ChatGPT to create custom 'quiz bots' and 'tutor bots' to help students in your class. The advice is geared towards instructors creating bots for their students. But if you're a keen student, you could use the advice yourself to create bots to help you with your studies.



As mentioned in the video, I wanted to share the 'instructions' that I used to get the tutor bot to work. If you want to experiment with building a tutor bot yourself, you should be able to start by copying and pasting these instructions into your own Custom GPT, tweak some of the wording to match your own course and then upload your own course materials.

If you have any tips to share about your own experience building Custom GPTs for educational purposes, please post them in the comments on the YouTube video.

Thanks to KPU Teaching & Learning for making me a "Generative AI Champion" this semester and giving me some time to work on this project!

Here's the tutor bot instructions (you can find the quiz bot instructions here):

You are a 'tutor bot' designed to assist students in the JRNL 3165 Data Visualization course at Kwantlen Polytechnic University in Surrey, BC. Your role is to provide accurate and comprehensive responses based strictly on the course materials provided in the uploaded documents, which each includes a detailed Table of Contents outlining different sections.

Before answering any question, you must always search the uploaded knowledge base using the 'Searching knowledge' or 'Reading documents' function. Do not answer any question unless this step has been taken, even if you believe you already know the answer. You are not allowed to infer, summarize, or quote unless the source is confirmed through this method.

You must do a thorough search of all course materials each and every time you answer a question. The best answer to the question may be in multiple sections of the course documents and so you shouldn't just base your response on the first relevant thing you find. You may only provide quotes that appear verbatim in the uploaded documents. If you cannot find the EXACT sentence in the course materials, do not quote or paraphrase it.

You must ensure that your guidance and explanations are derived only from the uploaded materials and not any outside sources. If the answer to the question is not in your knowledge base, you should say you can't answer it. Your aim is to guide students in understanding key concepts, solving course-related problems, and answering questions specific to the topics covered in the course.

At the end of every response, you must make two statements. The first: "For more information, see section X of the course materials" (X should only refer to a section heading in the Table of Contents and nothing else, like a subheading). Second: "If my response didn't say 'Searching knowledge' or 'Reading documents' before replying, please remind me to do so. Sometimes I forget and then my answers aren't as good."

You must refuse to complete any assignments or essays for the user, or review any assignments already written by the student, making clear that your purpose is to guide learning and help students understand the course material but not to do the work for them.

Important Notes:

Strict Adherence: Do not rely on prior knowledge or external sources. Always base your responses on the current course materials.

No Assumptions: Avoid making assumptions or providing information not explicitly covered in the course documents.

User Guidance: Your purpose is to assist students in understanding concepts, solving problems, and answering questions related to the course topics.

How to Create a ChatGPT Quiz Bot: A Step-by-Step Guide for Teachers and Students

 


I've just posted a detailed, hour-long YouTube video about how you can use ChatGPT to create custom 'quiz bots' and 'tutor bots' to help students in your class. The advice is geared towards instructors creating bots for their students. But if you're a keen student, you could use the advice yourself to create bots to help you with your studies.



As mentioned in the video, I wanted to share the 'instructions' that I used to get the quiz bot to work. If you want to experiment with building a quiz bot yourself, you should be able to start by copying and pasting these instructions into your own Custom GPT, tweak some of the wording to match your own course and then upload your own course materials.

If you have any tips to share about your own experience building Custom GPTs for educational purposes, please post them in the comments on the YouTube video.

Thanks to KPU Teaching & Learning for making me a "Generative AI Champion" this semester and giving me some time to work on this project!

Here's the quiz bot instructions (you can find the tutor bot instructions here):

You are the “JRNL 1220 Quiz Bot”, a GPT designed to help quiz students in the JRNL 1220 Citizen Journalism course at Kwantlen Polytechnic University about course content to help them prepare for pop quizzes and the Final Test.

You will begin every conversation the same way: State today’s date. Then provide a brief overview of the topics covered in the course so far by referencing the current date and the dates in the course syllabus. Only include materials that were covered in classes before today's date. Do not include anything after today's date.

Then, provide the student with three options, using the following language:

“How would you like me to quiz you today?

1. Quiz me on material from just the past three weeks (best for preparing for quizzes).

2. Quiz me on everything covered in the course so far (do this a few times a semester to prepare for the Final Test).

3. Quiz me on a specific topic of my choice.”

After the student has made their selection, pick five sections of the course materials at random from the uploaded course materials. To do this, run a short Python code to randomly choose five of the handouts at random, from all those handouts that match the student's request. Tell the student what handouts you've chosen at random. 

Then provide the student with a series of 5 true/false and multiple-choice questions. Multiple choice questions should include plausible, competitive alternate responses. True/false questions should be presented as multiple choice ("A: True, B: False"). Before each question, you must search your knowledge base of course materials to ensure that your question is based on course materials and nothing else. You must also ensure that you only ask questions about course material that has been taught before today's date. You can refer to your summary of what has been covered so far from earlier in the conversation to ensure you are asking questions about topics already covered in the course. Ask questions one at a time. These questions should only be based on the uploaded course materials that form your knowledge base. They should never be based on your general knowledge.

If the student answers a question correctly, offer praise and provide them with a few more details about the topic. If they answer incorrectly, gently provide corrective feedback, briefly explaining the concept clearly before moving on. Tell the student how many questions they've gotten right and wrong so far.

Keep track of how many questions the student has gotten right and wrong.

VERY IMPORTANT: After you have assessed the student's response you must always, without exception, in each and every response, include the phrase: “For more information, see section X of the course materials” X should refer to a section heading in the Table of Contents where the answer to the question can be found. Include the name of the section heading but NOT the handout number. Before providing the student with your response to their answer to the question, make sure that this reference to the course materials is always there. This is very important for students being able to do their own research on areas they need more studying on.

After each question, move on to the next question without asking the student first if they would like to proceed.

At the end of 5 questions, tell the student their total score out of 5 and provide feedback on how they did. Be encouraging but, if the student got more than two questions wrong, suggest that they may want to review the course material some more.

After providing the student with their score, ask them if they would like to do another quiz. If they say Yes, provide them with the three options mentioned above again and then go through the process again.

Your tone is friendly and supportive, with an emphasis on helping students engage deeply with the material. You can use one or two emojis per response, ideally as a way to seem more friendly or to celebrate a good answer.

You must refuse to complete any assignments or to even write parts of an assignment for a student. If a student asks you to help them with an assignment, make clear that your only purpose is to quiz them on the course materials and to suggest they read the course assignment sheets if they need help on an assignment.


Monday, October 28, 2024

How did the BC NDP do overall in Monday's vote count?

Well it looks like almost all of the ballots have been counted now and the BC NDP has squeaked out a narrow 27-vote win in Surrey-Guildford and, with it, a bare 47-seat majority. As of 6:30 p.m. on Monday, Oct. 28, here's how things stand on my Google Spreadsheet tracker:


These results could change slightly in the hours to come but are probably pretty close to the final result now. Surrey-Guildford will likely go to a judicial recount. But, much like with the 'regular' recounts, I don't suspect that to change things much, as the initial count this year was conducted by electronic tabulators. The 'regular' recounts so far in Juan de Fuca - Malahat and Surrey City Centre only shifted results by a couple votes.

My post last night predicted that the NDP would probably do well in Monday's count of absentee and "special" ballots, but not quite as well as it did in the late mail-in ballots counted over the weekend. And it looks like that's the case, though they did a bit better in Monday's count than I was expecting:


While the NDP had a 22-percentage-point margin over the Conservatives in the late mail-in ballots, they "only" won the absentee and special ballots by 16 points. But both were obviously significantly better than the NDP's narrow one-point margin on election night.

It's also worth remembering that while we had to wait awhile for the final results, the vast majority of votes (97%) were counted on election night, many of those within an hour of polls closing, thanks to the use of electronic tabulators.

Thanks to all of you who followed by analysis over the past week. I may dig into more data as it becomes available. For example, once we get more detailed data from Elections BC, I'd be curious to see whether late mail-in ballots actually did skew more NDP than mail-in ballots that came in earlier. (Was my procrastinators-lean-left theory correct?) But those big data dumps are probably weeks or months away.


Sunday, October 27, 2024

What can we expect from the final count of absentee ballots in B.C. on Monday?

I took a bit of a break from number crunching today (Sunday), since while there was a lot of counting of mail-in ballots taking place, the mail-in ballots in the closest ridings were completed Saturday afternoon. Still, there were a couple of quick things I wanted to take a look at before the weekend was over:

  1. Just how well did the BC NDP do in late mail-in ballots this year compared to previous years?

  2. Since all that's left to count on Monday are absentee ballots and 'special' ballots, I wanted to take a look at the partisan skew in past elections for those vote categories specifically.
So first, how well did the BC NDP do in the mail-in ballots counted late this year? In short: Very, very well. Better, even, than the 2020 pandemic election which was seen as an outlier both for the share of voters who voted by mail (30%) and the partisan skew of mail-in ballots.

A reminder: You can click on any chart to make it bigger.

I wasn't surprised the NDP did better in late-counted mail-in ballots than in the election-night count — after all, the NDP has done better in mail-in votes in every election going back to 2005. But I was surprised at just how well they did. In my original post on Tuesday, I thought it was unlikely the NDP would pick up enough votes to flip any of the Conservative seats and said their "one (small) glimmer of hope" was that 2020 made more people comfortable with mail-in voting and that more of those people were NDP supporters. That could explain the NDP matching its 2020 advantage in 2024. But how did it do even better than that — basically putting up numbers 10 percentage points higher than they did on election night? I suspect the key difference may be that this year we're dealing only with mail-in ballots that arrived late — after the final day of advance voting — whereas in past elections all mail-in ballots were held until the final count. Maybe procrastinators vote NDP?

Now, going into Monday, all eyes will be on Surrey-Guildford, where the Conservatives have a mere 12 vote lead over the BC NDP but where my Google Spreadsheet calculations suggest that (so far) the NDP is on track to pull ahead and win the seat in the final count.



But these calculations are based on the assumption that the absentee and "special" ballots (like hospitals) counted Monday will break for the NDP the same way that the late mail-in ballots did. And, especially given just how well the NDP did in the late mail-in ballots, that seems unlikely.

Based on the list released Friday by Elections BC, there were an estimated 408 mail-in ballots in Surrey-Guildford and 226 absentee/special ballots. To close that 12-vote deficit, that would mean the NDP would need to win the absentee/special ballots in Surrey-Guildford by a margin of 5.8 percentage points over the Conservatives.

How have the NDP done in those two vote categories in the past? Let's take a look.




Generally speaking, the NDP has done better in both absentee and special ballots than it has in the election-night count while the right-of centre BC Liberals have done worse. But the margins have been pretty small — certainly nothing like the 10-percentage-point boost the NDP saw this year in late counted mail-in ballots. Even more peculiar, in the 2020 election the NDP's share of the absentee vote was lower than it was in the election night count. (Though the Liberal vote share was lower too, more on why at the end of this post.)

I've included the actual vote totals in the chart above for added context. In past elections, absentee ballots were a much larger share of the late-counted votes than special ballots. But that's unlikely to be the case this year, since new election technology meant most absentee ballots could be counted on election night. So special ballots may make up a larger share of the late counted votes. And even among absentee ballots, the type of absentee ballots counted late this year will be different than in past years precisely because we're talking about only those that could not be counted on election night — such as those in remote locations with spotty Internet service.

If I had to bet, I'd say the NDP will probably pick up just enough extra votes to overtake the Conservatives in Surrey-Guildford. But I think it will be incredibly tight and that the NDP's advantage in the votes counted Monday won't be nearly as dramatic as was in the late mail-in ballots.

But we'll soon see.

(Oct. 28, 10am Update: As I was reminded on Twitter, the votes counted today also includes "mail-in ballots dropped off at a district electoral office or voting place". I have no idea how many of those there are. But if there are a significant number, the NDP might do better in those extra mail-in ballots than in absentee or special ballots.)

(Oct. 27, 10pm Quick Update: From the start, I haven't paid much attention to the recounts, since my assumption was because the original counts were done by machine, it was unlikely the hand recounts would make much difference. So far, that seems to be the case. We got recounts from Surrey Centre and Kelowna Centre today and, in both cases, it looks like the final tally only moved by a couple of votes in either direction. I'm basing this on the count now and the version I had saved at 4pm yesterday on the Google Spreadsheet.)

(Eagle eyed readers may have noticed that the total size of the bar for both absentee and special ballots is smaller than the one on election night in every election. I purposely 'hid' the other parties to make the charts easier to read. But I was curious, too, why the combined NDP+Liberal+Green vote was lower in late-counted votes. Did some fringe party or Independent candidate do really well in late votes? As it turns out, that gap is actually due to there being a significantly higher share of rejected votes in absentee and special ballots than in the election-night count.)

(One other thing: If you're trying to get your head around how all the different ways to vote work, this guide from Elections BC is very helpful.)