Curious Fixation: An Infinite Runner Mac OS

  1. X86_64' Is Not An Allowed Value For Option 'ios-arch' · Issue ...
  2. Reisen Udongein Inaba(Apprentice)
  3. Fujiwara No Mokou(Indirect Recipient Of Eternal Life)
  4. Kaguya Houraisan(Fellow Exile, Mistress)

This tutorial is part of an OpenSesame workshop that will take place at the Center for Mind/ Brain Sciences at the University of Trento on May 7th, 9:00.

  1. Browse the newest, top selling and discounted Exploration products on Steam.
  2. 2 Converting Legacy Mac OS Japanese Encoding to Unicode in Windows May 23 '13 2 What TargetName to use when calling InitializeSecurityContext (Negotiate)?

Figure 1. Rovereto Castle. (Source).

Learn how to do just about everything at eHow. Find expert advice along with How To videos and articles, including instructions on how to make, cook, grow, or do almost anything. May 18, 2018 Steps to Reproduce. I created a App with Flutter which uses Firebase and a few other packages. Every time when I build the ios release and I want to run the app after that on a iphone simulator, the following issue occurs 'x8664' is not an allowed value for option 'ios-arch' I'am able to fix this by running flutter run but this shouldn't be necessary.

Overview

Requirements

Expertise

  • A basic knowledge of experimental design is assumed.
  • No prior experience with OpenSesame is assumed.
  • No prior experience with Python is assumed for the main tutorial. The ‘Extra’ sections require a basic understanding of Python syntax.

Equipment

  • University computers on which OpenSesame is pre-installed will be available during the workshop.
  • If you bring your own laptop, please install OpenSesame before the workshop.
  • OpenSesame is available for Windows XP/ 7/ 8, Linux, and Mac OS. If you are running Mac OS, you are advised to verify beforehand that OpenSesame runs properly on your system, because Mac OS support is still experimental.
  • If you have an Android tablet or phone, you can bring it along to run your experiment on a tablet! If you bring an Android device, please install the OpenSesame runtime for Android before the workshop.

Materials

  • The primary resource for the workshop is this page, which can be downloaded in .pdf format from here. Print-outs will be available for attendees.

Introduction

You can download the introduction slides from here.

About

We will create a simple animal-filled multisensory integration task, in which participants see a picture of a dog, cat, or capybara. In addition, a meowing or barking sound is played. To make things more fun, we will design the experiment so that you can run it on an Android device, using the OpenSesame runtime for Android. You will see that this requires hardly any additional effort.

The participant’s task is to report whether a dog or a cat is shown, by tapping (or clicking) on the left (dog) or right (cat) side of the screen. No response should be given when a capybara is shown (i.e. those are catch trials). The prediction is simple: Participants should be faster to identify dogs when a barking sound is played, and faster to identify cats when a meowing sound is played. In other words, we expect a multisensory congruency effect. A secondary prediction is that when participants see a capybara, they are more likely to report seeing a dog when they hear a bark, and more likely to report seeing a cat when they hear a meow.

Figure 2. Don't be fooled by meowing capybaras! (Source)

Step 1: Download and start OpenSesame

OpenSesame is available for Windows, Linux, Mac OS (experimental), and Android (runtime only). This tutorial is written for OpenSesame 2.8.1 or later. You can download OpenSesame from here:

When you start OpenSesame, you will be given a choice of template experiments, and a list of recently opened experiments (if any, see %FigStartup).

Figure 3. The OpenSesame window on start-up.

The ‘Droid template’ provides a good starting point for creating Android-based experiments. However, in this tutorial we will create the entire experiment from scratch. Therefore, we will continue with the ‘default template’, which is already loaded when OpenSesame is launched (Figure 4).

Figure 4. The structure of the 'Default template' as seen in the overview area.

Background box 1

Let’s introduce the basics: OpenSesame experiments are collections of items. An item is a small chunk of functionality that, for example, can be used to present visual stimuli (the sketchpad item) or record key presses (the keyboard_response item). Items have a type and a name. For example, you might have two keyboard_response items, which are called t1_response and t2_response. To make the distinction between the type and the name of an item clear, we will use code_style for types, and italic_style for names.

To give structure to your experiment, two types of items are especially important: the loop and the sequence. Understanding how you can combine loops and sequences to build experiments is perhaps the trickiest part of working with OpenSesame, so let’s get that out of the way first.

A loop is where, in most cases, you define your independent variables. In a loop you can create a table in which each column corresponds to a variable, and each row corresponds to a single run of the ‘item to run’. To make this more concrete, let’s consider the following block_loop (unrelated to this tutorial):

Figure 5. An example of variables defined in a loop table. (This example is not related to the experiment created in this tutorial.)

This block_loop will execute trial_sequence four times. Once while soa is 100 and target is ‘F’, once while soa is 100 and target is ‘H’, etc. The order in which the rows are walked through is random by default, but can also be set to sequential in the top-right of the tab.

A sequence consists of a series of items that are executed one after another. A prototypical sequence is the trial_sequence, which corresponds to a single trial. For example, a basic trial_sequence might consist of a sketchpad, to present a stimulus, a keyboard_response, to collect a response, and a logger, to write the trial information to the log file.

Figure 6. An example of a sequence item used as a trial sequence. (This example is not related to the experiment created in this tutorial.)

You can combine loops and sequences in a hierarchical way, to create trial blocks, and practice and experimental phases. For example, the trial_sequence is called by the block_loop. Together, these correspond to a single block of trials. One level up, the block_sequence is called by the practice_loop. Together, these correspond to the practice phase of the experiment.

Step 2: Making your experiment Android-ready

Click on ‘New experiment’ in the overview area to open a tab that has some general options for the experiment. To make our experiment work on Android devices, we need to select the droid back-end in the ‘back-end’ pull-down menu.

Change the resolution to 1280 x 800 px. You don’t have to worry about the actual resolution of the phone/ tablet that you will run the experiment on, because the display will be scaled automatically. But 1280 x 800 px is the resolution that you will develop with.

That’s it. You have now made the necessary changes to run your experiment on Android!

Background box 2

The back-end is the layer of software that controls the display, input devices, sound, etc. Many experiments will work with all back-ends, but there are reasons to prefer one back-end over the other, mostly related to timing and cross-platform support. For more information about back-ends, see:

Step 3: Add a block_loop and trial_sequence

The default template starts with three items: A notepad called getting_started, a sketchpad called welcome, and a sequence called experiment. We don’t need getting_started and welcome, so let’s remove these right away. To do so, right-click on these items and select ‘Delete’. Don’t remove experiment, because it is the entry for the experiment (i.e. the first item that is called when the experiment is started).

Our experiment will have a very simple structure. At the top of the hierarchy is a loop, which we will call block_loop. The block_loop is the place where we will define our independent variables (see also Background box 1). To add a loop to your experiment, drag the loop icon from the item toolbar onto the experiment item in the overview area.

Because a loop item always needs another item to run, a dialog will appear that asks whether you want to create a new item for the loop or whether you want to select an existing item. We want to create a new sequence for our loop, so select sequence in the pull-down menu labeled ‘Create new item to use’ and click on the ‘Create’ button.

By default, items have names such as sequence, loop, _sequence, etc. These names are not very informative, and it is good practice to rename them. Item names must consist of alphanumeric characters and/ or underscores. To rename an item, right-click on the item in the overview area and select ‘Rename’. Rename sequence to trial_sequence to indicate that it will correspond to a single trial. Rename loop to block_loop to indicate that will correspond to a block of trials.

The overview area of our experiment now looks as in Figure 7.

Figure 7. The overview area at the end of Step 3.

Background box 3

Tip – Deleted items are still available in the ‘Unused items’ bin, until you select ‘Permanently delete unused items’ in the ‘Unused items’ tab. You can re-add deleted items to a sequence using the ‘Append existing item’ button.

Step 4: Import images and sound files

For this experiment, we will use images of cats, dogs, and capybaras. We will also use sound samples of meows and barks. You can download all the required files from here:

Download stimuli.zip and extract it somewhere (to your desktop, for example). Next, in OpenSesame, click on the ‘Show file pool’ button in the main toolbar (or: Menu →View → Show file pool). This will show the file pool, by default on the right side of the window. The easiest way to add the stimuli to the file pool is by dragging them from the desktop (or wherever you have extracted the files to) into the file pool. Alternatively, you can click on the ‘+’ button in the file pool and add files using the file-selection dialog that appears. The file pool will automatically be saved with your experiment if you save your experiment in the .opensesame.tar.gz format (which is the default format).

After you have added all stimuli, your file pool looks as in Figure 8.

Figure 8. The file pool at the end of Step 4.

Step 5: Define the experimental variables in the block_loop

Conceptually, our experiment has a fully crossed 3x2 design: We have three types of visual stimuli (cats, dogs, and capybaras) which occur in combination with two types of auditory stimuli (meows and barks). However, we have five exemplars for each stimulus type: five meow sounds, five capybara pictures, etc. From a technical point of view, it therefore makes sense to treat our experiment as a 5x5x3x2 design, in which picture number and sound number are factors with five levels.

OpenSesame is very good at generating full-factorial designs. First, open block_loop by clicking on it in the overview area. Next, click on the ‘Variable wizard’ button. The variable wizard is a tool for generating full-factorial designs. It works in a straightforward way: Every column corresponds to an experimental variable (i.e. a factor). The first row is the name of the variable, the rows below contain all possible values (i.e. levels). In our case, we can specify our 5x5x3x2 design as shown in Figure 9.

Figure 9. The loop wizard generates full-factorial designs.

After clicking ‘Ok’, you will see that there is a loop table with four rows, one for each experimental variable. There are 150 cycles (=5x5x3x2), which means that we have 150 unique trials. Your loop table now looks as in Figure 10.

Figure 10. The loop table at the end of Step 5.

Step 6: Add items to the trial sequence

Open trial_sequence. You will see that the sequence is empty. It’s time to add some items! Our basic trial_sequence is:

  1. A sketchpad to display a central fixation dot for 500 ms.
  2. A sampler to play an animal sound.
  3. A sketchpad to display an animal picture.
  4. A touch_response to collect a response.
  5. A logger to write the data to file.

To add these items, simply drag them one by one from the item toolbar onto the trial_sequence. If necessary, you can open trial_sequence and re-order it by dragging the newly added items by their grab-handle (i.e. the four-square icon on the left). Once all items are in the correct order, give each of them a sensible name. The overview area now looks as shown in Figure 11.

Figure 11. The overview area at the end of Step 6.

Step 7: Define the central fixation dot

Click on fixation_dot in the overview area. This will open a basic drawing board that you can use to design your stimulus displays. To draw a central fixation dot, first click on the fixation-dot icon (with the small gray circle) and then click on the center of the display, i.e. at position (0, 0).

We also need to specify for how long the fixation dot is visible. To do so, change the duration from ‘keypress’ to 495 ms, in order to specify a 500 ms duration. (See Background box 4 for an explanation.)

The fixation_dot item now looks as in Figure 12.

Figure 12. The fixation_dot item at the end of Step 7.

Background box 4

Why specify a duration of 495 if we want a duration of 500 ms? The reason for this is that the actual display-presentation duration is always rounded up to a value that is compatible with your monitor’s refresh rate. This may sound complicated, but for most purposes the following rules of thumb are sufficient:

  1. Choose a duration that is possible given your monitor’s refresh rate. For example, if your monitor’s refresh rate is 60 Hz, it means that every frame lasts 16.7 ms (=1000 ms/60 Hz). Therefore, on a 60 Hz monitor, you should always select a duration that is a multiple of 16.7 ms, such as 16.7, 33.3, 50, 100, etc.
  2. In the duration field of the sketchpad specify a duration that is a few milliseconds shorter than what you’re aiming for. So if you want to present a sketchpad for 50 ms, choose a duration of 45. If you want to present a sketchpad for 1000 ms, choose a duration of 995. Etcetera.

For a detailed discussion of experimental timing, see:

Step 8: Define the animal sound

Open animal_sound. You will see that the sampler item provides a number of options, the most important one of which is the sound file that is to be played. Click on the browse button to open the file-pool selection dialog, and select one of the sound files, such as bark1.ogg.

Of course, we don’t want to play the same sound over-and-over again. Instead, we want to select a sound based on the variables sound and sound_nr that we have defined in the block_loop (Step 5). To do this, simply replace the part of the string that you want to have depend on a variable by the name of that variable between square brackets. More specifically, ‘bark1.ogg’ becomes ‘[sound][sound_nr].ogg’, because we want to replace ‘bark’ by the value of the variable sound and ‘1’ by the value of sound_nr.

We also need to change the duration of the sampler. By default, the duration is ‘sound’, which means that the experiment will pause while the sound is playing. Change the duration to 0. This does not mean that the sound will be played for only 0 ms, but that the experiment will advance right away to the next item, while the sound continues to play in the background. The item animal_sound now looks as shown in Figure 13.

Figure 13. The item animal_sound at the end of Step 8.

Background box 5

For more information about using variables, see:

Step 9: Define the animal picture

Open animal_picture. This will again open a sketchpad drawing board. Now select the image tool by clicking on the button with the aquarium-like icon. Click on the center of the screen (0, 0). The ‘Select file from pool’ dialog will appear. Select the file capybara1.png and click on ‘Select’. The capybara will now lazily stare at you from the center of the screen. But of course, we don’t always want to show the same capybara. Instead, we want to have the image depend on the variables animal and pic_nr that we have defined in the block_loop (Step 5).

We can use the basic same trick as we did for animal_sound, although things work slightly differently for images. First, right-click on the capybara and select ‘Edit’. This will allow you to edit the following line of OpenSesame script that corresponds to the capybara picture:

Now change the name of image file from ‘capybara.png’ to ‘[animal][pic_nr].png’ …

… and click on ‘Ok’ to apply the change. The capybara is now gone, and OpenSesame tells you that one object is not shown, because it is defined using variables. Don’t worry, it will be shown during the experiment!

To remind the participant of the task, we will also add two response circles, one marked ‘dog’ on the left side of the screen, and one marked ‘cat’ on the right side. I’m sure you will able to figure out how to do this with the sketchpad drawing tools. My version is shown in Figure 14. Note that these response circles are purely visual, and we still need to explicitly define the response criteria (see Step 10).

Finally, set ‘Duration’ field to ‘0’. This does not mean that the picture is presented for only 0 ms, but that the experiment will advance to the next item (the touch_response) right away. Since the touch_response waits for a response, but doesn’t change what’s on the screen, the target will remain visible until a response has been given.

Figure 14. The animal_picturesketchpad at the end of Step 9.

Background box 6

Tip – OpenSesame can handle a wide variety of image formats. However, some (non-standard) .bmp formats are known to cause trouble. If you find that a .bmp image is not shown, you may want to consider using a different format, such as .png. You can convert images easily with free tools such as GIMP.

Step 10: Define the touch response

Open the touch_response item. The touch_response collects a tap (for devices with a touch screen) or a mouse click (for devices with a mouse) and automatically recodes the response coordinates into discrete response values based on a grid. This may sound a bit abstract, but it simply means the following. The display is divided into a grid and each cell in the grid gets a number. The value of the response is the number of the cell that is tapped/ clicked. For example, if you divide the display into four columns and three rows and the participant taps the cell labeled ‘7’, then the response variable will have the value ‘7’ (see Figure 15).

Figure 15. The touch_response item records display taps and mouse clicks and assigns a response value based on a grid.

In our case, we simply divide the screen into a left and a right side, which means that we have to set the number of columns to 2 and the number of rows to 1 (it is by default). Following the logic shown in Figure 15, the left side of the display now corresponds to a 1 response, and the right side corresponds to a 2 response. (Note that we are therefore much more liberal than the visual response circles of Figure 14 suggest, because we accept taps/ clicks anywhere on the screen.)

Finally, we have to make it possible for participants not to respond, because the response should be withheld on capybara trials. To do so, we change the ‘Timeout’ field from ‘infinite’ to ‘2000’. This means that the response will automatically time out after 2000 ms. When this happens, the response will be set to ‘None’ and the experiment will continue.

The touch_response now looks as in Figure 16.

Figure 16. The touch_response at the end of Step 10.

Step 11: Define the correct response

So far, we haven’t defined what the correct response is for each stimulus. Typically, this is done by defining a correct_response variable in the loop table. Response items, such as the touch_response will automatically use this variable to decide whether a response was correct or not, unless a different correct response is explicitly provided in the item.

Open the block_loop. Click on ‘Add variable’ and add a variable named ‘correct_response’. This will add a long empty column to the table. On rows where animal is ‘dog’, set correct_response to 1 (i.e. left-side tap). Where animal is ‘cat’, set correct_response to 2 (i.e. right-side tap). Where animal is ‘capybara’ set correct_response to ‘None’ (i.e. a timeout). I recommend using some clever copy-pasting to save some time!

Step 12: Define the logger

Actually, we don’t need to configure the logger, but let’s take a look at it anyway. Click on logger in the overview to open it. You will see that the option ‘Automatically detect and log all variables’ is selected. This means that OpenSesame logs everything, which is fine.

Background box 8

The one tip to rule them all – Always triple-check whether all the necessary variables are logged in your experiment! The best way to check this is to run the experiment and investigate the resulting log files.

Step 13: Add per-trial feedback

It is good practice to inform the participant of whether the response was correct or not. To avoid disrupting the flow of the experiment, this type of immediate feedback should be as unobtrusive as possible. Here, we will do this by briefly showing a green fixation dot after a correct response, and a red fixation dot after an incorrect response.

First, add two new sketchpads to the end of the trial_sequence. Rename the first one to feedback_correct and the second one to feedback_incorrect. Of course, we want to select only one of these items on any given trial, depending on whether or not the response was correct. To do this, we can make use of the built-in variable correct, which has the value 0 after an incorrect response, and 1 after a correct response. (Provided that we have defined correct_response, which we did in Step 11.) To tell the trial_sequence that the feedback_correct item should be called only when the response is correct, we use the following run-if statement:

The square brackets around correct indicate that this is the name of a variable, and not simply the string ‘correct’. Analogously, we use the following run-if statement for the feedback_incorrect item:

We still need to give content to the feedback_correct and feedback_incorrect items. To do this, simply open the items and draw a green or red fixation dot in the center. Also, don’t forget to change the durations from ‘keypress’ to some brief interval, such as 195.

The trial_sequence now looks as shown in Figure 17.

Figure 17. The trial_sequence at the end of Step 13.

Background box 9

For more information about conditional ‘if’ statements, see:

Step 14: Add instructions and goodbye screens

A good experiment always start with an instruction screen, and ends by thanking the participant for his or her time. The easiest way to do this in OpenSesame is with form_text_display items.

Drag two form_text_displays into the main experimentsequence. One should be at the very start, and renamed to form_instructions. The other should be at the very end, and renamed to form_finished. Now simply add some appropriate text to these forms, for example as shown in Figure 18.

Figure 18. The form_instructions item at the end of Step 15.

Background box 10

Tip – Forms, and text more generally, support a subset of HTML tags to allow for text formatting (i.e. colors, boldface, etc.). This is described here:

Step 15: Finished!

Your experiment is now finished! Click on the ‘Run fullscreen’ (Control+R) button in the main toolbar to give it a test run. If you have an Android device, you can transfer the experiment file to the device (typically to the SD card), launch the OpenSesame runtime for Android, and select the experiment file to launch it.

Background box 11

Tip – A test run is executed even faster by clicking the orange ‘Run in window’ button, which doesn’t ask you how to save the logfile (and should therefore only be used for testing purposes).

Extra (easy): A smarter way to define the correct response

In Step 11, we have defined correct_response variable manually. This works, but it takes time and is prone to mistakes. A smarter way is to use an inline_script and a bit of deductive logic to determine the correct response for a given trial. First, open block_loop and remove the correct_response column, because we don’t need it anymore. Next, drag an inline_script item from the item toolbar to the start of the trial_sequence. Open the prepare tab of the inline_script and add the following script:

So what’s going on here? First things first: The reason for putting this code in the prepare tab is that every item in a sequence is called twice. The first phase is called the prepare phase, and is used to perform time consuming tasks before the time-critical run phase of the sequence. Determining the correct response is exactly the type of preparatory stuff that you would put in the prepare phase. During the run phase, the actual events happen. To give a concrete example, the contents of a sketchpad are created during the prepare phase, and during the run phase they are merely ‘flipped’ to the display. For more information about the prepare-run strategy, see:

The script itself is almost human-readable language, at least if you know the following. Firstly, to retrieve an experimental variable in an inline_script, you need to use self.get(). So where you would write [animal] in OpenSesame script, you write self.get('animal') in a Python inline_script. Secondly, to define an experimental variable, you need to use exp.set(). Therefore, to set the variable correct_response to 2, you call exp.set('correct_response', 2). For more information, see:

We can summarize the script as follows: If the picture is a dog, the correct response is 1. But if the picture is a cat, the correct response is 2. If the picture is neither (and by exclusion must therefore be a capybara), the correct response is no response, or a timeout (indicated by ‘None’).

Finally, let’s consider the following variation of the script above:

Here we allow for the possibility that an animal is neither a dog, nor a cat, nor a capybara. And if we encounter such an exotic creature, we abort the experiment with an error message, by raising an Exception. This may feel like a silly thing to do, because we have programmed the experiment ourselves, and we (think we) know with 100% certainty that it includes only cats, dogs, and capybaras. But it is nevertheless good practice to add these kinds of sanity checks to your experiment, to protect yourself from typos, logical errors, etc. The more complex your experiment becomes, the more important these kinds of checks are. Never assume that your code is bug-free!

Extra (medium): Add breaks and per-block feedback

Right now, our experiment consists of a single, very long block of trials. In most experiments, you would keep your block_loop short (30 trials, say) and repeat it several times with a short break after each block.

However, this approach doesn’t work here, because we have a lot of unique trials (150 to be exact), and there is no straightforward way to divide these trials into multiple blocks. Therefore, we will use the following trick: We will add a feedback item to our trial_sequence, and use a run-if statement to call it only after every 50 trials. This is moderately advanced, but follow me!

First add a feedback item to the end of the trial_sequence. Next, assign the following run-if statement to it:

Note that this run-if statement starts with an = sign. This means that it is Python syntax, instead of the simplified OpenSesame script that you used before (e.g. [correct] = 0 is OpenSesame script). The use of Python gives us a lot of extra flexibility. Next, we retrieve the value of the experimental variable count_trial_sequence. The count_[item name] variables are built-in variables that keep track of how often an item has been called, starting from 0. In other words, count_trial_sequence corresponds to the trial number. Finally, we take the modulo 50 of the trial number and check whether it equals 49. Modulo is a mathematical operator that returns the remainder of an integer division. For example, 13 % 5 equals 3, because 5 goes twice into 12 and leaves 3.

Why does this work? If we start counting at 0, we want to insert a break after trials 49, 99, and 149. These trial numbers have in common that their modulo 50 is 49. This is why this run-if statement works. Get it?

We still need to add some content to the feedback item. OpenSesame automatically keeps track of certain feedback variables, which you can use to inform the participant of his or her performance. For example, the variable avg_rt contains the average response time, and acc contains the percentage of accurate response. An example of a good feedback display is shown in Figure 19.

Figure 19. An example feedback display.

For more information about feedback, see:

Extra (difficult): Limit the presentation duration

Right now, the animal picture stays on the screen until the participant gives a response. But let’s say that we want to limit the presentation duration of the picture to 1000 ms. If we want to remove the picture during the response interval, we have to do things in parallel. And because of the purely serial way in which OpenSesame works, this is a bit tricky. Let’s take a look at one way to do this, by replacing both the animal_picture and touch_response items by an `inline_script.

First, remove animal_picture and touch_response from the trial_sequence, and add a single inline_script in their place. Now add the following code to the prepare phase of the inline_script (see the code comments for an explanation):

The script above creates a canvas with the animal picture, an empty canvas, and a mouse object. But so far it’s all preparation–The script doesn’t do anything visible. Which brings us to the run phase of the inline_script:

If you aren’t very familiar with Python and OpenSesame, the script above may look overwhelmingly difficult. But the logic is actually quite simple:

  1. Present the animal picture
  2. Collect a response until the animal picture must be removed (i.e. 1000 ms)
  3. If a response was received in step 2, sleep for the remainder of the time that the animal picture should be visible
  4. Remove the animal picture (i.e. present a blank canvas)
  5. If a response was not received in step 2, try to collect a response again

That’s it. Once you’re able to see understand this logic, and you understand how this logic can be implemented in an inline_script, you will pretty much be able to implement every experiment you want!

References

Mathôt, S., Schreij, D., & Theeuwes, J. (2012). OpenSesame: An open-source, graphical experiment builder for the social sciences. Behavior Research Methods, 44(2), 314–324. doi:10.3758/s13428-011-0168-7

Note: I’m going to turn this into a page and keep working on it. This is the draft; since it’s been sitting in the WordPress drafts for over a year, I thought I should do something with it… What makes a movie nerdy? Comic books, hacking, robotics, fantasy and straight-up-nerdiness. There are a lot of movies that really hit on some of these topics. Some do it well and others do a terrible job. Everyone is going to have their favorites, but I wanted to share mine well in advance of Memorial Day if only to help you prep to stay indoors and get just a little more pasty than you got this winter. Given the subjective nature of the nerdy factor, I’ve chosen not to rate these in any particular order. Instead I’m grouping them by sub-nerdy-genre. Hope you enjoy! Nerds Make Good
  • Revenge of the Nerds: Really, this is one of those movies that started it all and belongs at the top of the list.
  • The 40-Year Old Virgin: Almost didn’t put this on the list ’cause I couldn’t figure out if they were making too much fun of… Whatever, it’s hilarious…
  • Jon Dies at the End: Meat monsters, boys who get girls, alternative universes and a surprise ending where Jon dies… Go figure. Or does he…
  • Napoleon Dynamite: Instant classic. No description needed.
  • American Splendor: Underground comic books, girls, the 70s.
  • Fanboys: Star Wars, Trekkies, a girl. Srsly.
  • Jay and Silent Bob Strike Back: This movie should have been called Kevin Smith gets back at Hollywood for making him rich as hell. Pobresito.
  • Chasing Amy: You’re probably gonna’ see most Kevin Smith movies somewhere on the list. This one is a boy gets girl flick with a twist. I’m a sucker for those. Don’t tell anyone…
  • 21: This made the list because… It’s true. Get good at maths, go to Vegas, get wealthy, get a big head, get a beat down.
  • Pi: OK, so he doesn’t make good really because he drills out part of his brain. But he does end up being all Zen, looking at the leaves blowing, finding peace and not dying like the other guy.
  • Can’t Buy Me Love: Nerdy kid pays girl to date him, things go south, kid ends up with girl. Apparently if you tight roll your khakis Amanda Peterson (you know, from Silver Spoons and Annie) will fall all over you. Noted.
  • Love Potion Number 9: Sandra Bullock goes from nerdy chemist to socialite. Seems like I’ve seen that plot since…
Nerdy Fantasy Movies
  • Harry Potter
  • Highlander
  • The Princess Bride
  • Willow
  • The Labrynth
  • Lord of the Rings
  • The Hobbit
  • Stardust
  • Clash of the Titans
  • Wrath of the Titans
  • In the Name of the King: A Dungeon Siege Tale
Nerd Comedy
  • Monty Python and the Holy Grail
  • Spaceballs
  • Galaxy Quest
  • Frequently Asked Questions About Time Travel
  • This is the End
  • The Green Hornet: Seth Rogen, Kato, a car that shoots missiles.
  • Superbad: There almost needs to be a new genre called Nerd Comedy with Seth Rogen in it.
Nerdy Documentaries
  • Nerdcore Rising
  • The Internet’s Own Boy: The Story of Aaron Swartz
  • To Be Takei
  • Web Junkie
  • The Manhattan Project
Comic Book Movies
  • X-men
  • Comic Con Episode IV: A Fan’s Hope
  • Paul
  • Batman
  • Superman
  • Captain America
  • Thor
  • Iron Man
  • Guardians of the Galaxy
  • The Hulk
  • Spiderman
  • Sin City
  • Constantine
  • Elektra
  • Ghost Rider
  • Ghost World
  • Green Lantern
  • Hellboy
  • I, Frankenstein
  • Jonah Hex
  • Judge Dredd
  • Blade
  • Catwoman
  • Daredevil
  • The League of Extraordinary Gentlemen
  • Mystery Men
  • Punisher
  • R.I.P.D.
  • The Rocketeer
  • The Spirit
  • V for Vendetta
  • Watchmen
  • Steel
  • 300
  • Alien vs. Predator
  • The Avengers
  • Wanted
  • Swamp Thing
  • Steel
Science Fiction
  • Star Wars
  • Star Trek
  • Metropolis
  • Avatar
  • Hunger Games
  • Brazil
  • Serenity
  • Dune
  • Beyond Thunderdome
  • Alien
  • Cowboys and Aliens
  • Soylent Green
  • Equilibrium
  • Divergent
  • 2001 A Space Odyssey
  • Planet of the Apes
  • Vanilla Sky
  • War of the Worlds
  • Oblivion
  • Gattaca
  • Stargate
  • Solaris
  • Donnie Darko
  • Tank Girl
  • Timecop
  • Idiocracy
  • Hitchhikers Guide to the Galaxy
  • Strange Days
  • Limitless
  • Forbidden Planet
  • The Fly
  • The Fifth Element
  • Starship Troopers
  • John Carter
  • Iron Sky: Nazis on the moon. No huge names. Not awful given that.
  • Cube: A movie based on a bunch of rooms making an infinite maze of sorts that keeps changing? Math and a last ginger standing kind of pace.
Nerdy Kids MoviesInfinite
  • The Last Airbender: I watched all the cartoons with my daughter and so when the movie came out I wanted to take her. Let me be clear, this is not a movie made for 4 year olds. But it was really well done I thought. Obviously, directors have to take some liberties when adopting a dozen hours worth of cartoon story line into a feature film, but I thought it was totally worth it. Too bad they didn’t finish the trilogy.
  • Flight of the Navigator: So bad it’s good. David pilots alien ships and disappears for 8 years without growing a day older. Great little flick that reminds me how I dressed when I was that age. Some of the graphics didn’t hold up, but I’m not so overly judgmental.
  • Kick-Ass: Not many movies are original. This one was. It was fun, campy and I didn’t want to throw up when I saw Big Daddy like I usually do in movies he’s in!
  • Kick-Ass 2: Rarely is a sequel as good as the first movie. This is no exception. But it was original and campy, much like the first and well, well worth the watch.
  • Super 8: Normally I don’t like kids in creepy movies, but they pulled this one off pretty well. Not for younger kids for sure!
  • Goonies: Ah, the originals make ya’ swoon don’t they. What more could you want, than a big bad guy, Corey Feldman, Josh Brolin, Sean Astin, Martha Plimpton and the list goes on. Pirates, booby traps, gold and who could forget Data!
  • Back to the Future: I’m just going to include the whole franchise here. I’m still after a Delorean. Michael J Fox at his best. Well, Teenwolf wasn’t so bad, either. But the Doc, the plutonium and changing the future from the past. Awesome!
  • Hugo: A crossover between nerdy kids and fantasy, this period flick feels more like a steampunk movie than the traditional Disney kids movie (Disney didn’t make it). It’s a good movie. Cinematography, story line, acting, directing, etc. Didn’t get nearly enough attention and I think it will stand the test of time unlike many kids movies.
  • Teenage Mutant Ninja Turtles
  • Attack the Block
  • Cloak & Dagger
Animated
  • Pretty much every anime movie ever. But Akira really stands out as being the
  • Wreck-It Ralph
  • The Lego Movie
  • The original Lord of the Rings
  • The original Hobbit
  • Final Fantasy: The Spirits Within
Nerdy Robots
  • I, Robot
  • Robocop
  • Transformers
  • Bicentennial Man
  • Short Circuit
  • Wall-E
  • A.I. Artificial Intelligence
  • Terminator
  • Blade Runner because even nerds dream of electric sheep
  • Real Steel:
Zombies, Nerdy Monsters, Werewolves & Vampires
  • Zombieland
  • Army of Darkness
  • Shaun of the Dead
  • Men in Black
  • Mars Attacks!
Video Games
  • Scott Pilgrim vs. The World
  • Tron
  • Lara Croft: Tomb Raider: This movie made a lot of money. It’s made over a quarter of a billion dollars. It also set a new record upon release for movies with a female protagonist. But the only reason it didn’t win worst acres was that Mariah Carey released Glitter that year. It did well enough in the box office though to score a sequel.
  • Power Glove
  • Electric Dreams
  • The Prince of Persia
  • Grandma’s Boy
  • The Wizard
  • Need for Speed
  • Gamer
  • Existenz
  • Noobz
  • Max Payne
  • Far Cry
  • Hitman
  • Postal
  • BloodRayne: Wow, did Uwe Boll just miss it with this one. I mean, another game that could have been a great movie but needed so much more. It’s not easy to screw up a movie with Billy Zane Michael Madsen and Ben Kingsley when you have a plot as awesome as BloodRayne to work with in the first place…
  • DOA:Dead or Alive: Honestly, when I saw this I thought “Self, you should be playing this video game or watching someone play this video game, not watching actors trying to act like they’re in a video game. Happens a lot but I keep watching all of these…
  • Resident Evil: This has just become a great little franchise.
  • Silent Hill: I almost didn’t put this on because I just don’t like creepy movies.
  • Doom: This movie was doomed the second The Rock was cast in it.
  • House of the Dead: Gratuitously violent, just like the game. If you drink every time a zombie bites it you will die. In fact, if you’ve read everything up until now you might want to anyway. I like that this movie is authentic in that it doesn’t remotely try to be good. Stupid young people shoot stupid zombies.
  • Double Dragon: Billy Lee and Jimmy Lee. Somehow Alyssa Milano and Andy Dick end up in here too. As an early video game movie (apparently grunge was more popular than nerdy stuff at the time) I think the rest of that industry learned from this movie that special effects alone wouldn’t get you there and that you needed a plot.
  • Street Fighter: This is where we learned that Jean-Claude Van Damme should have stopped long before. But it was a video game, so everyone into such things at the time went to see it anyway. We knew it would be awful and we still went. Like Daredevil. It did have to compete with Dumb and Dumber for box office dollars, though… Now if Duncan McCracken had been cast as Guile it could have been saved…
  • Mortal Kombat francise: I had no idea this franchise could go downhill after the first one but… It did.
  • Wing Commander
Close Encounters of the Third Kind Sphere Explorers Surrogates Primer Nirvana Young Frankenstein The Time Machine Scanners Contact Untraceable Hackers Pwn Teh World Jobs Firewall 1. Office Space

X86_64' Is Not An Allowed Value For Option 'ios-arch' · Issue ...

is the story of Peter Gibbons, a computer programmer who spends all day doing mindless tasks. Thanks to a hypnotic suggestion, Peter decides not to go to work at the same time his company starts laying people off. When layoffs affect his two best friends, they conspire to plant a virus that will embezzle money from the company into their account. The movie sports the scene where they take the fax out and smash it with baseball bats, the traffic scene on the way to work, the scene where he gets asked to work on Saturday, the scene where he pictures his boss and his new girlfriend (Jennifer Aniston) and of course the stapler. It is a classic and would be very easy to end up watching again tonight, as I write this… 2. Sneakers is probably one of the best hacking/phreaking movies of all time. Sure, it’s a little dated, but they all are. It was pretty good for the day though, and no completely off-the-wall ideas about what is and is not possible. The guy from 30something is awesome (aka “Dick”) and Martin Brice (Robert Redford) does a great job. River Phoenix is awesome and Dan Aykroyd is just like every conspiracy theorist ever. “It’s Not About Who’s Got the Most Bullets, It’s About Who’s Got the Information”. Great lines, great writing, great cast and still holds up as a pretty good movie after all these years (20, since it was released in 1992). 3. War Games is about Ferris Bueller (or a nerdy whizz kid of a Ferris Bueller) who connects into a top secret military mainframe and ends up with complete control over the United State’s nuclear arsenal. He then has to find the physical mainframe and disable it. What’s so awesome is that it’s InfoSec 101: use a password, put multiple layers of security in place and don’t hook ICBMs up to unsecured systems. Really makes the Wozniak quote “never trust a computer you can’t throw out of a window” make sense. I’ve been waiting for years to hear “shall we play a game?” Just like when I consider having an argument with my wife, “the only winning move is not to play.” 4. Tron is a movie about Kevin Flynn, a video game designer that gets converted into a digital person by an evil software pirate named Master Control. Disney somehow manages to take Jeff Bridges and turn him into a 3D version of himself. Complete with geometrical landscapes that comprise cyberspace, games and there’s even a girl (the one place where Tron isn’t very lifelike). 5. Hackers is the story of a young boy gets arrested by the Secret Service for writing a computer virus. He’s banned from using a computer until he turns 18. As a teenager, he moves to the big city to discover an awesome 2600-style underground of computer hackers. This one is complete with a teenage Angelina Jolie, skateboards, trench coats and modems. While it’s not completely realistic, it’s not utterly fantastical either (other than the hax0r kid getting the hot girl part). Imagine my disappointment when I got my first job with computers and Jolie wasn’t waiting for me… 6. Weird Science is a typical 80s flick about two unpopular teenage boys who “create” a woman via their computer. Their living and breathing creation is a gorgeous woman, Lisa (the name of the predecessor to the Macintosh, whose purpose is to boost their confidence level by putting them into situations which require Gary and Wyatt to act like men. On their road to becoming accepted, they encounter many hilarious obstacles, which gives the movie an overall sense of silliness. 7. Antitrust is a fictional account of computer programming extraordinaire Milo Hoffman. When Milo graduates from Stanford, he is recruited by Gary Winston, a character loosely based on Bill Gates. Winston is the CEO of a software company called NURV, on the brink of completing a global communications system called Synapse. Tragedy soon after strikes when Teddy Chin is murdered by a pair of Milo’s co-workers who made it look like a hate crime. Milo’s girlfriend Alice Poulson is turns out to be helping Winston and there are even bad guys working for the company inside the Justice Department. Basically, the message of the movie is that if you like computers, you should trusting no one and that nothing is as it seems. Luckily, in the real world, secrets can’t be kept for long (the more money you have the harder it seems to actually be to keep secrets). Which is why things like this don’t actually happen. But hey, at least we geeks get to feel important for a little while and this movie was actually well made. Having said that, Ryan Philippe is mediocre. Which was actually good enough in this one to be acceptable. 8. The Matrix trilogy is a fantastical look at futuristic hacker/programmer Thomas Anderson, living an ordinary life in 1999. Until Morpheus leads him into the real world, which is actually 200 years later and taken over by evil robots machines. The computers have created a fake 20th-century life called the Matrix to keep the human slaves asleep. The robots get power from the humans. Anderson is constantly chased by Agents (the opposite of that shirt that reads “I could replace you with a very tiny shell script”). At one point, the agents start replicating (I’ve accidentally filled a drive up by looping through cp before too). Anderson gets a cool name “Neo” and gets to be played by Keanu Reeves. All’s well (albeit varying degrees of well) until he becomes one with the matrix after about 7 or 8 hours of watching the movie. Actually, movies. It’s a trilogy. But Trinity (Reeves’ love interest) does use Nmap to run sshnuke against SSHv1 CRC32. Not a bad exploit for a lady wearing all leather… 9. The Net is the story of Angela Bennett, a computer expert whose interconnectedness comes back to haunt her. Back when Sandra Bullock was young and beautiful, she played an analyst who was never far from a computer. A friend like many of my own, whom she’s only spoken to over the net, Dale Hessman, sent her a program with a weird glitch needing debugging. She finds an easter egg on the disk which turns her life into a nightmare. Her records are erased from existence and she is given a new identity, complete with a police record. The best line is “computers are your life aren’t they?” Mostly because I find it easy to identify with such a line… Oh, and she uses a Mac! 10. The Girl With The Dragon Tattoo is the most recent movie on this list. And there are more than one. I won’t say to see one over the others, but do check out the hacker girl. The latest installment has the most awesome song from Trent Reznor in the soundtrack, which I could totally listen to while writing scripties (and have). 11. Takedown is probably the movie that cost the least on the list to make. It’s not a great movie, but worthy of cult status to many. But here’s the thing: hacking stuff is pretty boring to watch. Unless of course, it’s the 2 days a year you leave your basement to go sit in Las Vegas and hack stuff with real humans around you… 12. The Pirates of Silicon Valley is a documentary about the tycoons that took control of the personal computer market. It starts with their time in college and then covers the actions that built up global empires now known as Apple and Microsoft Inc. My favorite part of this is the way that they made Steve Ballmer out to be a complete idiot. The parts about Bill Gates, Steve Jobs, Wozniak and Paul Allen were pretty well known to me, even before I saw the movie. With Noah Wyle I kept thinking that at some point he was going to throw on his scrubs and start giving someone an ER-style heart surgery. Anthony Michael Hall plays an uninspired Bill Gates. The best part of his part is when he does Saturday Night Fever on roller skates and then falls down. When he became the wealthiest man in the world I wonder if he got skate-dance lessons. 13. Swordfish was just a bad movie. But every computer nerd is going to watch it and hopefully turn it into a drinking game of some sort. Let me get this straight: a guy is supposed to hack into some of the most complex systems in the world and was supposed to do so while having relations with a lady and having a gun pointed at his head. Oh, did I mention, he’s dead if he isn’t done in 60 seconds? There are some really good uses of real computer stuff on some of the screens at time. But, Travolta should still give up his SAG card. 14. Johnny Mnemonic is the story of a data courier, again Keanu Reeves, who accepts a payload to big to keep in his head for long, that he then must deliver before it kills him. Classic Reeves, a cheesy flick. Has Dolph Lundgren, so must be at least funny-bad. Ice-T and Henry Rollins make appearances too (the 1990s, baby). 15. Live Free or Die Hard is the latest (4th) installment of the Die Hard saga. In this one though, the Mac Guy helps Bruce Willis hack into stuff and blow stuff up. This gets to be on the list because Bruce Willis says: “Command Center, it’s a basement.” I thought maybe he was talking about my place… 16. Minority Report is on the list because the tech that guy has was awesome. Not as good as the tech that Iron Man has, but a bit more realistic in some places. I actually think that a few products were developed after engineers watched this movie personally, and I’d love to see the rest made possible. Might have been higher except the cast. 17. D.A.R.Y.L. – After watching D.A.R.Y.L. I think I spent years thinking I was some sort of robot. Probably explains plenty. When I finally got around to reading Isaac Asimov’s Robot Series I guess I didn’t think I might be an android any longer. “It’s only human to make mistakes, but Daryl never does.” In this movie, a kid realizes he’s actually an artificial intelligence. He then gets chased down by the government, looking to reclaim their intellectual property. Classic ET-style the government are the bad guys kinda’ moments ensue. 18. Untraceable is a move from 2008 where Diane Lane plays a fed trying to track down a serial killer who posts live video of killing victims on the Internet. It’s borderline B-movie, but it’s not too badly done. Any plot gaps or technical mistakes I let slide due to the fact that the movie is set in Portland and the fact that I’ve always enjoyed Diane Lane. 19. Tron: Legacy is the second installment of Tron, which comes almost 30 years later, his son joins him in a movie that is more like the Big Lebowski turns digital samurai than the original… I’m kinda’ suck of the rich brat concept. But at least he breaks into a data center and blows stuff up before getting sucked into the Matrix…

Reisen Udongein Inaba(Apprentice)

20. Eagle Eye is the story of Jerry and Rachel, two strangers thrown together by a phone call from a lady they have never met. She makes them and others perform a series of increasingly dangerous situations, using everyday technology to track and control their moves. Turns out she’s a computer. Shia LaBeouf is the star of this. How he got to be the star of this, Transformers and the replacement for the Indiana Jones movies is beyond me. He’s not a terrible actor, but he’s not worthy of such reverence from the nerd/action movie elite… This is not as awesome a nerd movie as it is a symbol of the future of nerdy movies. I guess this one is more about that thing people call Mobility than computing, but close enough… 21. Lawnmower Man should have just been one movie. The only one with Stephen King, this was the first VR movie I remember seeing. Pierce Brosnan is the not-really-bad guy, but the creator of the bad guy. This is like a digital Frankenstein flick. 22. Disclosure is another movie from the 1990s (1994) that shows Michael Douglas getting seduced by a woman. But this time, he ends up stopping before he closes the deal. So instead of boiling the family pet, he just gets sued for sexual harrassment. Lots of computers and screen shots. And Demi Moore in a 90s power suit. Awesome stuff! 23. Virtuosity

Fujiwara No Mokou(Indirect Recipient Of Eternal Life)

is about a virtual reality serial killer who’s actually more of a composite of serial killers. Weak plot, but Russell Crowe wasn’t a big star yet. It’s like of like Demolition Man, but with the VR spin on it. Russell Crowe is totally psycho. And he wears a couple of awesome suits in the movie (I’m pretty sure one of them was in Cool World as well). 50 terabytes was a lot back then! 24. eXistenZ

Kaguya Houraisan(Fellow Exile, Mistress)

is another artificial reality movie, but Jennifer Jason Leigh is a video game designer. I thought that the BioPort concept was too much, especially for the time. The theme was already a bit done by then, but it was at least a weird new twist… 25. The Computer Wore Tennis Shoes had Kurt Russell. It was from the 60s. But the time spent on explaining all the computing was awesome! The best part about this movie is that glimpse you get of what computers were like before the advent of the personal computer. Thank you to the Altair, Apple and other machines that helped to get us into a new world order! Finally, while this clip isn’t a movie, if you were curious what hacking stuff really looks like most of the time: Miscellaneous:
  • Catch Me If You Can because of the social engineering awesomeness it happens to be.
  • Independence Day because aliens apparently have Windows running on all their ships.
  • Jumpin’ Jack Flash because Whoopi Goldberg is actually a somewhat convincing engineer (or not).
  • Mission Impossible gets a nod for having an upside down Apple logo (for the time).
  • The Italian Job gets a nod for the real inventor of Napster (I guess he can duke it out with Metallica next).
  • Revolution OS for being a documentary about Linux. I’d love to see more of this kind of thing in the years to come (there’s certainly enough money floating around in the computer world to make more of them happen).
  • Jurassic Park had some computing in it, but doesn’t really count.
  • The Thirteenth Floor doesn’t make the list because it wasn’t original enough in its look at virtual reality.
  • Code Hunter was terrible.
  • Enemy of the State didn’t make the list because I’m sick of movies making people into conspiracy theorists.
  • Max Hedroom for being cool, new and unique at the time – and perfect for the era.
  • Netforce – Oh wait, no, that was a typo.
  • One Point O – Which might have made the actual list had the star not become a police officer in Law and Order.
Very much excluded from this list:
  • Gone in 60 Seconds had a hacker named Toby, but it also had Nicolas Cage
  • Ocean’s 13 had Roman but it also had Brad Pitt
  • Superman III had Gus, but then, it was total crap
  • XXX: State of the Union had another Toby (popular name for movie hackers) but then, it had Vin Diesel