ViB
Virtual Interactive Blackboard

About
ViB is a system created for the express purpose of aiding in visual communication between two or more peers over the internet. Inspired by IRC and the Nintendo DS Pictochat application, ViB is a kind of technical combination of the two. Its main goal is to allow multiple users to interact with eachother visually and in real time by writing/drawing on a "virtual blackboard" that all users can see and interact with. Many text-only conversations can suffer from lack of specific visual descriptions of some things. It may often be difficult for one party to truly describe visual thoughts to another. Attempts to illustrate what something looks like or how a system behaves or merely how to follow the line of logic when referring to multiple equations and/or diagrams can result in misinterpretations or loss of information entirely. ViB aims to solve these problems at least on some level by allowing immediate visual illustration that is shared by multiple peers. However, at this point, ViB is still very primitive and can handle only the assumed basic requirements of this type of communication. Future developments will include much more functionality such as some 3D object manipulation, image support, more equation editing and various other tools and features that will assist the system in performing to the level desired.

This Project
I (Craig) wrote ViB with a project group in mind. It is, however, merely a supplement to this site and not as vital to the group communication. Should anyone find it useful, my efforts will be sufficiently vindicated. The HTML version of the README that comes with the client program is below. Users of the client (and server, if that's the case) should be sure to thoroughly read all the following. Lastly, I stress that this is all still a beta and there are bugs, so please read that section carefully and/or talk to me about it. I try to keep a ViB server running at all times on one of my home machines so unless you run your own server using the instructions and files below, you can connect to me at any time and use ViB.

Client (win32) - vib_bX.X.exe
- Current Version: Beta 1.2
Look at client commands by typing /help as suggested by the welcome message

//Known bugs
- "Arrow" button and color button may not reset, visually until they're visually obscured or forced by windows to redraw. Since the arrow button changes its appearance to indicate when you may use the board when connected, its misbehavior can be troublesome if it occurs for you. The status bar (top of the window, below the menu) will always correctly indicate who has current control and thus, if your button doesn't reset when you think it should, look at the status bar to see who has control. To reset the button visually simply move it offscreen and back or click and HOLD (do not release) and move the cursor off, then release. I've only seen this behavior on ITLL machines. No one else has had issues with the arrow button as of 8/2005.
- Resizing and/or minimizing/restoring destroys ...a lot, if in client scaling mode (use /scalec to toggle client scaling, ask me about this for a morethorough explanation...this is *important*)
- Running the client without the font named properly or in the correct location will cause strange text behavior. I just haven't gotten around to fixing this yet but there's no reason you should be trying to use the client without the font anyway.

//General
>> Connecting: To connect to a server, select "Connect" from the Tasks menu
- Enter a server address (IP or named, e.g: "doclemur.com") and port (default is: 11011)
- Press "Connect" button and wait for connection confirmation in the main display
OR
- use the "/connect" command
>> Disconnect: Select "Disconnect" from the Tasks menu or use the "/discon" command

>> Permissions: User permissions are set on the server. A user may login and gain his rightful access by using

the "/setac" command (see /help) >> Priority: As of now, one user may draw to the board at a time when connected. To draw, the large blue arrow button will appear in the lower left of the screen (See bugs section above, heh). Click it to gain drawing priority. When finished, press the button again to return the "chalk" to the server so others may use it. Users with access rights above 2 have the ability to take the chalk from less privleged users.

>>Board dimensions: All board coordinates are managed non-dimensionally. Technically no matter what your size your currently is, other uses will have a relative representation of that board. However, resizing the board performs direct scaling which does not accurately maintain the coordinate system due to precision/rounding error. Thus it is advisable to choose a board size (likely, the maximized state of the window for max spatial resolution) and keep it there for the duration of the session. (use the /bdim command to see current board dimensions). However, for now, the default mode is to prevent client scaling of the board and only allow scaling due to incoming board items. That is, if the window is resized (or minimized/restored), the board will not scale its current state. Ideally, the board is meant to function with client scaling in order to complement network-translated scaling but there are issues as of now (see bugs section). To turn client scaling on, use the /scalec command but do so with caution. If Any serious rendering problems arise, disconnect and restart the client at the size you desire. The server will send you a fresh board.

>>Save/Load: Users with access level 1 or above have the ability to save and load board states on the server. Use the /save command to save the current state of the board to the server. A board is saved based on a unique name. If a name is used again, it will be overwritten. Use the /listsv command to see what states are available on the server. Loading is done by using the /load command and specifying the name of the board state desired.

>>Screenshots: Use File>Screenshot to capture the board only and save it as a full-quality jpg. As of now, only jpg compression is included. I doubt anyone really has an issue with that but requested formats (GIF, PNG, TGA, BMP) will be considered, lightly.

>>Board itself
Certain key combinations will be implemented in the future that affect the board rather than the current tool. As of now, the only one is

CTRL+Z: remove last item drawn

which will pop the last item on the board. However it is important to note that ALL USERS may do this regardless of who applied an item. This may change in a future release but has been included for convenience for now.

//Tools
Chalk >> Select tool, left click and hold to draw freehand
'S' key: toggle stippling
'C' key: toggles last-point connection
'A' key: toggles arrowheads (only on straight lines)
SHIFT (hold): auto-convert stroke into straight line
scrollwheel: increase/decrease line thickness

Text >> Select tool, left click on a location (Text tool includes a built-in Equation editor *not complete*)

CTRL+G : toggle greek alphabet
SHFT (hold): capital roman & greek (as you'd expect)
CTRL+UP: Superscript mode
CTRL+DOWN: Subscript mode
Scrollwheel: increase/decrease font size
SHFT+ENTER: Confirm edit (when done typing)

Rect >> Select tool, left click and drag (from top left to bottom right)

'S' key: toggle stippling
'F' key: toggle fill
SHIFT (hold): constrain proportions
Scrollwheel: increase/decrease line thickness

Ellipse >> Select tool, left click, hold to drag out semi-major axis, release left button, move mouse (unclicked) to define semi-minor axis, left click once to finalize. (When drawing a constrained circle the above directions are unnecessary: simply hold shift and drag whilst holding the left button)

'S' key: toggle stippling
'F' key: toggle fill
SHIFT (hold): constrain proportions
Scrollwheel: increase/decrease line thickness


Server - vibd
//Unix version: Beta 1.03 - vibd.tar.gz (includes Solaris binary)
Compiles on Linux (2.4.x ... tested on Slackware 10) and Solaris x86 versions (tested on Solaris 10 x86)

//Windows version: Beta 1.03 - vibd.exe (source available upon request)
Compiles on WinXP (SP..whatever, who cares? Windows is all the same)


//Usage
ViB server daemon runs simply and requires the following files/resources
- [FILE] .access (access.txt on win32): Permissions file.
This file sets user permissions on the server which range from 0-3. Each user should be added as such:
Name:pass:level\n (a newline at end of the file is required to get the last entry)
Absence of this file results in no user permissions being set.
- [FILE] .savelist (savelist.txt on win32): Saved state index file This file is the list of saved board states that reside in the saved/ directory. It must have a newline at the end.
- [DIR] saved/ : saved board state directory
This directory contains all saved state files and should be in the same directory as the server binary itself
- [FILE] *.bst : saved board state.
These files reside in saved/ and are the board states listed in .savelist. Do not remove any files from here without
removing the appropriate entry from .savelist.

Font Generator - fontgen
//Windows version only, source and/or unix versions available upon request
This utility program generates the font used by ViB. If you wish to change your board font from the one supplied you may do so by generating your own using the guidelines below. Included is the source image used to generate the default supplied font for reference. To create a font:

- Create a source TGA image at 24 or 32 bit depth containing your symbols (Assuming you have an appropriate image editor). Symbols must reside within equal areas within the image and, for proper results, must be integer divisions of the total image size. For example, the source image supplied (Lucida32.tga) is a 512x640 pixel image with 256 "blocks" for symbols, each symbol chunk being a chunk of the image that is 32x40 pixels. Each symbol resides within this space. Rules for symbol creation are:

- All non-symbol pixels must be black (0x000000) and symbol pixels may be any color that is non-pure and not black. Total white, 0xFFFFFF, is reccomended as a guide however your symbols will likely not be entirely pure white (grayscale from antialiasing etc). This is fine and totally expected. Fontgen works off of intensity. Thus, as long as your (color/3) != 85 and not 0, it's fine.
- The first (top left) pixel in any symbol block may not be pure white
- Symbol may reside anywhere within its boundary, it will be extracted accordingly
- To set the baseline of the symbol, place at least one pure-colored pixel (ex: 0xFF0000, 0x00FF00, 0x0000FF) on the line you wish to be the base (vertically, in the black area). The first pure pixel found vertically will mark the line (so all that is needed is one) The *top* of this line will be the symbol's base which is lined up with all the others. A symbol's descension below or ascension above the line determines its vertical position relative to others. The baseline is referenced with respect to the entire original symbol space.
- Symbols, of course, may be any image you wish but to comply with the ViB client, and have expected key combinations work accordingly, the order of your symbols must match that shown in the sample image.
- Run the fontgen program specifying the input TGA, the symbol dimensions (e.g. 32 and 40 for the sample) and the output name (".vbf" is automatically appended). As of current versions of the ViB client, the font must be within the data/fonts/ directory and be named "Lucida32.vbf".

Files
vib_b1.2.zip - Contains the main client win32 executable and the font (if you've never downloaded ViB, you need this)
vib_b1.2.exe - win32 client executable itself that is also within the ZIP file (if you're upgrading, you probably only need this)
vibd_b1.03.tar.gz - Contains the unix source code for the vibd server daemon and a Solaris binary for it (explained above)
vibd_b1.03.exe - win32 vibd server daemon executable (see instructions above)
fontgen.exe - win32 ViB font generator (see above)
Lucida32.tga - default font source image (see above)