Blazechan Thread #3

last thread died.
Blazechan is the blazing fast imageboard software, written in Python. It aims to reach the feature parity of the current imageboards while maintaining a clean codebase and speed. It's currently in beta.
Testing/development instance:
Production instance:
Current version: Beta 0.10.0
Currently (04/11/2017) working on:
- Extension system (75% done)
- Captcha
- Flood detection
- Roles section of panel
Please post feature suggestions and bug reports here.
I can be reached at [email protected] or #nextchan on Rizon.

Attached: Screen Shot 2017-11-04 at 14.39.14.png (1222x1204 671.95 KB, 460.47K)

Other urls found in this thread:

What does that mean?

You will be able to add new functionality to Blazechan. currently has rainbowtext as a testing extension, which adds !!text!! to convert to flashing/rotating rainbow text. I plan to create an API that allows extension developers to create extensions that can add new markdown syntax, new URLs/views, new sections to the site entirely, etc.

Can I write extensions in Rust?

You can write the views in Rust, and then call your Rust binaries in Python to get the result. i.e. Create a program that takes in arguments and returns an HTML template, and then call that program from Python and then return it as a response.

I have pushed the extension stuff to master. I'm planning to write documentation about it either today or tomorrow. Captcha should be ready by Monday or Tuesday.

How can it be the fastest imageboard if it isn't written in Rust?

Attached: 120943082.jpg (388x261, 13.14K)

well meme'd

Is this some shitty fork of Infinity next?

No, its a brand new shitty software.

Oh, so it'll go nowhere like the other hundred IBS.

Pretty much.

All hope is not lost. We're going to make imageboards great again.

Not in Python you're not.
Don't worry anons, the promised chan is coming.

Actually Futurechan written in rust is coming soon too.

where is the github?


Can't wait for the incoming Go one to blow that piece of shit out of the water. Best part is that its reference implementation is in Go with the production version written in C.

Try using a cached loader if you're going to use Django's templating backend instead of Jinja. It's a premature optimization but you might as well cache the templates in production at the very least.

Python is fine tbh. Your extension system is neat.

Gonna look into that. Should I switch to Jinja? Pros/cons?

Thanks. The API is very far from complete, but I'm still working on it. I'm planning to add the ability for registering board/site options and being able to query them. One obstacle I'm having trouble solving is how to inject the extension's directory to the template search path. This should be done because otherwise if I do return render(request, 'extension/page.html', {}) the templating system won't know where ``extension/page.html'' is because it's not in the template loader path.

It's slightly faster and is the successor to DJT. Cons are that you'll have to rewrite all of your templates and can't rely on Django templatetags. Templatetags will have to be rewritten to jinja extensions.
Hence, just use the cached loader outside of development.

Honestly what you're doing, why don't you just piggy back on top of django apps. Extensions would just be apps that are installed through whatever means you want, but the important part is that you let the loader figure it out with APP_DIRS. Add whatever API you want on top of that. Am I missing something?

In other words, you'd be better off doing this:
Why not?

Also, note that since you're on greater than django 1.9, the load can extend templates recursively. So the following is possible:
blaze-dicks/templates/blaze-dicks/dicks.html:{% block body %}{% endblock %}blaze-dicks-extended/templates/blaze-dicks/dicks.html:{% extends "blaze-dicks/dicks.html" %}{% block body %}{{ block.super }}

Bickers the registry autodiscovers all extensions inside the extensions/ directory, and has to be loaded after the settings (loaded in AppConfig), therefore it cannot add new things to the settings. Also, I do not want to give any extension the full power of a Django app because I believe that it could be dangerous. I just want to provide API hooks that the extensions can hook to and add their own things in. I believe this makes for a cleaner codebase. What are you thoughts?

That's nice, but I'll have to do a dependency system for this. Easy, but will take some time.

I may put the effort to switch if after everything is done before a 1.0.

Also, the site gives 500 Internal Error when DEBUG is off. Why could that be?

I added captcha generation/getting at This should give you the same captcha every time, because of the algorithm used to determine the captcha to get. I'm currently working on adding the captcha to the post form, and adding pre/post posting hooks for the captcha checks, those should be done in 1-2 days.
in the meantime, I released the source of the RainbowText extension:
It's fairly simple and straightforward. It's enabled on the dev site.

fucking gitgud cancer doesn't work without js so its the same as gh but with an even worse ui

gochan? If thats what you are referring to, its worse than blazechan. Its been in development for at least 3 years and theres no catalog yet.

so this is the power of python

Attached: a3d4f203859f21a84e9090bfa793ec7e06705a96329b61929a8bae46357baa3f.jpg (511x509, 48.3K)

Is this the main site or dev site? Which board and thread were you posting on? Can you try posting again, then click "switch to copy-and-paste mode" (requires JS) and then copy the textbox's contents here?

i was posting on the dev site without js and everything broke beyond belief

Can you share traceback here or on a paste please (I told you how to do it on the post you replied to)?

Set up admin mailing and follow the traceback.
LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'filters': { 'require_debug_false': { '()': 'django.utils.log.RequireDebugFalse', }, }, 'formatters': { 'verbose': { 'format': LOG_FORMAT, 'datefmt': "%d/%b/%Y %H:%M:%S", }, 'simple': { 'format': '%(levelname)s %(message)s', }, }, 'handlers': { 'console': { 'level': 'ERROR', 'class': 'logging.StreamHandler', 'formatter': 'verbose', }, 'mail_admins': { 'level': 'ERROR', 'filters': ['require_debug_false'], 'class': 'django.utils.log.AdminEmailHandler', }, }, 'loggers': { 'django.request': { 'handlers': ['mail_admins', 'console'], 'level': 'ERROR', 'propagate': True, }, '': { 'handlers': ['console'], 'level': 'ERROR', }, }

Realistically there's always going to be a risk. I'd just go with the riskiest way off the bat instead of swatting ways to monkeypatch and put up a big ol 'EXTENSIONS CAN EXTEND ANY PART OF BLAZECHAN, REVIEW THE SOURCE CODE THOROUGHLY AND ACCEPT ANY AND ALL RISK YOU RETARDED FAGGOT.'
Either way, you want to inject those extension dirs in a way that the loader finds them and crawls them just like it does APP_DIRS. I just gave you the easiest way.

You definitely don't want to add a captcha directly on the form. That's the same mistake josh made. I suggest a two-step form if the user has not been 'authenticated' for no-js, the first step being the post form, and an API for JS users.
Something like this:

Additionally, so you don't make the same mistakes Zig Forums and 4chan made initially:
You do not want to reveal ban status until a user has a valid captcha answer or captcha answer status until a user makes a post. Why? Makes it easier for autists to check open proxies for ban status. This will eliminate 99% of autistic no-lifes spamming. Only the most dedicated will persist.

but then you have no users left?

Attached: 00d41cc3e5e93b8320e3191efc766bd47a9bf63e0252cbb623e516b288fb6cd4.jpg (1180x1080, 303.33K)

>tfw all that work wasted
;_; Fine. I'm doing it that way.
Actually, thinking about it, only the loader needs to change. I still need to have extension registry for the other stuff.

This makes sense. Ban status people can view anyway with /cp/banned/ and /cp/banned/{board}/, but I can make captcha check necessary for making a post.

Thanks for this.

I fixed it, capcode was None and was being fed into bleach.clean.

Firstly, only 90% of your userbase are going to post at all. Let alone crawling robots.
Secondly, you don't want to generate new captchas inline with the page. Hence, have a form that checks whether a poster has a valid captcha answer, but don't generate it inline with the page. No-JS, generate it after a post, as part of validation or whatever. JS, generate a captcha when people start adding things to a post with an API and display it. Perhaps allow them to answer the captcha without posting, but don't generate captchas when anyone and everyone does a GET on a thread or the index/catalog.

Whoops, I meant only 10% of your userbase. 90% will not post at all, only lurk. and only 1% will create new content. So don't fucking generate captchas inline with the page, 90% of real people will not use it at all, and there will be robots crawling it. Josh made that mistake of generating a captcha on each new session, don't make that mistake.

Has it stopped crashing?
Will they give /polk/ a new home again?
Old nextchan was really shit.

Attached: came_here_to_laugh.png (960x720, 742.71K)

how is this better than infinity next or lynxchan or any of the other failed IBS?

i demand answers!

Attached: 1458508149063.png (344x397, 151.78K)

Makes sense. I'll put an endpoint in the extension and add some sort of ExtensionRedirectException to halt control flow and redirect to the captcha page on NoJS and add an API endpoint for checking captcha for JS.

It seems to be mostly stable AFAICS, it was up for 25 days without problems before the VPS was restarted. A moderator needs to be active until I add captcha because there's a lot of linkspam, but after that it should be fairly good.
If the /polk/ users want to migrate again, I'd be really happy to host them. I'm sorry for what happened on the previous instance.
Infinity Next had constant problems, many of which were architectural. The site was hitting constant 100% CPU on load when Infinity Next was on it, now I've been checking gunicorn's usage and it doesn't seem to go above 20% CPU usage with 10req/s.


See, that's why you should just make extensions django apps. This is already built into python eggs.

So, realistically, you'd just have a requirements.txt that would recursively load anything from extensions.txt. -r extensions.txt.
Add extensions.txt whevever you want, -r the path in your requirements.txt, and then gitignore to freeze it.
Then users can specify whatever dependencies in their eggs, and it doesn't have to be published on, extensions can be downloaded from git, svn, tarballs.

I changed the extension style as suggested. Now it loads every extension as a normal Django app first, and then calls register_extension() on them to load the hooks. This also makes static file loading easier bickers AppDirectoriesFinder can find them, but you now need to supply each CSS/JS file you're gonna inject globally. The code is in master.

IPFS caching ability when?
1. auto-saving all files coming into blazechan
2. uploading said files to IPFS
3. create IPFS hash search bar for finding files
4. A "delete module" for DMCA takedowns

Congrats on getting blazechan up and running!

go back to cuckchan

Either or >>>/gaschamber/
Your pick, newfag.


This theme

One thing that blazechan could have, is thread continuation
1. Automated redirection to new thread
2. Archive old threads, and list them
3. Standard formatted text and image as OP
See >>>Zig Forums10855011


Do you even Zig Forums?
Yes, for some shit it should be deleted. For Ops, you ARCHIVE EVERYTHING.

Mega turbodropped

LOL. >>>/4chan/


I like the idea. Could be done as an extension.


Thanks. Where have you been?
wheres the 36 core server ;_;

You on IRC right now?


ipfs is good for this, but i would say wait until JS IPFS is out of alpha and into beta so people without go ipfs can see the threads.

In this case I was thinking and other 3-rd party sites, but good thinking.

Username in Rizon?

I was fam. Are you TryingTooHardPhone? i even pinged you multiple times, stop disconnecting you fucking mongoloid

Well that explains everything. Sorry man, I left because I think you weren't there.

The 404ing of content is a core component of imageboards. It serves as a natural purge of all the shitty worthless garbage faggotry that is better left forgotten. If anything of value does somehow get posted, then it will naturally survive in one form or another. Images get saved and reposted, screencaps are made, threads get saved on when needed, etc. It is the internet version of survival of the fittest. It's the reason you are so addicted to this format. You tolerate digging through shit so you can aquire a gem once in a while, and do your part in preserving it for the future.

An imageboard that saves everything is just Reddit with a different interface and no upvotes.

See >>>Zig Forums10878646
For operations and happenings, nowadays it is an unspoken rule to "Archive Everything". Removing shitposting and not archiving them is one, but keeping archives of things that the board intended to is another. Even better, is places like >>>/pdfs/ and >>>/zundel/ where they creating a database of content, one being better then the last, to the point PoliticallyIncorrectLibrary (TOR project) becomes feasible?

I have pushed new extension hooks to master, and I have also released the source code of the CAPTCHA extension.
The dev site now has CAPTCHA verification. Currently it only works with NoJS though. I have yet to add post form hooks for the JS postbox. Gonna finish that in a couple days.
I have moved the Blazechan and extension repositories under the "Blazechan" group. The new URLs are:

when are you moving the project to github so it gets more attention?

No thanks

maybe the board owner can enable archiving using one or multiple extentions?

That is my plan. The extension API is vastly incomplete. In fact, if you have ideas for API extensions, feel free to tell them here or over at

after the rust rewrite :^)

Provide an actual argument against it. It's not the best language in the world, in fact I acknowledge the fact that it's pretty bad on some aspects, but it's very good for this kind of project. Before saying slow, check posting speeds on the main site and browsing speeds on dev. Main site has varnish and dev site has nothing.

m712 is a communist antifa cuck

Attached: Screenshot-2017-11-9 Remove homoglyphs ( 1) · Merge Requests · Blazechan Blazechan CAPTCHA Extension.png (1125x81, 9.92K)

So why bother using python if it needs a crutch anyway? Might as well either use anything else that is equally mediocre at the task or use something that doesn't need said crutch and would make everything simpler.

I might as well come out of the closet. I am actually a leftist self-identified coder-kin genderqueer LGBTQ activist. :^)


Blazechan is dynamic, so it needs a cache so it doesn't rebuild the page every time. Varnish was used here too, before it was replaced by Alacrity. Every site needs a cache, and using Python or C or whatever language you want doesn't change that fact.

Of course you'd need to cache it somehow.
What I am saying is that you could implement the cache on the software itself instead of relying on a 3rd party software.

Varnish gets the job done and it gets it done well. Of course I could do it in Blazechan, but I do not suffer from NIH syndrome (unless you count the main software as that).

The captcha is now mostly working on the dev site. Works for both JS and NoJS now. I did as , , suggested, and did it like this:
- Make a post
- Redirects you to a captcha page
- When captcha is entered correctly, makes your post and returns you to the thread
- When you click on the postbox, captcha loads
- When you answer correctly, your post goes through and the captcha goes away.
Sorry for adding a captcha check json endpoint, advice user. Do you have a better way of doing this? You said no captcha checking endpoints.
There are still a few more things to be fixed, but after that, I will put it on the main site. 0.11.0 should come out soon. Peace out.

I think there's a website that's much more to your liking over at r e d d i t . c o m

There more people at waiting for you

Bumping so thread doesn't die. I will not be able to work on Blazechan until next Friday, but after that development will speed up. Ciao.


Be careful of what you wish for.

I thought I only said ban check endpoints.
Allowing a user to see they're banned before they even answer a captcha is the problem.

That can be fixed. Once I get through real life business I'll work on it.

Is the Promised Chan going to be written in assembly?

No, Golang.


language isn't the most important thing when writing imageboards.
algorithms and the right choice of concurrency primitives are what's in fact important.
btw rust doesn't have coroutines officially, so python actually makes it easier to write faster code for webmonkey stuff.

Welp, my brain died and I pushed out 0.11.0 without fixing the release-blockers first. They should be there at 0.12.0 at least, I can guarantee that. But extension support is finally live and the Captcha should be available on the main site, so that should block out a lot of the spam. I am also working on implementing an anti-spam system like Tinyboard's one (add random fields to the form and check if they are filled) which should be done in about half an hour. I am also in the process of fixing some cruft and minor annoyances I find along the way.

Also, we have proper media deletion now. It was a hack tied to global B&D so the box doesn't get v& (it wasn't pushed to master), but it's now an official setting. It looks like dogshit though (pic related 1), I'm going to put it like pic related 2.

Attached: bchan-delete-media-nice.png (1222x705 66.09 KB, 66.97K)
Should be live on the main site in a couple minutes. I also fixed up the captcha textbox not being visible.

It is I again. I'm currently working on making a better board/site settings system because the current one is crap. It's mostly done, all that's left is saving and handling board creation now. I will push it to master after it's complete. Meanwhile, check out pic related.
Also, can you please test the captcha on the current site on and tell me what is bad about it so I can improve? Some users said the captcha is too hard/hard to complete and I'd like to have some perr review. Thanks.

Attached: Screen Shot 2017-11-25 at 21.19.30.png (1222x2380, 239.67K)

I see this is going really well. Will roles allow for board owners to setup custom groups for their staff, and granting those groups their own permission set?

Yep. You will be able to add roles with different permissions and assign roles to users. No progress done in that department yet, but it's slowly progressing.

nice job fag
please fix this i like nextchan

Please give more info. URL? What kind of page?