FSCMC is a program written with node.js, developed for my master's thesis. The key features of this program are:
- Realtime message transmission (i.e. the interlocutors can read each other's message even when their opponent is still typing)
- Support group size greater than two persons (maybe broken, need to fix how the code interacts with the database)
- Have a detailed typelog system utilizing mongodb to record the precise time of each keystroke
- Have a spectator mode for observers to spectate the conversations
- Designed for conversation analysis
You can visit the demo here (Spectator View).
Install git
, node.js
, mongodb
Clone this repository using git.
$ git clone https://github.com/Nats-ji/FSCMC.git
Install the dependencies and start the server.
$ cd SCMC
$ npm install
$ node ./index.js
Alternatively, you can use nodemon
to the development.
$ npm install -g nodemon
$ nodemon ./index.js
If you are on Windows and get this error nodemon.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
when using nodemon, open Powershell as Admin and type:
Set-ExecutionPolicy Unrestricted
Then type Y to comfirm.
Environment variables:
Before you start developing, you need to set up a .env
file to config the environment variables.
There is a sample file named .sample-env
in the root directory. All you have to do is to rename it into .env
and edit the values.
MONGODB = mongodb://localhost:27017/SCMC # Your mongodb connection string.
PORT = 80 # Port your app will be running on.
Visit http://your.domain:port
to enter the chatroom, and http://your.domain:port/spec.html
to enter the spectator view.
Please refer to the transcription system I specifically designed for this program. This transcription system was adapted from oral Conversation Analysis (Paul ten Have, p213). Table 1 shows the notations and the descriptions of the notations used.
Table1
Conversation Transcript Notation
Notation | Description |
---|---|
< | The action of pressing “Enter” key. |
= | To indicate no gap between the two lines. |
(0.1) | Pause time in tenths of a second. |
[ ] | The start and the end of an overlap. |
delete | To indicate the utterances that will be deleted later |
To indicate when the deletion happened | |
{cut$ utterance} | To indicate the sender cut utterances using the clipboard |
{paste$ utterance} | To indicate the sender pasted utterances from the clipboard |
{move# cursor} | To indicate that the sender moved the cursor somewhere in the ongoing utterance |
The action of a participant pressing the Enter key is indicated by the symbol “<” at the end of a line (Example 1a line 5, 7). The symbol “=” at the end of one line and at the beginning of the next line indicates that there is almost no gap between those two lines (Example 1a line 6, and 7). The length of a pause is indicated by time in tenths of a second inside parentheses (Example 1a line 6). The overlaps are indicated by brackets enclosing the utterances that are overlapped (Example 1a line 5, 6). The deletion consists of two notations, (1) an underline to indicate the utterances that will be deleted, and a deletion line over the deleted utterances to when the deletion happened. In line 6 of Example 1a, ZL typed “number 2 is a boy”, the underline below “a boy” indicates that she deleted “a boy” later. In line 9, there is a deletion line over “a boy”. This shows that ZL deleted “a boy” at this moment.
Example 1a:
005 SQ: OK, number one sisiis [a rising] sun. < 006 ZL: [number ] (1.5) 2 (8.7) is a boy = 007 SQ: =rsinsinising from the horizen < 008 (3.0) 009 ZL:a boysome[one who ] is in bed < 010 SQ: [mine is a girl] <
The notation “{cut$ utterance}” and “{paste$ utterance}” shows when the sender cut a piece of utterance and pasted a piece of utterance using clipboard. In line 55 of Example 1b, ZL cut the utterance “and in the last picture, the girl is on the way to school, I guess”. In line 62 of Example 1b, ZL pasted the utterance she cut in line 55 and posted it. The notation “{move# cursor}” indicates that the sender moved the cursor somewhere in the ongoing utterance. In line 58, SQ typed “so i think my no. 7 is the pic before your no.6 since my no.7 is the girl”. In line 60, she deleted “is the girl” first, then moved the cursor between “since” and “my” and typed “the girl in” which made the utterance become “so i think my no.7 is the pic before your no.6 since the girl in my no.7”. She then moved the cursor behind “no.7” and continued typing.
Example 1b:
055 ZL: {cut$ and in the last picture, the girl is on the way to school, I guess} 056 [you][ are right ] < 057 SQ: [ok ] < 058 SQ: [so i think my no.]7 [is the pic before your no.6 since my no.7 is the girl] = 059 ZL: [the picture 6 shows that 6:02 ] < 060 SQ: =is the girl(6.3) {since # my} the girl in {no.7 #} pic is combing her hair and 061 brushing her teath. < 062 ZL: {paste$ and in the last picture, the girl is on the way to school, I guess} <
- Add Control Panel
- Add typelog view page
- Add config file for easy configuration
- Add the function of loading the tasks from file
- Add the function to create more chatrooms
- Add the ability to switch between fully-synchronous and quasi-synchronous mode
GPLv3