Archive for July, 2008

Built a Dassie related works paper site

Monday, July 28th, 2008

I have started filling up my related works and background reading paper site for DASSIE located here. Most of the papers there have write ups attached to them. The ones that do not are in the queue to be reviewed next. I also have some sorting/organizing planned for that site once I finish going back through a few more years of IUI conferences.

I also ran a profiler over the C# version of deaccon to figure out where all the slow/heavily used methods are and then generated/tested C++ versions of them. Once I wrap these up with some python code and tie everything together we should have a screaming fast version of DEACCON in a few days.

Okay post evacuation of the building (gotta love gas leaks) I found concepts in my reading that it might be beneficial for us to at least look at for DASSIE. The first is the concept of how much people trust agents and ways to build that trust. The second concept was providing a very rich layer of feedback in the interface between humans and Agents. This way not only can you tell the human why an agent did something they will be able to understand the why, which will prove immensly helpful in debugging simple common designable agents.

Todo from July 23rd

Wednesday, July 23rd, 2008

Clean up study admin.
Recruit more study participants
Setup related works stuff for DASSIE and then start filling it.
Commit Everything I have been working on into SVN.
Implement DEACCON in  Python.

Summary: Decision-Theoretic User Interface Generation

Monday, July 21st, 2008

This paper presents a novel method of generating a user interface via machine learning.  The basic requirements for the interface are entered into the interface generation algorithm along with any physical constraints associated with the device the interface will be presented on.  A trace of typical user activity is also provide to the algorithm.  From this the algorithm present the user with series of questions.  The results of these questions and the earlier requirements and constraints are feed into a machine learning algorithm which applies linear optimization to generate a semi-final interface to present to the user.  One of the more interesting aspects of this algorithm is that it continues to run after the interface has been generated and it looks at how the user interacts with the interface to generate improved versions that optimize the most common tasks.

I found the use case they presented to be very interesting, they use the dynamic interface generation to create interfaces that have been adapted to specific users motor skill impairments.  The algorithm works almost exactly the same as in normal inteface generation except that instead of testing various inteface configurations to see which ones the user prefers it is looking at which set of interfaces the user has the easiest time interacting with.  This allows it to build a custom set of interface tools that optimize on the level of motor control the user possess.  Both there statistical tests and there ancedotal evaluations presented very good results.

Bib:

Decision-Theoretic User Interface Generation
Krzysztof Z. Gajos and Daniel S.Weld and Jacob O.Wobbrock
Proceedings of the Twenty-Third AAAI Conference on Artificial Intelligence (2008)

Dassie Study Upgraded

Sunday, July 20th, 2008

I realized this morning that there was a major bug in way the back and forward buttons were being handled in the study. It was possible to change which scenario/role the participant was assigned by paging back and forward through the study. I have since corrected that and added additional data logging to record which scenario and role each participant was assigned.

I also picked up on why I was having such horrible circular dependence problems with DEACCON. Apparently C++ has to figure out how much memory an instance of class would take up so that it knows how much to allocate, which does make sense. Because I had two classes that contained instance of each other it was impossible for the compiler to figure out how big each one would be.  With that knowledge in hand it becomes somewhat obvious that a pointer should be used in place of the class instance since they are of fixed size. Now back to work on DEACCON.

07/17/08

Thursday, July 17th, 2008

Its been an amazingly hectic week so far. I tossed my edits into the AIIDE paper to address some of the concerns raised in our reviews. Primarily they were fixes to clarity and 2 minor spelling errors. I was able to completely incorporate the suggestions from two of our reviewers. The third reviewer was in my opinion off base in his review so I didn’t give much weight to his suggestions.

We ran two demos this week, one of them was to some visiting prospective students from Afghanistan which I thought was interesting. The student that was interested in computer science might be worth keeping an eye on as he seemed pretty smart and very interested in game development.

DEACCON is progressing though it feels like a constant fight with the compiler since it still doesn’t like my circular dependences at all.

For the poster I am supposed to be thinking about, I like the idea of pulling heavily from the art assets I created for my paper. I think a nice big high res view of the comparisons of decompositions I used as a final page would look very good(presented at like twice the size as in the paper).  Pulling the algorithm psuedo code from the paper and presenting it along with a bunch of images of the algorithm in action would also be very nice.  Finally I think the poster would need a quick text write up of why this is important and what can be done with it, maybe with some images of it running in skookum to provide a real world grounding.

Study Ready to roll

Tuesday, July 15th, 2008

I believe that everything is good to go on the study.  I just tossed the last touch on the study admin page to add the back and foward buttons you wanted.  Study remote results viewing is here:

http://playground.uncc.edu/Studies/DASSIES-Study-1/StudyAdmin.php

And now back to working on DEACCON and CGUL.

7/9/08 – DASSIE Study 1 about to launch

Wednesday, July 9th, 2008

Just finished adding the logic behind study 1.  Everything looks good and mechanically is ready to go.  I love the captcha code library from reCaptcha it made my life a lot easier and it works great.  Half the time I can’t even read what they are producing.  If I ever need another captcha I know where to get them now.  The php was a nice change of pace from the C++ but I guess it is time to go back to wrestling with that.  Looks like I will be doing an opengl python implementation for the rendering engine as well which should be fun.

Message Passing System

Wednesday, July 2nd, 2008

I have been working on devising a message passing system using shared memory(it would also work with files or networks) to communacate between the multiple parts of CGUL.   I settled on a system to takes a chunk of shared memory and divides it up into lines each of which represent a single command.  I thought about trying to move entire chunks of data back and forth via some kind of packet structure but I don’t know how well that will work in what is going to be a real time application.  Each unique line will contain a semi-unique transaction ID number(roll over will be permitted over the life of the program but all numbers of pending and open commands will be unique).  The memory region set aside for communication will be accessed by 2 pointers for each application.

For example DEACCON will contain a write pointer that starts at the begining of the file and inserts commands.  This pointer will advance over the allocated memory until it reaches the end of allocated memory at which point it will roll back to the start of the assigned memory.  At no point will the write pointer move into or past the reading pointer.  The reading pointer will start at the begining of the assigned memory and wait on each command until the command has been executed and replaced with an “ack” signal from the visualalizer program at which point this pointer will advance.  At no point will the read pointer move into or past the write pointer.  Commands will be processed in the order that they are recieved by the visualizer program.  The amount of allocated memory lines cannot exceed the size of integer else I would potentially run out of unique command ID’s.

Commands will be of the following form:
CommandID(int), Command(string or char[]),Command Parameters

The following commands are planned(assume each would have an ID int in front of them):

Lock –Locks the display causing it to throw up a loading screen.
Unlock — Causes the display to render again
AObject, OID — Adds object
DObject, OID — Deletes object
CObject, OID — Clears the Vertexs of an object
AVert, OID, TypeV, Vertex info — Adds a Vertex
AVertL, OID, TypeV, Number of Verts, Vertex Info –Adds a list of verts
AFace, OID, TypeV, Number of Verts, Vertex Info — Adds a face to the specified object
Trans, OID, X,Y,Z — Transforms object
Scale, OID, X,Y,Z –Scales Object
Rot, OID, W, X, Y, Z — Rotates object using  Quaternion
Load, FileName –Loads the specified file.  File loader will be determined by the visualizer based on the extension of the file.  Geometry will automatically be rendered.  –This will need to return something more than a simple “ack”.

Vtype = The types of Vertex Format defined in the red book(Position, PositionColored, ect)(int)

OID – Object ID Number(double)

Right now everything is in asci for the ease of debugging but a parrallel binary format should be trivial to debug since each component of a command can be defined to be a specific size and then encoded into a binary format.

6/30/08

Tuesday, July 1st, 2008

Back from vacation and just cleared off a major bug that was snagging up the port to C++.  Apparently the C++ standard library classes require that you follow very specific methods for setting up copy constructors which my Region class wasn’t.(I think it was either a visibility problem or an improperly declared parameter)  I never was able to get it to work it to work with my custom construct so I implemented a workaround to do my needed deep copy while letting the default provided copy constructor do what it need to make vector work.  It is an ugly solution but it allowed me to make foward progress which is the main thing.