• Stars
    star
    251
  • Rank 161,862 (Top 4 %)
  • Language
    HTML
  • Created about 8 years ago
  • Updated over 2 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

TalkTalkTalk is an easy-installable small chat room, with chat history.

TalkTalkTalk

TalkTalkTalk is an easy-to-install single-page chat room. No login required, no complex layout. Just chat.

Live demo

Installation

The best way to test TalkTalkTalk is to install it locally on a Windows or Linux machine. You need to have Python installed. Just do:

git clone https://github.com/josephernest/talktalktalk.git      # or unzip talktalktalk-master.zip
pip install bottle bleach gevent gevent-websocket               # these Python module are required, compilation can 
cd talktalktalk                                                 #                              take up to 3 minutes
python talktalktalk.py start                                    # or use ./talktalktalk.py start instead to have a 
                                                                #                     proper name when using "top"

Open your browser at the address 127.0.0.1:9000, it works!

Now that it works locally, you probably want to install it on a web server, using an Apache server? The installation process is the same, you probably have nothing else to do, because the .htaccess file is already telling your web server how to redirect the traffic to the Python script, and everything should work out of the box. If it doesn't, try to run a2enmod proxy proxy_wstunnel ; service apache2 restart to enable WebSocket handling by Apache.

Why another chat software?

There are thousands of great chat software everywhere, but I never found the one I was looking for, because:

  • some of them are cool, but not open-source, and so you cannot host them on your own server (e.g. tlk.io),
  • some of them are cool, but not easy to install, require a too big server, or offer too many features I don't need (e.g. mattermost.org),
  • some of them are interesting tutorials about how to program a chat in PHP, node.js, but are not ready-to-use for everyday discussion inside a small team, because they lack some important feature (such as chat history, disconnection/reconnection handling, usable user interface, etc.)

That's why I decided to make TalkTalkTalk, that has the following features:

  • open-source
  • easy to install
  • persistent database, i.e. if you come back to the chat room tomorrow you can read all past messages, and you can see what happened when you were offline (very useful for team work)
  • mobile devices support (it's not as easy as it may sound to detect accurately connection/disconnection)
  • LPWP website, a.k.a. "Landing Page=Working Page", i.e. the first page that you visit on the website is the page where things actually happen, that means that there is no annoying welcome page or login page, etc.

About

Author: Joseph Ernest (@JosephErnest)

Other projects: BigPicture, bigpicture.js, SamplerBox, Void CMS, YellowNoiseAudio, etc.

Sponsoring and consulting

I am available for Python, Data science, ML, Automation consulting. Please contact me on https://afewthingz.com for freelancing requests.

Do you want to support the development of my open-source projects? Please contact me!

I am currently sponsored by CodeSigningStore.com. Thank you to them for providing a DigiCert Code Signing Certificate and supporting open source software.

License

MIT license

FAQ

Q: How to send messages? Is there a way to get username autocompletion like in IRC?
A: Use <ENTER> to send messages. Use <TAB> to autocomplete usernames, example: us + <TAB> will give user1, then user2, etc. It also works with @<username>.

Q: How to find the date and time of the messages?
A: Hover over the messages, and a tooltip will show the date and time.

Q: Is there a flood control feature?
A: The chat has a very basic flood control: a user cannot send more than 10 messages in 5 seconds.

Q: Is there a way to prevent a particular username from being used by anyone except me?
A: The username admin is available if and only if the username adminxyz is entered in the input box. Change adminxyz to a private password in the beginning of talktalktalk.py, and as a result noone else than you will be able to use the username admin.

Q: Tech question: why use WebSocket instead of good old polling method?
A: I use WebSocket because it allows good performance: having 100 users at the same time results in less than 1% CPU usage, on my small server. Before using WebSocket, I first tried with standard polling (i.e. every client requests changes from the server every 250 milliseconds), but benchmarks showed that having 100 users connected to the chat room at the same time was eating a 40% of CPU of my small web server. That was too much, thus the use of WebSocket that is far better.

Q: Tech question: why use dumbdbm on server?
A: Because it works. If you know a Python database module that 1) stores data in a file (i.e. no database server needed), 2) is lightweight, 3) allows inserts / queries with a dictionary syntax (db['hello'] = 'blah'), and if possible allows integers as dictionary keys, I'm interested!

Q: Tech question: How can I run the project inside a Docker container?
A: There is a Dockerfile in the root of the project directory. After clone, simply run docker build -t talktalktalk .. Then the following command to run it as a container:

docker run -d --name=talktalktalk -p 9000:9000 talktalktalk

More Repositories

1

writing

Writing is a lightweight distraction-free text editor, in the browser (Markdown and LaTeX supported).
JavaScript
1,031
star
2

bigpicture.js

bigpicture.js is a Javascript library that allows infinite panning and infinite zooming in HTML pages.
JavaScript
809
star
3

SamplerBox

SamplerBox is a sampler musical instrument based on RaspberryPi.
Python
416
star
4

Yopp

A very fast way to transfer a file from phone to computer and vice versa.
PHP
400
star
5

nfreezer

nFreezer is an encrypted-at-rest backup tool.
Python
301
star
6

Swap

Swap.js is a "HTML-over-the-wire" AJAX-navigation micro-library
PHP
232
star
7

void

Void is a blogging platform.
PHP
193
star
8

TinyAnalytics

TinyAnalytics is a lightweight analytics tool (unique visitors count, etc.)
PHP
148
star
9

AReallyBigPage

Collaborative whiteboard based on bigpicture.js
HTML
42
star
10

EasyVolcaSample

Easy upload .wav files to Korg Volca Sample!
C
25
star
11

impulseresponse.py

Get a reverb impulse response (IR) from a frequency sweep
Python
21
star
12

bloggggg

bloggggg is a blogging platform.
PHP
13
star
13

sdfgh

"sdfgh", an encrypted notepad in ~65 lines of Python. Read the code, trust it (or not), and use it (or not)!
Python
11
star
14

RaspFIP

Ecouter la radio FIP avec un Raspberry Pi (sans รฉcran ni clavier). Une seule action ร  faire : Power On !
9
star
15

0Doc

Documentation made simple.
JavaScript
6
star
16

rebootnow

Reboot to a specific device easily (HDD2, USB, CDROM, BIOS Setup, etc.)
Python
4
star
17

NeverForget

Easiest sticky notes app possible. Always there on Windows' deskop.
C++
3
star
18

wavfile.py

Python
2
star
19

aayi

The tiniest website analytics tool
PHP
1
star
20

ShareLinkAndPixelIt

Share external links on Facebook, but have them caught by your Facebook Pixel (useful to build retargeting audience)
PHP
1
star
21

0Doc-chip

Example of use of 0Doc for C.H.I.P.'s documentation
CSS
1
star
22

copycopypastepaste

CTRL+C some text, CTRL+C another text, then CTRL+V and CTRL+< to paste two buffers!
Visual Basic
1
star
23

textarea

https://josephernest.github.io/textarea/htmleditor.html
HTML
1
star
24

bigpicture-editor

Standalone editor based on bigpicture.js
JavaScript
1
star