Can we fucking wake up here sheeple? We need a SchemeBBS. We need to restore all of prog.db in it. This regex crap the admin does is no good right now for the job.
I'm working on a GUI in Racket. This is what I have so far, it's pretty much shit though. I hope to make it a bit more polished soon. I can upload the code if anyone wants, otherwise I'll wait until it's "done".
The VPS I started hosting for >>15-san's project is still up but he hasn't connected to it in 2 weeks.
Name:
Anonymous2015-06-23 15:59
>>169 i can put the server back on it for testing ill get on the irc
Name:
dubzbot2015-06-24 3:16
Adding all dubs to the block chain.
11 Name: Anonymous : 2015-05-26 14:45 Let's discuss BBS design for a bit here. Having plain text threads that posts get appended to is simply god-awful. Why not have each individual post get its own file? ------------------- 22 Name: Anonymous : 2015-05-26 18:43 >>20 And making a script that interacts with said API would be the rite of passage for every potential /prog/lodite? Great! I've always wanted this place to be filled with appers and web devs! ------------------- 33 Name: Anonymous : 2015-05-26 20:14 >>13 CL-BBS (/clēbs/) Do you also pronounce NNTP "neenootup"? Moron. ------------------- 44 Name: Anonymous : 2015-05-28 10:12 If you actually get dubs, someone post em so I can check em please ------------------- 55 Name: Anonymous : 2015-06-08 13:02 nice1--preddy nice ------------------- 66 Name: >>50,53 : 2015-06-08 19:40 I checked it into the Fossil repo, under schemebbs-fcgi/ (didn't want to cramp the style of the Racket-only guys).
I do not claim to be an EXPERT PROGRAMMER. Comments and derision are welcome.
>>43,65 I'd love to but I need to spin up a VPS that I can lock down (and attempt to separate from everything I have my name attached to) first. ------------------- 77 Name: Anonymous : 2015-06-15 18:44 >>76 That wasn't indefinite though. ------------------- 88 Name: Anonymous : 2015-06-16 01:29 >>86 Check my rule 88 ------------------- 99 Name: Anonymous : 2015-06-16 19:48 >>96 Also, moderation is shit. The moderator is no better than the ones he moderates, no less evil, in fact often moreso, because his vileness is amplified by the power he possesses. ------------------- 111 Name: Anonymous : 2015-06-16 22:43 implying immoral activity harms society
- child porn is "immoral" - medicine requires child porn to study child anatomy - medicine is "immoral"
- human genome contains information to produce child porn - human genome is "immoral" ------------------- 122 Name: Anonymous : 2015-06-17 15:17 >>121 The Talmud is a Jewish literary collection of teachings, laws, and interpretations based on the Old Testament Torah. ------------------- 133 Name: Anonymous : 2015-06-18 21:56 >>132 some parts of it probably will
This is unacceptable, obviously ------------------- 144 Name: Anonymous : 2015-06-19 04:12 >>143 oh shut up ------------------- 155 Name: Anonymous : 2015-06-19 10:06 >>154 p much, so what's on for the weekend? ------------------- 166 Name: Anonymous : 2015-06-21 16:07 >>164 He'll be back eventually. ------------------- d1bc99abd2334730be764110cdd0160bd53c09acdffb4cd423ac96051420564a
You have to compile the wrapper to use term output instead of html. I also had to add "m" to the lexer/parser declaration in term.h.
's <post id>' to read a post. 'r' to reload. 'l' to show the list again. 'q' to quit.
Python is shit at running everywhere and i'm not going to do any packaging but it should be easy enough to figure out what the problem is if you are really trying to use this.
from sexpdata import loads, Symbol from sexpcode import sexpcode import colorama from colorama import Fore, init as cinit from datetime import datetime from pager import page import requests import re from prompt_toolkit.shortcuts import get_input from prompt_toolkit.history import History
def req(q): r = requests.post(SBBS_URL, data=q) return r.text
def iter_from_post_str(in_str): for s in re.finditer('([^\n]+)?\n', in_str): yield s.group(0)
def post_dict(post_sexp): post = Post() for couple in post_sexp: if type(couple[0]) is Symbol: sym = couple[0].value() if sym == "id": post.id = couple[2] if sym == "date": post.date = datetime.fromtimestamp(couple[2]) if sym == "reply": val = couple[2] if type(val) is Symbol: if val.value() == "#f": post.reply = False else: post.reply = int(val) if sym == "post": post.body = sexpcode(couple[2]) post.title = unicode(post.body.split('\n')[0]) if len(post.title) > 50: post.title = post.title[:50] return post
def load(all_posts): post_txt = req("(posts> 0)") loaded = 0 for o in loads(post_txt): post_obj = post_dict(o) if post_obj.id is not False: if post_obj.id not in all_posts: all_posts[post_obj.id] = post_obj loaded += 1
if post_obj.reply is not False: all_posts[post_obj.reply].replies.append(post_obj)
def show_tree(all_posts): shown = [] for k, v in all_posts.iteritems(): if k not in shown: print_post_summary(v) if len(v.replies) > 0: for reply in v.replies: print_post_summary(reply) shown.append(reply.id) print "\n"
I added a front page (http://hz27w5o3zlhptx7v.onion/) and started on a read-only JavaScript client. My python client can make posts now but it is a mess so I am not going to show it again.
>>183 OK sure. Why is it that the torsocks 'homepage' seems to have disappeared from the Internet?
All these documents/guides I am reading keep referencing it and it goes to a dead Google code repo, which forwards to the Tor project hosted gitweb that has no docs.
The Tor wiki is in pretty bad shape, I only realized I was reading deprecated documentation after reading your post.
It's full of fucking html though. I'm not even completely clear on why I'm restoring this in the first place? I guess I could write a thing to convert the HTML and do like the most recent 500 threads or something. Doing all of it seems overkill
Name:
Anonymous2015-07-15 17:39
>>189 Be aware there's a lot of malformed html due to bbcode glitching. It's all over /prog/ and to a somewhat lesser extent /lounge/.
Might as well just set it up so that new progrider posts show up on schemebbs and vice versa
Admin-sama justifiably blocked all Tor exit nodes so my server would have to connect directly to post into progrider threads
I'd like to believe xe wouldn't doxx me
Name:
Admin2015-07-17 1:46
>>194 If you want I can just set up a hidden service address for the board and give only you the link for server-side sync purposes. I'll probably at least put up a read-only hidden service address for this in case ICANN pulls more bullshit in the future.
Now with working read-only javashit client, including {b.sup s}{u e}{sup x}{i.u p}{sup c}{b.u o}{sub d}{u e} (sexpcode) rendering support! Write a client to post today! Take back your programming discussion from the endless political drivel, with SchemeBBSTM.
Does anybody remember from w4ch prog where there was a game engine that you use Lisp to program it? The programmer was associated to the GNU project. I'm trying to remember what was the title of the game engine.
OKAY HERE IS A PROGRAM THAT YOU CAN RUN PERIODICALLY TO GET ALL THE LATESTS SCHEMEBBS DATA IN SEXPSON FORMAT. SOMEBODY NEEDS TO WRITE A TEXT BASED USER INTERFACE THAHT LETS YOU SEE ALL THE NEWEST THREADS, AND BE ABLE TO OPEN A TRHEAD TO READ AND REPLY TO IT.
>>228 1. Is the server going to be up 24/7 2. Can it it compete with /progrider/ ( not everyone has i2p) 3. How you will handle spam(there are no IPs and identities are temporary)?
Name:
Anonymous2016-11-20 3:10
>>230 1. I can't guarantee anything, but if traffic isn't too high I don't see why I couldn't keep it up 24/7 2. I am not trying to compete, I figured I could just set up an interface that routed peoples posts to the onion site 3. Not sure about this one, if it gets too bad I might implement a captcha type thing. If I do though, it will probably be like the /prog/ fossil repo, so people can still post without images or javascript.
>>232 I was looking at my system earlier, and almost 2/3rds of all proccesses running were some java shit spawned from i2p, and just having the i2p daemon running adds about a fourth to my memory use. Its pretty fucked. I still prefer i2p over tor, though. Theres less edgy kids who think that being on the DEEP WEB makes them cool, plus support for torrenting.
So this script consists of three files, but they can definitely be combined into one. I am shit at PHP and this was just to get it up and running. Feel free to make improvements.
The first is main.php, which generates index.html, gets a list of all the threads, and provides a dialog for making a new thread. Second is get.php, which returns all posts for a specific thread, and provides a dialog box for replying (may be broken currently). Last is post.php. Pretty straightforward, takes a message and a reply or new thread and posts it. It also uses the same style.css as /prog/
Now all of these are slow as hell because they have to query every single post, just to check if it actually meets the criteria, and then they print it to an html file. Not sure how this can be improved with the way that s-expression querying works, but just go easy on the refresh button for now.
A large amount of things are still exceedingly broken. Certain posts don't seem to show up at all, and replying may or may not work, but I'll keep working on it
while ($l == true) { $get = system("torsocks curl --data \"(get $post)\" http://hz27w5o3zlhptx7v.onion/schemebbs"); //I couldnt get php curl to work, so this is just a workaround
if (file_exists("$sexp[0].html" == false)) //generates an html file for each thread. contains only a button to call get.php { $reply = fopen("$sexp[0].html", "w");
chdir("/var/www/html/prog/res/"); //opens one of the html files generated by main.php. $reply = fopen("$post.html", "w") or die("unable to open file"); fwrite($reply, "<html> \n <head> \n <title>Its okay I guess...</title> \n"); fwrite($reply, "<link rel=\"stylesheet\" type=\"text/css\" href=/prog/style.css> \n </head> \n <body id='threadpage'> \n"); fwrite($reply, "<a href='/prog/'>Return</a> <br><br><hr>");
$get = str_replace("(", "", $get); //all this shit is the same in all three files. I'm sure theres a better way to do it, but I don't know how $get = str_replace(")", "", $get); $get = str_replace(". ", "fuckfucklolololasdfghjkl", $get); $get = str_replace("id ", "", $get); $get = str_replace("date ", "", $get); $get = str_replace("reply ", "", $get); $get = str_replace("post ", "", $get);
if ($sexp[2] != "#f " and $sexp[2] == $op or $sexp[0] == $op and $sexp[2] == "#f ") //this checks if the post is a reply to the thread that its loading { if ($sexp[0] == $op) fwrite($reply, "<div class='subject'><h2>$sexp[3]<h2></div>"); fwrite($reply, "<div class='post'>\n"); fwrite($reply, "<div class='posthead'> \n"); fwrite($reply, "<span class='num'>$sexp[0]</span> Name: <span class='name'>Anonymous</span> : $sexp[1]\n"); fwrite($reply, "</div>"); fwrite($reply, "<div class='postbody'>$sexp[3]</div>\n"); fwrite($reply, "</div> \n"); } $post = $post + 1; }