Sometimes, you can just eyeball it.
Really, if something truly is an outlier, you ought to be able to spot it. Take this plot, for example.
It should be pretty obvious that the vast majority of our sample for the Fish Lake game were students in grades, 4, 5 and 6. Those in the lower grades are clearly exceptions. I don’t know who put 0 as their grade, because I doubt any of our users had no education.
I use these plots especially if I’m explaining why I think certain records should be deleted from a sample. For many people, it seems as if the visual representation makes it clearer that “some of these things don’t belong here.”
Did you know that you can get a plot from PROC FREQ just by adding an option, like so:
PROC FREQ DATA= datasetname ;
TABLES variable / PLOTS=FREQPLOT ;
This will produce the frequency plot seen above, as well as a table for your frequency distribution.
Well, if you didn’t know, now you know.
I’m really busy here in Brazil. Honest. You think I am sitting here like this:
But really, it’s like this:
Still, I have taken time away to explain to you how not to get your sorry ass fired, so listen up niños . I had the benefit of starting writing software at a large organization, General Dynamics. Having the experience from the beginning being part of a time prepared me in a way I seldom see from people who have been working solo their whole careers.
It’s easy to be the smartest person in the room if you’re the ONLY person in the room. If you’re used to being THE computer whiz and suddenly find yourself part of a development team, let me give you a few pieces of advice:
2. Don’t assume everyone is stupider than you. The CSS expert removed those classes because clearly everyone else had been too stupid to do it. When you come into a new organization, make the reasonable assumption that other people have jobs there because they are not incompetent morons. (This is not always the case, but I believe in giving everyone the benefit of the doubt.) ASK! The people who treat you like you are stupid because you don’t know the answer to a question are insufferable pompous asses and you don’t care about their opinions. Normal people realize that you are new and you don’t know everything. They are happy to help as long as you don’t overdo it. Even on those rare occasions that I have gotten a question from a new person that made me say to myself, “Are you fucking kidding me?” I tried to give the benefit of the doubt that maybe the person was confused or having a bad day. After all, I’ve made stupid mistakes a time or two myself, and I’m pretty sure I’m not a moron.
3. Document! I admit to being a hypocrite because as soon as I have finished something I’m SO tempted to go on to the next analysis/ part of the game, etc. As our wonderful 7 Generation Games CMO Maria says, documentation is one of those things no one ever wants to do but everyone wishes was done. Maybe you know exactly what you were thinking when you wrote that code, but I am pretty certain that your colleagues were not hired for their mind-reading skills.
If you’re reading this, you’ve probably mastered multiplication, division and fractions, but you may be fond of a small human who has not. Check out 7 Generation Games. Play adventure games in a virtual world and learn stuff.
Games that make you smarter ! Buy them for your children, sponsor a school or play yourself (we won’t judge!)
Well, I don’t know about you, but I am anyway, and I’m guessing if you are reading this that you probably are, too.
If you read the bottom half of the internet (a.k.a. the comments section), you’ll find that any mention of privilege sets some people off …
I’m not privileged! My parents didn’t have any money when I was growing up! We bought our clothes at K-Mart when we were lucky and the thrift store when we weren’t. When I was in college, I worked for $2.12 an hour ! I work 60 hours a week! I raised 3 children while going to school and holding down a full-time job.
Yeah, me, too.
I’m still privileged.
Being without privilege when you were young and being privileged as an adult are not mutually exclusive.
I’m typing this on an iPad with a Logitech keyboard, on the 12th? 15th? flight this year and it’s only July.
Before I got on this flight, I was in the United lounge, drinking free Chardonnay and working on my laptop. A lot of other people were working there as well. It is a lot easier to work in the lounge because it’s quieter and there’s lots of outlets and plenty of comfortable chairs.
While Darling Daughter Number 3 arranged for the lounge and this flight to Rio, I paid for all of the other flights this year, the iPad, keyboard, laptop and all of the software on it, with the money I earned from working really hard. I also bought an iPhone and paid for a service with a personal hotspot.
My point is that since I walk around with thousands of dollars in technology in my briefcase (and many of you do, too), it is a lot easier for me to spend six hours en route writing a conference paper, analyzing data for a research study, editing graphics or video or programming the next level of a game. It’s much easier for me to get 4 hours work done in whatever hotel I find myself in the evening.
If I think it would benefit me to take a few days off and attend a conference on Unity 3D, SAS software, small business innovation research or serious games, I do it. I don’t have to go through three layers of management to get permission.
Being privileged and working hard are not mutually exclusive.
It’s like Dave Winer said – Money sweats.
He was talking about interest, that once you make money you get paid money just for having it. It’s also true in technology careers – once you have made some money, you can use that money to buy you advantages that keep you ahead of the competition, like practice with the latest version of whatever software you use, or 20 more productive hours each month, as you sit in airports.
It’s true in athletics as well. The better you get, the better coaches, nutritionists, strength trainers you can afford. You don’t have to take public transportation or work a full-time job at Starbuck’s, so you have more training and better training than the competition, even if they are working just as hard.
In America, a great many of us are privileged. If more of us recognized it, maybe as a society we’d be a little more humble, a little more grateful and a little more generous.
It was recently noted on our company twitter account that I’m out of town so often that I’ve come to resemble the Travelocity gnome in more than stature.
I’ve been traveling on business for nearly my entire career. Despite the proliferation of Google hangouts, Skype, Webex, Go-to-Meeting, FaceTime and God knows how many other technological innovations, there are still a lot of situations that require me to head out of LAX to points north, south, east and west.
This lifestyle has definitely shaped who I am.
I’m always surprised at people who travel frequently and come home to a seven-bedroom house.
The reality shows on the “tiny house” movement fascinate me, in part because of the creative uses they make of space in their designs, but also because I can see myself living in a very small space. After all, much of my time is spent in one or two rooms in a hotel.
For me, living out of a suitcase for weeks out of every month has meant that I have pared down greatly the amount of clothes, books and other personal possessions I “need”. The Invisible Developer points out that we could not live in a tiny house because his stuff alone would fill it up. That’s what happens when you stay put – you accumulate things.
It was a big advantage for me growing up in a house with a lot of siblings and not a lot of space. That may not sound like an advantage, but the result was that I had to be able to study wherever I found a spot that was unoccupied – in the room I shared with my sister and younger brother, in the attic, on the back porch, a corner of the living room table.
To this day, I can work anywhere. I’m typing this on an ipad as the plane is landing. I’ll sit in the airport and review a data analysis for a client that I’ll download on to my laptop using the personal hotspot from my iphone. When I get to the hotel, HOPEFULLY there will be cell phone and Internet access so that I can finish the online course I’m taking on a new game development library. (Thanks, lynda.com !)
I really do travel far and wide, which means there are few things I can depend on having – no, not even internet or cell phone reception. This seems self-evident to some people but inconceivable to those inside the Silicon Beach/ Silicon Valley bubble.
Before I met The Invisible Developer, the longest I had ever lived in one house was 4 years. I’d lived in Japan, Canada, Pakistan, California, Minnesota, Colorado, Illinois, Missouri, Mississippi and no doubt other places I’ve forgotten by now. Since I had moved so often, traveling to a new place wasn’t all that different from being in the relatively new place where I was living.
After 18 years in Santa Monica, I’ve gotten used to a location, and for the first time I find traveling a trifle unsettling because I have actually gotten settled somewhere. That’s been reinforced by the fact that I work out of my home office a lot. Working at home is convenient because it is where all of my stuff is and it’s full of people who know me,
Maybe that explains why I’ve started to give some thought to traveling less. I don’t think that will actually happen, for a while, though. If I were to just stay home and write code, I could make a fairly good living, but then someone else would be flying hither and yon to meet potential partners, customers and investors and the final decisions would rest with that person. With responsibility comes a certain level of discomfort, regardless of what you told yourself it was going to be like “when I’m running things”.
I’m not ready to turn over the reins just yet – which is why I’m finishing this from a plane to Minneapolis where I was re-routed after my flight from Denver to Minot was cancelled. So, now, I’ll finally get a Minneapolis to Minot flight that lands around midnight and then drive 2 hours to Spirit Lake.
Wake me up when the glamorous part of travel starts.
Previously, I discussed PROC FREQ for checking the validity of your data. Now we are on to data analysis, but, as anyone who does analysis for more than about 23 minutes can tell you, cleaning your data and doing analysis is seldom a two-step process. In fact, it’s more like a loop of two steps, over and over.
First, we have the basic.
PROC FREQ DATA = mydata.quizzes ;
TABLES passed /binomial ;
This will give me not only what percentage passed a quiz that they took,
but also the 95% confidence limits.
I didn’t have any real justification for hypothesizing any other population value. What proportion of kids should be able to pass a quiz that is ostensibly at their grade level? Half of them – as in, the “average” kid? All of them, since it’s their grade level? I’m sure there are lots of numbers one could want to test.
If you do have a specific proportion, say, 75%, you’d code it like this:
PROC FREQ DATA =in.quizzes ;
TABLES passed / BINOMIAL (P=.75);
Note that the P= has to be enclosed in parentheses or you’ll get an error.
So, out of the 770 quizzes that were taken by students, only 30.65% of them passed. However, the quizzes aren’t all of equal difficulty, are they? Probably not.
So, my next PROC FREQ is a cross-tabulation of quiz by passed. I don’t need the column percent or percent of total. I just want to know what percent passed or failed each quiz and how many players took that quiz. The way the game is designed, you only need to study and take a quiz if you failed one of the math challenges, so there will be varying numbers of players for each quiz.
PROC FREQ DATA =in.quizzes ;
TABLES quiz*passed /NOCOL NOPERCENT ;
The first variable will be the row variable and the one after the * will be the column variable. Since I’m only interested in the row percent and N, I included the NOCOL and NOPERCENT options to suppress printing of the column and total percentages.
Before I make anything of these statistics, I want to ask myself, what is going on with quiz22 (which actually comes after quiz2) and quiz4? Why did so many students take these two quizzes? I can tell at a glance that it wasn’t a coding error that made it impossible to pass the quiz (my first thought), since over a quarter of the students passed each one.
This leaves me three possibilities:
- The problem before the quiz was difficult for students, so many of them ended up taking the quiz (another PROC FREQ)
- One of the problems in the quiz was coded incorrectly, so some students failed the quiz when they shouldn’t have,
- There was a problem with the server repeatedly sending the data that was not picked up in the previous analyses (another PROC FREQ).
Remember what I said at the beginning about data analysis being a loop? So, back to the top!
People often ask me how I get so much done. Over and over, I have found one of the simplest ways to increase productivity is by not reading my email in the morning. Some days, I don’t get around to reading it at all.
This evening, when I finally opened my email, I had over 1,100 messages. In less than an hour, I have winnowed it down to 480.
As you can imagine, the majority is spam – offers to optimize my site for search, improve my sex life and sell me dishes. For some reason, Pottery Barn, Williams-Sonoma and the like are convinced I’m a good market for housewares. Bizarre, because the only thing domestic about me is that I live in a house and the only thing I make for dinner is reservations.
The spam takes a few minutes to sift through.
Then there is the large category of email that is unnecessary. If you are guilty of any of these, do the community a favor and reform.
- Notifications I don’t need. It’s nice that someone wants to thank me for speaking at an event, that students from Billy Bob Elementary appreciated the donated site license. I appreciate that you thought of me, I do. I don’t, however, appreciate it so much that I’m going to put off starting work for an hour to read all of this. Sorry, not sorry. I also don’t need to be informed that I have changed my password (I know, because I did it) or that The Spoiled One has a game at 3 pm in San Francisco ( do they think I didn’t notice she was gone?)
- Copies of email that I don’t need to be copied on. If someone else will be attending an event on behalf of our company, held a meeting or has been assigned an action item, nice. I don’t need to be informed and I don’t need a copy of the agenda of meetings I won’t attend unless there is an item along the lines of, “In an attempt to curry favor with the venture capital gods, we will be making a human sacrifice of the CEO in the lobby at noon on Wednesday.” – in which case I might want to avoid the office mid-week.
The biggest reason for not reading my email, though, is that I already have an idea of what my priorities are for the day and I start on the highest priority first. There has yet to be a day when I looked at my to-do list and it read:
Priority #1 : Read email.
The real time suck in my email is the emails from people who want me to do things – complete this form, write this letter, review this contract, give me your opinion on this, let me know when you can schedule this meeting. The key point here is that all of these involve someone else’s priorities.
There is such a temptation to take 5 or 10 minutes to respond to each of these requests, or to at least consider it, then decide it is not a priority and I’ll do it later.
Occasionally, I do miss something that I needed to know. However, that inconvenience is minor compared to not starting off my day with an hour or two of reacting to what other people request, rather than acting on priorities for my own company.
It seems as if parents can do no right. Parents who are very involved, who coach their children’s sports teams, who insist that their child not skip practice are criticized for living through their children. However, as every Disney after-school special ever will tell you, God save the child whose parent has an actual job to pay for all those basketball camps, private schools and plane fare to tournaments because that means they won’t be there to see their child score the winning goal/ star in the school play which explains why their child is the class bully/ mean girl. The hero of the movie then understands why mean girl/ bully is that way. It is because the parent has to have a career that might conflict with sitting on the sidelines watching a Little league game.
You’re damned if you do and damned if you don’t.
The people who told me I’m not involved enough have been people who have different priorities and opinions from me. They mean well but I beg to differ that my child will NOT be scarred for life if I don’t see her performance as tree #4 the school play. It is not a bad lesson to learn that someone can love you and simultaneously have a life of their own with their own goals and desires.
So, the people who judge me as not involved enough will get together and talk shit about me at the PTA meeting and Booster Club and all of those other things I don’t attend. It’s not something I drink champagne and celebrate, but it doesn’t worry me all that much, either. I’m doing the best I know how.
One thing I have learned personally over 32 years of raising children – no one who has accused me of being over involved in my children’s lives had their best interests at heart. This group included a minority who didn’t know me or my children and didn’t know what the hell they were talking about. The majority of the time, when a someone has told me that I was too involved with my children and needed to back off, they were trying to take advantage of my children and didn’t want me to get in the way. THAT’S the group you have to guard against.
It reminds me of the time, years ago, when I was at the park with my 5-year-old daughter. There was a boy who looked about 11 playing on the playground. He asked me,
“Don’t you think that’s weird that you watch your daughter every second? Don’t you trust her?”
I told him it was other people I didn’t trust.
“Well, I feel sorry for you and your daughter. You must have a really depressing life.”
The rest of the story: 6 months later, I heard about that boy being arrested for molesting a young child in the same park.
My point – when someone tells you that you are too involved in your child’s life, ask them flat out,
“Why are you telling me this? Are you implying that you know my child better and care more than I do?”
On a darker side, ask yourself,
“What does this person gain by me being less involved?”
And watch that person like a hawk.
I’m in the middle of data preparation on a research project on games to teach fractions. This is the part of a data analysis project that takes up 80% of the time. Fortunately, PROC FREQ from SAS can simplify things.
1. How many unique records ?
There are multiple quizzes in the game, and you only end up taking a quiz if you miss one of the problems, so knowing how many unique players my 1,000 or so records represent isn’t as simple as dividing the number of players by X, where X is a fixed number of quizzes.
PROC FREQ DATA = mydata.quizzes NLEVELS ;
TABLES username ;
Gives me the number of unique usernames. If you were dying to know, in the quizzes file for Fish Lake it was 163.
2. Are there data entry problems?
We had a problem early in the history of the project where, when the internet was down, the local computer would keep trying to send the data to our server, so we would get 112 of the same record once the connection was back up.
Now, it is very likely that a player might have the same quiz recorded more than once. Failing it the first time, he or she would be redirected to study and then have a chance to try again. Still, a player shouldn’t have TOO many of the same quiz. I thought this problem had been fixed, but I wanted to check.
To check if we had the same quiz an excessive number of times, I simply did this :
PROC FREQ DATA= in.quizzes ;
TABLES username*quiztype / OUT=check (WHERE = (COUNT > 10)) ;
This creates an output data set of those usernames that had the same quiz more than 10 times.
There were a few of these problems. The question then became how to identify and delete those without deleting the real quizzes. This took me to step 3.
3. The LAG function
The LAG function provides the value from the prior observation. Assuming that it would take at least 2 minutes for a quiz, I sorted the data by username, quiz type, number correct and the time. I assumed it would take a minimum of 120 seconds for even the fastest student to complete a study activity and complete a test for the second time. Using the code below, I was able to delete all duplicate quizzes that occurred due to dropped internet connections.
proc sort data = check4;
by username quiztype numcorrect date_time ;
data check5 ;
set check4 ;
lagu = lag(username) ;
lagq = lag(quiztype) ;
lagn = lag(numcorrect) ;
lagd = lag(dt) ;
if lagu = username & lagq = quiztype & lagn = numcorrect then ddiff = dt – lagd ;
if ddiff ne . & ddiff < 120 then delete ;
Having finished off my data cleaning in record time, I’m now ready to do more PROC FREQ ‘ ing for data analysis – tomorrow.
(Actually, being 12:22 am, I guess it is technically tomorrow now.)
I’m the world’s biggest hypocrite when it comes to documentation. In every staff meeting, I emphasize documenting whatever code you have written that week, but I always put off doing it myself. My excuse is always that it isn’t final and when I get the complete project done I will put it in the wiki.
I’ve come to the conclusion that no complex software is ever done. You just quit working on it and go to something else.
If you have run into the awful problem of having your animation run on some browsers and not others, or even run sometimes and sometimes not in the same browser, you may have a timing problem. In brief, you are trying to draw the image before it is loaded.
Here is what I did today and how I fixed that problem…
In this part of the game (Forgotten Trail) , the player has answered a question that asks for the average number of miles the uncle walked each day when he attempted this journey. If the player gives the correct answer, say, 22 miles, a screen pops up and the mother asks, “Do you really think you can walk 22 miles a day?” If the player says, “No,” then he or she is sent to workout. Each correct answer runs your character 5 miles. After 20 miles, you can go back to the game.
So …. we need animation and sound that occurs when a correct answer is submitted. I had finished the code to randomly generate division problems, so today I was working on the function after the player is correct.
The HTML elements are pretty simple – a div that contains everything, two layers of canvas, a button and two audio elements.
<canvas id="layer1" style="z-index: 1; position:absolute; left:0px; top:5px;" height="400px" width="900"> This text is displayed if your browser does not support HTML5 Canvas. </canvas> <canvas id="layer2" style="z-index: 1; position:absolute;left:0px;top:5px;" height="400px" width="900"> This text is displayed if your browser does not support HTML5 Canvas. </canvas> <button id="workout" name="workout" >CLICK TO WORK OUT</button> </div> <audio autoplay id="audio1"><source type="audio/ogg"></audio> <audio autoplay id="audio2"><source type="audio/mpeg"></audio> </div>
Because the character is only moving horizontally – he is running on a field – there is no dy and no y variable.
Everyone should pause every now and then and ask themselves this question:
What would you want to be doing if you weren’t doing this?
Whatever “this” is, your answer will be revealing. If you excitedly exclaim,
“I would start a restaurant, using my grandma’s recipes, but it would be more of a modern look – kind of a Tuscany theme. The Venice area is coming up, I’d open it there.”
… then you have spent far too much time thinking about what you could be doing instead of what you are doing now. Maybe you should really take some steps to do something else instead of whatever your “this” happens to be.
If you ask me what I would be doing if I weren’t making games and analyzing data, I’d be hard pressed to give you an answer.
My first answer would be to protest,
“But I WANT to be doing this.”
It’s not that I haven’t thought about it. If I was not working, I could be doing any of these things:
- Going to the Aquarium of the Pacific with my family (I have a membership),
- Going to Disneyland ( I have a membership)
- Going out to eat with my family
- Writing a paper for a conference
- Teaching judo
- Riding a bike on the beach
- Reading a book
All of those are perfectly fine things to do – as evidence, I offer lunch today with The Perfect Jennifer and Darling Daughter Number Three = but notice that none of them is a full-time gig.
If I could not be doing what I’m doing now, I wouldn’t mind going back to teaching college. I wouldn’t mind going back to teaching middle school if they would start classes at some reasonable hour, say 10 am.
I have two memberships to tourist attractions because I tend not to take off work very often. The memberships mean that I have some incentive to get out of the office. It’s not going to cost me anything to go to Disneyland and it’s wasting money if I don’t go because The Invisible Developer paid for me to have a membership.
Maybe if your list of other things to do is too long, or when you come to one, you think longingly,
I really SHOULD go for a walk on the beach! I can’t remember the last time I did that!
…. you should take a break and do some of them.
At the moment, I’ve been doing better than usual at meeting friends for lunch, going to movies, calling my mom and cleaning the house. Asking myself on a regular basis,
“What would you be doing if you weren’t doing this?”
forces me to focus on the things that I am NOT doing, whether it be in my business or personal life, and an evaluation of whether what I’m doing at this moment is worth giving up those other things.
Most of the time the answer is, “Yes.”
If, for you, most of the time the answer is, “No”, well, I think you know what you need to do.
FEEL SMART AFTER READING THIS BLOG?
WANT TO BE EVEN SMARTER?
This IS my day job.