Git Product home page Git Product logo

buttfish's Introduction

ButtFish ๐Ÿ‘๐ŸŸ

Effortlessly transmitting Morse Code of chess moves to your butthole ๐Ÿ’


Wait what now?

If you haven't been following the chess news - (because why would you) - As of the last couple of weeks - (Monday September 5, 2022) there's been drama going on in the chess world.

During the Sinquefield Cup there was a chess match between 5-time world chess champion Magnus Carlsen - (basically the final boss of chess) - and another lower level chess player. No one expected Magnus to lose, but he did. After losing the chess match Magnus Carlsen withdrew from the tournament and posted a tweet saying "I've withdrawn from the tournament" and attached a meme video of Jose Mourinho saying "I prefer not to speak. If I speak I am in big trouble โ€ฆ and I don't want to be in big trouble." - Classic ๐Ÿ‘Œ.

The tweet was interpreted by the chess community as an accusation of cheating.

This chess drama has been ongoing for the last couple weeks with everyone making wild guesses on how the alleged cheating could have been done.

The wildest accusation is that the cheating player might have been using a Buttplug - sending him information about the best moves though his butthole

I'm not going to name the other player, google it I suppose. So far it hasn't been proven that he actually cheated, though he has received a lot of backlash already - so I assume this whole drama has been a huge pain in the butt for him already anyways. ๐Ÿฅ


Why?

This project is mostly a meme.

Firstly I didn't have much else to do this weekend, so it seemed like a fun thing to implement. I could not find any project making this kind of cheat possible. The closest mention I could find is Sockfish - A project by James Stanley where he implemented Stockfish in his shoes (or sock). I'm not entirely sure how he implemented it, or whether his implementation is open sourced.

So I started looking into the possibilities and I found the project Buttplug.io - the name of this project is not super inclusive of what it actually does - actually it connects to a huge amount of sex toys. See a full list here [nsfw]. Other devices include Cockthings, so if you're not comfortable with putting Stockfish in your butthole, there's also the possibility of trying this with a Cockthing, and practically you'll be running CockFish.

Secondly, who else would possibly build this? I've created a Venn diagram to illustrate how rare the chances are someone would develop this.

venndiagram

As you can see by the diagram, if we'd have to wait for "the chosen one" with interests in all three fields, this project would never exist. So I decided that it should exist, so I made it.


Features

Connectivity

  • Discover Yeelight devices on your network
  • Manually connect with Yeelight devices on your network though IP or hostname
  • Discover Buttplug.io Capable devices on your network
  • Manually connect with Buttplug.io Capable devices though remote discover host address

Main

  • Read a Chess FEN string and determine the next best move
  • Encode the next best move into Morse Code
  • Send the encoded Morse Code to the connected device

Encoders

Config

  • End Position Only [Expert] By just knowing the end position, a serious chess player would know intuitively which piece belongs there. ~ Hikaru
    • appsettings.json -> EndPositionOnly -> true (default false)
  • Use Manual Input - Skip using a chess engine, and manually send moves to devices. Allows you to manually input moves to broadcast instead
    • appsettings.json -> UseManualInput -> true (default false)

Tested and Supported Engines

  • Stockfish (stockfish_15_x64_avx2.exe)
  • Leela Chess Zero (Lc0) (lc0-v0.28.2-windows-gpu-nvidia-cuda)

Technically any UCI compatible chess engine should work. But I haven't tested others yet.


Demo

Discovery

A demo of discovering devices on the network discovery

Manual

A demo of manually entering a Yeelight address manual

Buttplug.io side by side

The internet pointed out that I hadn't actually tested it out with a vibrating device. Also there's a theory in computer science that every programmer needs a rubby ducky - for debugging purposes.. What I found is close enough

After scrolling through the list of compatible Buttplug.io devices, I came across this nonsensical device ducky

It reminds me of a real-life representation of the famous internet meme dickbutt.

I also don't have a rubber duck for debugging purposes yet, so I count this as a win-win-win.

So heres a demo of a Buttplug.io connected to Libo Carlos - side by side with the application

sidebyside-butplugio.webm

Yeelight side by side

A demo of a Yeelight connector - side by side with the application

sidebyside-yeelight.webm

Setup / Yeelight

To use a Yeelight, you must enable developer mode for your Yeelight. To do so, do the following:

  • Open Yeelight APP and go to โ€œDeviceโ€.
  • Select the device you want to use.
  • Enable LAN Control
  • (optional), if network discovery of the Yeelight does not seem to work:)
  • Go to your Yeelight settings in the upper right corner
  • Click Device Info
  • You should now see a field "IP address". Use the value for manual mode.

Data

Example FEN code that I used: "rnb1kbnr/pppp1ppp/8/4p1q1/5P2/4PQ2/PPPP2PP/RNB1KBNR b KQkq - 2 3"

If you want to generate a FEN code on chess.com, you can go to a match, click onย analysis - which will redirect you to https://www.chess.com/analysis with the selected match, and then if you press the share button you will see a FEN code. There might be an easier way to do this, but I don't know


TODO

  • Real world chess match testing - The chess world seems to assume that it's possible to accurately receive chess moves through your butthole, and use this to your advantage and even beat the final chess boss Magnus Carlsen with this. Since this has been a working theory, so far I haven't seen any attempts to replicate this. Hopefully this project with aid in this endeavor. Unfortunately I can barely play chess, nor understand Morse Code, so hopefully we'll be able to find some brave chessmaster grandmaster that's willing to 'take one for the team' (in the butt)
  • Post vid In the spirit of WatchPeopleCode I recorded my development process. I haven't had time to edit it down and post it. Might if someone is actually interested (probably not)

Donate

I don't really need your money, but it would be cool to see that 0 turn into a 1:


Code of Conduct and Ethics

As mentioned before - this project is a meme. I do not endorse or encourage chess cheating in any way possible. Would you decide to try out this project yourself, you must notify your chess partner in advance that you're using chess augmentations though vibrations in your butthole.

Would you decide not to disclose this in (official) matches, then I'm in no way responsible for the consequences of either you getting banned from chess.com, or pissing off Magnus Carlsen and having him forfeit your matches after a couple of moves


Coverage and Mentions (incoming)

This project was covered by Matthew Gault a Staff Writer at Motherboard/VICE Media. Initially it was on the front-page of Motherboard, on their front-page together with a live feed of NASA's DART mission - humanity's first strike against potential total annihilation by an asteroid in the future.

vice-front-page

Someone is solving possibly the biggest crisis in human history, while the other is just smashing spacecrafts into a space rocks

NASA and I have different priorities I suppose...

Library and Mentions (outgoing)

Contact and questions:

I've created a Discord, though now it's just me, lol.. https://discord.gg/cDC6VkUn2X - but you can ask stuff here

buttfish's People

Contributors

ronsijm avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

buttfish's Issues

Other Game Engines

Given some other things going on in high stakes game play worlds, do we need to extend ButtFish to other types of game engines?

List compatible devices

Would be good to have a list of approved / compatible devices and perhaps a user testimonial section for those that have tried them.

fallback device mechanism

Do we need fallback mechanism in case the main device e.g. the plug is malfunction on the tournament?

retry mechanism

Do we need retry mechanism in case the recipient is not understand the code?

Hikaru Optimization: Option to only receive end position and not start position

Hikaru made an implied feature request:

https://youtu.be/ifJnWVSoyAY?t=431

"um although actually you know if it's if it's if it's if it's a serious chess player you'd only have to do the one vibration for the square itself because like a strong player would know that like if if you can only put a knight on A4, or Pawn on A4 they would they would obviously be able to intuitively know which which um piece belongs there." ~ Hikaru Nakamura Chess meme king himself...

(Not making fun, just literally 100% just copied the YouTube transcribed text, though found it very amusing)
image

So Hikaru says that to optimize this, I don't have to transmit the entire Stockfish response - only the end position. Should be easy enough to implement...

Simplify pulses

Instead of using morse code which can require a lot of different pulses to transmit a position, there can be a way more simple pulse to move conversion. (Using row and column terminology for a broad audience)

My suggestion is that there be one pulse to represent adding one row or column to the position and a long vibration for 4 rows/columns.

For example, moving a piece from E5 to F4 shown in the readme can be accomplished by this sequence:
โ€” . (e) โ€” (4) โ€” . . (f) โ€” . (5)

This is because โ€” . represents the E column because it's a value of 5, and E is the 5th column.
โ€” represents a 4, meaning row 4 in that column.
โ€” . . is a 6, which then matches to the F column, and so on.

Using โ€” โ€” for H and 8 respectively, the maximum number of pulses required to represent a move would be g6g7 or similar, which is represented by this: โ€” . . . (g) โ€” . . (6) โ€” . . . (g) โ€” . . . (7)

This effectively reduces the pulses required from 15 as it is now for e5f4 to only 8, while in the worst case 15 pulses. There is potential to simplify further, but this proposed system is easy for anyone to interpret on the fly without knowing morse code.

Only evil can write such program to get more popularity ... - no ethic

I do not know if Niemann cheat or not so I will not do sin of blaming other. For me it is clear that there is not evidence.

Whatever what some players is doing is wrong ... whatever coding such program to get fame and propagate such evil ideas is much worse - it is like Hitler - he do not kill anybody but his people order to kill millions - he enabled killing of people.

Same wrong is with your program you enable wrong things without reason - no ethic

Looking for: IRL Testers

I am not sure how to do testing on this product. If there are unit tests, how do you mock a butt? If there are end to end tests, what do you use for backend?

The translation from chinese to english in readme image may get better

Hi,

It's this one, there might be some joke that only native speakers could get.
img

The word "็‚ผ่‚›ๅคงๅธˆ" obviously comes from the "้’ขไน‹็‚ผ้‡‘ๆœฏๅธˆ", i.e. "Fullmetal Alchemist" in english
So I guess it might be funnier to translate to "FullAnal Alchemist" instead of "Anal Master"

XD

[Feature Update]: Add RGB for Yeelight Integration

Idea: when chess engine proposes a move - lets say Queen to E5 - every pawn piece can have their own color code. Blinking the code for E5 in blue when the queen should be moved, blinking in red when a pawn should be moved etc etc.

(This feature depends on #30 to be completed first. - because in that isue a FEN to piece position decoder is build, so I can easily use the start position to see which piece is in the start position to determine what color.)

Not sure if piece determination can de used in buttplug.io devices. Could possibly use a different vibration strength or something. If anyone have any bright ideas, feel free to leave suggestions

One way communication might not be enough!

The dilemma

Some people mostly play chess in bars and pubs. In these scenarios they wouldn't always have the complete setup with cameras for image recognition or a helper that can provide ButtFish(TM) with the inputs of their opponent. Therefore this project urgently needs a way for them to communicate with the Raspberry PI with a battery-pack in a inconspicuous backpack what moves are being made.

My proposal

A cockring-twitch-detector that encodes my ..erm.. someone's messages back to ButtFishยฉ. Of course to not discriminate this also would include a โ€ฆcave-contraction-apparatus.

Extra features

Sometimes one can get disheartened in the quest for dominance in a particular hard game of chess. One easy fix to prevent this from happening would be that in the downtime while your opponent are thinking ButtFishยฎ should mimic the Rocky Theme Song.

Create Custom Board Visual

Given the input: "rnb1kbnr/pppp1ppp/8/4p1q1/5P2/4PQ2/PPPP2PP/RNB1KBNR b KQkq - 2 3"

StockFish has the option to generate a visual chess board though the "d" command:

 +---+---+---+---+---+---+---+---+
 | r | n | b |   | k | b | n | r | 8
 +---+---+---+---+---+---+---+---+
 | p | p | p | p |   | p | p | p | 7
 +---+---+---+---+---+---+---+---+
 |   |   |   |   |   |   |   |   | 6
 +---+---+---+---+---+---+---+---+
 |   |   |   |   | p |   | q |   | 5
 +---+---+---+---+---+---+---+---+
 |   |   |   |   |   | P |   |   | 4
 +---+---+---+---+---+---+---+---+
 |   |   |   |   | P | Q |   |   | 3
 +---+---+---+---+---+---+---+---+
 | P | P | P | P |   |   | P | P | 2
 +---+---+---+---+---+---+---+---+
 | R | N | B |   | K | B | N | R | 1
 +---+---+---+---+---+---+---+---+

Apparently this is not UCI standard - so Leela Chess Zero (Lc0) engine does not support this.

To fix this I'm busy implementing a custom FEN to ASCII component, so every engine can show an ascii of the chessboard

Suboptimal Name

Chocolate starfish would be more apt, or starfish if you wanted to stick to two syllables.

Improper use of Venn diagram makes it unclear whether author is "the chosen one"

In the Venn diagram in readme.md, it appears that "ME" is a symbol representing the entire "People who can program" category (in the same way the Knight and butt icons are representative of people who can play chess, and people who are into buttstuff respectively). The overlap of this category with the other two categories implies that the author is also into butstuff and can play chess, thereby making them the chosen one.

Venn Diagram

However this is contradictory with the text that follows, saying that the chosen one is as yet to found.

A Venn diagram has circles representing groups within a population and describes how individuals in the population can be in multiple groups. "ME" is an individual, whereas "people who can program" is a group of people.

If the author intended to suggest that they can program, but are not into buttstuff, nor can they play chess, then "ME" needs to be moved from being a title of the category, to a data point within the category. eg:

image

Add support for more modes and information encoding.

Beginner support
I'm not very good at chess, so I would like the letter code for the chess piece that should be moved in addition to the start and end position.
QD1 => RD5 (Queen on D1 takes Rook on D5)

More modes
I play a lot of blitz chess which requires transmitting the information with shorter delays between signals.
a: . - => a: .-
Note: This mode also saves battery life which is good for the environment.

Different encoding
A lot of users don't understand morse code so I would like support for a different encoding, for example each signal representing a count towards a letter's position in the alphabet:

Morse       Count     Blitz
a: . -      a: -      a: -
b: . -      b: - -    b: --
c: - . - .  c: - - -  c: ---
... and so on

To please the grammar gods, it might be wise to include upper and lowercase support too. Capital letters in the string can be represented with a . before the character.

q = - - - - - - - - - - - - - - - - - becomes Q = .----------------- (for blitz)
Note: This is only usable with the count configuration.

Digits can be represented with dot signals:
QD1 => QD5 on blitz becomes .----------------- .---- . (double timeout) .----------------- .---- .....

Accessibility
It could also be useful to provide full context for people with learning disabilities, as letter codes can become confusing. I would suggest adding support for transmitting the full name of the piece, and the phonetic name of the square. At that point you might as well add "on" and "to".
{piece} on {phoneticName}{digit} to {piece} on {phoneticName}{digit}

Internationalization
We all know the Brits don't like following commands unless politely asked to, thinking it was their idea, or that it comes with some sort of banter. Adding support for making the commands more social would make this product much more attractive for them.

"Moving the {piece1} on {phoneticName1}{digit1} to {piece2} on {phoneticName2}{digit2} seems like a good idea what do you think mate"
"Would you please be so kind as to move {piece1} on {phoneticName1}{digit1} to {piece2} on {phoneticName2}{digit2}"
"We will have a proper good laugh if you now take the {piece2} on {phoneticName2}{digit2} using your {piece1} on {phoneticName1}{digit1} and then we will have tea and biscuits after"

I've created a simple JSFiddle to illustrate the running of this code.
https://jsfiddle.net/80z965nt/1/

I have a lot of British chess-playing beginner-level friends with learning disabilities so please implement this as quickly as possible.

How to make vibrations without needing chess moves?

I set up this project, and I've really been enjoying personally testing it. I was thinking it could be much better if the vibrations weren't linked to chess moves at all, but rather give an option to allow it to furiously vibrate nonstop.

Add a license

There's no license currently attached to the code. If library licenses allow, I'd recommend something with anti-tivoization measures like AGPL or GPLv3 to keep buttholes open and free

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.