No school today but lots to do.

February 18, 2019

No school today for Presidents Day and it is a whopping 16 degrees out.  Now what to do. I have the usual domestic tasks I should do, laundry, vacuum, shovel more snow, etc.  I also have school related tasks (sort of) I should do.

  1. Code up the assignments I gave my Java class last week.  The book I am using does have coding solutions but he uses a custom class built specifically for this textbooks for inputs.  I am not crazy about that so I have to code the assignments up using the Scanner class. I am also extremely rusty with Java so this is good practice.  It allows me to see what is going to be difficult for the kids and what gaps the textbook leaves.
  2. Work on transcribing some Unity videos.  This is very time consuming and is turning into more of a long term objective.  I pick at it a little at a time.
  3. Preview the next series of YouTube videos I want the kids to work through.  We have the VR up and working but all the VR videos focus on just that, getting it up and working.  I want the kids to actually build a game which requires merging Unity 5 game making (non-VR) videos with Unity 2018 VR videos.  Luckily I have a couple of students that are brighter than I am and can throw the integration project at them. They will get the process ironed out for me.
  4. Work on the Coding with Minecraft curriculum.  I contacted Microsoft about the initial errors I was seeing in their curriculum and they actually got back to me.  I am now talking to CS curriculum coordinator for Microsoft. Like an idiot I offered to help with a pilot study of the curriculum.  Now I have to find some 6-8 grade kids interested in Coding with Minecraft, learn Minecraft myself, edit the MS curriculum and get a club or class organized to use the curriculum.  This is all Alfred’s fault. If he had not made this post I would not have gotten interested in the possibilities the curriculum offers the middle school kids.  Bad, bad Alfred. Minecraft is not free but I have some grant money given to the school by a local tech business (Advanced Technology Group) that is only for programming education.  Score.
  5. Prep for my Stats class.  We are starting the most difficult, in my mind, chapter in the book, hypothesis testing.  Every year I look at this chapter and think on how I can make it make more sense. Still working on that.
  6. Edit a new Java book for an author of several of the texts I use for Unity.  Since I know Java so poorly this is more of a typo check and test run for the new book.  I went through chapter one last night. Some typos and one major coding error. He asked for a two week return on the errors.  I will get as far as I get.

I also have to take time away from the computer.  Too much and I start to lose focus and stop enjoying the work.  The eyes also start doing weird things.

I have to decide if I am going to run tonight.  I have a circuit training class from 5:30 to 6:30 tonight.  The fitness center has a nice indoor track so I do not have to freeze in order to run.  I have taken a couple of weeks off of the running due to shin splints so I need to test the running again.  I used to run mega miles with no shin splints but as I get older things are falling apart, especially if I push like I used to.  I do need to keep in shape through the winter so I can be stupid in the summer. I have a 25-mile mountain bike race in Butte scheduled and a week long mountain biking trip in Oregon.  I am the second oldest person signed up for the Butte race and I want to make sure the old guy (two years older) does not beat me. It is not the 25 miles that is bad, it is the altitude in Butte.  The race starts at 6300 feet and goes up from there. Missoula is at about 3500 feet and the difference in oxygen is significant. (I mountain biked in Park City Utah years ago. I thought I was getting the flu or something during the ride.  I got back to the bike shop I was parked at and was chatting with the shop owner. He said the shop was at 7000 feet and I had rode above 10,000 feet. Ugh.) I ride Butte regularly because the trails are so sweet but it is a major suck fest getting air.  I better run tonight.


The Microsoft Minecraft curriculum: too bad

February 15, 2019

Alfred Thompsom’s last post  referenced the new Microsoft Minecraft curriculum.  Since it is free I have to take a look. I have a tendency to dump on Microsoft curriculum.  They obviously spend a lot of time building these things but they obviously do not beta test them with teachers.  I am looking through the Required Educator Preparation and the first bullet says “Watch the educator preparation video”.  Said video is not to be found by the normal human being. I think I would have made this bullet a link to the video but that is just me thinking outside the box.  Or at least name a video “The Educator Preparation Video”. Bullet 2 says “Read the course overview” and “download Code Connection”. Again links would have made things a tiny bit simpler.  Am I just too picky and want it just too simple? I can just picture that 7th grade Language Arts teacher who has been asked to use this curriculum to get a CS thread started in the school. They are lost at bullet 1.  Not good.

Every Microsoft curriculum I have looked at through the years has been this way.  Really cool stuff really poorly tested. What, they cannot find teachers willing to give them a hand testing this stuff before they throw it out there?  I would be glad to help. I am a professional when it comes to being confused easily by poor directions. I have spent years perfecting being confused. It is such a wasted talent.

I have no real interest in this curriculum for myself but since it is free I have to do a bit of a preview for the middle school.  The $5 per license per user per year is not unaffordable so if it is a quality usable product I would have have the middle school CS teacher take a look at it.  It has taken me 2 minutes to decide the middle school CS teacher would not have time to de-bug this curriculum.

Where does Microsoft go wrong on this kind of stuff?  I think their curriculum writers are too smart and too experienced with what they intend to do.  Too many type “A” personalities working for them. They need more people working for them who have experience teaching 7 preps a day and understand the meaning of “no time to figure this out”.  Find 50+ year old business teachers who spent the last 30 years teaching typing and now have to build a CS curriculum in a small school where resources are very limited. Find the teachers that go to Barnes and Noble Book Sellers and seriously considers buying “Java for Idiots” as a text book.  (I didn’t but I sure thought about it.) That is the perfect curriculum reviewer for this kind of thing. Those are the teachers this curriculum should be designed for and written by. I went to a multi-day Microsoft TouchDevelop seminar a number of years ago. Maybe 150 attendees. I would say 80% of the attendees fit in this category.  Microsoft has to stop assuming the curriculum users know what they are doing and assume the users are absolute novices (or Idiots). If the curriculum references a video or document it has to have a link so the teacher can locate it quickly. An experienced teacher that knows Minecraft does not need any of the intro chapters. The beginner needs perfect and well thought out intro chapters.  Microsoft just does not seem to be very good at thinking or writing at this level.

Unity VR teaching/learning

February 13, 2019

The Unity VR teaching/learning experience is progressing.  Now I am not a Unity guru. I am a Unity novice who is learning and teaching via YouTube.  Admittedly not the best method but it is all I have. I regularly ask myself why I am teaching Unity when I know so little about it and have to learn it days before I have the kids work on it.  I could just not offer the game course and save myself a huge amount of time and headaches. I could say that about all my programming courses. I knew nothing about Python until I decided to teach it.  Back to Unity. I teach Unity because it interests the kids and me. No, it does not involve a lot of programming, most of the time it is cut and paste, but it requires large amount of problem solving and attention to detail when listening to the videos.  That sounds like a rather trivial learning objective but how many of us have had jobs where you have to learn on the fly by paying attention to precise directions. If you can follow directions carefully you can learn pretty much anything. Following directions is not a natural skill high school students are gifted with.

The trick with teaching with YouTube is finding good, up to date videos.  Last year Unity made some major updates as to how the VR works. VR videos from Unity 5 just do not work any more.  For the non-VR videos most seem to be fine. So I have to dig for patches. There are not enough Unity 2018 videos available so I have to take the old and combine with the new.  

Teaching/learning with YouTube can be a challenging experience.  Finding up to date videos that a worth a bean can be a challenge.  Finding the time to work through the video before giving it to the kids is another big issue.  I have given the kids videos that I have not worked completely through before. Bad, very bad. I do not do that anymore.   

I prefer tutorials in print form.  I can go back and forth easier, make notes, and edit the document.  Transcribing videos is a great way to learn the tutorial but it sure takes time.  Back and forth, back and forth. But once you have it transcribed you sure have it down.

Below is a partial list of my favorite VR YouTube tutorials.  It is possible through these to get all the basic tools necessary to build a pretty decent VR game.  My next objective is to transcribe these into text and pictures. That way if there is a change I can edit the document and not worry about the video.  I want to build a library of Unity task documents that target simple tasks.

“Creating a Google Cardboard VR app in Unity 2017 [RNDBITS-031]” by Rabidgremlin.  Unity 2017 and 2018 are pretty much the same as far as basic VR. Rabidgremlin has some great tutorials.  This video did have a major glitch. The ClickPointer (put the pointer on the object, click the left mouse button and have something happen) did not work.  In order to get the ClickPointer to work it is necessary to go to the GvrBasePointer Script and remove the ! in front of UNITY_EDITOR in line 227.  Took a little Googling to figure this out. This is the perfect example of testing the video before giving it to the kids.  I wrote the solution down so I will not forget it.

“Unity VR Tutorial 2018 – How to create your first VR app in 11 minutes for Google Cardboard” by Xlaugts.  Almost identical to the Rabidgremlin video above. It had the same ClickPointer issue. I did these back to back to see if the ClickPointer issue was me or Unity.  For once it was not me.

Getting Started with Google Cardboard in Unity 2018” by Tinkerbrains Learn.  The video is short, simple and to the point. I noticed that the video was posted semi-recently so I posted a “thank you, great video” comment.  The author replied. Very nice.

“How To Virtual Reality App in UNDER 15 MINUTES!! with Google VR and Unity for Android or IOS” by MatthewHallberg.  Meant for Unity 5 so it is dated but has some good instruction for building a maze. One of the commenters gives instructions to make the video work with Unity 2018.

Making a VR Game Day 1: Unity, Android SDK, Drivers, JDK, GoogleVR!” by NurFACEGAMES.  Again dated but still useful for learning Unity techniques. NurFACEGAMES makes a series for VR.

Coding is not always the hard part

January 29, 2019

This semester we are going to dabble in VR with Unity.  Make some simple Google Cardboard games just to get a feel for the possibilities.  I have done VR before with Unity 5. Guess what, there are big differences between Unity 5 and Unity 2018 and VR.  Big enough that all the old YouTube tutorials I used to use do not work so well any more. Big enough where what I did in 5 minutes took me about an hour to figure out.  Once figured out it is not big deal, in fact it is easier than Unity 5.

In situations like this coding is always the easy part.  Doing a new setup, figuring out the latest support downloads (android SDK, correct version of Java, best IDE and so on) are what can make teaching a course like Unity that is software based so difficult.  The quadratic formula has not changed in a couple hundred years, Unity had an update late week. Things like do we go with Python 2 or Python 3? Java or Javascript? Old Unity or new Unity? These are the decisions and directions that can drive a CS teacher batty.

I had better get back to work.  There is a free AR with Unity application I want to look at.  I am never happy with teaching what I used to teach. There is always something new to look at.  Cool.

The Road to Unity

January 17, 2019

I teach a game programming class using Unity.  I do not know Unity very well but we have lots of fun exploring and trying to make simple games.  Unity uses C#. I do not know C# very well either, especially the special functions of Unity, but I am getting the hang of it.  So when I have a success I celebrate. There is a simple strategy game on the internet called Red Remover. The premise is very simple.  There is a construction made of some bricks, some red squares, some green squares and some blue squares. Click on the bricks to make the red squares fall off the screen and yet keep the green squares from falling off the screen.  The blue squares are neutral. Have the kids play it, it requires thinking. Mechanically it looks simple. I am thinking “I can build this.” Click on a brick to make it disappear, let gravity do the rest. “Click on a brick to make it disappear”.  That is all. In my ignorance I thought I should be able to find somewhere on the internet directions on how to click on an object and make it disappear. Nope.

Now I am a very patient and stubborn person.  The patience comes from the military. I can lie in a hide for days if needed. The stubbornness is genetic.  So about 4 days and at least 14 hours of searching and experimenting later it works. Click on an object and make it disappear would seem to be a trivial and common task for a Unity project.  Yes, I found descriptions on doing just that but they all had issues or simply did not work. I put a cry for help on the Unity forum. The replies were not helpful. I had to figure out how Unity “sees” objects before I found the solution on my own.  The C# script is trivial, IF you know how Unity sees objects. If you do not understand how Unity sees objects and implements scripts on those objects then you are toast.

It is the simple things in life that are often the most pleasing. A sunset, snow on the mountains, a good IPA and so on.  “Click on a brick to make it disappear” is a simple thing.  I am extremely pleased I got that “simple” thing working. Now I just have to catch up on all the not so simple things I did not do during those 14 frustrating hours.

Programming Curriculum: Never Satisfied

January 4, 2019

All that Android App Course research really got the brain cells fired up.  Particularly in the way of curriculum. The CS/Programming curriculum I offer presently is built around several factors.  The biggest factor is what I am capable of teaching. I have no professional programming experience and almost no college coursework in programming.  (OK, three courses. One in 1972 with punch cards, I do not even remember the language I used. Two courses in the 80s, one FORTRAN and the other a very bad experience with Java.)  Everything I know about programming was learned on the job; a good book and staying a couple of days ahead of the kids. This somewhat limits the level of programming I am capable of offering in my curriculum.  As a result any change in my curriculum requires a lot of work on my part. Not just designing a course but learning the language if the course is programming.

All the Android App Course research has resulted in my wanting to offer a course using Android Studio.  I learned there are several excellent ways to go for the app course but when all is said and done if the kids are going to write professional level apps with a professional tool Android Studio is the way to go.  I am also somewhat fascinated by Android Studio. Not sure why, it my just be a character flaw.  Android Studio uses Java. Hence I need to offer a Java course before I offer Android Studio. I also feel Java is one of those languages kids should have some familiarity with.  I have taught Java before, just not very well. So the project for Spring semester is to build a Java course on the fly while teaching Java and learning Java at the same time. No problem. The tricky part is going to be keeping the kids from going faster than me.  Smart buggers.

I dug around the internet looking for a Java text.  I am somewhat limited by my $0 budget, I have to find free textbooks.  I found two that seem pretty decent. “Think Java: How to think like a computer scientist” by Downey and Mayfield (2016) and “Introduction to Programming with Java” by Eck (2018).  I use Downey’s “How to Think Like a Computer Scientist: Learning with Python 3” as my Python textbook.  Excellent book for the price.  I did a quick preview of both and am going to go with the Eck book.  It seems a little bit more detailed in the chapters but since they are both free I can give both to the kids so they can have a second resource.  

A real nice thing about teaching at a small private school is I can decide to offer a course two weeks before the semester starts, get the councillor to put it in the schedule and find kids to take it, all without a major hassle with committees or administration.  The bad thing with this easy approach is that sometimes the Good Idea Fairy bites me and I get over my head, usually in available time.

So next semester I will be teaching Stats (26 seniors), Honors Algebra II (2 sophomores), Game Programming with Unity and VR (5 juniors and seniors) and two sections of Java (sophomores and juniors, numbers to be determined).  With the IT work added in I should not be too bored.

I almost forgot, I need to start working with Android Studio.  I need to find something free out there, either a book or video series, that is written for beginners.  I have found a number of things labeled “Android Studio for Beginners” but where a beginner is assumed to be someone with extensive Java programming experience.  I have to find that something this spring because if I cannot find anything truly for beginners I will have to find something I can simplify or build my own material this summer.  Always fun.

Absolutely nothing to do with computers

December 17, 2018

This is the picture I have on my home screen.  The picture has given me hours of sanity. I look at it and do not think of computers, programming, math, school or bills.  

These cabins are at the Magruder Ranger Station by Darby Montana, about 60 miles from my front door. This is the beginning of the Magruder Corridor.  The Magruder Corridor is a 122 mile dirt road from the cabins to Elk City Idaho that I believe is unique in the US. It goes smack dab through the middle of two wilderness areas, the Bitterroot Wilderness to the north and the Frank Church – River of No Return Wilderness to the south.  There is about an 80 mile stretch that you cannot get off the road with a motorized vehicle or bicycle. I have not done this road all the way on my motorcycle but it is on my bucket list. I am thinking late this coming summer is the time. The ride requires either a large gas tank or judicious use of the throttle and a lot of coasting or a spare can of gas.   I will have to do a little mileage testing. My little 650 (the bike in the picture) has a 5 gallon tank. At 40 miles to the gallon I should be good but I know from previous experience that dirt roads and low speed can use more gas than expected.

This will have to be a two day trip.  From Darby to Elk City on dirt is going to use me up so I will have to take regular fly fishing breaks.  From Elk City to Missoula by pavement is a long ride. I might just turn around and come back through the corridor.  There are pros to both routes. The road coming out of Elk City to Hwy 12 is supposed to be a knee draggers dream. I have not done it yet.  Highway 12 from Lowell to Lolo is one of the premier rides in the US. I ride it regularly. If I go back through the corridor I will have to fly fish both ways and camp overnight in the wilderness.  It might take three days if the fishing is good. Ah, gee.

It is fun to plan things like this during this time of year.  Skies are gray. Not enough snow to go boarding yet. Too icy to go mountain biking.  I went cross country skiing yesterday but it simply is not the rush boarding and biking give.  So it is time to plan for the next summer’s adventures.

There is one minor glitch to this whole thing.  If I go fly fishing for two or three days and the fishing is good the wife is going to be upset.  Lacking the subtlety a good marriage requires I would take pictures of the fish. I will show the pictures to my wife.  She will get grumpy. (She is really into fly fishing, much more than I am.)  I will have to suffer the burden.

Android App Course: so I am not done

December 14, 2018

I have been playing with LiveCode.  I made the Flappy Bird game from the free Udemy LiveCode course.  There were some of the usual glitches as with any video tutorial using an old version of the software but no big deal.  I even managed to get the game on my Android phone but due to screen sizing issues it is unplayable. I assume there is a way of adjusting the game to fit the screen size but I will worry about that later.  It is obvious this is a non-game app making environment so I probably should have found a tutorial that made a non-game app. Oh well, it is what I found first and it did give me a good idea how the IDE and the language worked.  The IDE and the language are not a major difficulty. It is definitely an option between App Inventor and Android Studio. My biggest problem is I have been coding in C based languages so long that this language would take some getting used to.  I would have no problem using LiveCode as an intro level course. I do think I would think twice about using it with students that are already familiar with Python, VB or Java. Maybe think twice but do it anyway because it is just so cool.

I found a couple of other app building possibilities.  

Jon Howard responded to one of my posts with a suggestion of looking at Basic4Android (B4A).  Not free ($59 for the cheapest version, there is a 30 day trial) but reasonable. There is a free version called B4J for desktops but it looks slightly different from the B4A. B4A looks really usable for those of us used to Visual Studio.  I was going to build a simple app with it but hit a bit of a wall, no “simple or first app” tutorials on the web site. There are a lot of tutorials on the site but nothing leaped out at me as “The Idiots Guide to Programming with B4A”. I have started digging through the YouTube offerings but that will take a while to sort junk from worthwhile.  Hopefully I can find something in 30 days.

I also stumbled on an IDE called Stencyl.  Not free and not cheap. $199/yr for the Android version.  There is a free version but it publishes only to the web. It is similar to App Inventor and Thunkable in being drag and drop.  It is a game maker like GameMaker Studio, not really a general app builder.

I revisited GameMaker Studio just to see if there were any changes in the IDE.  It has gotten expensive. There is a free version but it will not publish at all.  For the Android version it is $130 per seat. That seemed to be a perpetual license as opposed to Stencyl but still out of my range.

What a teacher uses really breaks down to the course objective.  If the objective is to end up with students able to build professional Android apps and step into industry there really is no choice, Android Studio is it.  AS is not for the faint of heart, either teacher or student. If the goal is to have the kids just build a simple Android app then the options are a bit wider than I originally expected.  App Inventor, Thunkable, LiveCode and B4A depending on time, energy and money. The time factor is how much time the teacher has to proof the various IDEs and build a course. App Inventor has a whole curriculum out there ready to go for the beginning CS teacher.  Cyril Pruszko has written a good program for teachers using LiveCode. Look here and here.  There is more than enough to get a course built to your own tastes.  With B4A you are on your own. Nothing new there but it still requires time you may not have.  

If the course objective is to build games then there are some very good options.  Unity and Corona SDK are free and there is a lot of teaching materials out there. GameMaker and Stencyl are simply to pricey for my blood and are pretty limited on their versatility.  I can build what they build with Unity for free and build a lot more other things, VR for instance.

Everything I have looked at so far has strengths and weaknesses (except Xamarin, no strengths I could find).  Nothing instantly leaps out at me and says “Use me! Use me!”. For teaching, everything, except maybe App Inventor, requires time to plan and write.  I plan to give LiveCode a go next semester with some experienced kids. I also plan to look closer at B4A and at least build a simple app with it. YouTube forever.

Scratch: kids stuff only my @#$

December 13, 2018

I can program pretty well in Scratch.  Any high school programming teacher that has been teaching programming for a few years can program in Scratch.  Even if they have never seen Scratch before they can figure it out pretty quickly. This on the other hand is not programming in Scratch.  This is the result of a Scratch god. The author of this did not sit down in front of a keyboard and hammer it out.  This is the result of hours of planning and design. At least I hope it was the result of hours of planning because if they sat down and just hammered it out I am…, well, to tell the truth I would not know what I am.  Amazed, impressed, humbled, worshiping, something. Even with planning I am several of those and more. I do plan to look at the coding for this and get some ideas.

Android App Course: the saga ends

December 10, 2018

I am done.  My brain is tired.  Here is everything I could find that will build apps for Android.  

  1. App Inventor
  2. Thunkable
  3. LiveCode
  4. Xamarin
  5. Android Studio
  6. Corona SDK
  7. Gamemaker
  8. Unity

There are more out there.  For instance I found reference to making apps with Python.  Not easily but it can be done.

I did not look at all of these in intimate detail but I did try to write an app with all of them.  Some of these I have used in classes (Corona, GameMaker, Unity) , others I just looked at in the last couple of weeks (Thunkable, LiveCode, Xamarin).  I have done a couple of week long professional development summer camps with App Inventor. I have been tempted by Android Studio for a number of years.  

Here is a very short comment on each.

  1. App Inventor – large following and lots of stuff out there for it. Has some connection issues to phone and emulator is weak.  Not for professional use.
  2. Thunkable – On the same level as App Inventor.  Plus and minuses over App Inventor. Not for professional use.
  3. LiveCode – Uses its own language which makes me leary of it.  I could not get the emulator to work.
  4. Xamarin by Microsoft – Almost nothing out there as far a good teaching material.  Some tutorials but I had difficulties trying to get them to work. It glitched on me.  Professional use.
  5. Android Studio – the premier Android app writer.  Professionals only. Has possibilities for advanced high school.
  6. Corona SDK – game writing.  Some good tutorials out there.  
  7. GameMaker – games only.  Simple 2D games. Very specific environment.  
  8. Unity – professional level 2D and VR games.  Lots of material out there.

Which to use has a lot to do with your objective.  If you want to offer a low level class where the kids get to write some simple apps and have some fun, App Inventor or Thunkable are both good options.  If you want a 2D game making course Corona SDK is a far better option than GameMaker. Corona uses Lua, a very basic scripting language that looks very traditional.  GameMaker works well but the language is a dead end as far as a stepping stone to more advanced languages. Unity has some major possibilities if your objective is a more advanced game writing course.  

If you want the kids to write real apps in a language that they can carry and use out of high school Android Studio is the only way to go. Dumbing it down for high school might take some work. Or offering some strong prerequisites is a possibility.  There is no “beginners” route for AS.

Here are my choices.

  1. App Inventor for a limited course for younger kids or beginners.  Test phone connections, twice.
  2. Corona SDK for a 2D game programming course.  Easy and the language is a traditional line code environment.
  3. Unity for a VR games.  Some good tutorials out there.  Real fun for the kids.
  4. If you want the kids to actually make a real app in a project based course there is no choice other than Android Studio.  It will take a lot of work on the teacher’s part and commitment by the students.

I was really tempted to dive farther into LiveCode but I just was not up to learning a new language.  Since Java/Javascript, Python and C# are the dominant languages for education I am not sure teaching a language that is used only in one environment is a viable direction for teaching.  This is more of a personal decision on my part. Learning any programming language will make the transition to another much easier. If I have an experienced programming student looking for an independent study I would not hesitate to have them work in LiveCode.

Xamarin seems an odd duck.  The IDE looks really sweet and being based on Visual Studio can make it very comfortable for teachers experienced with VS.  There is just nothing I could find as far as teaching materials. The tutorials I tested just did not work due I think mostly to version updates.  I looked at Xamarin University but was put off by the “experienced C# users” notice. If I am going to learn and use a professional level tool I want a lot of beginner support.

This review is 100% biased in that if I could not get the software working quickly and easily it went on my naughty list.  If I could not find a substantial amount of teaching material either in the way of documentation or good tutorials it hit the naughty list.  If the emulator had issues it hit the naughty list but it was not a deal killer. Of those that had emulators, Android Studio is the only one I had no emulator issues with.  Doing this software search has taught me emulators look cool but nothing compares to actually putting it on the phone. Putting the apk on Google Drive and opening the apk on the phone from there is slower but works.

Android Studio will take some work to bring to the high school classroom but it looks like it will be worth it.  I will not do AS this year but I will start assembling and testing material for next year. I have a couple of programming geeks that will be seniors next year.  Perfect guinea pigs.