Kokkoja as of 2026-10-10: the teacher's requests, the Session window, notices, the QR code, the license
This commit is contained in:
1 parent
95c80d04c9
commit
1d087af633
32 files changed
+4917
-890
No files matched your search
+142
-47
@@ -22,21 +22,44 @@ You need:
|
||||
`python3 --version`; if Python is not installed, macOS offers to
|
||||
install the command line developer tools, which include it. Any Python
|
||||
from 3.9 on will do.
|
||||
* **A web browser.** Firefox, Brave or Chrome; other browsers built on
|
||||
the same engines very probably work.
|
||||
* **A web browser.** Firefox, Brave or Chrome, or Safari on a Mac;
|
||||
other browsers built on the same engines very probably work.
|
||||
* **A pen tablet**, if you want to write by hand. A mouse works for
|
||||
pointing and for rough marks.
|
||||
|
||||
Get Kokkoja from its repository, either by downloading it as a zip file
|
||||
and unpacking it, or with git:
|
||||
Get Kokkoja from its repository: download
|
||||
|
||||
https://git.andykopra.com/ack/kokkoja-rel/archive/main.zip
|
||||
|
||||
and unpack it, or, if you have git,
|
||||
|
||||
git clone https://git.andykopra.com/ack/kokkoja-rel.git kokkoja
|
||||
|
||||
Nothing else is installed and nothing is changed on your system. To
|
||||
update later, download again or run `git pull` in that directory. To
|
||||
update later, download again or run `git pull` in that directory.
|
||||
Kokkoja is free software under the GNU General Public License; the
|
||||
`LICENSE.md` file in the directory is the license. To
|
||||
remove Kokkoja, delete the directory; your notebooks are elsewhere and
|
||||
stay.
|
||||
|
||||
### On a Mac
|
||||
|
||||
The same steps, with four things to know:
|
||||
|
||||
* Terminal is in Applications → Utilities. The first `python3` or
|
||||
`git` command may make macOS offer to install the command line
|
||||
developer tools; accept, and run the command again when it has
|
||||
finished.
|
||||
* The first time the program writes a notebook, macOS asks whether
|
||||
Terminal may reach your Documents folder. Allow it, once; the
|
||||
notebooks are there. The answer can be changed later under System
|
||||
Settings → Privacy & Security → Files and Folders.
|
||||
* The program opens Kokkoja in your default browser, Safari included.
|
||||
To use another, start the program with `--no-browser` and open the
|
||||
address it prints in the browser you prefer.
|
||||
* Wherever this documentation says Ctrl for zooming, use Command on a
|
||||
Mac. Both work, so a hand used to Ctrl is not punished.
|
||||
|
||||
## Starting Kokkoja
|
||||
|
||||
Open a terminal in the Kokkoja directory and run
|
||||
@@ -57,8 +80,13 @@ The relay address names the *Kokkoja server* you use. A server does two
|
||||
things: it passes the participants' messages, encrypted so that it
|
||||
cannot read them, and it serves the web site that your guests join from.
|
||||
The address above is Andy's server; whoever runs a server for you gives
|
||||
you its address. If you give the program no relay, it expects one on
|
||||
your own computer, which is useful only for trying Kokkoja alone.
|
||||
you its address. The program remembers it, so from the second time on
|
||||
|
||||
python3 kokkoja.py
|
||||
|
||||
is enough, and the program says which relay it is using. Give the
|
||||
option again only to change servers. Started for the first time with no
|
||||
relay, it stops and asks for one.
|
||||
|
||||
Other options, all optional:
|
||||
|
||||
@@ -73,28 +101,34 @@ Other options, all optional:
|
||||
## Starting a session
|
||||
|
||||
On the start screen, enter your name and the notebook for this session,
|
||||
and press **Start a session**. You are on page 1, a blank sheet, and the
|
||||
panel on the right shows the invitation.
|
||||
and press **Start a session**. You are on page 1, a blank sheet, and
|
||||
**Session** in the toolbar shows the invitation.
|
||||
|
||||
### The notebook
|
||||
|
||||
The notebook you name is a directory under `Kokkoja` in your Documents
|
||||
directory, made when it is first needed, and the start screen offers the
|
||||
names of the notebooks you already have. For teaching, a notebook per
|
||||
student works well: everything a student is given, with everything they
|
||||
and you wrote on it, gathers in that student's notebook, and the next
|
||||
lesson with that student starts by naming it again. Your library of
|
||||
exercises can live in notebooks of its own, such as *Exercises A1*, filled
|
||||
by keeping pages in a session of your own with nobody else present.
|
||||
A notebook is a directory under `Kokkoja` in your Documents directory.
|
||||
The start screen lists the notebooks you have; until you make one, there
|
||||
is *General*, the notebook for whatever has no notebook of its own. The
|
||||
last entry of the list, **New notebook…**, asks for a name and makes a
|
||||
notebook of that name, which exists from the moment a page is written
|
||||
into it. For teaching, a notebook per student works well: everything a
|
||||
student is given, with everything they and you wrote on it, gathers in
|
||||
that student's notebook, and the next lesson with that student starts
|
||||
by choosing it again. Your library of exercises can live in notebooks
|
||||
of its own, such as *Exercises A1*, filled by keeping pages in a session
|
||||
of your own with nobody else present.
|
||||
|
||||
The notebook can be changed during a session, in **Current notebook** in
|
||||
the panel. The page you are on then continues in the new notebook.
|
||||
The notebook can be changed during a session, in the notebook list in
|
||||
the toolbar. The page you are on then continues in the notebook chosen.
|
||||
|
||||
### The invitation
|
||||
|
||||
**Invitation** in the panel shows a link. **Copy** copies it; send it to
|
||||
**Session** in the toolbar opens a window; **Invitation** there shows a
|
||||
link. **Copy** copies it; send it to
|
||||
your guests by email, in a chat message, or however you reach them. A
|
||||
guest opens it, enters a name and is in. A guest with the Kokkoja
|
||||
guest opens it, enters a name and is in. Below the link the same
|
||||
invitation stands as a QR code: a guest with a phone or a tablet points
|
||||
its camera at your screen, and the link opens there. A guest with the Kokkoja
|
||||
program installed may paste it into their own program instead. The link
|
||||
carries the secret that protects the session, so send it only to those
|
||||
who should be there; anyone with the link can join and read the page.
|
||||
@@ -115,24 +149,72 @@ notebook, by itself, under a dated name; nobody has to remember to save.
|
||||
file chooser opens, beginning where your notebooks are and remembering
|
||||
where you last chose from; a directory path can also be typed into it.
|
||||
It shows small pictures of the image files it finds. Choose one and it
|
||||
is placed on the page: the first at the top of the sheet, each further
|
||||
one 8 mm below the lowest image there, centred, at its natural size. An
|
||||
image wider than the sheet is scaled down to fit between the margins, so
|
||||
a full-page A4 scan appears at about 92%; the chooser has a setting to
|
||||
turn that off, in which case the sheet widens to the image instead. PNG
|
||||
and JPEG files are shared as they are unless very large; other formats,
|
||||
and images over 2400 pixels on a side or 1.5 MB, are converted to JPEG
|
||||
and reduced first. A page holds up to 12 images.
|
||||
is placed on the page in one way always: 5 mm below the lowest image
|
||||
there, or at the top of the page if there is none, centred across the
|
||||
page's width, at its natural size, in front of the images already
|
||||
there. Natural size is the size the file records: a scan arrives at
|
||||
the size of the paper it came from. A photo from a phone or camera
|
||||
records no useful size and arrives at a tenth of a millimetre per
|
||||
pixel. An image wider than the page widens the page on both sides to
|
||||
hold it. From there you move and scale it by hand, as described next;
|
||||
there is no other setting to choose. PNG and JPEG files are shared as
|
||||
they are unless very large; other formats, and images over 2400 pixels
|
||||
on a side or 1.5 MB, are converted to JPEG and reduced first, which
|
||||
does not change the size they arrive at. A page holds up to 12 images.
|
||||
|
||||
To move an image, rest the pen on it, without moving, for a little over
|
||||
half a second: a green outline appears, and the image follows the pen
|
||||
until you lift it. It comes to the front of the other images, which a
|
||||
hold without moving also does. To scale an image, rest the pen near one
|
||||
of its corners: a green square marks the corner, and dragging it scales
|
||||
the image along its diagonal, the opposite corner staying put and the
|
||||
shape kept. This works with every tool: a dot the pen may have drawn
|
||||
while resting is removed, and the eraser erases nothing while it rests.
|
||||
Writing is not attached to images: an image moved from under writing
|
||||
leaves the writing where it was, so compose the images first and write
|
||||
afterwards. Only you and co-hosts can move images.
|
||||
|
||||
For a page that begins with an image, press **New** and then **Image**.
|
||||
For a series of exercises, keep pressing **Image** on the same page: the
|
||||
sheet grows downward and everyone scrolls through them. A new image does
|
||||
not change anyone's zoom; it appears below, to be scrolled to.
|
||||
|
||||
If you chose the wrong file, a tap of the eraser on the image takes it
|
||||
back, as long as nothing else has happened on the page since: no stroke,
|
||||
no text, no erasure, no further image, by anyone. After that an image
|
||||
stays, because the marks made on it would make no sense without it.
|
||||
A tap of the eraser on an image removes it, whoever added it and
|
||||
whenever. Writing on it stays where it was, so remove an image before
|
||||
anyone writes on it unless the writing is meant to stay. The page keeps
|
||||
the size the image gave it; **Shrink** trims it. A guest who added an
|
||||
image may remove it, even after they have stopped being a co-host.
|
||||
|
||||
**Fit** and **A4**, pressed by you, act on every participant's screen,
|
||||
each in their own window: the way to bring everyone back to the whole
|
||||
page. A guest's Fit and A4 change only that guest's screen.
|
||||
|
||||
**Hide**, the tool beside the Eraser, covers part of the page for
|
||||
everyone: drag open a rectangle, and whatever lies under it, writing of
|
||||
anyone included, is covered in white, marked by blue corners that tell
|
||||
the students something is there. Use it to cover a solution until the
|
||||
student has tried, or a part of the exercise for later. Rest the pen on
|
||||
it to move it, near a corner to resize it; a tap of the eraser removes
|
||||
it and shows what was covered. Nothing under a Hide is lost, and a
|
||||
student cannot uncover it by hiding your writing on their screen: a Hide
|
||||
belongs to the page, not to your writing. A Hide is white in an
|
||||
exported picture and in the page file as other programs see it.
|
||||
|
||||
With the Text tool, a rectangle dragged open is a *text rectangle*: a
|
||||
red box with a white ground, which covers the image beneath it and no
|
||||
writing, in which text wraps and which grows downward as it fills. It
|
||||
is the "write your answer here" box of a worksheet: draw it on the scan
|
||||
where the answer belongs, and the student types into their own box or
|
||||
beside yours. Only its owner can type in a box, as with any text.
|
||||
|
||||
**Widen**, among the view buttons, makes the page wider for everyone,
|
||||
until it fills your window at your present zoom: the quickest way to
|
||||
more room for writing beside an exercise. The sheet grows equally on
|
||||
both sides, so nothing on the page moves. The page keeps the new width
|
||||
in everyone's notebook. **Shrink** is its opposite: the page becomes
|
||||
just large enough for everything on it, images and writing, with the
|
||||
margin of 5 mm around, which trims a page down to its exercise before you keep
|
||||
or export it. A blank page cannot shrink.
|
||||
|
||||
**Notebook** starts a new page for everyone from a page kept in one of
|
||||
your notebooks, with everything that was written on it. A chooser shows
|
||||
@@ -147,14 +229,17 @@ was kept when you left it, and **Notebook** brings it back as a new page.
|
||||
A lesson might go: **New**, **Image** for the exercise, work, **New**
|
||||
for a point of grammar, work, **Notebook** to return to the exercise.
|
||||
|
||||
## Guests' rights
|
||||
## Co-hosts
|
||||
|
||||
In the **Participants** list, each guest's name has a button **pages** in
|
||||
front of it. Pressing it lets that guest start new pages, put images on
|
||||
the page and load pages from their notebook, exactly as you can; the
|
||||
three buttons appear on their toolbar. Pressing it again withdraws the
|
||||
right, which otherwise lasts until the session ends. Guests can never erase or
|
||||
change anyone's writing but their own; that needs no setting.
|
||||
In the **Participants** list of the Session window, each guest's name
|
||||
has a box **Co-host** beside it. Ticking it makes that guest a
|
||||
co-host: they may then start new pages, put images on the page and
|
||||
arrange them, load pages from their notebook, widen, shrink and hide,
|
||||
exactly as you can, and the buttons for it appear on their toolbar.
|
||||
Unticking it takes it back; otherwise it lasts until the session
|
||||
ends. What stays yours alone: making co-hosts, and bringing everyone's
|
||||
view to the page with Fit or A4. Guests, co-hosts or not, can never
|
||||
erase or change anyone's writing but their own; that needs no setting.
|
||||
|
||||
## Hiding writing
|
||||
|
||||
@@ -169,9 +254,10 @@ picture of the exercise with the corrections alone.
|
||||
|
||||
The page you are on is written continuously to `Current.svg` in the
|
||||
current notebook, and copied to a dated file whenever the session moves
|
||||
on. **Keep page** makes such a copy now, named for the day and a serial
|
||||
on. **Keep** makes such a copy now, named for the day and a serial
|
||||
number, such as `2026_10_06_02.svg`; pressing it again before anything
|
||||
has changed makes no second copy. Use it to mark a state worth keeping
|
||||
has changed makes no second copy. Any mark counts as a change, even a
|
||||
dot from a stray touch of the pen. Use it to mark a state worth keeping
|
||||
on its own, or to add a finished page to a notebook of exercises.
|
||||
|
||||
**Export** saves a picture of the page as you see it, as a PNG file at
|
||||
@@ -190,7 +276,7 @@ Close the browser tab, or stop the program with Ctrl-C in its terminal.
|
||||
There is nothing to save: the page is already in your notebook, and in
|
||||
each guest's. Guests who are still connected can go on writing on the
|
||||
page among themselves, but no new page can be started without you or a
|
||||
guest you have given the right, and a guest who arrives after everyone
|
||||
co-host, and a guest who arrives after everyone
|
||||
has left finds an empty session. The next lesson is a new session with a
|
||||
new invitation; load the pages you need from the student's notebook.
|
||||
|
||||
@@ -199,13 +285,22 @@ new invitation; load the pages you need from the student's notebook.
|
||||
* **The browser says the notebooks are locked.** Open Kokkoja from the
|
||||
full address the program printed when it started, the one with the
|
||||
token.
|
||||
* **"Disconnected" in the toolbar.** Kokkoja reconnects by itself as
|
||||
* **"Not connected" above the page.** Kokkoja reconnects by itself as
|
||||
soon as the relay can be reached, and sends what was written meanwhile.
|
||||
If it does not come back, check your connection; the page is safe in
|
||||
your notebook either way.
|
||||
* **A guest sees "Waiting for the host's page".** You have not started
|
||||
a page yet, or your connection is down. The first page is started when
|
||||
you start the session, so this usually means the latter.
|
||||
* **Pressure does not work.** The last line of the panel reports what
|
||||
the browser receives from your pen. If it says *mouse*, the browser is
|
||||
not seeing the pen as a pen; try the other browser.
|
||||
* **Pressure does not work.** The browser's console (F12) logs what
|
||||
the browser receives from your pen at your first stroke. If it says
|
||||
*mouse*, the browser is not seeing the pen as a pen; try the other
|
||||
browser.
|
||||
* **"Address already in use" when starting the program.** A copy of
|
||||
the program is already running, usually in another terminal window.
|
||||
Only one can run at a time; use it, or stop it there with Ctrl-C and
|
||||
start again.
|
||||
* **Guests cannot connect.** Look at the line `Relay: ...` the program
|
||||
printed when it started: it names the relay the session goes through.
|
||||
If it is not your server's address, stop the program and start it
|
||||
again with `--relay` and the right address.
|
||||
Reference in new issue
Block a user