Tuesday, May 19, 2026

Generative AI did something for me

I've had a hate-hate relationship with Generative AI.  Today it might have fixed something for me, though.

All through the 2025-2026 academic year, I have been plagued by a recurring error in Microsoft Word in Office 365 for the web.  When I type in a line and then leave the line, either by hitting enter or by moving to a new line, it often deletes around half of what I had just typed.  This didn't happen every time, probably not even 50% of the time, but it happened a lot and I was never expecting it.  I could not undo the deletion; the text I had entered was just gone.

All year I've been mitigating this by typing text into a text editor, then copy-pasting it into Word.  Thankfully I don't have to use Word all that often.  (Google Docs and LibreOffice did not have this issue.)  

This morning, in an attempt to figure out what the problem could be, I upgraded my computer from Ubuntu LTS 22 to 24.  When I finished that process, I could no longer get online on my laptop.  I could kind of get on when I used my phone hot spot... for some webpages... but not via my home router.  I struggled for an hour and after a bunch of web searches on my phone and a tablet, I thought it likely that my router wasn't giving me an IP address.  I didn't know the solution to that, though.

I finally decided to ask an AI.  I did Gemini because I'm on Android.  (I know that's a terrible reason.)  I started from the beginning and just said I couldn't get on line and after six rounds of communication, it gave me a solution that worked.  I needed to have dhclient go fetch me a new IPv4 address, which it did with

$ sudo dhclient -v

 This immediately popped up.  Should I be concerned?

 

Generative AI has not been helpful for me, and usually caused me more frustration that it was worth.  I do also believe there are severe negative consequences with using compute-heavy AI.  Nevertheless, I've tried it every now and again.

It worked this time, though!  So, I decided to give it a shot on the Word problem.  Maybe it could solve the problem.

It took six more rounds of communication, but in the end it reasoned that the problem was a toggleable option listed at the bottom: Text Prediction was on.  I turned that off and so far it seems to have worked!  I haven't had any more of my text disappear.

Even though this was it's response on the fourth round of that conversation.

 

The irony of needing one AI to tell me to turn off a feature from another AI is not lost on me.  

Hopefully I have no more issues with Word.  I didn't test it a ton.  (I don't enjoy using Word.)  We'll see how well it works. 

Sunday, January 14, 2024

Michigan's 2023 National Championship and MGoBlog

Michigan won the national championship on Monday night.  It was awesome.  I started reading MGoBlog in 2005 because one of my cool friends in Michigan had told me about it.  I asked him where I could get one of the "I 💙 💙" shirts that I saw people wearing and he pointed me to the blog and its store.  MGoBlog was only one year old by then, but it was clear that it was amazing.  I read it like a crazed animal during grad school, even though I certainly didn't understand everything.  

I realized that I needed to enjoy this fandom, even during the losses.  I got geared up for Armageddon in 2006, and delighted in how good the game was even when we lost.  When the whole site went pink after the 2007 loss to App State ("The Horror") I thought that was hilarious.  I don't remember exactly what Brian Cook, the blog's creator, wrote in the aftermath, but it was something like "Why are you on the Internet now?"  I wrote a few emails to Brian and they got answered.  One I'm sure he got a lot of copies of because I noticed an issue in a post, but I got a very clear appreciation. 

There is a very old MGoFAQ post that needs an update. One of the questions is:

How can I start up a blog and have it be successful?

The beginning of the answer is: "Create something that does not exist elsewhere."  I think I read that before I started my own blog for Combinatorial Game Theory.  I learned so much in writing that and it helped boost me into the society of researchers there ("gamesters") that has so many awesome people and brought me so much. 

In the 2010's, I didn't read the blog as voraciously.  I was a professor and married and then that fell apart in multiple ways.  I kept on with my Michigan fandom, though, and I always made sure to read the Preview posts.  Divorce was hard for me.  When I discovered the MGoPodcast, I suddenly had something to listen to when my own thoughts were too brutal.  I got to enjoy Brian, Seth, Ace, David, and Alex, as well as Sam and Craig on the MGoBlog Roundtables.  My favorite segment is easily the check-ins with Jamie Mac on Sundays, partly because I understand the depth that people are talking about better and because I love hearing about all the different games and how things are developing from a wider look.  

I don't participate in the MGoBlog diaries.  I don't read all the UFRs (Upon Further Review).  I don't understand what all the terms mean, but I still enjoy Michigan football.  I enjoy the team and the games and the greater fandom.  

MGoBlog is not like other fan sites.  The level of detail they go in to (e.g. the UFRs, where they go over every single play from the previous week and grade all the players) is not like other sites.  I only learned this year that there's isn't an equivalent blog for other teams.  I realized today that such a thing may not happen until AI can do a UFR just as well as humans can.  

I knew MGoBlog was different when Brian posted about how we need to plan for the metagame.  He related going to the spread offense with Rich Rodriguez to Magic: the Gathering, as a decision based in strategy by what other teams were doing.  We don't want to be better than teams at what they're doing, we want to have a strategy that is better against teams because of what they're doing.  That really spoke to me.

A fan community is interesting, because you are all reacting to what you interpret the team's strategy is, without knowing for certain what the team is actually thinking, planning, and doing.  MGoBlog is so good because their analysis brings you as close to what that team is doing as possible. 

Watching the National Championship tournament games this year really brought it all home.  The blog team doesn't tell you what to think, but they were clearly correct in both games about how to handle those quarterbacks.  We could sack Milroe and we could pressure Penix without sacking him.  Both worked.  We got six sacks on Milroe and Penix didn't have any big plays.  

I am writing this because I'm listening to the podcast team cry about what MGoBlog and the fans have meant to them.  I am there with them.  I was with Brian in cynicism during the 2021 season.  (I'm glad you felt that way and I loved that you were that voice throughout the season!)  In this podcast episode, I realized that Brian also went through a divorce and has to deal with custody things.  I learned about Seth's son and dad.  I lost a great Michigan fan friend last decade.  I wish they could have been there to see the last three seasons instead of just the Ohio State win drought.  

I know I'm not friends with any of the MGoBlog team--the connection is in one direction--but thank you for being so detailed and thank you for giving me so much to follow along with.  I would have been a Michigan fan without you, but I wouldn't have been this fan without you.  

Thank you for being the GPS for this amazing ride.

(I wish I hadn't lost that I 💙 💙 shirt.)


Wednesday, November 17, 2021

Dragonlance Chronicles Reading Order

I'm sure this has been done before, but I wanted to do it myself.  Here's my chronological reading order for the events of the Dragonlance Chronicles.  I've combined:

  • Chronicles 
    • Dragons of Autumn Twilight (DoAT)
    • Dragons of Winter Night (DoWN) and
    • Dragons of Spring Dawning (DoSD)
  • Lost Chronicles
    • Dragons of the Dwarven Depths (DotDD)
    • Dragons of the Highlord Skies (DotHS)
    • Dragons of the Hourglass Mage (DotHM)
  • The Story that Tasslehoff Promised He Would Never, Ever, Ever Tell (from War of the Lance, Tales II, Volume 3)

There may be other stories I've forgotten that I should probably add.  I'm probably only interested in stories from Margaret Weis and Tracy Hickman.  Please let me know if there's something I should add (or if I've made a mistake in the order).

My rules were:

  • Don't stop mid-chapter.
  • If there is significant overlap in a part, read the original Chronicles version first.  (I broke this rule a few times.)

Here's the order:

  • All of DoAT.
  • All of DotDD
  • DotHS, from the start through Book 1, chapter 12.
  • DoWN, from the start through Book 1, chapter 1.
  • DotHS, Book 1, chapter 13, then Book 2, chapters 1-3
  • DoWN, Book 1, chapters 2-5.
  • DotHS, Book 2, chapters 4-5.
  • DoWN, Book 1, chapter 6.
  • DotHS, Book 2, chapter 6.
  • DoWN, Book 1, chapter 7.
  • DotHS, Book 2, chapter 7, then Book 3, chapters 1-3.
  • DoWN, Book 1, chapter 8.
  • DotHS, Book 3, chapters 4-8.
  • DoWN, Book 1, chapters 9-12 (end of Book 1).
  • DotHS, Book 3, chapters 9-16 (end of Book 3), then all of Book 4 to the end of DotHS.
  • DoWN, all of Book 2.
  • The Story That Tasslehoff Promised He Would Never, Ever, Ever Tell
  • DoWN, from the start of Book 3 to the end of DoWN.
  • DoSD, from the start through Book 1, chapter 6.
  • DotHM, from the start through Book 1, chapter 1.
  • DoSD, Book 1, chapters 7-9 (end of Book 1).
  • DotHM, Book 1, chapters 2-4, then all of Book 2 (chapters 1-13).
  • DoSD, all of Book 2.
  • DotHM, Book 3, chapters 1-2.
  • DoSD, Book 3, chapters 1-2.
  • DotHM, Book 3, chapters 3-10.
  • DoSD, Book 3, chapters 3-4.
  • DotHM, Book 3, chapters 11-12.
  • DoSD, Book 3, chapter 5.
  • DotHM, Book 3, chapter 13.
  • DoSD, Book 3, chapter 6.
  • DotHM, Book 3, chapter 14.
  • DoSD, Book 3, chapters 7-8.
  • DotHM, Book 3, chapter 15.
  • DoSD, Book 3, chapter 9.
  • DotHM, Book 3, chapters 16-18.
  • DoSD, Book 3, chapter 10-12.
  • DotHM, Book 3, chapter 19 (end of DotHM).
  • DoSD, Book 3, from chapter 13 to the end of DoSD. 

Monday, November 02, 2020

Tales of Modern Faerie Reading Order

I found out there are some short stories set in Holly Black's story universe that started with the Tales of Modern Faerie books: Tithe, Valiant, and Ironside.  (I think the series is now called something else officially, but I like that name best.  Maybe that's because I read Valiant first.)

I wanted to save the list somewhere where I wouldn't lose it and where I could add things if I find more things.

Sources

These places were very helpful!

The List

This is the chronological order as far as I can tell.

  • "Modern Faerie Tales" Collection:
    • Tithe: A Modern Faerie Tale, the first book in the series, 2002.
    • Valiant: A Modern Tale of Faerie, 2005.
    • Ironside: A Modern Faery's Tale, 2007.
  • Not for Humans, a short story co-written with Cassandra Clare.  
  • The Land of Heart's Desire, 2010, a short story about one year after Ironside.  
  • The Darkest Part of the Forest, 2015, a book that takes place in Fairfold, a smaller town a ways away from NYC.
  • The Lament of Lutie-Loo, 2019, a new short story included in the "Modern Faerie Tales" compilation that includes all three of the original trilogy.  (Update, 2025, posted by the Faery Tales From the Abyss Tumblr: https://www.tumblr.com/faerytalesfromtheabyss/185420022290/the-lament-of-lutie-loo-%C2%BD-the-short-story-from-the. )
  • The Cruel Prince, 2018, the first book in the Folk of the Air series.
  • A Visit to the Impossible Lands, 2018, a short story included in the Barnes & Noble edition of the Cruel Prince.  Moon in a Cup has a version here: https://ourmooninacup.tumblr.com/post/174449006570/the-modern-faerie-tales-short-story-from-the 
  • The Lost Sisters, a novella from 2018.  I got my e-version from Amazon.  (Update, 2025: also found it on FlipHTML5, which seems like it might not be legit: https://online.fliphtml5.com/ulyvm/xzlo/#p=37 )
  • The Wicked King, 2019, book 2 of the Folk of the Air series.
  • The Queen of Nothing, 2019, book 3 in the Folk of the Air series.
  • How the King of Elfhame Learned to Hate Stories, 2020, a novel with illustrations.
  • The Stolen Heir: A Novel of Elfhame, January, 2023.  (Volume 1 of The Stolen Heir Duology.)
  • The Prisoner's Throne: A Novel of Elfhame, March 2024.  (Volume 2 of The Stolen Heir Duology.)

Update, March 10, 2025:

  • Organized the first three novels into the "Modern Faerie Tales" collection.
  • Added The Stolen Heir and The Prisoner's Throne. 
  • Added some links to sources for harder to find short stories.

Friday, December 28, 2018

RetroPie from CanaKit with Kubuntu (Support Machine)

Here's how I set up my CanaKit into a RetroPie using Kubuntu 18.04.  There were a ton of frustrating parts, so actually, this is what made it work, but there were a lot of missteps all the way through.


Ordering and setting up hardware:

* First, ordered CanaKit Raspberry Pi 3 Model B+ Complete starter kit with 32 GB EVO+.  Also, two Game pads (iNNext Wireless 2.4 GHz controllers.) 

* Plugged in the controllers to charge them so they'd be ready later

* Put it into the case, using this videos: https://www.canakit.com/pi-case.  I left the top off.

* Then I put the heat sinks on.


Installing the OS: Followed these directions: https://github.com/RetroPie/RetroPie-Setup/wiki/First-Installation

* Download the Retropie image from: https://retropie.org.uk/download/

* Unzip the file to a .img.

* Downloaded (Balena) Etcher to write to the thumb drive.  The AppImage didn't work, so I had to download the .deb.  (I posted about this here: https://askubuntu.com/questions/1105132/etcher-appimage-wont-open-on-kubuntu-18-04)

* Flashed it with Etcher.  (This was really easy and very self-explanatory.)

* Plugged in one of the controllers and booted it all up.

* Followed the controller setup (hold down a button for 1.5 seconds to skip assigning something to that option).  One of the controllers wouldn't connect.  To get it to connect, I had to press Down on the control pad, Select, and Start all together.  That worked.

* The "Retropie menu" is not obvious to reach.  From the main screen where it just says "Retropie" and maybe "Configuration", press A to get to the RetroPie Menu.

* Choose WiFi to setup the WiFi.  Use a USB keyboard to get in.  It took a LONG time for it to recognize the USB bluetooth keyboard.  Just wait.

* I downloaded the games I have from https://emulator.games/

* To prep the USB, I followed the USB directions here: https://github.com/RetroPie/RetroPie-Setup/wiki/First-Installation#usb

After refreshing the emulator, I'm ready to go!!!

Thursday, October 04, 2018

Dealing with empty Moodle Grades

In Moodle grade calculations, there aren't any conditionals, so it gets a bit tricky to handle intermediate grades for categories that use an original calculation.  For many of my classes where there is a midterm and a final, I give an extra incentive for improving your grade from the midterm to the final: the total Exam portion of the grade is:
  • 50%-50% between the midterm and the final,  if the final grade is worse, or
  • 25% midterm and 75% final grade,  if the final is higher
Since the final exam grade was empty until the very end of the semester, that grade was calculated as a zero.  This caused the Total Exam grade to always be half of the midterm grade, causing the overall course grade to be lower than expected.  I didn't want to change the calculations mid-semester and risk a calculation error, so I left it the way it was, despite some student complaints.

This isn't a problem if I just used regular averages, since you can choose to exclude empty grades there. Indeed, that seems to be the only way you can have Moodle differentiate between zeroes and empty scores.

To solve the problem nicely, I created another Grade Category, "Actual Exam Grade" that would display the correct overall exam grade.  I added two new Grade Items to that, "Exams Average" and "Weighted Exams".  (I didn't hide either of them.)

For "Weighted Exams", I set my own calculation formula by choosing Edit Calculation (for the item) on the Gradebook Setup page.  I named the midterm and final fields "midterm" and "final" (shocking) then set the formula to be

=.25*[[midterm]] + .75*[[final]]

This grade will be really bad before the final is done, but that's okay.

For the "Exams Average" item, I needed to take the average of the exams, but just use the midterm grade if the final wasn't entered yet.  You can't do that in a formula, but you can do that in a category, so I first changed the original exams category to just calculate the average, but exclude blank grades.  The changes I needed to make were:
  1. In the Gradebook Setup, in the Exams category, for the Exams total, choose Edit Calculation.
  2. To kill the calculation (and open up the option to choose a basic operation), delete the formula entered from before and choose "Save changes".
  3. Go up to the top of the category and choose "Edit Settings".
  4. Choose the aggregation option "Mean of grades", then save the changes.
Now go to Edit Calculation for the "Exams Average" item you created before.  In there, first name the category total (I used "examAvg" because I don't like spaces in variables), then change the formula for the item to simply

=[[examAvg]]

After saving those changes, go to Edit Settings for the Actual Exam Grade category and change the aggregation to Highest Grade.  Save that and you should be all done.

If you don't want to read all the exposition up there, here are all the steps put simply (and in a slightly different order).
  1. Create a new category, "Actual Exam Grade".  Set the aggregation to "Highest Grade".
  2. Add two grade items to it, "Exams Average" and "Weighted Exams"
  3. Edit Calculation for "Weighted Exams".  Name the midterm and final and set the formula to  =.25*[[midterm]] + .75*[[final]]
  4. In Exams Total, choose Edit Calculation.  Then delete the formula and save it.
  5. Change the aggregation for the Exams category to "Mean of grades".
  6. Edit Calculation for "Exams Average".  Name the Exams category to "examAvg", then set the formula to  =[[examAvg]]

Thursday, August 16, 2018

Theory of Computation Lecture Notes

This is a place for people to leave comments or questions about my Theory of Computation lecture notes.  I'd love to hear back from people who use them!

The notes are on Plymouth State's digital commons.  They are freely available to download as a PDF.  (If I push a new version to the commons, I'll update this link.)

Here's my page for all my lecture notes.  This includes a LaTeX package you can use to generate your own lecture notes (including both the instructor and student versions from one source document).

Update: I added the link now that they are available online.