What I Wish I Knew Before Applying Graduate School

At the end of this summer I will have completed my last semester of graduate school.  The Master of Arts in Public History at the University of Western Ontario has been a phenomenal experience.  Last year, I completed my first masters degree in Library and Information Science at Western.  As I reflect upon my three years in grad school, I have realized that there are a few things I wish I knew before  I applied.

1. Make your application interesting

A lot of people are as qualified as you are for a spot in your program.  Because of this, graduate schools are looking to admit people that are interesting to them, and frankly, don’t worry as much about your GPA as you might think.  They are looking for smarts as well as life experiences.  Did you do some community service work in Honduras?  Find a way to mention it in your application.  Did you do a semester abroad in Asia? Highlight that experience.

Don’t underestimate the power of work experience. This can demonstrate maturity and excellent time management skills.  In addition, life experience can be the great equalizer if your grades are on the low end.  Nearly every applicant can complete the degree you’re applying to, set yourself apart by making yourself unique and memorable.

2. Talk to the program director before applying: be the “devil” s/he knows

This is a no-brainer that a lot of applicants don’t do.  If you are able to, make a visit to campus and speak with the program director and ask some questions about the program, even if they are just to clarify the requirements application.  Also, discuss your employment aspirations and ask how their program could prepare you for your vocational goals.  This gives the school an extra chance to get to know you, and put a face to your application.  If they need to break a tie between equal candidates, they’ll take the devil they know over the devil they don’t.

*Also remember, you are spending thousands of dollars in tuition, fees, rent etc. to attend this school, so you want to make sure the program is a good fit for you too.

3. Marks don’t matter…unless you’re planning on a Ph.D.

Newsflash: Employers don’t give a crap about your marks.

If you have a master’s degree on your resume, employers will already know you’re smart.  Again, they’re looking for people that are interesting, that can do the job, and people they can get along with on a daily basis.  Don’t have a hissy fit if you get an ‘A-‘ when you clearly deserve an ‘A’, employers could care less.

4. Treat grad school like a nine-to-five job

To be honest, graduate work isn’t that difficult, but the volume of work required borders on the ridiculous.  Plan everyday to do be doing schoolwork.  You may even have to sacrifice weekends in the name of a huge paper or project.  The days of starting a paper the night before its due are over.  And yes, you have to do your readings or else you’ll be lost in seminars.

5. Be nice to your classmates

Guess who your colleagues in the field will be after you graduate?  Guess who could be on the hiring committee for a job you’re applying for?  Your classmates could be your best friends or your worst enemies, it’s up to you.  If you’re in a professional program, chances are you will be engaged in a lot of group work.  This is your chance to show your future colleagues in the field how good a team player you are, and what kind of quality work you do.  You never know who will be giving you your next job, so make your time in grad school count and make some friends and allies among your classmates.  Likewise, you might be on a hiring committee some day and hire a classmate you know who is great to work with.

Advertisements

Hoop Dreams: Building Pains

Though the concept for my interactive basketball hoop project is quite simple, the most frustrating part was building the actual unit. The finished product has four main components:

1. The computer and MakeyMakey: the brains of the product.

2. The stand: a small box my vacuum cleaner came in.  The backboard hangs from the top of the box, and houses and protects the MakeyMakey and some of the wiring.  I also placed a bunch of heavy books in it to weigh it down and keep it stable.

Inside the stand: housing the MakeyMakey

Inside the stand: housing the MakeyMakey

3. The backboard, hoop, and ball: I purchased these as a set from Amazon and attached a bottomless plastic contained to the rim to funnel the ball so that it goes straight down; and,

4. The landing ramp: which consists of a small box top to which I embedded two arcade buttons, and used a cardboard paper towel tube as a beam so that it would hang from an angle.

By far the landing ramp was the most difficult component to create and went through a few incarnations before I designed the most optimal model.  My first idea was to embed the arcade buttons in a piece of foam core measuring approximately 3″ by 5″.  This was difficult to use from the get-go because I could not figure out an effective way to bind it to the stand at an angle, and sometimes the ball would miss the ramp completely because it was too short.

My next idea was to create a sort of landing pad on the floor.  For this I used an 11″ x 8 1/2″ x 2″ box made of strong cardboard and embedded the buttons on top of the box and simply laid it on the floor.  This was more problematic because the landing pad was further from the base of the funnel giving the ball more time to go off course and miss the button.  I also found that the box itself was too flexible so when the ball did make contact with a button, sometimes the button wouldn’t be pressed because the box could not provide enough resistance to the force of the ball coming down onto it.  I also found that, occasionally, the ball would bounce too much on the box and push the button twice, or push both buttons.  This was frustrating, and at that point, my wife told me to take a break for the rest of that particular night.

I came up with this disaster of an idea prior to the landing pad

I came up with this disaster of an idea prior to the landing pad. The problems here are self-evident.

Landing Pad

Landing Pad

Landing Pad 2

Landing Pad 2

In the end, I decided to combine my first two ideas.  I cut the top off the box, leaving the front and side flaps intact.  I attached the back of the box top to the stand using cable ties.  I took the cardboard roll from a roll of paper towels and bound one end to the front flap of the box top and the stand, again, using cable ties.  The cardboard roll serves as a beam for the landing ramp, maintaining its angle, and helps reduce some of the flexibility issues previously discussed.

The support beam and buttons underneath the landing ramp

The support beam and buttons underneath the landing ramp

The final product

The final Product

I did my final experiment and I made 100 shots sitting from about four feet away.  The hoop stands about a foot and a half off the ground.  Of the 100 made shots, the buttons were set off 82 times, and only one shot bounced on the button twice, double counting the point (I only counted that as 1). The design still is not perfect.  I have found that when the ball goes straight through the hoop from an angle, it is less likely to hit a button than a ball that bounces or rattles through.  Sometimes the ball will hit in between the buttons when it goes straight in.  I was also found that sometime the ball just did not hit the button accurately enough to push it.  Ultimately, what I needed was a larger button.  One that was four inches in diameter would have been more helpful and would have led to more accurate scoring.

Screen shot of Final Experiment

Screen shot of Final Experiment in Presentation Mode, it reads 83 only because one shot double-counted, it should read 82.

Going through the process of creating this basketball hoop, I came to appreciate the workmanship and ingenuity that go into creating arcade games like whack-a-mole, skee ball, and pinball.  The unfortunate thing is that we don’t often associate “workmanship” and “ingenuity” with these kinds of games.  I don’t exactly know why.  Perhaps its because of their slow-but-inevitable obsolescence with the advent of  home video game systems like XBox and Playstation 4, superior technology.  It could also be that they’re associated with the waste of time and money with visions of children popping quarters to best the current high score.  Putting aside the ethics of profiting off childhood game addiction (which is still very much an issue today), the creators of these games deserve recognition for the work that they have done.  Creating my basketball hoop was challenging, and took many hours to conceptualize and build, and it’s still not working properly.  I don’t know that I am inspired by their work because, ultimately, these games do little to improve the overall quality of life of their communities, but I do appreciate the technology and creativity that has gone into them, and let’s face it, they’re freaking fun.

Improved Max 6 Patch for the Interactive Basketball Hoop

Simply copy the following raw data and paste it into your own Max 6 patch.  Back to Hoop Dreams: Programming Problems.

{
“boxes” : [ {
“box” : {
“maxclass” : “newobj”,
“text” : “trigger 0 l”,
“id” : “obj-16”,
“fontname” : “Arial”,
“numinlets” : 1,
“numoutlets” : 2,
“fontsize” : 12.0,
“outlettype” : [ “int”, “” ],
“patching_rect” : [ 498.0, 51.0, 61.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “0”,
“id” : “obj-13”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 12.0,
“outlettype” : [ “” ],
“patching_rect” : [ 120.5, 445.0, 32.5, 18.0 ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “1”,
“id” : “obj-6”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 12.0,
“outlettype” : [ “” ],
“patching_rect” : [ 279.75, 343.0, 32.5, 18.0 ]
}
}
,  {
“box” : {
“maxclass” : “comment”,
“text” : “RESET”,
“presentation” : 1,
“id” : “obj-68”,
“fontname” : “Arial”,
“frgb” : 0.0,
“numinlets” : 1,
“numoutlets” : 0,
“fontsize” : 20.0,
“presentation_rect” : [ 684.0, 86.5, 230.0, 29.0 ],
“patching_rect” : [ 564.0, 11.0, 230.0, 29.0 ]
}
}
,  {
“box” : {
“maxclass” : “comment”,
“text” : “SCORE”,
“presentation” : 1,
“id” : “obj-46”,
“fontname” : “Arial”,
“frgb” : 0.0,
“numinlets” : 1,
“numoutlets” : 0,
“fontsize” : 20.0,
“presentation_rect” : [ 409.5, 21.0, 236.0, 29.0 ],
“patching_rect” : [ 564.0, 209.5, 236.0, 29.0 ]
}
}
,  {
“box” : {
“maxclass” : “number”,
“varname” : “number”,
“presentation” : 1,
“id” : “obj-39”,
“fontname” : “Arial”,
“parameter_enable” : 0,
“numinlets” : 1,
“numoutlets” : 2,
“fontsize” : 72.0,
“presentation_rect” : [ 409.5, 52.0, 163.0, 87.0 ],
“outlettype” : [ “int”, “bang” ],
“patching_rect” : [ 564.0, 96.0, 163.0, 87.0 ]
}
}
,  {
“box” : {
“maxclass” : “newobj”,
“text” : “counter”,
“id” : “obj-32”,
“fontname” : “Arial”,
“numinlets” : 5,
“numoutlets” : 4,
“fontsize” : 12.0,
“outlettype” : [ “int”, “”, “”, “int” ],
“patching_rect” : [ 311.75, 163.0, 73.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “number”,
“id” : “obj-14”,
“fontname” : “Arial”,
“parameter_enable” : 0,
“numinlets” : 1,
“numoutlets” : 2,
“fontsize” : 12.0,
“outlettype” : [ “int”, “bang” ],
“patching_rect” : [ 381.5, 59.0, 50.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “newobj”,
“text” : “key”,
“id” : “obj-12”,
“fontname” : “Arial”,
“numinlets” : 0,
“numoutlets” : 4,
“fontsize” : 12.0,
“outlettype” : [ “int”, “int”, “int”, “int” ],
“patching_rect” : [ 279.75, 11.0, 59.5, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “newobj”,
“text” : “select 32”,
“id” : “obj-10”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 2,
“fontsize” : 12.0,
“outlettype” : [ “bang”, “” ],
“patching_rect” : [ 279.75, 59.0, 59.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “button”,
“id” : “obj-4”,
“numinlets” : 1,
“numoutlets” : 1,
“outlettype” : [ “bang” ],
“patching_rect” : [ 279.75, 96.0, 20.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “live.gain~”,
“varname” : “live.gain~”,
“presentation” : 1,
“id” : “obj-5”,
“parameter_enable” : 1,
“numinlets” : 2,
“fontface” : 0,
“numoutlets” : 5,
“fontsize” : 12.0,
“showname” : 0,
“presentation_rect” : [ 480.5, 278.0, 54.0, 136.0 ],
“outlettype” : [ “signal”, “signal”, “”, “float”, “list” ],
“patching_rect” : [ 50.5, 445.0, 54.0, 136.0 ],
“saved_attribute_attributes” : {
“valueof” : {
“parameter_unitstyle” : 4,
“parameter_mmax” : 6.0,
“parameter_mmin” : -70.0,
“parameter_initial” : [ -70 ],
“parameter_type” : 0,
“parameter_initial_enable” : 1,
“parameter_shortname” : “live.gain~”,
“parameter_longname” : “live.gain~”
}
}
}
}
,  {
“box” : {
“maxclass” : “ezdac~”,
“prototypename” : “helpfile”,
“presentation” : 1,
“id” : “obj-7”,
“local” : 1,
“numinlets” : 2,
“border” : 1.75,
“numoutlets” : 0,
“presentation_rect” : [ 480.5, 428.0, 44.0, 44.0 ],
“bgcolor” : [ 1.0, 1.0, 1.0, 1.0 ],
“patching_rect” : [ 50.5, 595.0, 44.0, 44.0 ],
“bordercolor” : [ 0.501961, 0.501961, 0.501961, 1.0 ]
}
}
,  {
“box” : {
“maxclass” : “newobj”,
“text” : “sfplay~ 2”,
“id” : “obj-43”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 3,
“fontsize” : 13.0,
“outlettype” : [ “signal”, “signal”, “bang” ],
“patching_rect” : [ 50.5, 398.0, 89.0, 21.0 ],
“save” : [ “#N”, “sfplay~”, “”, 2, 40320, 0, “”, “;” ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “open”,
“id” : “obj-41”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 13.0,
“outlettype” : [ “” ],
“patching_rect” : [ 50.5, 352.0, 39.0, 19.0 ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “set 0”,
“presentation” : 1,
“id” : “obj-66”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 20.0,
“presentation_rect” : [ 619.0, 86.5, 55.0, 27.0 ],
“outlettype” : [ “” ],
“patching_rect” : [ 498.0, 11.0, 54.0, 27.0 ]
}
}
 ],
“lines” : [ {
“patchline” : {
“source” : [ “obj-66”, 0 ],
“destination” : [ “obj-16”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-6”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-5”, 0 ],
“destination” : [ “obj-7”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-5”, 1 ],
“destination” : [ “obj-7”, 1 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-43”, 0 ],
“destination” : [ “obj-5”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-43”, 1 ],
“destination” : [ “obj-5”, 1 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-43”, 2 ],
“destination” : [ “obj-13”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-41”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-4”, 0 ],
“destination” : [ “obj-6”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-4”, 0 ],
“destination” : [ “obj-32”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-32”, 0 ],
“destination” : [ “obj-39”, 0 ],
“hidden” : 0,
“midpoints” : [ 321.25, 195.0, 549.0, 195.0, 549.0, 93.0, 573.5, 93.0 ],
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-16”, 1 ],
“destination” : [ “obj-39”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-16”, 0 ],
“destination” : [ “obj-32”, 3 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-13”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“midpoints” : [ 130.0, 465.0, 117.0, 465.0, 117.0, 429.0, 36.0, 429.0, 36.0, 393.0, 60.0, 393.0 ],
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-12”, 0 ],
“destination” : [ “obj-14”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-12”, 0 ],
“destination” : [ “obj-10”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-10”, 0 ],
“destination” : [ “obj-4”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
 ],
“appversion” : {
“major” : 6,
“minor” : 0,
“revision” : 8
}
}

Problematic Max 6 Patch for the Interactive Basketball Hoop

Simply copy and paste the following raw data into your own Max 6 patch.  Back to Hoop Dreams: Programming Problems. 
{
“boxes” : [ {
“box” : {
“maxclass” : “comment”,
“text” : “RESET”,
“presentation” : 1,
“id” : “obj-68”,
“fontname” : “Arial”,
“frgb” : 0.0,
“numinlets” : 1,
“numoutlets” : 0,
“fontsize” : 20.0,
“presentation_rect” : [ 684.0, 86.5, 230.0, 29.0 ],
“patching_rect” : [ 740.0, 283.0, 230.0, 29.0 ]
}
}
,  {
“box” : {
“maxclass” : “comment”,
“text” : “SCORE”,
“presentation” : 1,
“id” : “obj-46”,
“fontname” : “Arial”,
“frgb” : 0.0,
“numinlets” : 1,
“numoutlets” : 0,
“fontsize” : 20.0,
“presentation_rect” : [ 409.5, 21.0, 236.0, 29.0 ],
“patching_rect” : [ 766.0, 176.0, 236.0, 29.0 ]
}
}
,  {
“box” : {
“maxclass” : “number”,
“varname” : “number”,
“presentation” : 1,
“id” : “obj-39”,
“fontname” : “Arial”,
“parameter_enable” : 0,
“numinlets” : 1,
“numoutlets” : 2,
“fontsize” : 72.0,
“presentation_rect” : [ 409.5, 52.0, 163.0, 87.0 ],
“outlettype” : [ “int”, “bang” ],
“patching_rect” : [ 787.5, 39.0, 163.0, 87.0 ]
}
}
,  {
“box” : {
“maxclass” : “newobj”,
“text” : “counter”,
“id” : “obj-32”,
“fontname” : “Arial”,
“numinlets” : 5,
“numoutlets” : 4,
“fontsize” : 12.0,
“outlettype” : [ “int”, “”, “”, “int” ],
“patching_rect” : [ 318.0, 163.0, 73.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “toggle”,
“presentation” : 1,
“id” : “obj-40”,
“parameter_enable” : 0,
“numinlets” : 1,
“numoutlets” : 1,
“presentation_rect” : [ 402.0, 184.0, 20.0, 20.0 ],
“outlettype” : [ “int” ],
“patching_rect” : [ 280.0, 351.0, 20.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “button”,
“id” : “obj-33”,
“numinlets” : 1,
“numoutlets” : 1,
“outlettype” : [ “bang” ],
“patching_rect” : [ 400.0, 118.0, 20.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “number”,
“id” : “obj-14”,
“fontname” : “Arial”,
“parameter_enable” : 0,
“numinlets” : 1,
“numoutlets” : 2,
“fontsize” : 12.0,
“outlettype” : [ “int”, “bang” ],
“patching_rect” : [ 354.0, 58.0, 50.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “newobj”,
“text” : “key”,
“id” : “obj-12”,
“fontname” : “Arial”,
“numinlets” : 0,
“numoutlets” : 4,
“fontsize” : 12.0,
“outlettype” : [ “int”, “int”, “int”, “int” ],
“patching_rect” : [ 307.0, 18.0, 59.5, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “newobj”,
“text” : “select 32”,
“id” : “obj-10”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 2,
“fontsize” : 12.0,
“outlettype” : [ “bang”, “” ],
“patching_rect” : [ 258.5, 49.0, 59.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “button”,
“id” : “obj-4”,
“numinlets” : 1,
“numoutlets” : 1,
“outlettype” : [ “bang” ],
“patching_rect” : [ 286.0, 87.0, 20.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “toggle”,
“id” : “obj-6”,
“parameter_enable” : 0,
“numinlets” : 1,
“numoutlets” : 1,
“outlettype” : [ “int” ],
“patching_rect” : [ 454.5, 391.0, 20.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “loop $1”,
“id” : “obj-2”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 13.0,
“outlettype” : [ “” ],
“patching_rect” : [ 454.5, 422.0, 54.0, 19.0 ]
}
}
,  {
“box” : {
“maxclass” : “comment”,
“text” : “play/stop current file”,
“presentation” : 1,
“id” : “obj-9”,
“fontname” : “Arial”,
“frgb” : 0.0,
“numinlets” : 1,
“numoutlets” : 0,
“fontsize” : 13.0,
“presentation_rect” : [ 434.0, 184.0, 147.0, 25.0 ],
“bubble” : 1,
“patching_rect” : [ 300.0, 351.0, 147.0, 25.0 ]
}
}
,  {
“box” : {
“maxclass” : “comment”,
“text” : “open an audio file “,
“id” : “obj-27”,
“fontname” : “Arial”,
“frgb” : 0.0,
“numinlets” : 1,
“numoutlets” : 0,
“fontsize” : 13.0,
“bubble” : 1,
“patching_rect” : [ 102.5, 351.0, 137.0, 25.0 ]
}
}
,  {
“box” : {
“maxclass” : “live.gain~”,
“varname” : “live.gain~”,
“presentation” : 1,
“id” : “obj-5”,
“parameter_enable” : 1,
“numinlets” : 2,
“fontface” : 0,
“numoutlets” : 5,
“fontsize” : 12.0,
“showname” : 0,
“presentation_rect” : [ 480.5, 278.0, 54.0, 136.0 ],
“outlettype” : [ “signal”, “signal”, “”, “float”, “list” ],
“patching_rect” : [ 50.5, 445.0, 54.0, 136.0 ],
“saved_attribute_attributes” : {
“valueof” : {
“parameter_unitstyle” : 4,
“parameter_mmax” : 6.0,
“parameter_mmin” : -70.0,
“parameter_initial” : [ -70 ],
“parameter_type” : 0,
“parameter_initial_enable” : 1,
“parameter_shortname” : “live.gain~”,
“parameter_longname” : “live.gain~”
}
}
}
}
,  {
“box” : {
“maxclass” : “ezdac~”,
“prototypename” : “helpfile”,
“presentation” : 1,
“id” : “obj-7”,
“local” : 1,
“numinlets” : 2,
“border” : 1.75,
“numoutlets” : 0,
“presentation_rect” : [ 480.5, 428.0, 44.0, 44.0 ],
“bgcolor” : [ 1.0, 1.0, 1.0, 1.0 ],
“patching_rect” : [ 50.5, 595.0, 44.0, 44.0 ],
“bordercolor” : [ 0.501961, 0.501961, 0.501961, 1.0 ]
}
}
,  {
“box” : {
“maxclass” : “button”,
“id” : “obj-42”,
“numinlets” : 1,
“numoutlets” : 1,
“outlettype” : [ “bang” ],
“patching_rect” : [ 120.5, 523.0, 20.0, 20.0 ]
}
}
,  {
“box” : {
“maxclass” : “newobj”,
“text” : “sfplay~ 2”,
“id” : “obj-43”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 3,
“fontsize” : 13.0,
“outlettype” : [ “signal”, “signal”, “bang” ],
“patching_rect” : [ 50.5, 398.0, 89.0, 21.0 ],
“save” : [ “#N”, “sfplay~”, “”, 2, 40320, 0, “”, “;” ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “seek 300”,
“id” : “obj-34”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 13.0,
“outlettype” : [ “” ],
“patching_rect” : [ 444.0, 571.0, 65.0, 19.0 ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “seek 300 600”,
“id” : “obj-35”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 13.0,
“outlettype” : [ “” ],
“patching_rect” : [ 420.0, 538.0, 89.0, 19.0 ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “resume”,
“id” : “obj-36”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 13.0,
“outlettype” : [ “” ],
“patching_rect” : [ 454.0, 482.0, 55.0, 19.0 ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “pause”,
“id” : “obj-37”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 13.0,
“outlettype” : [ “” ],
“patching_rect” : [ 462.5, 455.0, 47.0, 19.0 ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “open”,
“id” : “obj-41”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 13.0,
“outlettype” : [ “” ],
“patching_rect” : [ 50.5, 351.0, 40.0, 19.0 ]
}
}
,  {
“box” : {
“maxclass” : “message”,
“text” : “set 0”,
“presentation” : 1,
“id” : “obj-66”,
“fontname” : “Arial”,
“numinlets” : 2,
“numoutlets” : 1,
“fontsize” : 20.0,
“presentation_rect” : [ 619.0, 86.5, 55.0, 27.0 ],
“outlettype” : [ “” ],
“patching_rect” : [ 543.0, 218.0, 54.0, 27.0 ]
}
}
,  {
“box” : {
“maxclass” : “textbutton”,
“hint” : “”,
“id” : “obj-11”,
“fontname” : “Arial”,
“rounded” : 60.0,
“parameter_enable” : 0,
“textcolor” : [ 0.34902, 0.34902, 0.34902, 1.0 ],
“textovercolor” : [ 0.2, 0.2, 0.2, 1.0 ],
“numinlets” : 1,
“border” : 0,
“fontface” : 1,
“numoutlets” : 3,
“fontsize” : 13.0,
“text” : “2”,
“outlettype” : [ “”, “”, “int” ],
“background” : 1,
“bgcolor” : [ 1.0, 0.788235, 0.470588, 1.0 ],
“patching_rect” : [ 260.0, 351.0, 20.0, 20.0 ],
“ignoreclick” : 1,
“bordercolor” : [ 0.0, 0.0, 0.0, 1.0 ]
}
}
,  {
“box” : {
“maxclass” : “textbutton”,
“hint” : “”,
“id” : “obj-93”,
“fontname” : “Arial”,
“rounded” : 60.0,
“parameter_enable” : 0,
“textcolor” : [ 0.34902, 0.34902, 0.34902, 1.0 ],
“textovercolor” : [ 0.2, 0.2, 0.2, 1.0 ],
“numinlets” : 1,
“border” : 0,
“fontface” : 1,
“numoutlets” : 3,
“fontsize” : 13.0,
“text” : “1”,
“outlettype” : [ “”, “”, “int” ],
“background” : 1,
“bgcolor” : [ 1.0, 0.788235, 0.470588, 1.0 ],
“patching_rect” : [ 30.5, 351.0, 20.0, 20.0 ],
“ignoreclick” : 1,
“bordercolor” : [ 0.0, 0.0, 0.0, 1.0 ]
}
}
 ],
“lines” : [ {
“patchline” : {
“source” : [ “obj-66”, 0 ],
“destination” : [ “obj-39”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-66”, 0 ],
“destination” : [ “obj-32”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-6”, 0 ],
“destination” : [ “obj-2”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-5”, 0 ],
“destination” : [ “obj-7”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-5”, 1 ],
“destination” : [ “obj-7”, 1 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-43”, 0 ],
“destination” : [ “obj-5”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-43”, 1 ],
“destination” : [ “obj-5”, 1 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-43”, 2 ],
“destination” : [ “obj-42”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-41”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-40”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-4”, 0 ],
“destination” : [ “obj-40”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-4”, 0 ],
“destination” : [ “obj-32”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-37”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-36”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-35”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-34”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-33”, 0 ],
“destination” : [ “obj-32”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-32”, 0 ],
“destination” : [ “obj-39”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-2”, 0 ],
“destination” : [ “obj-43”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-12”, 0 ],
“destination” : [ “obj-14”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-12”, 0 ],
“destination” : [ “obj-10”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-10”, 0 ],
“destination” : [ “obj-4”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
,  {
“patchline” : {
“source” : [ “obj-10”, 1 ],
“destination” : [ “obj-33”, 0 ],
“hidden” : 0,
“disabled” : 0
}
}
 ],
“appversion” : {
“major” : 6,
“minor” : 0,
“revision” : 8
}
}

Hoop Dreams: Programming Problems

In my initial plan, I had a vision of creating a hoop that could record both made shots and misses.  I had to almost threw this idea out because it was too difficult program the hoop to differentiate between a made shot and missed shot.  One idea was to attach buttons or sensors to the backboard but obviously a user could bank a shot and get it through the hoop.  Another idea was to use vibration sensors but the hoop vibrates significantly even when the ball goes in because of the flimsiness of the basket, the flexibility of the rim, and its overall light weight.  The other challenge was to record air balls, balls that don’t touch the rim or backboard.  This would require different technology like a camera that would be programmed to see the ball and basket and see it miss the hoop.  This would have taken weeks to program, not to mention the fact I have no idea how to program such an idea.

I am using Max 6 software to provide the sound effects and keep score.  Initially, I wanted to use sounds from the commentator off of Midway’s NBA Jam, and give the hoop a bit of a retro feel and pay tribute to one of the most entertaining sports video games of all time.  I found one website that had those sound bytes on a Flash soundboard.  There was not a clear way to download these sounds so I tried some programs that would supposedly allow me to rip the sounds like Soundflower and Jack but to no avail.  So I had to settle for using a free license sound byte from SoundBible.com of a crowd cheering in lieu of a commentator.  Now I could have still used the soundboard by hovering the cursor over one of the icons and clipped the MakeyMakey to receive mouse click messages and have the NBA Jam sounds come that way.  I decided not to do that since I didn’t want to have so many components to the project and I could only have one NBA sound byte going at the same time.  The NBA Jam sound bytes get really annoying if you hear one over and over repeatedly.

Another issue I had was a little more technical in nature.  I was able to create a counter on Max 6 to keep score, along with a reset button.  The challenge I had was that the counter would not count the first press of the button, it was only after the second press that it would count “1.”  I also struggled with the toggle switch on Max because the toggle switch would turn the sound effects on and off.  Therefore, when the arcade button is pressed, it triggers the toggle switch which will turn the sound effect on; however, if the sound effect is still playing and the button is struck again, it will turn the sound effect off.  What I wanted was the button to only turn the sound effect on.

I contacted Bill Turkel about these issues and he was able to tweak my patch and fix the issues. What he did was replace the toggle with a message that communicates to the sfplay to only play the sound clip.  He also added a trigger between the counter and integer  that tells it to goes directly to “1” when the button is struck.  See the before and after images below.  If you would like to play with the patches on your own computers, here’s a link to the raw data for the old patch and the new patch.

Problematic Max 6 patch for the interactive basketball hoop

Problematic Max 6 patch for the interactive basketball hoop

Functional Max 6 Patch for the interactive basketball hoop

Functional Max 6 Patch for the interactive basketball hoop

Basically, the programming problems are resolved.  The next blog post will continue to talk about the construction of the basketball hoop itself.