Wednesday, November 12, 2014

Glove Hero Code

This post is mainly for documentation purposes. I'll be posting something really cool soon! Below is the code you can use to make your own. By copying it here I can link to it in other places. Lets see if any Code Monkeys read my blog and can guess what I might be making!


Arduino Code:


/*
Full Game


 The circuit:
 * LED attached from pin 13 to ground
 * Thumb connected to A0
 * 4 finger inputs connect to digital pins 2-5
 * Finger pins 2-5 connected to rows 2-5 on bread board
 * 360 ohm resistors connected from rows 2-5 to ground on bread board
 * Ground on bread board connected to GND on Arduino
 * (Serial monitor connected to pins 0 and 1 via usb)

 * Note: there is already an LED on the board attached to pin 13.

 http://www.arduino.cc/en/Tutorial/Button
 */

// constants won't change. They're used here to
// set pin numbers:
const int G1ThumbPin = A0;     // the number of the G1 Thumb pin
const int G1FingerPinI =  5;      // the number of G1 Index Finger input pin
const int G1FingerPinM =  4;      // the number of G1 Middle Finger input pin
const int G1FingerPinR =  3;      // the number of G1 Ring Finger input pin
const int G1FingerPinP =  2;      // the number of G1 Pinky Finger input pin

const int G2ThumbPin = A1;       // the number of the G2 Thumb pin
const int G2FingerPinI =  11;      // the number of G2 Index Finger input pin
const int G2FingerPinM =  10;      // the number of G2 Middle Finger input pin
const int G2FingerPinR =  9;      // the number of G2 Ring Finger input pin
const int G2FingerPinP =  8;      // the number of G Pinky Finger input pin

const int LED1Pin = A2;
const int LED2Pin = A3;
const int LED3Pin = A4;
const int LED4Pin = A5;

const int P1GreenPin = 6;
const int P1RedPin = 7;
const int P2GreenPin = 12;
const int P2RedPin = 13;

const String PatternOptions = "IMRP";

// variables will change:
int randNumber;
int RoundNumber;

// declare three strings:
String G1Pattern, G2Pattern, ActualPattern;
String G1Input, G2Input;
String PatternInput;


void setup() {
    // if analog input pin 0 is unconnected, random analog
  // noise will cause the call to randomSeed() to generate
  // different seed numbers each time the sketch runs.
  // randomSeed() will then shuffle the random function.
  pinMode(A0,INPUT);
  randomSeed(analogRead(A0));
 
  // initialize Thumb pins as an output:
  pinMode(G1ThumbPin, OUTPUT);
  pinMode(G2ThumbPin, OUTPUT);
  // initialize the G1 pins as inputs:
  pinMode(G1FingerPinI, INPUT);
  pinMode(G1FingerPinM, INPUT);
  pinMode(G1FingerPinR, INPUT);
  pinMode(G1FingerPinP, INPUT);
 // initialize the G1 pins as inputs:
  pinMode(G2FingerPinI, INPUT);
  pinMode(G2FingerPinM, INPUT);
  pinMode(G2FingerPinR, INPUT);
  pinMode(G2FingerPinP, INPUT);
  //Initialize Board LEDs as an output:
  pinMode(LED1Pin, OUTPUT);
  pinMode(LED2Pin, OUTPUT);
  pinMode(LED3Pin, OUTPUT);
  pinMode(LED4Pin, OUTPUT);
  //Initialize Indicator lights
  pinMode(P1GreenPin, OUTPUT);
  pinMode(P1RedPin, OUTPUT);
  pinMode(P2GreenPin, OUTPUT);
  pinMode(P2RedPin, OUTPUT);
 
   // initialize serial communication at 9600 bits per second:
  Serial.begin(9600);
    ActualPattern = "";
    RoundNumber=1;
   
}

void loop(){
  //Start game loop
 
  //initialize round number to 1 and pattern to Null string
//  RoundNumber=1;
//  ActualPattern="";
  int RoundOver=false;
 
  //start round loop
  do {
    Serial.println("begin round");
  //create the pattern
  while (ActualPattern.length() < RoundNumber) {
     // print a random number from 0 to 3
     randNumber = random(4);
     // Serial.println(PatternOptions[randNumber]);
     PatternInput = String(PatternOptions[randNumber]);
 
      if (ActualPattern.endsWith(PatternInput)) {
       ActualPattern = ActualPattern;
      }
      else {
       ActualPattern = ActualPattern + PatternInput;
       Serial.println("ActPat");
       Serial.println(ActualPattern);
      }
  }

  //Send pattern to LEDs
  for (int x=0; x<=ActualPattern.length(); x++){
   switch (ActualPattern[x]){
     case 'I':
     //send signal to LED1
     digitalWrite(LED1Pin, HIGH); //turn the LED on by making the voltage HIGH
     delay(1000);              // wait for a second
     digitalWrite(LED1Pin, LOW);    // turn the LED off by making the voltage LOW
     break;
   
     case 'M':
     //send signal to LED2
     digitalWrite(LED2Pin, HIGH); //turn the LED on by making the voltage HIGH
     delay(1000);              // wait for a second
     digitalWrite(LED2Pin, LOW);    // turn the LED off by making the voltage LOW
     break;
   
     case 'R':
     //send signal to LED3
     digitalWrite(LED3Pin, HIGH); //turn the LED on by making the voltage HIGH
     delay(1000);              // wait for a second
     digitalWrite(LED3Pin, LOW);    // turn the LED off by making the voltage LOW
     break;
   
     case 'P':
     //send signal to LED4
     digitalWrite(LED4Pin, HIGH); //turn the LED on by making the voltage HIGH
     delay(1000);              // wait for a second
     digitalWrite(LED4Pin, LOW);    // turn the LED off by making the voltage LOW
     break;
   }
  }
 
  //***** BEGIN Reading inputs from Gloves *****
   // initialize G1 states
  int G1IState=LOW;
  int G1MState=LOW;
  int G1RState=LOW;
  int G1PState=LOW;
   // initialize G2 states
  int G2IState=LOW;
  int G2MState=LOW;
  int G2RState=LOW;
  int G2PState=LOW;
  //reset G1Input to null
  G1Input = "";
  G2Input = "";
  G1Pattern = "";
  G2Pattern = "";

  //set ThumbPins to High
  digitalWrite(G1ThumbPin, HIGH);
  digitalWrite(G2ThumbPin, HIGH);
 
 
  while (G1Pattern.length()<ActualPattern.length() || G2Pattern.length()<ActualPattern.length())
  {
  // read the state of the G1FingerPinI value:
  G1IState = digitalRead(G1FingerPinI);
  // check if the G1I is pressed.
  // if it is, the G1IState is HIGH:
  if (G1IState == HIGH) {    
     // print out I:
   // Serial.println("I");
    G1Input = "I";
  }
 
  // read the state of the G1FingerPinM value:
  G1MState = digitalRead(G1FingerPinM);
   // check if the G1M is pressed.
  // if it is, the G1MState is HIGH:
  if (G1MState == HIGH) {    
     // print out M:
  //  Serial.println("M");
    G1Input = "M";
  }
 
  // read the state of the G1FingerPinR value:
  G1RState = digitalRead(G1FingerPinR);
   // check if the G1R is pressed.
  // if it is, the G1RState is HIGH:
  if (G1RState == HIGH) {    
     // print out R:
  //  Serial.println("R");
    G1Input = "R";
  }
 
  // read the state of the G1FingerPinP value:
  G1PState = digitalRead(G1FingerPinP);
   // check if the G1P is pressed.
  // if it is, the G1PState is HIGH:
  if (G1PState == HIGH) {    
     // print out P:
  //  Serial.println("P");
    G1Input = "P";
  }
 
  if (G1Pattern.endsWith(G1Input)) {
     G1Pattern = G1Pattern;
  }  
  else {
    G1Pattern = G1Pattern + G1Input;  
    Serial.println("G1Pat");
    Serial.println(G1Pattern);
  }
   // read the state of the G2FingerPinI value:
  G2IState = digitalRead(G2FingerPinI);
  // check if the G2I is pressed.
  // if it is, the G2IState is HIGH:
  if (G2IState == HIGH) {    
     // print out I:
   // Serial.println("I");
    G2Input = "I";
  }
 
  // read the state of the G2FingerPinM value:
  G2MState = digitalRead(G2FingerPinM);
   // check if the G2M is pressed.
  // if it is, the G2MState is HIGH:
  if (G2MState == HIGH) {    
     // print out M:
  //  Serial.println("M");
    G2Input = "M";
  }
 
  // read the state of the G2FingerPinR value:
  G2RState = digitalRead(G2FingerPinR);
   // check if the G2R is pressed.
  // if it is, the G2RState is HIGH:
  if (G2RState == HIGH) {    
     // print out R:
  //  Serial.println("R");
    G2Input = "R";
  }
 
  // read the state of the G2FingerPinP value:
  G2PState = digitalRead(G2FingerPinP);
   // check if the G2P is pressed.
  // if it is, the G2PState is HIGH:
  if (G2PState == HIGH) {    
     // print out P:
  //  Serial.println("P");
    G2Input = "P";
  }
 
  if (G2Pattern.endsWith(G2Input)) {
     G2Pattern = G2Pattern;
  }  
  else {
    G2Pattern = G2Pattern + G2Input;
 Serial.println("G2Pat");
  Serial.println(G2Pattern);
  }
  }
 
//***** END Reading inputs from Gloves *****
 // Serial.println(G1Pattern);
 int P1Correct=false;
 int P2Correct=false;
 
 if (G1Pattern == ActualPattern) {
   P1Correct=true;
   digitalWrite(P1GreenPin, HIGH);
 }
 else {
   digitalWrite(P1RedPin, HIGH);
 }

 if (G2Pattern == ActualPattern) {
   P2Correct=true;
   digitalWrite(P2GreenPin, HIGH);
 }
 else {
   digitalWrite(P2RedPin, HIGH);
 }
  delay (3000);
  digitalWrite(P1GreenPin, LOW);
  digitalWrite(P1RedPin, LOW);
  digitalWrite(P2GreenPin, LOW);
  digitalWrite(P2RedPin, LOW);
  Serial.println(P1Correct);
  Serial.println(P2Correct);

 

 if (P1Correct==true && P2Correct==true) {
   RoundNumber=RoundNumber+1;
   Serial.println("both correct");
   Serial.println(RoundNumber);
 }
 else {
   if (P1Correct==true) {
     RoundOver=true;
     RoundNumber=1;
     ActualPattern="";
      digitalWrite(P1GreenPin, HIGH);
      delay (500);
      digitalWrite(P1GreenPin, LOW);
      digitalWrite(P1RedPin, HIGH);
      delay (500);
      digitalWrite(P1RedPin, LOW);
      digitalWrite(P1GreenPin, HIGH);
      delay (500);
      digitalWrite(P1GreenPin, LOW);
      digitalWrite(P1RedPin, HIGH);
      delay (500);
      digitalWrite(P1RedPin, LOW);
      digitalWrite(P1GreenPin, HIGH);
      delay (500);
      digitalWrite(P1GreenPin, LOW);
      digitalWrite(P1RedPin, HIGH);
      delay (500);
      digitalWrite(P1RedPin, LOW);
      digitalWrite(P1GreenPin, HIGH);
      delay (500);
      digitalWrite(P1GreenPin, LOW);
      digitalWrite(P1RedPin, HIGH);
      delay (500);
      digitalWrite(P1RedPin, LOW);
      digitalWrite(P1GreenPin, HIGH);
      delay (500);
      digitalWrite(P1GreenPin, LOW);
      digitalWrite(P1RedPin, HIGH);
      delay (500);
      digitalWrite(P1RedPin, LOW);
     
   }
   else{
     if (P2Correct==true) {
      RoundOver=true;
      RoundNumber=1;
      ActualPattern="";
      digitalWrite(P2GreenPin, HIGH);
      delay (500);
      digitalWrite(P2GreenPin, LOW);
      digitalWrite(P2RedPin, HIGH);
      delay (500);
      digitalWrite(P2RedPin, LOW);
      digitalWrite(P2GreenPin, HIGH);
      delay (500);
      digitalWrite(P2GreenPin, LOW);
      digitalWrite(P2RedPin, HIGH);
      delay (500);
      digitalWrite(P2RedPin, LOW);
      digitalWrite(P2GreenPin, HIGH);
      delay (500);
      digitalWrite(P2GreenPin, LOW);
      digitalWrite(P2RedPin, HIGH);
      delay (500);
      digitalWrite(P2RedPin, LOW);
      digitalWrite(P2GreenPin, HIGH);
      delay (500);
      digitalWrite(P2GreenPin, LOW);
      digitalWrite(P2RedPin, HIGH);
      delay (500);
      digitalWrite(P2RedPin, LOW);
      digitalWrite(P2GreenPin, HIGH);
      delay (500);
      digitalWrite(P2GreenPin, LOW);
      digitalWrite(P2RedPin, HIGH);
      delay (500);
      digitalWrite(P2RedPin, LOW);
     }
     else {
      digitalWrite(P1RedPin, LOW);
      digitalWrite(P2RedPin, LOW);
      delay (500);
      digitalWrite(P1RedPin, HIGH);
      digitalWrite(P2RedPin, HIGH);
      delay (500);
      digitalWrite(P1RedPin, LOW);
      digitalWrite(P2RedPin, LOW);
      delay (500);
      digitalWrite(P1RedPin, HIGH);
      digitalWrite(P2RedPin, HIGH);
      delay (500);
      digitalWrite(P1RedPin, LOW);
      digitalWrite(P2RedPin, LOW);
      delay (500);
      digitalWrite(P1RedPin, HIGH);
      digitalWrite(P2RedPin, HIGH);
      delay (500);
      digitalWrite(P1RedPin, LOW);
      digitalWrite(P2RedPin, LOW);
     }
   }
  }

   Serial.println("end round");
  }   // closes do
 while (RoundOver=false);
 
}


Tuesday, October 28, 2014

Unplugged

***Note: I wrote this a few weeks ago, and never got around to posting it because I did my net neutrality post instead, and then got lost in moving land. So, when you read things like "this past week" that's really more like "almost a month ago" but I'm not going to change it. Just thought you should know.***

This past week I read yet another article about unplugging from online/screens. There was nothing all that earth shattering in it, but it was well written and reiterated some nice points. I personally have been trying to distance myself from Facebook more and more. I want to keep using Facebook as a networking and PR tool without losing hours of my day to it. It's a balance struggle that I'm not quite winning yet.

One section of it really hit home for me. His discussion on the psychology and rewards of the internet, and how that leads to compulsive use makes me feel a little better about the hours of time I sometimes loose to Facebook. Here's a excerpt discussing what it was like to ditch all screens:

Those early days of screenlessness were bewildering. My mind, wound up like a top for years, continued spinning. I experienced sporadic surges of angst and adrenaline, sure I was supposed to be doing… something. I’d pull my phone out every few minutes, even though no one was e-mailing me and I’d uninstalled all social-media apps. The habits and mental agitations of digital work life persisted like phantom limbs.
My symptoms were testament to the power of what psychologists call variable intermittent
reinforcement. Famed behaviorist B. F. Skinner discovered long ago that if you really want
to ingrain a habit, you encourage it with rewards that arrive at variable times, in variable
sizes. The lab rat knows that it will periodically be given food for pressing the lever, but not
exactly when or how much. The result: a compulsive rat.
It’s the same with humans. Variable intermittent reinforcement explains why slot machines
are so enthralling, why video games contain hidden caches of coins or weapons, and why
we’re all helpless before 
our e-mail accounts. One time you check your inbox and there’s 
a single new message, from LinkedIn, which reminds you that you can’t figure out how to 
delete your LinkedIn account. Sad face. The next time you check, you have five new 
messages, including one from an old friend and another from a potential employer. 
Happy face! So you check, check, check.
What’s true of e-mail is true of more and more software—the hot trend is to “gamify”
everything, which just means using intermittent reinforcement to hook users. It’s no
accident that you can earn points or badges in virtually every app these days.
The kinds of rewards offered in online communities are particularly compelling, based on
what Dan Siegel, a UCLA professor of psychiatry and executive director of the Mindsight 
Institute, calls contingent communication. It happens, he told me, when “a signal sent gets
a signal back.” That simple act, evoking a response from another mind, is a key
feature of early childhood development and remains “deeply rewarding,” Siegel said,
satisfying primordial instincts shaped by our evolution as a social species.
A 2012 study by two Boston University psychologists found that Facebook use is driven by
two “primary needs”—the “need for self-presentation” and the “need to belong.” Broadcast
and be acknowledged: that’s a ping. Each one affirms our existence as efficacious agents in
the world and prompts a squirt of reinforcing hormones from the brain’s reward center.
“That,” Siegel said, “is why people will respond to a text while driving a two-ton vehicle.”
NOTE: The TDE does *NOT* text while driving. OK, occasionally while at a red light and I feel guilty whenever I do it. Never while actually driving though. Don't do it!

That all made quite a bit of sense to me and I recognize this as one of my struggles with unplugging. Today I want to share a little story related to this. It is so absurd and really drives home the point of this article. A well timed reminder to myself that I need to work to stay unplugged sometimes.

I believe it was the same day I read the article. It may have been the following day. I sent an email to a friend. This friend had recently visited and during the visit I was reminded that a particular aspect of both of our senses of humor is very similar. I was also reminded how nice it is to have someone like that around to laugh hysterically at your funnies. So in this email was a rant that *I* thought was pretty funny and I knew would be right up his alley. I found myself sorta-kinda waiting for his reply and realized that I was waiting for his justification of myself and that I wrote a humorous email. To "broadcast and be acknowledged" if you will.

And if that wasn't sad enough, the story continues. That night I had a little trouble falling asleep. I know my sleep patterns well enough to know that it only takes me 10-15 mins to know sleep isn't happening and to get out of the bed.* So, I headed to the couch to hopefully fall sleep. Here's the crazy part. It's nighttime, past bedtime. I want to be asleep but I'm not. As soon as I entered the living room, I actually thought about turning on my computer to check to see if my friend had answered my email. Luckily I was able to resist this temptation, but it was hard. It was a conscious decision and took some will power to stick by it. It was a perfect example of what was said in the article about wanting to put out and receive online. It was a little eye-opening. Luckily not TOO eye-opening though... I was able to get to sleep pretty quickly after I resisted that temptation.

*Note: Getting out of the bed when you can't sleep is basic sleep hygiene. It works wonders for me. I often leave the bed for the couch or futon and then fall asleep immediately after I move locations. I don't fully understand it, but I don't question something that helps with my intermittent insomnia. 

And so, in the past few days, I have made conscious decisions to close the computer and put it away when I'm staring at nothing online waiting for the next Facebook notification to pop up. I had a day where I needed to do work online for my business. I set a timer for 45 mins of online work and then went outside in the sunshine for a 10-15 min walk. I did this three times. It was nice. I still fall into the trap often (I've now been on my computer for almost 3 hours straight this morning) but I'm a bit more aware and concerned. I'm still trying to find the balance.

How do you find the balance?

Thursday, October 16, 2014

Hellooooo?

Yes, it's been a little while since my last post and I apologize. I have a pretty darn good excuse though. The ITH got a new job! We weren't able to publicly announce this until he told his direct reports and due to scheduling issues, that didn't happen until 1 week before the move. So I couldn't post anything about it, but I was busy busy busy prepping us for the move.

The TDE lives in Cleveland now! woohoo!

I'll also give you a few quick updates on some things:

1) Hygiene
I tried baking soda for a while, but ultimately I gave up and went back to using soap on my armpits. My current career is just too sweaty for totally soap free. I'm also considering doing some research into those "mineral" deodorants. I've always considered them to be nonsense, but I've never done any actual research so I think it's worth the time for at least basic research. I think my students would appreciate it.

2) Cat Ownership
So you know that awesome solution we came up with to use an old kitty litter tub to store empty cat food cans until we recycle them? At first it worked great. We filled it up, took it to the recycling, and then put in a new garbage bag and started filling it up again. Then, when it was mostly full again, I opened it to put a can in and saw them. Little tiny maggots. Everywhere. Well, only inside the container, but LOTS of them. So for now, we are throwing them away again. Ummmm yeah, don't implement that one. Sorry.

3) I am writing this post about how I FAILED to keep up my blog and then how I FAILED and went back to using soap and then how we FAILED and accidentally started a maggot farm. It all reminds me of something I read somewhere.... oh yeah I wrote a post about it!

That's all for now. TDE out!


Thursday, September 11, 2014

Net Neutrality NOW

Hello dear readers.

Yesterday I wrote a this week's post and planned to proof-read and post it this morning. But then I learned that the deadline for Net Neutrality comments is only a few days away. We all have until Sept 15 to make our voices heard on this issue. So, today's post is dedicated to Net Neutrality and what you can do about it.

First of all, what is this whole issue? Rather than try to explain it to you, I'll allow those who have already done it brilliantly to do it for me.

Vi Hart Explains Net Neutrality

Hank vs Hank arguing Net Neutrality

John Oliver on Last Week Tonight

Are you worried yet?

So, what can you do about it? Tell congress how you feel about it.

The "official" place to comment online is here, but after about 10 seconds you'll probably give up. You have to figure out which proceeding to comment on and they don't (as far as I can figure out) give you any more information than the title of that proceeding. Oh, here's a nice helpful hint from the site: "If the proceeding you are looking for is not listed, you can go to ECFS and enter the proceeding number." You have the proceeding number memorized right? Of course, they they have very little incentive to make the comment procedure user friendly. Don't fret though, I did some digging and figured it out for you. You want to comment on proceeding 14-28 "Protecting and Promoting the Open Internet."

If that's still too much for you to deal with or if you need a pre-written form letter to help out, a few savvy folks have made it easier for you. Here are two places you can go submit a comment and they will make sure it ends up in the right place:

Battle for the Internet

The EFF

And, here's the comment I wrote on the FCC page on proceeding 14-28. Feel free to steal some/all of it for your comments:
"Maintaining the open internet is important to me because an an entrepreneur I am concerned about my ability to compete with well established companies who are able to pay for the "fast lane" service. Additionally, ISPs provide a service that is very similar to other common carriers and they should not be able to act as gatekeepers, deciding what content is delivered promptly to their customers. ISPs should be classified as common carriers in order to prevent them from discriminating against users or content creators, and allow the open internet that we all built together to continue to thrive."

We have 4 days left. Go forth and comment. Even better, make actual phone calls too. Then post about it on ALL your social media sites to spread the word.

TDE Out!


Friday, September 5, 2014

Cat Ownership = Solved

Today I'm going to tackle a post that the ITH has been bugging me to do for a while now. I think he's pretty proud of us and wants to help the rest of the world win at cat ownership.

So, today I present to you our solutions to cat ownership.

Problem: Cleaning the kitty litter.
There are a lot of potential solutions to this. The pet stores are full of scoops and fancy "no-mess" litters. But, not matter what tools you have or how fancy your litter is, you still can't get around the fact that you have to scoop out the litter box. You could also spend ridiculous amounts of money on "self-cleaning" boxes. I'm sure some of them work well, but I've heard that they break too easily and often leave behind the smaller clumps.

Our Solution:
The rolling litter box.

We can't even really take credit for this one. The ITH's brother gifted him with one of these a while back. This is what we have. You roll the whole box over onto it's lid and all the clumps end up in a little drawer that pulls out. It works really well, has no moving parts, and only costs about $30-35. And yes, it did eventually break; the tabs that hold the top and bottom together broke, causing it to leak litter all over when we rolled it. But it lasted for multiple years and the cost is low enough that replacing it every so often isn't a huge expense. After using this litter box, I'll never go back to any other way.

There are also multiple problems of cat ownership that are related to odors.

Problem: Litter odor.
Even if you clean out your litter box daily, or even multiple times per day, there is still the problem of what to do with the waste you remove from the box. You could immediately take it out to the trash/dumpster, but that often isn't feasible. Inevitably you end up "storing" dirty litter until a time when it is convenient to take it out with the rest of the trash. We researched all sorts of options for how to store this. Some folks suggested using diaper bins that seal off each diaper (or litter dump) in plastic. These are expensive, large, and use lots of plastic. We looked for trash cans with a seal around the top that would contain the odor, but couldn't find anything that would truly seal it in. Eventually, we found the solution in the kitchen department.

Our solution: Oxo container.

I'm pretty sure we have this one. It costs about $20 and has lasted 3 years so far and it's going strong. It would be nice if it were a little bigger and may not be big enough for anyone with more than one cat. However, it works great of us. It tends to fill up every few days which, conveniently, is also about how often the trash has to be taken to the dumpster. So, when it's full, it gets dumped into the trash can and taken out to the dumpster.

Problem: Cat food can odor in the recycling bin.
When I first met the ITH, I quickly encountered an anomaly. He was fairly strict about recycling (one of the reasons I liked him so much) but he threw cat food cans into the trash can. When I asked about this, he explained that he he tried recycling them, but they messed up and stunk up the recycling bin. So, for a while we continued to trash them and continued to feel a little guilty about it. Recently, we solved this problem by reusing another cat-maintenance waste product. 

The empty kitty litter tub seals well enough that we don't smell anything (well, except when we open it up to add new empty cans.) The sign was for when we had friends cat-sitting while we were gone, but I kinda like it, so we left it there. 

So there you have it. 3 simple and affordable solutions to some of the most frustrating cat ownership problems. If you have a cat ownership win to share, post it in the comments!

Thursday, August 28, 2014

Shaving and Face Wash

This post might be a little disappointing to you all. It's a bit less conclusive than I'd like it to be. But, it leads to more experiments, so thats exciting. :)

Shaving:
I thought I had this one solved for a while there.
At the beginning of the experiment when I was still using my bar soap, I used the bar soap for shaving as well. After I decided to try totally soap-free I started using straight coconut oil to shave.
Shaving with coconut oil is fabulous, but ultimately not the solution.

PROS:
1) Great shave, gets really close without any bumps or razor burn.
2) Moisturizing - legs feel amazing after shaving.
3) Doesn't rinse off so you don't have to worry about staying out of the water while shaving. I thought there would be an issue because it's clear and therefore might be hard to see where you've already shaved, but that wasn't the case. I very quickly learned to see the difference in the shininess and in how water beads on the pre vs post shaved areas using coconut oil.

CONS:
1) Not water soluble so it can leave a residue behind that makes the tub/shower quite slippery. Also, the tiny hairs get trapped in this residue making it dark in color which leads towards a dirty-looking shower rather quickly.
2) Gunks up the razor a bit, but washes off in warm water fairly easily.
3) Suspected (though not confirmed) to mix with hair and plug up the shower drain. We've had problems with our shower drain since we moved in. Our handyman has had to snake it 4 or so times in the past year. Usually we get a few months in between issues. This last time (while using the coconut oil) it clogged up again only a few weeks after the last snake.

So, due to the slippery tub and possible drain clogging I stopped using coconut oil to shave.

A reader suggested using just water to shave so I decided to try it. I was hesitant at first, but in the name of science I risked it.

Results:
For armpits and pubic line this actually seems to work just fine. It's a little more challenging and I'd prefer to have some sort of lubricant present, but just water does work.

For my legs it was less successful. It left them feeling dry and itchy almost immediately after getting out of the shower. I solved this by using coconut oil as a post-shave moisturizer, but it's not as nice as using the coconut oil as a shaving lubricant. I also tend to miss hairs as it's hard to keep track of exactly where I've shaved and haven't shaved.* And in general, I think it just doesn't shave as closely. I miss the soft and totally smooth results I had when using coconut oil.

*Note: My leg hair is a bit lighter than my head hair and therefore pretty hard to see. This is great when I go long stretches of time without shaving in the winter because I don't look hairy. This creates the challenge of needing to somehow keep track of exactly where I have already shaved when shaving. Using soap or shaving cream or even coconut oil solves this problem nicely. Using water alone made this a challenge.

Next steps:
I'm hoping to implement a different oil or combination of oils. My thought is that an oil that is liquid at room temp might be less likely to leave a residue and/or clog the drain. There is actually quite a bit out there about shaving with oils. Much of it is men, but there are some out there about women shaving their legs, like this one.

Here is a link to a good discussion/experiment.
I like the idea of using only food oils so that excess can be used in cooking rather than just going bad before I can use it up. I'm also wondering why everyone thinks they need a mixture of oils for shaving. The guy in this article makes it seem like any one of the oils alone does a pretty good job so why mix them together? In order to better understand, I'm going to do my own experiment.

I plan to shave at least a few times with different oils and then try a few mixtures of oils and see if the mixtures are truly better or not. If straight olive oil works, then why spend the extra money on almond and avocado oil? Results coming soon, though this will take a few weeks.

Face Wash:
This is not my best experiment. I wasn't super consistent in what I did for my face. It's pretty bad science. At first I was using bar soap and that seemed to be OK. After I ditched the soap, I tried using coconut oil on my face and that just left me super duper greasy. I tried using no products for a while, but not really long enough. I tried a mixture of coconut oil and baking soda which wasn't much different than straight coconut oil. I spent a week tap dancing all day long in a small non-air-conditioned studio (yes, it was rather sweaty!) and used nothing but water and an exfoliating pad that was probably too abrasive for my face. Finally, I did go for about a month with nothing but water and washcloth. Ultimately, what I've learned is that I DO need to use something other than water to clean my face. I didn't break out with lots of acne, but the few giant red painful zits demand treatment of some sort.

There are lots of sites out there for making your own face wash. Yogurt, cucumber, milk, avocado, honey etc etc etc are all suggested. I decided that I want to avoid anything with a shelf life. I don't want to have to be mixing up new face soap every few days and I don't want to have to be sure to keep special produce on hand just for my face. So, what I am trying right now is baking soda and water. My concern is that it will be too harsh, but so far so good. I put a small amount of baking soda in my hand. Not even an eighth of a teaspoon, a VERY small amount. Then I get some water in the other hand, rub them together, scrub my face with my hands, and then rinse it off quickly and thoroughly. I do this once a day and use water only if I wash my face more than once in a day. I've only been doing this for a few days now so I don't have any results to share yet.

Do you have suggestions for face wash or shaving oil? Share in the comments!


Wednesday, August 20, 2014

Minimal Hygiene Results Part 1

OK, it's time for some results of my hygiene experiments. Today I'll cover my hair routine and body soap. Here we go!

HAIR:
Baking Soda and Apple Cider Vinegar

I found lots of sties out there suggesting baking soda "shampoo" and apple cider vinegar "conditioner." There were lots of different recipes for dilution ratios. What seems to be working well for me is the following:

Shampoo: 1 tablespoon of baking soda to 1 cup of water.
I keep one of those little 8 oz water bottles in the shower. When I need to wash my hair I put a tablespoon of baking soda in the bottle and then fill it with water in the shower. I started with 2 tablespoons baking soda in 1 cup of water but that seemed too strong.

Conditioner: 3 tablespoons of apple cider vinegar to 2 cups of solution.
I have an old empty apple cider vinegar bottle that is 16 oz. I was going for 2 tablespoons vinegar per cup of water which would have put the total volume of the solution at 2 and 1/4 cups and made it too large for my bottle. So, I did the math and came up with 3.5 tablespoons to make a 2 cup solution (so that it would fit in my bottle.) However, that still seemed a little too strong as on hair-washing day I can smell vinegar until my hair is dry. So, now I put 3 tablespoons of vinegar into the bottle and then I fill it up with water. I use about a quarter of the bottle of solution every time I wash my hair.

Here's the reaction I wrote after the first trial:
"Amazing. 1 month of grease and grime are gone after one application. My hair is soft and silky and no tangles or "hair spray" feel. If anything, I think it worked too well and I'm a little sad about having stripped off so much of the natural oils. I'm going to try a weaker solution (1 Tbsp baking powder per cup of water) the next time I shampoo and may end up reducing the concentration even more depending on those results. I'm also going to use this as infrequently as possible. Hopefully only once a week."

So far, I'm staying with 1 tablespoon baking soda per cup, but I may play with reducing the strength even more. Right now I'm washing my hair about once a week. It doesn't even occur to me to wash it until day 4 or so because it feels so nice an clean for the first 3 days. Right now I'm at 1 week and it really doesn't feel or look dirty. Here's some proof. I last washed my hair 1 week go:



If I continue with this routine, that means my annual use of product will be:
1) 52 tablespoons of baking soda which is about 3.25 cups. I'm pretty sure this amount of baking soda costs somewhere in the $1-$2 range.
2) 39 tablespoons of vinegar, or about 2.5 cups. This costs somewhere in the $3-$4 range.
So, my annual cost for hair products is under $10. WIN!

Issues:
1) Frizz. It's definitely worse than when I used a leave-in conditioner. I have pondered adding something to tame frizz, but I assume that will make me have to wash it more often. For now, I think I'm just OK with frizz. And, either it's getting better or I'm getting used to it because it doesn't seem as bad as a month ago. It does seem to be worst on the day I wash my hair though.
2) Cow lick. It is back with a vengeance. The last time I had this much trouble with it is barely in my memory. By the time I was old enough to worry about my hair it was basically tamed. The interesting thing is that it seems to be worst around day 4 and then it gets better after that. The first few days are fine and then all the sudden it's like "oh HAI!" Below is a pic of it.



This is on day 7 and, as I mentioned, I swear it was a little worse a few days ago. I can (and do) flip it to the other side of my head, but it doesn't always stay there or want to go that way either. It wants to go outward from my head. My solution so far has been to throw my hair into a ponytail when going out in public. It also helps to try to keep my hair as curly as possible because then the cow lick is less noticeable among all the curls. I may also end up just washing my hair a little more often and use the cow lick as a gauge for when it's time to wash my hair.

Going forward:
For now, I'm sticking with my new hair products. I like the simplicity of the ingredients and not having to wash my hair every day or every other day. I can deal with the frizz and I'll work to find a solution for that silly cow lick. Even if I end up washing twice a week, we're still talking an overall annual cost under $20. Still winning!


BODY SOAP:
Week 1: I didn't have the outer packaging of my body soap so I couldn't read ingredients. At some point I googled it and was surprised at how many seemingly unnecessary and harsh things were in it, as it's a "sensitive skin" bar. The ingredient list is shown here. Yikes. However, I continued to use it because I didn't have an alternative and because I know that those things aren't really as scary as they sound.
Day 22: I purchased this. Based on ingredients and cost it seemed like the best option that I could easily find for a bar soap alternative. I was going to use it the next day but decided to wait until vacation to open it so that it would be fully sealed up at least on the way there.
Day 25: Tried new soap bar. Really fragrant. Doesn't smell like almond or ginger to me at all. Smells like flowers. Too much like flowers. This is not the solution, but it's better than the other bar.
Day 34: Re-read portions of the article that inspired all this and saw this: "Antibacterial soaps are most likely the worst culprits, but even soaps made with only vegetable oils or animal fats strip the skin of AOB."  So, even my "better" bar is probably killing my "good" bacteria colony. Drat.
Day 35: Did some more research and decided to try going absolutely soap-free for my body.
Week 11: It's now been over a month since I last used soap on my body. I have a scrubby guy that I use with just water. I feel clean. And believe me, there have been some days where I enter the shower really dirty. I've been digging in gardens and I'm a dancer. I get dirty, sweaty, and smelly on most days. Water and scrubbing seems to do the trick though. I don't smell when I get out of the shower.

Issues:
1) Because of the extremely mild summer we've had this year, I haven't had the opportunity to go swimming or do any other sun-heavy activity that would require slathering my whole body with gobs of sunscreen. So, I don't know for sure if water and scrubbing removes greasy/oily things like lots of sunscreen. So far it hasn't been an issue, but might be one in the future.
2) I definitely DO smell worse. Not day to day, but when I sweat. I also seem to sweat more easily or maybe just smell more from small amounts of sweat. Doing things around the house or even just sitting in a hot car while for a bit can cause me to notice my own BO. The odor seems to be only/mainly from my armpits. I refuse to start using deodorant again, but I need to find a solution for this.
3) Shaving. I still want to do that. If I don't use soap to shave, I need something else.

Conclusion: I see no reason/need for body soap in general. Water and some scrubbing gets me feeling just as clean as when I did use soap. I still use hand soap. I might go back to using soap on my pits to see if that helps the odor issue. I've solved the problem of what type of soap to use (just don't use any soap!) but it created another problem. What should I use to shave? We'll cover that next week.

One final note:
Overall, cutting out shampoo, conditioner, and soap means that I'm not adding any scents to my body and nothing is there to cover up my natural odors. Basically, I admit that I definitely smell more "human" than I used to. I don't see this as a bad thing though. Well.... except for the pits after I've been dancing. Yikes, THAT is a problem. Eventually I'll find the balance and solutions. I need to do more research and experimenting though.

TDE out!