Posted by banane on February 26th, 2012 — in technology
So my last post I talked about a theory I have regarding our obsession with Facebook, namely, we suffer from “friend anxiety.” Historically we used to have vary rich social relationships, now we’re in the nuclear family age with more isolation. Technology has allowed us to reach out quickly and cheaply, creating an artificial fabric of social relationships.
Along with this artificial fabric comes very nuanced control over how we relate to others. We want to hide/block/message/chat/email specifically with specific people. Our governance of this thing is great and awful at the same time. Great because we do get control how we interact with almost every single person we come in contact with. Bad, because our control isn’t “real.”
I feel like online activity is partially beneficial, but not 100% of an entire, full social encounter. So it’s not bad per se, but if we rely on it for social interactions, we’re not getting full benefit. It’s like a diet. Instead of whole grains and vegetables, we’re getting fast food. And, the less amount of social benefit is less efficient. 10 hours of online activity to an hour of real hanging out with a real person. That’s just an example, I have no idea really what it would be. But there is limited time, and with less efficient social encounters (online ones), it takes more time, etc.
Also- we’re so bad at presenting ourselves. How many people do you know that relate better online than in person? Why do we spend so much time on a medium where we don’t represent ourselves well- causing miscommunications, inaccuracies, etc..
What’s the big deal – do we really let Facebook take a primary role in our social lives? I don’t know, in a way it weasels in, not in a pre-planned way, but just as email is distracting and compulsory, Facebook quickly becomes that way. After spending an hour on Facebook do we really want to walk around chit-chatting with friends and neighbors? Again, the diet metaphor. We have a certain period of time or energy in socializing, and the rest is parenting, learning, commuting, working, etc. So it does take up an area of our lives, without really noticing it, where we’re spending more time online conversing and “checking in,” viewing updates, looking at photos, that we would otherwise spend interacting more “real” with others.
Recent studies show that Facebook makes people sad. People generally (there are studies here too, some done by my work) that say people mostly post positive things on Facebook. So viewers looking at all that positivity, question why they are so blue and/or not perfect, and the self-pity spiral begins. Does this happen in person? I’d say to a degree… you can take a Hipstamatic nostalgia photo of your adorable child eating an ice crea cone, but in person you’d see a tantrum, a spoiled brat, an exhausted parent, etc.
I’m not totally downers on Facebook, in fact, I think it’s like anything, in moderation it’s fine. But what intrigues me is in its popularity. Is it not so much for the technical feats (read sarcasm here) of Facebook, or the growth of technology in general, but because of a social fear that we all have?
An argument against: I was late coming to Facebook – my ID is in the millions, a sign of how late I joined- before that I was very into FriendFeed, and the same generally can be said of that. I wasted hours reading others posts. Each network has its speciality, FriendFeed was “interest-based” vs. relationship-based. Meaning, I had no previous relationship with any of the people, but we all liked photos of cats. You could make an argument that: because I made friends form FriendFeed, it justified itself, socially. Facebook has enriched high school and far-flung relatives’ relationships, but hasn’t created any new ones.
Posted by banane on February 24th, 2012 — in technology
I really almost buckled last night. Was definitely super tempted to log on and check out what everyone is doing.
I’ve had to log in once or twice with work, because, well I write Facebook apps. I have a few very limited test accounts that I use for work, so those have allowed me to work.
Anyway, a couple of things I noticed in my own behavior:
- I’ve returned to old hobbies/activities. Cryptoquiz in the Sunday paper! Monster Sudoku!
- Getting little errands and tasks done- sending packages, composting, sweeping, etc.
- Sharing in a more thoughtful way, vs. transient and short-lived. Corresponding longer, and more detail, to my sister, brother, friend, ex-boyfriend.
Why Are We Obsessed With Facebook (Part 1)
So I have this huge theory that I’m working on- perhaps it’s more a hypothesis – about social relationships and technology.
Given historical perspective, social networks are so compelling to us because we no longer live in a rich social fabric.
Basically, we don’t live in three generation households anymore. Our village – the cul-de-sac or suburb- is pristine to the point of being lifeless and dead, a stark contrast to the medieval village, or even where my Swedish relatives live, a tight knit enclave where windows lookout on windows and neighbors interact daily.
The nuclear family, suburbs, and driving, have separated us. Now, we search, nay we long, for human connection. Presenting: Facebook.
It’s not that simple, in a way the hardest thing is getting along with your family and neighbors. Long relationships with people you didn’t choose. Technology enables to select friends and manage the relationship precisely with “privacy options.”
Anyway, that’s part of the theory. I’ll continue tomorrow.
Posted by banane on February 23rd, 2012 — in feminism
So, Day 2 of No-Social-Media. I feel a little isolated. Yesterday at work, I did miss the distraction of my “coffee break”- cruising my Facebook feed. A coworker offered to share some social media news, but couldn’t think of anything that interesting enough to re-share. I did accidentally log into Facebook, following a link from a coworker. It’s hard to go off social media when your job is making Facebook apps, which I still do as a test user with only about 10 friends. I did manage to get more little tasks and chores done around the house than normally would have time for- time freed up from Words With Friends, perhaps. I think – and this is really preliminary – that I’m used to battling with distraction all the time, so now that I’m freed from that, I’m noticing just how distracted I usually am. I think this will die down in a day or so, like when you’re on vacation and learn how to relax.
I do remember 2006, and I think at that time I was really into Bloglines, a blog reader. I started actively looking for some interesting sites to read- Huffington Post, Slate, Jezebel. I found an interesting internet drama this old school way, the backlash against Zooey Deschanel. I’m not not-a-fan, but I’m also not a fan. I feel like this article just sings stuff I’ve been thinking lately:
There’s so much ukulele playing now, it’s deafening. So much cotton candy, so many bunny rabbits and whoopie pies and craft fairs and kitten emphera, and grown women wearing converse sneakers with mini skirts. So many fucking birds.
Awesome. Sure, I, for one, occasionally sport the little glass ball rubber bands pigtail holders. I also will never do the big eye thing. I call it the MySpace photo pose, but I have to say Zooey has it in spades. I will also never bring cupcakes to an… oops did that. It was, for a long time my top ranking flickr photo, too. We turned it into a “how to shoot food” impromptu lesson at KodakGallery back in the day. Still, twee has its place, and it’s gone over the top lately. this is a basic Feminism 101 lesson of – men fear women’s sexuality. Ta-da. It’s there. Being the headgear wearing Katy-Perry 11 year old is a lot less intimidating than mature knows-what-she-wants Kathleen Turner in Body Heat. Excellent quote from the blog:
Because the larger issue is that it is a lot easier for men —or even guys or bros—to demean us, if we’re girls. It’s much harder to bring down a woman, or to call her a moron, when she’s not in pigtails and Ring Pops. Not that his idea of you should influence your style, or your sense of self-worth. But I feel like in a way, it already sort of has?
Posted by banane on February 22nd, 2012 — in technology
I came into work with the resounding request from my coworkers: “How was no social media today?” Yep- I’ve given up Twitter, Facebook, FourSquare, basically anything social and networky, for Lent (from today, 2/22 to 4/8 for those non-Catholics). The idea is religious and a social experiment. I have a great post on it in G+ if you want to click over there to http://plus.google.com/banane (can’t verify because I’m ignoring G+).
The idea is to give up something that you enjoy, in a way reflecting martyrdom as well as just re-appreciating, re-calibrating what we have. It’s not, as one friend said, a New Year’s Eve Resolution, though a lot of people think that. Traditionally you give up meat, as a kid we gave up sugar. Neither are bad for you, it’s just practicing deprivation, like fasting for Ramadan. As a social experiment, I’m seeing if it affects my relationships with others. Whether virtual fills a need that in-real-life (IRL) does. I have a lot of theories about this. Which, I can explore here on my blog, painstakingly, in my 40 days off social media.
The first thing that happened: after returning from a lecture last night, I played Words WIth Friends, then did the dishes. Checked phone messages (had left my phone home during the day). Because of this, the next morning walked over to a neighbor and chatted with her about some local trees that needed help. We made a date. I also attended the lecture yesterday because, in part, I knew I wouldn’t see that friend online for a month or so. So you can’t say that I really did these things because I knew I was going off SM, but it did impact my reasoning for not flaking.
Another huge reason I’m going off SM as a time waster: need to finish my novel Woodward’s Gardens. So, we’ll see if that gets done.
Posted by banane on January 31st, 2012 — in technology
I really want to find this picture of my great-grandfather standing in front of his car, that has a license plate with a big circle cut out of the center. He’s showing off his invention. A way of keeping your car from being stolen. You take the center of the license out with you when you leave the car. Ta-da.
Inventing things is so much fun! OK blog post is done.
Alright, more background: She’s Geeky is an “unconference” that is, a loosely self-organized conference based on whatever the attendees want to convene over. I’ve gone for 3 years running, just the Saturday, though it’s held from Friday to Sunday. This year was markedly different for me.
The first year, I remember drifting around to various sessions with my friend Sarah Mei, not really knowing what it was about or what to do. I remember creating a session with her simply because we both wanted to know more about it- the Semantic Web. A half dozen or so ladies joined us, and we had a really interesting, in depth conversation, researching and discussing it. It’s still one of the best conference talks *I have ever been to* for quality.
My second year, I met my programming partner Stacie Hibino, in a talk on Pair Programming. We ended up collaborating on various projects outside and in hackfests, which has been super, super fun and fulfilling. I also convened a “give back” session- in that I wanted more women to contribute to open source, and I had just gotten over that hurdle myself that year. It was really well attended, and I left with that warm feeling that I think some folks would actually contribute after hearing my war stories. As someone who has spoken at many conferences throughout my career, that feeling was new to me. It’s also interesting in that I’m not one who really needs to be helped with firsts like that, I’m pretty confident, rash, extroverted, etc.. But the fact that so many showed, and the questions I fielded, made me think that it was important to many people. That led to several discussions with book publishers on more ‘first’ books regarding programming and open source, which was also fun.
This year I was really tired from a long ski day the day before, and had a hard time getting down there- biffed the Caltrain schedule, etc. Looking around the starting circle- we all introduce ourselves then present session topics– it may have been fatigue, but I wasn’t into it. I thought about not coming back next year. I don’t like mushy feel-good sessions. As it got around to me & Stacie, I convinced her to give a talk I wanted to go to, “cool tech stuff” (she’s in an awesome innovation lab at Samsung), and I pitched two talks- My First Android App and a practice talk for a conference, “Why I Went to the Cloud.” Neither were well attended, though the Android app got a few devoted folks. I wasn’t that into it and rushed through the content, though the Android one was fun, for me, as I am pretty interested in it right at this moment.
Stacie’s talk was awesome, and is more about this post, as it’s about invention. We got about 5 women, we sat in a close circle, and talked in a somewhat structured way, about the future. I love the future! I love invention! It’s so creative, and it makes your brain hurt. I wrote *copious* notes that I can share if you’re interested. We spanned from personal usage, to gadgets, to recycling, to material production, to repairing and manufacturing models, to user interface, to the real strategies of innovation, etc. It was a great group and really couldn’t have been better if planned.
So now I’m warming up to it and realizing that it’s — like most things in life — what you make of it. Since I’m a “no mushy-feely” talks kinda person, and all of the talks were about lifestyle stuff, one stood out all by itself: Arduino. An open source embedded system library. That means, you can code hardware to do things. Fancy bike jackets with turn lights. A swimming, floating robotic shark (no lie). Akkana, the teacher, and several cohorts, walked through a few demos and discussed offhand applications, experiences and uses. It was really eye opening. Of course the fun stuff happens outside of class. At break time, with a friend from an entrepreneur program, she showed me the LilyPad, a sewable arduino chip, and at dinner we discussed more applications for Arduino chips. Then at lunch yesterday- even more discussions, my inbox, my journal, all full of ideas for… yep, programs that make things do things. Dur! Of course! Obvious that I would like that! Why have I never gotten into this??
Not over, though. Stacie and I gaze at the schedule on the wall, and the next session isn’t about anything that interests us, so, we decide to put up a sign that announces what we will be talking about. “How to win at Hackfests.” We’ve had a good run of it and both really enjoy them- so we thought we’d brainstorm some ideas (I’m of course thinking of how to integrate an Arduino chip). Stacie plops it on the wall and we wander off to an open room. It ended up being one of those great “give back” talks. I honestly think more women will enter hackfests because of that discussion. We went over how we went, the ones we went to, how they’re run, what it’s like to do it, how to think of an idea, how to organize one, etc. all of the “firsts” involved. Ladies seemed really interested, we got a lot of good questions- though once in a while it splintered off into the technology of what we did- but still, it was really neat to realize that it’s hard for some folks to do this, and that it’s so easy to help them with just war stories of what we did.
Or, just read it online at GitHub. Please remove my app id and secret if you implement.
Important Step
Setup your Facebook app for local development on your computer. To do this, set the site_url to “http://localhost:3000/” (or whatever port you are running your Rails server).
1. Create your own Facebook app.
2. Copy the application id, secret, and url into the /config/initilizers/constants.rb file. Don’t use mine!
3. Run the server: “rails s”
4. Access in a browser http://localhost:3000
5. Click the “authenticate this app” button, and you will go through the authentication flow for gaining credentials to Facebook data, as a user.
6. The next view displays your recent statuses.
What’s going on?
Well, quite a lot, it turns out.
You’re setting up authentication between the Facebook server, your local application, and the user. It’s well explained in the Facebook Developer Authentication Guide, though written for PHP and JavaScript developers, mainly. What we’re doing is “Facebook Application” authentication, even though we’re not hosting it inside an iFrame on Facebook itself (which is totally possible, I just didn’t do it for simplicity’s sake).
Passing to it our Facebook application constants. We will use this session variable throughout the app.
Next, we derive a “authentication url”, and pass to it a string that represents the access we’d like to have. In this example, it’s “read_stream”- accessing the user’s statuses (chart of Facebook permissions).
Koala takes this information and creates an “auth_url”- a link to the Facebook auth services. We use this variable in our index.html.erb view, to direct the user to authenticate. Facebook checks the user to see if they’re logged in and already authorized for the app. If not, it leads them through a series of screens to explain and request permission. You noticed when we setup the Koala session variable “oauth”, that we included a redirect uri. This is where we want the user to land after authentication. In rails, it’s a controller/method combination. We’re sending them, in this example, to “home/callback.”
In the callback method, the authentication is still not complete. We receive a “code” in the GET string, which we send to the “oauth” session object.
if params[:code] # acknowledge code and get access token from FB
session[:access_token] = session[:oauth].get_access_token(params[:code]) end
Koala sends this to Facebook (largely in the background) requesting the final token, the “access token.” Then, we send this access token to Koala object, which then enables us to use the Koala methods to retrieve data from Facebook.
We query the Facebook data with the “get_object” method, and pass to it two arguments, first the object (me) and the connection, “statuses.” It is well explained in Facebook’s description of the User graph object. Farther down you can read about the other available connections, and, you can query the data through the Explorer Tool – very handy.
The result is a hash, “GraphCollection.” I minimized the data result by setting the specific fields in “statuses” to return. That is the second argument in “get_object” method, “fields”=>”message”. This simplifies the code and speeds up the query.
Depending on how you want to build your app- using session objects or passing the “code” GET parameter around- depends on how you are hosting your app and various browser issues. Some opt for JavaScript session management, cookie, or re-authenticating with the Code element in the query string each time. This sample app is simply two views so it’s relatively simple.
Koala’s a great lightweight framework for Facebook. In this example, I’m using 1.3.0. This is how I created the sample:
1. Created a simple rails app, “rails new koalatest”
2. Added “”koala”,”1.3.0″ to the Gemfile, ran update bundle.
3. Created “constants.rb” file in /config/initializers, and updated with my new app id and secret.
4. Copied in the two methods- index and callback- from another app I have.
5. Added the two routes, and the root route.
6. Spent quite a bit of time futzing with CSS and the View (graphcollection isn’t very intuitive)
Enjoy, and if you have any questions please feel free to comment!
At first, doing a “Hello World” was quite easy, the hardest part was learning Eclipse (for Mac):
- Open Eclipse and don’t worry about opening a project, on the left hand side will be all of your “workspace” projects.
- Running (the play button) does an automatic build
- Mouseover red squiggly underlines to find build errors
I lost one of my panes, and that took forever to learn how to open again: I still can’t confidently tell you how (sorry).
Some basics to coding in Java/Android for Eclipse:
- To log, you have a few options: import “import.android.util.Log” and write the following:
Log.e(“onestring”,”anotherstring);
You can do Log.e (error- it’s red in Log pane), “d”, or “a” (assertion).
To add resources- media, data files, etc.- in iPhone you drag resources to your project in Xcode. For Eclipse, copy to the “/res/raw” directory, with no mention anywhere else. I assume this gets indexed on compile.
Layout is still a total drag. The general idea is you can programmatically create your layout or use an XML file, and update values from code. I have to create 25 objects, so it’s programmatic. Good news- compared to iPhone, there are a lot more settings and variances. Bad news- there are different… ways of building the objects so it’s ending up being far different than my iPhone version. Still mastering things like “centering a button,” and “saving state,” “animating a fade,” etc. May give up on some of those bells and whistles for the first version.
Disappointed with file reading in Android- it’s quite easy in iphone, you can map a file directly to an NSDictionary object. I’ll include my code here for parsing a simple key,value data file.
final Hashtable<String, String> wordsHT = LoadText(R.raw.dict1a);
publicHashtable LoadText(int resourceId){ // The InputStream opens the resourceId and sends it to the buffer InputStream is =this.getResources().openRawResource(resourceId); BufferedReader br =newBufferedReader(newInputStreamReader(is)); String readLine =null;
Hashtable<String, String> tmpHT =new Hashtable<String, String>();
try{ // While the BufferedReader readLine is not null while((readLine = br.readLine())!=null){ String[] wordA = readLine.split(":");
tmpHT.put(wordA[0], wordA[1]); }
// Close the InputStream and BufferedReader
is.close();
br.close();
I do really like Android, unsuspectingly so. It was my New Year’s resolution to finally write an app, and I got this assignment at work to create… the quick business card app. Available in the marketplace. 10 installs in 1 day! Already an upgrade!
OK so I decided to port one of our iPhone apps- French Bingo- over to ‘droid. I immediately ran into a problem. How to play a sound. It wouldn’t play. I copied code from examples, it wouldn’t play. As in most the debugging helped me learn more about the environment, but to cut to the chase, here was the solution:
Enable the emulator to play sound. (d’oh!)
To do this:
1) Launch Eclipse (for Mac), select Run->Run Configs.
2) Select “Android Application” (left pane)
3) Select the “Target” tab in right pane.
4) Scroll down to the hidden field, “Additional Emulator Command Line Options”
5) add “-useaudio”
(Geesh). Yes, my biggest gripe so far with development is that it’s Eclipse environment on a Mac. Most documentation is for Eclipse on a PC, and things like enabling audio are too simple to mention in most blog posts or examples. So here! The internet has a blog post about it.
Here is the code for a simple example of playing a sound. My pet peeve is folks not including library/class calls, so here they are in entirity!
Posted by banane on December 29th, 2011 — in games
(Scavenger hunt being: urban food & pub crawl with historical and local notes)
Team Berkeley caught near the end of San Francisco, Upper Polk Hunt 2011
1. Pick a neighborhood.
It’s pedestrian, it’s got lots of businesses close by, and it’s got “character,” that is, some identifying historical or local traditions.
2. Walk the neighborhood.
Don’t worry about route or clues, just ask yourself questions. “Why is this street named this?” Talk to locals. Ask them about “weird or interesting facts” about their neighborhood. This may get you some blank looks. I also follow with, “Why did you move/live here,” “Favorite places to go,” weird history, odd history, etc.
- get closing times and opening hours
- find weird detailed clues inside places (to prove that they’ve been there- a painting, a menu item, an odd decoration, a typo, etc.)
3. Read up on the neighborhood.
Local history books on the place, architectural books, talking to old guys- seriously- at bookstores or at local bars. I walked into The Saloon one day and asked a few regulars about how it used to be a shanghai spot (drafting poor unsuspecting drunks into serving on ships), and brothel. They corrected a few things and led me to ask questions about a brick building nearby that was an old Civil War-era jail, and hanging platform. Take time to go to lunch or walking tours with people who live there. They will be more helpful if they’re out walking- instead of sitting in a chair. This last hunt I did, about 5 clues were from a friend who had a lot of interesting questions about things. She may not have known the answer, but it led me to read up and do research. The best clues won’t be in books.
4. Do research- on the internet
I use a combination of Google maps and real printed books, but internet research is invaluable. While not authoritative, it will correct things and will help you envision the route.
5. Write a long list of clues
Don’t worry about route still, just write down every clue you think you have. Don’t worry much about the writing, just a shorthand idea of what it would be. Pick good appetizers at restaurants, specialty drinks, quirky seasonal foods, etc.
6. Work on the route.
Put hints in buckets of “requires daytime” or when the stores/shops are open. I’ve started doing mildly athletic hikes/walks in the beginning, because people are excited, and that’s the time to make them walk up hills. I also like to put my best drink place in the beginning, because folks are sober and they can really taste how good it is. For mixed kids/family crowds – I put the drink off until the middle. I love to lead people to areas they may otherwise be hesitant or shy to go- down alleys, basically. Behind things, inside shops, asking weird questions. Shake up their comfort zone. I don’t recommend doing an “8″ shaped route, as folks tend to flake, but looping back is a good idea. My most recent one was a “9″ shaped route, and at the cross-over a mini party started. It’s a good idea if it’s a large, somewhat spacious, loud place (outside grill, German restaurant, etc.) The end-up place should be somewhere that people can linger at for a long time. If they’ve completed early but want to meetup with others, for example. I’ve done an outside grill, as well as karaoke, and a Chinese restaurant.
7. Write the “nice” version of the clue: I usually do it in “3″s:
- get them to the corner
- get them inside
- figure out a detail to quiz them on
“Find the 3 arches” “Go up the alley” “turn right (north) at the 8th post” “Who wrote ___ at #29″ for example.
I have started to use compass directions along with relative ones- so “turn right” along with what N/S/E/W direction that would be. It helps in that some people like relative directions, some like compass. It’s resulted in less people being lost- because if you take one bad turn, nothing else will make sense.
I like to use a combination of empirical knowledge, research (internet use is OK on these hunts), estimation skills, pictures, word play, and cultural references. The style is based on the Chinatown Scavenger Hunt that occurs each February in San Francisco- though that one is much larger and much harder. So I’ll reference an album cover, a B Actor, Civil War knowledge, a rhebus, etc. to get a clue across. The more diversity the more fun, in a way, because it uses different knowledge in a team.
If you can use a trope all the way through a hunt, it helps. One photo of a filbert, for example, and you can refer to that in other clues.
8. Do a dress rehearsal.
Set aside 2-3 hours to do the route yourself, or with a friend who isn’t doing the real hunt. If you do have a friend like this, don’t ever offer an answer, and take your hunt with a pen to make notes. Note anything that is confusing or weird. Time the route as you go. If there are logistical issues, yep, you need to re-jigger it, and re-test. My mom helped me with the wedding hunt I did, and it really helped. We actually broke it into 2 stages, one with her, and one with myself. These dress rehearsals are invaluable. Last hunt, I found a crucial problem- my first drink spot was closed, so I moved the beginning loop up a block. It ended up fine, but it was nail-biting for a while. Good time to tlak to business owners about the specific date and time you will have it. Depending on size, they will have different reactions- I usually emphasize that not all hunters will be there at the same time, but trickling in groups of 3-5. Dress rehearsal is best done 1 week before the actual hunt, to get the same wait staff that will be on during the actual hunt. This is probably the most important tidbit in this write-up. ha.
9. Go somewhere to print the clues. I work really hard on using color photos- it’s more fun- and getting it onto one two-sided page. Then, print out enough for how many teams you expect (20? 30?) and make a lot of black and white copies for other team members. Then, there’s an official clue sheet, and cheaper ones for others to read. I get a colorful envelope and put it inside. The envelope helps teams identify other teams en route, as well as the shops, bars, and restaurants identify the scavenger hunters. This is a good thing- the more the businesses are prepared, the more welcoming they will be.
10. The actual hunt.
Make sure your cell phone is charged. Meet people at the first spot (I usually choose a cafe) and wait an hour for stragglers. I pass out clues as teams leave (so there’s no guessing around new people). I also form teams for those who don’t have one, from 3-5 people is ideal. After 45 minutes or so, I move to the next stop and get a drink, then try to move quickly through it to get to the first team. If it’s a “9″ or “8″ shaped route, I don’t do the first loop I just meetup at the midpoint with the head team. Ask folks if there are issues, and quiz them on the answers. I’ve done outside/daytime hunts on a bike (as organizer) and that is great, but walking it works too.
Don’t let them open the envelope until all team members are there and they are “starting.” It’s a rolling start (which helps people show up on time). To win- first back with all clues completed. I also check that they’ve been there, by talking to the team. Some may try to write in answers to complete it, but it’s usually quite obvious if they’ve actually been there or not.