Adrian Herbez Rotating Header Image

Posts under ‘projects’

Chat Fiction

This was a small experiment in delivering fiction through a simulated chat interface. There are two characters, both with pre-scripted dialog. The user takes on one of the roles, with the other being automated.
 
The automated character “types” messages by waiting a set amount of time between adding lines of text, with the specific amount of time being a function of the number of characters in that line. Once the automated character has typed a line, control switches back to the user. Each keypress on the keyboard adds a letter to a simulated text entry field, with the letters coming from the script. Once the user has “typed” all of the letters for a given line, it is added to the ongoing dialog (as if they had pressed the enter key), and control switches back to the simulated character.
 
Check it out here.

projects ,

Enitech Labs: Final Puzzle

During my time at Millions of Us, I was fortunate enough to work on Terminator: Dark Discovery, an ARG to promote Fox’s Terminator: The Sarah Conner Chronicle, created by Blair Erickson.

My involvement with the project consisted of designing and implementing the final puzzle. The puzzle needed to take six locations (as longitude and latitude values) and, if the values were correct, display a seventh longitude and latitude coordinate.

Since the project was based in the Terminator mythos, I thought that a terminal interface would be appropriate. If a user visits the site, they are presented with a command line prompt, which they can use to enter text. No hints as to what the text should be are given- figuring out that longitude and latitude strings were required was part of the puzzle.

Once the user has input six pieces of text, an image is generated. The image is meant to represent a graph of the neural network that the player is interacting with. The image is created via psuedorandom methods, with the entered text serving as the seed values. This results in the specifics of the image being directly tied to the text that was entered. That characteristic allowed parts of the “correct” image to be distributed as hints.

To solve the puzzle, the user must not only enter the correct six locations, but s/he must do so in the correct order. If that happens, a sequence of images (drawn from the various videos produced during the project) flashes, and eventually stops, displaying the final location.

The puzzle was implemented in Flash, which worked great except for the lack of a psuedorandom number generator. In order to guarantee that the results would be reliable (necessary since the visual output was being used as clues), I wrote my own simple psuedorandom number generator, based on the linear congruental method.

In order to prevent the solution from being extracted via flash decompilers, I had the SWF fire a request to a PHP script that would accept input from the SWF, check it, and (in the case of the proper inputs), serve the answer.

If a user discovered the URL of the PHP script via a SWF decompiler and attempted to hit it directly from a browser, they would be redirected to a page that typed out an ominous message, implying that Skynet had noticed the attempt and was sending terminators their way.

To see it for yourself, head here. That’s a test version that will accept “one”, “two”, “three”, “four”, “five”, and “six” as the correct input. If you’d like to see what happens when someone tries to access the server script directly, go here.

projects

2-bit Graphics


This was a small application I put together in Flash for a class I was teaching in the basics of digital imagery. The app is meant to demonstrate how GIF images work, meant to illustrate that you can have any specific color(s) you want, but only four at a time.

Users can click on a square to cycle through the four colors available, and can select a color to change its RGB components, allowing them to create old-school, lowfi images. To play with it for yourself, either click on the image or go here.

projects, teaching

XML Library for MEL

This is an oldie but a goodie, and one of the most generally useful things I built with MEL (Maya Embedded Language). I was frustrated that there was no straightforward way to import XML data into a MEL script, so I wrote a library to make such data available within Maya. It’s a bit of a workaround, as it creates empty transform nodes to hold each XML element, but doing it that way meant that the structure could be queried after the fact.

I’m sure this could be done in a much better way, now that Maya supports Python, but this was written before that was the case. If you’d like to know more about it, head here

projects , ,

Out-of-Office tool

This was one of the tools I built during my time at Linden Lab. It is meant to make it easy for employees to indicate when they will be out of the office, and to easily see when their teammates will be gone or otherwise unavailable.

I developed both the back-end (MySQL/PHP) and front-end (HTML/JS) components of the system from start-to-finish, though I owed Johnhenry Righter a big debt of gratitude for making it actually look good.

projects , , ,

Metrics dashboard

This was a tool I wrote while at Linden Lab to make it easy for employees to monitor metrics related to Second Life. A user could select metrics to subscribe to, which would then be displayed in individual windows. The background color (green, yellow, or red) of the window indicated whether the number was “good” (green), “bad” (red), or in between (yellow).

The stats reporting system was built by LL’s data warehousing team, and I built the frontend, including a windowing system implemented in javascript- each of the windows could be resized and moved around. Bigger windows would display their metrics in larger text, allowing users to highlight metrics that were especially important to them.

There was also a lightweight social component, in that the page to allow users to subscribe to metrics also displayed the usernames of everyone that had signed up to watch a given metric.

projects , ,

SL->RL

SL_RL01This was a fun little experiment in which I used OGLE to grab an OBJ of an model in Second Life, and then (after some cleanup in Maya) used Pepakura to make a printable pattern that could be assembled into a real-world version.

Click here for more images and for links to download the pattern, if you’d like to make your own uni-bike.

projects ,

Everything You’ve Ever Wanted

This was meant to be the start of a project by which a user could navigate an endless procession of products, with the individual products being pseudorandomly generated based on a seed tied to user position in the game world. I also had some ideas about making it more game-like, with a target item that the player would need to find.

I ended up with just a rough prototype, then I got distracted with other projects. The demo included generation of a shopping cart and shelves (through hand-coded vertices), and simple keyboard navigation. See below for a video of the demo.
\

projects , ,

PHPtree

tree image generated with PHP and the GD library

tree image generated with PHP and the GD library

This was an experiment in learning the GD graphics library offered by PHP. The script generates a simple, graphic tree via a simple L-system, implemented via recursion.

Go here to see it for yourself.

projects , ,

Tex Calc

screenshot of the texture calculator

screenshot of the texture calculator

While Second Life offers everything you need to apply complex textures to your objects on a per-face basis, it can be really tricky to determine the appropriate repetitions and offsets to get a specific portion of the texture onto a specific face.

I’ve created a tool that sidesteps the issue and allows users to interactively click and drag a selection box around a given portion of a texture. The program then calculates the necessary offset / repetition values to have the selected region appear on a face.

To use the program, download the zip file from here. Read the instructions below, or scroll down for a video.

After opening the program, load your texure image (JPG, GIF, BMP, or Targa) by clicking on the “load texture” button. Once you’ve done that, click and drag anywhere in the image to define a rectangular region. As you drag, you’ll see the region you’re selecting highlighted in red. When you let go of the mouse, the program will display the necessary repetition and offset values in the top-right. Using the specified values in SecondLife will give you the selected portion of your texture.

If the highlight color isn’t to your liking, click somewhere in the color swatch region to select a color that you would prefer to use (something that will contrast with your texture), and click on the “dot” button. The color of the selection dot will change to the color you selected, and further selections will be in that color.

You can also change the color of the horizontal and vertical guide lines to provide better contrast. To do that, select a color from the swatch and click the “guide” button.

projects , ,