ZX Spectrum client for imageboards

Overview

image

ZX Spectrum client for imageboards.

into.mov

Download

You can do that from the Releases page.

Requirements

  • Because speccy does not support any internet connectivity by default, you'll need Spectranet Cartridge. It may be pricey and hard to get, but please support the manufacturer as it's a very Niche product.
  • Fuse Enumator supports such cartrige, you'll just need to enable it via "Peripherials->Spectranet" radio button

To Do List

  1. Refactor img2spec tool and split display and processing logic in separate static library with no executable
  2. Ability to save settings
  3. Tracking and showing replies to particular post
  4. Posting
  5. Optimize font rendering speed
  6. Cleanup cache after certain timeout
  7. Cache the transcoded images and not only originals

Channels Hub

Because speccy is nowhere near as powerful for SSL, you need an intermediate proxy to preprocess the data. A special proxy called Hub (hub/ folder) is supposed to be run somewhere on your local network, e.g. a PC, a router, a raspberry PI etc.

  • This proxy does all the heavy lifting, like image spectrumisation (with help of img2spec tool)
  • The proxy implements a set of Channels (like a channel for 4chan) and facilitates external calls to provide a standartized API for each channel
  • The client doesn't even care what channels are, as long as they use the same API, so potential of having the client to browse pretty much anything is limitless, as long as you have boards (or categories, you can just have one) and a set of conversations (threads) with each thread having posts.

How channels work?

Despite being written in C++, the Hub uses Python to convert channel specifics into a standardized form.

channels

Logic blocks marked here in green are Python packages. The hub simply scans installed packages that match and loads them up.

Some packaged are distributed with the hub, but other could be insalled into the sytem, and the Hub would detect it. To read on how to write a new channel, refer to Creating A New Channel.

Channels Proto

A client and the hub communicate via a special protocol, as described in this document.

How to build from source

  • The Hub is simply compiled using CMake.
  • Take care to fetch all submodules.
  • The python CMake finds could be different from the python in your PATH, in that case you'd need to address that
  • The Client uses Makefiles and can only be compiled using z88dk
  • You'd need UNIX to compile the client, so for Windows, you would need to use WSL
  • Having all that done, then simply shoot make
  • While it's included in this repository, you may refer to spectranet dev library and headers
Linux

Install these:

sudo apt-get update
sudo apt-get install -y \
    gcc \
    git \
    g++ \
    gcc-multilib \
    g++-multilib \
    build-essential \
    xutils-dev \
    libssl-dev \
    cmake

Proceed with cmake as usual.

Docker

It is also available as a docker image:

docker run -d --tmpfs /channels/hub/bin/cache -p 9493:9493 -it desertkun/channels-hub:latest

You can build a local image if you want:

# build
docker build -t channel_hub -f Dockerfile.hub .
# run
docker run -d --tmpfs /channels/hub/bin/cache -p 9493:9493 -it channel_hub

Debugging

Debugging python packages (channels) with PyCharm Professional

  • Build cmake in Debug mode. This way, python library would be installed in "develop" mode (setup.py develop), and you won't have to reinstall updated packages every time.
  • Open PyCharm and open up hub/channels folder in it. Run a Python Debug Server configuration on port 5678.
  • Specify the -d option to the Hub when running. When run, the hub will attempt to join to the pycharm with pydevd to port 5678. Note that with -d option, the hub is running in a single threaded mode, so it only can serve one client connection.
  • PyCharm breakpoints should work. After any modification, all you need is to restart the hub (assuming you did the first step).

Debugging python packages (channels) with Eclipse

  • Alternatively, install Eclipse
  • Build cmake in Debug mode. This way, python library would be installed in "develop" mode (setup.py develop), and you won't have to reinstall updated packages every time.
  • Install python3 pip install pydevd
  • Select Eclipse IDE for Eclipse Committers
  • Select Help -> Install New Software.., put http://pydev.org/updates into "Work With", search for PyDev and install it. Restart IDE.
  • Select Open Perspective and select PyDev.
  • Select Window -> Preferences -> PyDev -> Inperpreters -> Python interpreter, select New... -> Browse from python/pypy exe, hit Apply -> Apply and Close.
  • Select File -> New -> PyDev project, select /hub/channels folder of this repository.
  • Select PyDev -> Start Debug Server (Note: That menu item should be present at the debug perspective and it can be enabled in other perspectives through Window -> Perspective -> Customize perspective -> Tool Bar Visibility -> PyDev debug). If that thing complains, fiddle with Action Set Availability.
  • Specify the -d option to the Hub when running. When run, the hub will attempt to join to the pycharm with pydevd to port 5678. Note that with -d option, the hub is running in a single threaded mode, so it only can serve one client connection.

First time thing could be slow, so have some patience.

Debugging the client

  • The only way to debug the client is to use netlog, a printf-alike function that sends printed text to UDP port 9468 on the same host as proxy.
  • To see these logs on Linux/Mac, simply do make listen-for-logs while on Windows, you'd need to install netcat and do nc -lLu -w 1 -p 9468.
You might also like...
This repository provides a C++ client SDK for Unleash that meets the Unleash Client Specifications.

Unleash Client SDK for C++ This repository provides a C++ client SDK for Unleash that meets the Unleash Client Specifications. Features The below tabl

rpclib is a modern C++ msgpack-RPC server and client library

rpclib rpclib is a RPC library for C++, providing both a client and server implementation. It is built using modern C++14, and as such, requires a rec

The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.

Welcome! The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design

A C++ header-only HTTP/HTTPS server and client library
A C++ header-only HTTP/HTTPS server and client library

cpp-httplib A C++11 single-file header-only cross platform HTTP/HTTPS library. It's extremely easy to setup. Just include the httplib.h file in your c

Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and 10K connections problem solution
Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and 10K connections problem solution

CppServer Ultra fast and low latency asynchronous socket server & client C++ library with support TCP, SSL, UDP, HTTP, HTTPS, WebSocket protocols and

A portable MQTT C client for embedded systems and PCs alike.
A portable MQTT C client for embedded systems and PCs alike.

MQTT-C is an MQTT v3.1.1 client written in C. MQTT is a lightweight publisher-subscriber-based messaging protocol that is commonly used in IoT and net

C++ client for making HTTP/REST requests

REST client for C++ About This is a simple REST client for C++. It wraps libcurl for HTTP requests. Usage restclient-cpp provides two ways of interact

Wangle is a framework providing a set of common client/server abstractions for building services in a consistent, modular, and composable way.

Wangle C++ networking library Wangle is a library that makes it easy to build protocols, application clients, and application servers. It's like Netty

C++ websocket client/server library

WebSocket++ (0.8.2) WebSocket++ is a header only C++ library that implements RFC6455 The WebSocket Protocol. It allows integrating WebSocket client an

The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design. This project aims to help C++ developers connect to and interact with services.

Welcome! The C++ REST SDK is a Microsoft project for cloud-based client-server communication in native code using a modern asynchronous C++ API design

A client/server indexer for c/c++/objc[++] with integration for Emacs based on clang.

rtags rtags-xref ac-rtags company-rtags flycheck-rtags helm-rtags ivy-rtags Introduction RTags is a client/server application that indexes C/C++ code

Minimalistic C client for Redis = 1.2

This Readme reflects the latest changed in the master branch. See v1.0.0 for the Readme and documentation for the latest release (API/ABI history). HI

LibVNCServer/LibVNCClient are cross-platform C libraries that allow you to easily implement VNC server or client functionality in your program.

LibVNCServer: A library for easy implementation of a VNC server. Copyright (C) 2001-2003 Johannes E. Schindelin If you already used LibVNCServer, you

RabbitMQ C client

RabbitMQ C AMQP client library Introduction This is a C-language AMQP client library for use with v2.0+ of the RabbitMQ broker. http://github.com/alan

C++11 implementation of Socket.IO client
C++11 implementation of Socket.IO client

By virtue of being written in C++, this client works in several different platforms. The examples folder contains an iPhone, QT and Console example chat client! It depends on websocket++ and is inspired by socket.io-clientpp.

Client modifications of CoD4 X

CoD4x_Client_pub Client modifications of CoD4 X - this will not be the same as the official released files and you wont be able to join all servers wi

A network library for client/server games written in C++

yojimbo yojimbo is a network library for client/server games written in C++. It's designed around the networking requirements of competitive multiplay

Upbit(업비트) Cryptocurrency Exchange Open API Client of Multi-Programming Language Support
Upbit(업비트) Cryptocurrency Exchange Open API Client of Multi-Programming Language Support

Upbit Client Documents Support Upbit Client Upbit(업비트) Cryptocurrency Exchange API Client Description Upbit(업비트) Cryptocurrency Exchange Open API Clie

Firebase Arduino Client Library for ESP8266 and ESP32. The unified version of Firebase-ESP8266 and Firebase-ESP32 Realtime database libraries with Cloud Firestore, Firebase and Google Cloud Storage, Cloud messaging and Cloud Functions supports.
Releases(v0.5)
  • v0.5(Oct 8, 2021)

    • The Hub is available as docker image: docker run -d --tmpfs /channels/hub/bin/cache -p 9493:9493 -p 16384:16384/udp -it desertkun/channels-hub:0.5
    • The Hub doubles up as a TNFS server so you can simply spin up the hub and configure the TNFS client
    • channels.tap is a Fuse tape file. Take care to enable and configure spectranet first. Or, you can just enable it and open the snapshot below, then open this file.
    • spectranet-snapshot.szx for convinience, this snapshot has spectranet for single host network already configured.
    • With those two above, just open the spectranet snapshot with Fuse, then open the channels.tap with fuse and then write LOAD "" and hit enter.
    • boot.zx and channels are part of TNFS distribution. Spin up tnfsd with these two in the folder and it should be able to serve to clients with auto-boot configured. Having that done, all you'd need is to boot the machine, and the machine will load the client automatically.
    Source code(tar.gz)
    Source code(zip)
    boot.zx(96 bytes)
    channels(37.32 KB)
    channels.tap(37.40 KB)
    spectranet-snapshot.szx(21.74 KB)
  • v0.4(Sep 17, 2021)

    • The Hub is available as docker image: docker run -d --tmpfs /channels/hub/bin/cache -p 9493:9493 -p 16384:16384/udp -it desertkun/channels-hub:0.4
    • The Hub doubles up as a TNFS server so you can simply spin up the hub and configure the TNFS client
    • channels.tap is a Fuse tape file. Take care to enable and configure spectranet first. Or, you can just enable it and open the snapshot below, then open this file.
    • spectranet-snapshot.szx for convinience, this snapshot has spectranet for single host network already configured.
    • With those two above, just open the spectranet snapshot with Fuse, then open the channels.tap with fuse and then write LOAD "" and hit enter.
    • boot.zx and channels are part of TNFS distribution. Spin up tnfsd with these two in the folder and it should be able to serve to clients with auto-boot configured. Having that done, all you'd need is to boot the machine, and the machine will load the client automatically.
    Source code(tar.gz)
    Source code(zip)
    boot.zx(158 bytes)
    channels(34.06 KB)
    channels.tap(34.13 KB)
    spectranet-snapshot.szx(25.63 KB)
  • v0.3-alpha(Aug 1, 2021)

    • The Hub is available as docker image: docker run -d --tmpfs /channels/hub/bin/cache -p 9493:9493 -it desertkun/channels-hub:0.3
    • channels.tap is a Fuse tape file. Take care to enable and configure spectranet first. Or, you can just enable it and open the snapshot below, then open this file.
    • spectranet-snapshot.szx for convinience, this snapshot has spectranet for single host network already configured.
    • With those two above, just open the spectranet snapshot with Fuse, then open the channels.tap with fuse and then write LOAD "" and hit enter.
    • boot.zx and channels are part of TNFS distribution. Spin up tnfsd with these two in the folder and it should be able to serve to clients with auto-boot configured. Having that done, all you'd need is to boot the machine, and the machine will load the client automatically.
    Source code(tar.gz)
    Source code(zip)
    boot.zx(96 bytes)
    channels(39.57 KB)
    channels.tap(39.65 KB)
    spectranet-snapshot.szx(21.74 KB)
  • v0.2-alpha(Jul 25, 2021)

    The Hub no longer requires SDL library to do it's image processing, and the img2spec functionality has been statically linked into the main app, having all UI rendering excluded.

    • channels-hub-*.zip are distributions of the hub needed for client to operate.
    • The Hub is also available as docker image: docker pull desertkun/channels-hub:0.2
    • channels.tap is a Fuse tape file. Take care to enable and configure spectranet first. Or, you can just enable it and open the snapshot below, then open this file.
    • spectranet-snapshot.szx for convinience, this snapshot has spectranet for single host network already configured.
    • With those two above, just open the spectranet snapshot with Fuse, then open the channels.tap with fuse and then write LOAD "" and hit enter.
    • boot.zx and channels are part of TNFS distribution. Spin up tnfsd with these two in the folder and it should be able to serve to clients with auto-boot configured. Having that done, all you'd need is to boot the machine, and the machine will load the client automatically.
    Source code(tar.gz)
    Source code(zip)
    boot.zx(87 bytes)
    channels(36.89 KB)
    channels-hub-MacOs.zip(637.75 KB)
    channels-hub-Win64.zip(352.35 KB)
    channels.tap(36.97 KB)
    spectranet-snapshot.szx(21.74 KB)
  • v0.1-alpha(Jul 23, 2021)

    Initial alpha proof-of-concept.

    • channels-hub-*.zip are distributions of the hub needed for client to operate.
    • channels.tap is a Fuse tape file. Take care to enable and configure spectranet first. Or, you can just enable it and open the snapshot below, then open this file.
    • spectranet-snapshot.szx for convinience, this snapshot has spectranet for single host network already configured.
    • With those two above, just open the spectranet snapshot with Fuse, then open the channels.tap with fuse and then write LOAD "" and hit enter.
    • boot.zx and channels are part of TNFS distribution. Spin up tnfsd with these two in the folder and it should be able to serve to clients with auto-boot configured. Having that done, all you'd need is to boot the machine, and the machine will load the client automatically.
    Source code(tar.gz)
    Source code(zip)
    boot.zx(87 bytes)
    channels(36.89 KB)
    channels-hub-MacOs.zip(671.04 KB)
    channels-hub-Win64.zip(1.01 MB)
    channels.tap(36.97 KB)
    spectranet-snapshot.szx(21.74 KB)
Owner
null
zx spectrum 128 emulator on single esp32

spectrum128_esp32_usb_host_pal_tv zx spectrum 128 emulator on single esp32 Single esp32 lolin32mini spectrum 128 emulator with direct gpio 2 HID LS us

Samsonov Dima 37 Dec 14, 2022
A game for the ZX Spectrum 48K

This is the source code of Castaway, a game for the ZX Spectrum 48K (or later).

Juan J. Martínez 14 Aug 4, 2022
A ZX Spectrum-like library built for "dos-like" by Mattias Gustavsson.

ZX-Like A ZX Spectrum-like library built for "dos-like" by Mattias Gustavsson. It allows for the creation of ZX Spectrum like screens for demos, games

Oli Wilkinson 3 Oct 20, 2021
CPU Performance Evaluation and Execution Time Prediction Using Narrow Spectrum Benchmarking

This is a simple implementation of Saavedra-Barrera's paper SAAVEDRA-BARRERA R H. CPU Performance Evaluation and Execution Time Prediction Using Narrow Spectrum Benchmarking[D/OL]. UCB/CSD92-684. EECS Department, University of California, Berkeley, 1992.

null 9 Jan 27, 2022
web server & client. Fully C++/WebAssembly. Server runs on google cloud function. Client uses a C++ virtual dom.

Starter project. A web server and client fully made with C++/WebAssembly. A simple CMake configuration describes how to build and run everything.

null 3 Aug 6, 2021
Triton Python and C++ client libraries and example, and client examples for go, java and scala.

Triton Client Libraries and Examples To simplify communication with Triton, the Triton project provides several client libraries and examples of how t

Triton Inference Server 228 Jan 5, 2023
VEngine-Client - vEngine: Official Client Module

━ S Y N O P S I S ━ Maintainer(s): Aviril, Tron vEngine is Next-Gen Sandbox-Engine being crafted in C++. In contrast to UE/Unity/ReverseEngineered-Mod

ᴠ : ꜱᴛᴜᴅɪᴏ 15 Sep 7, 2022
Pyth-client - client API for on-chain pyth programs

pyth-client client API for on-chain pyth programs Build Instructions # depends on openssl apt install libssl-dev # depends on libz apt install zlib1g

Pyth Network 115 Dec 16, 2022
Webdav-client-cpp - C++ WebDAV Client provides easy and convenient to work with WebDAV-servers.

WebDAV Client Package WebDAV Client provides easy and convenient to work with WebDAV-servers: Yandex.Disk Dropbox Google Drive Box 4shared ownCloud ..

Cloud Polis 103 Jan 1, 2023