PDA

View Full Version : [Mojo] Mojo - Actions Log - Pre Alpha Discussion



Flekkie
12-01-2009, 09:18 PM
So this thread is for contributions to help Freddie tweak the 'Mojo's Actions On This PC' log.

The goal is for this log to:


Display info in a clear way
Not be misleading about how Mojo works
Help people understand what Mojo is doing (or has done)
Help people understand how Mojo works


Here is the post where the discussion started, perhaps we can continue from there:



I thought the "Mojo's actions on this PC" pane displayed actions in a slightly non-intuitive way. Here is an example...I'm sure a bit of tweaking here could make it much easier for a non-savvy user to understand, but I might be jumping the gun mentioning it at this stage?Then please, help me tweak it! http://www.dual-boxing.com/images/smilies/smile.gif

Actually I think this is one of the most important things that people can give me feedback about. Supporting HotkeyNet has been a huge headache because people constantly assume incorrect things about how it works based on the info that the program shows them. This is totally my fault. It happens because the program displays info in a misleading or unclear way. I'd like to design this better in Mojo, so people can understand what the program is doing and how it works.

Here's what I was trying to help people understand.

Everything Mojo does consists of three main parts. That's the fundamental thing about the program.

1. The input. That's when the the user presses a key with a finger, moves the mouse physically, etc.

2. Message. The local copy of Mojo reacts to the input by sending info to all copies of itself that tells each copy what to do. I called this a "message" in the current display but (like everything) it can be changed.

3. Action. Each copy of Mojo does stuff that affects other programs on its own computer. The action is the reason people use Mojo (or any other boxing program). They want it to do stuff to other programs. In the current display I called the actions "commands."

In this case (key broadcasting) here's how these three things happen.

1. Input: You press or release a key. The local Mojo shows this in "Your last action."

2. Message: The local copy of Mojo sends messages to all the Mojos (including itself) telling them that the user wants them to inject the key event into all WoWs that are running on their computer.

3. Action: Every copy of Mojo injects a simulation of the physical input into every WoW that is running on its computer. There is only one exception. The local Mojo doesn't inject into the foreground WoW because that copy of WoW received the physical event.

If you disagree about the importance of making people understand these things, or you have a better idea of how to show them, or any other reaction, please, let me know. This is a good time.



Only 4 window handles are displayed, but key down would have been sent to 5 windows.No, actually Mojo only sent the signal to four windows. Mojo did nothing to the foreground WoW on the local machine. That WoW received the physical event from the OS when you moved the key with your finger.


Lastly, if I had more than one computer, I think I would prefer to see my computer's name instead of 'this computer' (guessing).Well, maybe, but let me tell you why I did that. I think it's extremely important for people to understand the concept of the local computer. That's whichever computer happens to be connected to the keyboard they are pressing at that instant.

One of the major misunderstandings with HotkeyNet is that practically every user jumps to the mistaken conclusion that there is something special about the server copy of HotkeyNet. I don't want people making that mistake with Mojo. The local computer can be any computer. It's whichever computer they happen to touch at that instant.

I think maybe the program can help people understand this if it always refers to the local computer as "this computer" instead of by name. I'm trying to make them realize that there's nothing special about the local computer. Every computer is local whenever you touch its keyboards or mouse. There's nothing special about any of them. (This is also why I removed any mention of "server" or "client" from Mojo's screens.)

Flekkie
12-01-2009, 10:25 PM
So.. I have a few thoughts myself, and I would be interested in people's reaction.

Firstly, here is a typical log entry that I see myself. However, I do not have more than one PC, so I am already missing a complete example of the current message. Could someone else post a good example for multiple PCs?
Single PC version looks like:

Command executed
From this computer.
Broadcast W Down to target windows on this PC.
Window handle 0x200602.
Window handle 0x160024.
Window handle 0x1B060C.
Window handle 0x170596.

Message sent
Broadcast W Down to World of Warcraft.Using a common language
"Input", "Message" and "Action" were the key words Freddie used. Assuming we stick with these three names, then I suggest we use them in the log.

Then, when problem solving or explaining on forums etc, we have a common language and understanding which is also communicated in the log.

The current log uses words such as "Command" and "Broadcast". Unless we change what word we use for the 3 basic things Mojo does, I suggest we avoid these words and use Input, Message and Action instead, wherever possible.


Sequence of events
If a Message is sent before an Action, then I suggest the log should log them in that order.

The example above shows a Message being sent to itself after an Action is sent to various windows. This would confuse me - I would not realise that the Message had actually been sent first.


Cause and effect
To take this further: why did something happen? Was it because a key was pressed/lifted? Or because a Message was received from another Mojo? Or because of some other piece of code yet to be implemented? I suggest this info also be included, or am I missing something and it already is in a different information panel?


Lost in a sea of info - Autorepeat
I can see a major use for the log being checking new code to get it working. In WoW, I will be holding down movement keys and modifiers, causing Autorepeats. At present, these Autorepeats fill up the log very quickly with the same key-down, and therefore I will find it very hard to find the info I need within the log.

I suggest that Autorepeats be restricted to one entry between other events. If possible, a count of Autorepeats could be shown perhaps? So as it repeated, instead of seeing the log fill up, you might see just a counter counting up?

Finally, to display this info in a way which does not make people (eg Blizzard) think there is any illegal automation going on because, well, there isn't.


Actions on other PCs
This is ground I cannot cover myself, since I only use one PC. But my guesses are that Mojo will only show events that happen on "This PC".

Other people will have to chip in when I make up poorly imagined suggestions for how to display this which are not useful or can be improved.

My first idea was that Messages are sent between "This Mojo" and other Mojos. So in a similar vein to "This PC" perhaps use "This Mojo" etc.


Broadcasting vs Passing through?
Freddie, I didn't fully understand your explanation about why I see Actions sent to 4 windows when there are actually 5. The bit I need clarifying is - referring to the picture - how does it work? Case 1 or 2? Or something else?
http://img402.imageshack.us/img402/6610/inputmessageaction.jpg

For my example below, I will assume case 2, but I assume that Mojo would be able to block keys from being sent to the active window as well (eg for a 'Round Robin' button which is sent to each window in turn, one window per press.)

If this is not an "Action", then how about extending the common language and calling it something else. "Pass Through"?


First hash at an example
So basically all that was working up to an example. Well, what do you think of something like this? Hopefully I'm not way off.

On "This PC":
Input: W Down, received from: keyboard on this PC
Message sent to: this Mojo
Pass through: W Down. Window name: World of Warcraft, handle: 0x200123.
Action: W Down. Window name: World of Warcraft, handle: 0x200602.
Action: W Down. Window name: World of Warcraft, handle: 0x160024.
Message sent to: other Mojo (2ndPCNameHere)
Action: W Down. Window name: World of Warcraft, handle: 0x1B060C.
Action: W Down. Window name: World of Warcraft, handle: 0x170596.On 2nd PC:
Input: Message, received from: Mojo on 1stPCNameHere
Action: W Down. Window name: World of Warcraft, handle: 0x1B060C.
Action: W Down. Window name: World of Warcraft, handle: 0x170596.On 1st PC for subsequent autorepeats: re-write the following lines (ie delete so that only one block remains to represent all 999 autorepeats, assuming nothing else was in-between):
Input: W Down (Autorepeat), received from: keyboard on this PC, 999 times.
Message sent to: this Mojo, 999 times
Pass through: W Down. Window name: World of Warcraft, handle: 0x200123.
Action: W Down. Window name: World of Warcraft, handle: 0x200602.
Action: W Down. Window name: World of Warcraft, handle: 0x160024.
Message sent to: other Mojo (2ndPCNameHere), 999 times
Action: W Down. Window name: World of Warcraft, handle: 0x1B060C.
Action: W Down. Window name: World of Warcraft, handle: 0x170596.I included window names, which makes it more cluttered. Lose them if it's a problem..?

rocnroll
12-01-2009, 11:26 PM
You do QA or technical writing for a living? This is pretty impressive (sorry, I need to read it thoroughly, but wanted to comment on your post).

Flekkie
12-02-2009, 07:03 AM
I'd better make some of my other ideas explicit.

Actions on a per window basis
So with some systems (eg FTL), each window receives a different input. This made me think of showing the action for each window, instead of the action as a header paragraph and the affected windows below.

But the flipside is it can seem more cluttered, I suppose.


Clutter
Here's another idea, looking at reducing clutter. Hopefully Freddie can stop me suggesting impossible stuff, and others stop me suggesting crappy stuff.

Input: W Down, from: keyboard on this PC
Message sent to: this Mojo
Pass through: W Down to 0x200123 (World of Warcraft).
Action: W Down to 0x200602 (World of Warcraft).
Action: W Down to 0x160024 (World of Warcraft).
Message sent to: other Mojo (2ndPCNameHere)
Action: W Down to 0x1B060C (World of Warcraft).
Action: W Down to 0x170596 (World of Warcraft).I also thought of colouration, but I assume colour formatting would be harder to implement, and prevent logging to text file / posting on forums etc.

Or how about using spacing a bit?

Input: W Down, from: keyboard on this PC
Message sent to: this Mojo
Pass through: W Down to 0x200123 (World of Warcraft).
Action: W Down to 0x200602 (World of Warcraft).
Action: W Down to 0x160024 (World of Warcraft).
Message sent to: other Mojo (2ndPCNameHere)
Action: W Down to 0x1B060C (World of Warcraft).
Action: W Down to 0x170596 (World of Warcraft).




You do QA or technical writing for a living? I'm an accountant for my sins! I don't enjoy it, so I'm trying other stuff too, until I hit on something I enjoy. The last year I was installing and customising accounts software for a greetings cards company. I guess I was project leader, but the team was just me, and the software consultant! Designed some pretty funky spreadsheets and Crystal reports at the end of that one, and taught myself most of it as I went, some SQL basics as well.


This is pretty impressive (sorry, I need to read it thoroughly, but wanted to comment on your post).Thanks. I was worried the wall of text would kill it at birth TBH.

Dammit I've picked up Freddie's habbit of quoting everything.

Freddie
12-02-2009, 09:44 AM
Thanks, Flekkie for all the thought you're putting into this! :)

I'd like to stay quiet for a while and see what other people think. But I should probably say the following.

The program has two windows, "Your actions" and "Mojo's Actions." They show Mojo's input and Mojo's output. If the word "action" is used differently in one of the windows, or if input is shown in the second window, then the windows themselves have to change.

Freddie
12-02-2009, 09:57 AM
Freddie, I didn't fully understand your explanation about why I see Actions sent to 4 windows when there are actually 5. The bit I need clarifying is - referring to the picture - how does it work? Case 1 or 2? Or something else?
The second picture is the correct one.

Some of the arrows in that picture indicate actions by the operating system. Some of them indicate actions by Mojo.

Everything you're talking about here is appearing in a window called "Mojo's actions on this computer."

The only things shown in that window are Mojo's actions.

Mojo doesn't do anything to the foreground window.

The operating system, not Mojo, is sending keystrokes to the foreground window, just like it does when Mojo isn't running.

When I made the window, I thought of it like the speedometer in your car. The speedometer is an instrument that helps people control the car. This window is an instrument that helps people control Mojo. The speedometer shows your car's speed, not other car's speeds. This screen shows Mojo's actions, not the operating system's actions

Yes, Mojo can block keystrokes from reaching the foreground window, if it wants to But right now it's not blocking them.

In HKN1 and HKN2, which are hotkey programs, not broadcast programs, blocking the trigger (the physical key event) from reaching the foreground window is the default for a hotkey, so whenever they allow the trigger of a hotkey to reach the foreground window, that's treated as an action.

"Passthrough" is treated as an action in those programs because it's not the default. Since it's not the default, the user has to actually write "Passthrough" in a script, and anything you write in a script seems like an action, since you're writing an instruction for Mojo.

But here, where the program is acting like a broadcaster, where there are no triggers, the default is to do nothing to the foreground window, so passing through doesn't seem like an action to me.

Now that you've got me thinking about this, I think probably "passthrough" should be treated identically in broadcast and hotkey modes, since Mojo will do both. If it works one way with broadcasting and a different way with hotkeys, people will get confused.

One thing I've learned during HotkeyNet's two-year beta is that many people get terribly confused by this even with hotkeys by themselves. I've gotten many dozens of angry emails and bug reports accusing HotkeyNet of "disabling" their keyboards because (for example) they defined the X key as a hotkey and then found that pressing X no longer sends the character X to their foreground window. Well of course it doesn't, they just defined it as a hotkey! They just redefined the action performed by that key! In HKN1's script language, if they want X to continue to perform its normal functions in addition to triggering a hotkey, they have to write "passthrough" in the hotkey definition. But broadcasting is a different kind of thing.

I should add that "PassThrough" is one of the most misunderstood words in HKN1' s script language. I've noticed that even some smart programmers who use HKN1 find it incomprehensible.

Given the confusion, maybe it's a good idea to change the way this is done.

.

Freddie
12-02-2009, 10:09 AM
I deleted this because I really do want to stay quiet for a while. :)

Freddie
12-02-2009, 11:40 AM
I just added some more stuff to my answer about 4 vs 5 windows.

Fizzler
12-02-2009, 03:55 PM
I like this format:


Input: W Down, from: keyboard on this PC
Message sent to: this Mojo
Pass through: W Down to 0x200123 (World of Warcraft).
Action: W Down to 0x200602 (World of Warcraft).
Action: W Down to 0x160024 (World of Warcraft).
Message sent to: other Mojo (2ndPCNameHere)
Action: W Down to 0x1B060C (World of Warcraft).
Action: W Down to 0x170596 (World of Warcraft).

I agree that the repeating actions needs to be throttled somehow. Holding down the W key just floods the log.

The wording is not so crucial to me whether it is pass, broadcast or action.

I would like to see custom window names if possible. Instead of 0x160024 a slot number or ability to customize the window name would be nice. It would make troubleshooting a little easier. This is assuming that in future loads you will be able to pass specific keys to specific windows. For example Pressing 3 will only pass to Main window and only the healer.

Freddie
12-02-2009, 04:35 PM
I agree that the repeating actions needs to be throttled somehow. Holding down the W key just floods the log.

In the finished program, people will use this screen for debugging their scripts. There will be times when people want to see a great deal of detail (including perhaps automatic repeats) and times when they don't. So my inclination is to provide settings where they can adjust how much detail gets shown.

I would like to emphasize that this screen will probably not be the main screen in the fniished program.


This is assuming that in future loads you will be able to pass specific keys to specific windows. For example Pressing 3 will only pass to Main window and only the healer.
Yes of course. This program is going to be extremely powerful.


I would like to see custom window names if possible. Instead of 0x160024 a slot number or ability to customize the window name would be nice.
This gets into the very important question of how the GUI allows people to identify their individual game instances. This involves not only window names but also launching the games, identifying the exe directories, etc. This is a very big question, much bigger than the topic in this thread, and I'd like to save it for another thread.

Flekkie
12-02-2009, 07:31 PM
My brain has turned to jelly. I'll think about it again in a day or two, need some computer generated violence to recuperate! :D

Fizzler
12-02-2009, 07:45 PM
My brain has turned to jelly. I'll think about it again in a day or two, need some computer generated violence to recuperate! :D

My brain turned to jelly after reading your post. Good stuff but more thought was put into it than I was able to muster myself :)

Freddie
12-02-2009, 07:50 PM
I'm going to be quiet too because I'm working like a madman to try to get mouseover published by tomorrow.

Tomorrow is a deadline in a game I've been playing to see if I can get a genuinely useful build published within one month from the day I started. :)