[ home ] [ q ] [ soy / qa / g / int / a / incel / pol / r ] [ overboard ] [ rules ] [ KNN ] [ telegram ] [ wiki ] [ dailyjak ] [ booru ] [ archive ]

/g/ - Generals

Password (For file deletion.)

File: 1661345565857.png (22.67 KB, 663x668, soot-computer.png) ImgOps

 5214 [Last 50 Posts]

>/g/ is up for 2 days and still no monthly programming thread
yikserino. ITT talk about what you're working on.


Whats a good project to do for my CV for web development to display 'jeet skills in JavaScript


you could try making your own dynamic HTML renderer for ${placeholders} or something. You link a JS object to a placeholder in the page, and replace that placeholder with that object's .render() output, and events sent to the generated HTML will be dispatched to the JS object.


currently working on a self-hosted compiler for my own programming language.


post source



I'm currently doing a huge rewrite of the project's architecture (generalised compiler stages), on the rework branch. There isn't any documentation yet.


Due to the fact that my bootstrap compiler is directly translating the parsed AST into C++ code, I'm very limited in the amount of language features I can actually use, and the code I write is very C++-like. Once I have a fully working implementation of the language, I can then migrate to better techniques (if I still have the drive to do that). Stuff like coroutines, better type inference, better metaprogramming, etc.


Currently working on forking jschan to use the p2p database OrbitDB instead of MongoDB.
Just started recently but made some progress today.


File: 1661434323055.mp4 (2.81 MB, 640x480, Hal fixing a light bulb (f….mp4) ImgOps

cool project. I once wanted to write a P2P chan, but I never really got far. I noticed I could re-use the network layer code for many other projects, so I designed a generic P2P network layer, then to implement that, I realised that I'd want to use coroutines, and then I realised that C++ didn't support them yet at that time, so I wrote a coroutine library, and then I started working on my own programming language, into which I wanted to add native coroutine support.


i lol'd
also nice, how far did you get?


currently, I have a rudimentary bootstrap compiler that just parses my language and then translates the parsed AST into C++, but it's buggy due to C++ being spastic. Right now I'm rewriting my self-hosted compiler to have a generalised architecture where I can easily add new compiler stages and AST transformations in the future.


>>5225 (cont.)
I got some nice features already that make it superior to C++, such as "const?" which allows me to implement a function both as a const member function and as a mutable member function, and then all occurrences of const? in the function are replaced by nothing or const depending on the situation. In the final version, references will also be much more constrained than in C++, so if you pass something as a reference, the receiving function cannot take the address of that, and you cannot store references as members of classes. Effectively, this makes it impossible to propagate a reference outside of its lifetime, and sideeffects can only happen during the execution of the function they have been passed to, and not during later executions.


File: 1661721816882.png (6.19 KB, 191x68, ClipboardImage.png) ImgOps

Finally, the self-hosted compiler is error-free (as in, I can build it with the bootstrap compiler), and I can now start implementing the real feature set of the language in it. Right now I only have the parser stage fully functional, but with the new compiler architecture, new stages will only take a fraction of the effort.


File: 1661787189263.png (17.08 KB, 600x700, 1603054027592.png) ImgOps

>conditional jump depends on uninitialised value


File: 1661818068816.png (128.03 KB, 834x539, ClipboardImage.png) ImgOps

>src/ast/global.rl:10:15: value g not covered in strict type switch (consider TYPE SWITCH?(...)) (rlc::ast::[Stage]GlobalMask)
Just added error diagnostics for type switches. When you do a strict type switch (without the "?"), and the type is not covered by the switch, then it throws a (string, string) tuple containing the code location of the switch and error message, as well as the actual type name of the switched value.


>infinite recursion when mutually including files
lol it did work before the rewrite, I'll have to check again how exactly I had implemented that.


File: 1661828705961-0.png (114.78 KB, 1024x1024, orbitchan_logo_new.png) ImgOps

File: 1661828705961-1.png (117.15 KB, 717x1430, posts.png) ImgOps

File: 1661828705961-2.png (162.55 KB, 2000x1258, orbit_db_logo_color.png) ImgOps

Today I got the posts, now stored in OrbitDB, to load on the index and board pages. Also published a general outline for what I'd like to do with this project going forward:
>Convert the whole database system to OrbitDB.
>Switch to serving files and post data through IPFS.
>Disentangle the database structure into a more hierarchical, fragmentary form.
>Dissolve the server into more of a validation system for a user-created, swarm-hosted, board, thread, and post factory.


he is right


I'm not working in anything because programming is for pussies


File: 1661861127954.jpg (173.12 KB, 490x1031, tranny-markiplier.jpg) ImgOps

sounds pretty cool. How does uploading work? Do you have to send it to a user-hosted server that then sends it to its peers for replication? Or is there a master server?
>t. full-time CoC author




File: 1661864614012.gif (152.57 KB, 251x338, markiplier-point-yikes-roc….gif) ImgOps

>d-dust!! I'm not a tranny!


that dust is pro tranny albeit.
Not an anti tranny gem.
Also you are the ones who said that "programming is tranny" and now suddenly it isn't.


>Ugly markiplier in a dress is "pro tranny"
retard faggot, check your eyes.
>Also you are the ones who said that "programming is tranny" and now suddenly it isn't.
I personally never said that and trannies can't do anything right because they chose the path of Satan and death.


Right now yeah there's a master server that has the only write access to the database (though I haven't really handled the access control yet). Other peers can listen and replicate the database amongst themselves (p2p) but not write to it.
Eventually though I want to have it so someone can say, create their own thread and start seeding it from their browser and have their browser node be the one with write access that other peers send requests to for reply validation (making sure the body has at most a certain number of characters, etc)
Instead of trying to architect all of that at once, I'm just jumping in and doing a multi phase approach. Hopefully each phase will make the path to implementing the next one more clear.


sounds cool. I suggest using a proof of work or a proof of capacity (similar to BurstCoin) for thread creation and identity management. That way, you have to invest work to create a valid identity, and others can filter your identity, making spam moderation possible.


I don't think it will work well if you require the thread creator to stay online full time. Everything needs to be independently replicated.
And the most important question, what if someone spams cp? I assume the thread creator has to act as the janny. Only board owners or thread owners should be able to delete threads. Each entity of boards, threads, and posts needs to be independent, and only if you are directly above or at your hierarchy should you be able to delete stuff. That way it's also harder for board owners to selectively censor posts, since they can only delete whole threads and not individual posts in the thread. (unless they want their board to be empty and dead because of their excessive jannying) You would have to implement a public-private key system to allow only certain people to delete stuff, having signed censorship requests appended to the distributed posts/threads databases. That way people can view and seed the censored posts and threads if they wish to do so.
For antispam we could have thread/board owners require captchas and/or proof of work challenges. You could make the challenges extensively difficult and funnel the results to a mining pool. That way people are financially incentivized to create boards and threads. To incentivize posters, you could even require it for quoting posts so they earn real money for every (You).


>>5241 (checked)
See my post:
Moderation should be client-side, but there should be "curators", people you can subscribe to to use their banlist. Every poster needs to have a cryptographic identity that's hard to generate, so that massive identity switching is more or less expensive and therefore all posts by an ID can be banned. You can keep multiple IDs to prevent deanonymisation. Everyone can be a curator.
As soon as you have someone who has the authority to delete stuff for everyone, you have censorship, and that person is going to be a target for CIA etc. There should be no special roles, otherwise you introduce single points of failure.


File: 1661953139063.gif (479.38 KB, 220x168, 3d-saul-saul-goodman.gif) ImgOps

SIRS just use Kleros for moderation. It's a dispute resolution system built on Ethereum where randomly selected jurors vote on each case, with monetary incentives built-in that force them to vote only for THE TRUTH.

So I think it could work like this: Before posting on the 'chan, you have to make a $20 deposit as a kind of 'promise' you won't break the rules. If someone spots you making a rule-breaking post, they can place a $20 deposit against you to challenge your post; a case is then sent to Kleros where jurors vote on whether or not you broke the rules. Once Kleros reaches a verdict, the loser's $20 deposit goes to the winner (minus jurors fees). Also as long as you don't break the rules, you can withdraw your $20 deposit at any time (with a 1 day waiting period to give people enough time to challenge your posts). This way you only ever have to pay anything if Kleros determines you have broken the rules.

This has the following nice properties:
>moderation is fully automated: no need to manage a team of mods since the users themselves act as mods thanks to monetary incentives
>moderation is 100% fair: Kleros jurors are incentivized to evaluate cases objectively according to the rules, instead of a biased cabal of jannies banning people they don't like
>moderation is 100% transparent: in a Kleros case, all submitted evidence & juror votes are publicly available
>is Sybil-resistant: attackers have to waste $20 for every rule-breaking identity they create
>jannies no longer do it for free: they make $20 per ban

for more information pls read https://kleros.io/static/whitepaper_en-8bd3a0480b45c39899787e17049ded26.pdf


>blockchain disputes for image board administration
>you have to dox yourself to make posts
kek, never change


tornado.cash doe


Also there's literally NO OTHER possible system with IDs that are hard to generate. Literally none. Prove me wrong.


I want it be as fast, lightweight, and easy to to use as a typical imageboard. I am avoiding jumping to blockchain as a solution because there is a general gross misunderstanding of the purpose of blockchain, which is to prevent double spending of money in a peer to peer network by providing a canonical ordering of events. This is not necessary in a distributed website.

Moderation can be handled via write access control which works via public-private keypairs under the hood.

The original poster of a thread doesn't have to stay online, peers can host the post once it gets going. And initially I want to have the central validation server serve also as a seedbox for posts and files to boostrap the swarm. It would also have write access and the ability to write user posts to threads.


Proof of Space signatures are easily what you're looking for. You generate (sk, pk), then generate a plot p that depends on pk, and then, to sign something, you create a space proof from your plot and attach it to the message, and then sign it. Since the plot is derived from pk, it cannot be reused.
Or you simply create an expensive PoW for your pk once, and attach that to all signatures. Depending on whether identities should also be hard to store, choose either variant.


File: 1661956831225.png (389.25 KB, 1000x1000, calm-feraljak-toast.png) ImgOps

>I am avoiding jumping to blockchain as a solution because there is a general gross misunderstanding of the purpose of blockchain, which is to prevent double spending of money in a peer to peer network by providing a canonical ordering of events. This is not necessary in a distributed website.
anon, I'm happy to see a fellow who understands blockchains.


File: 1661957052773.png (343.31 KB, 791x1000, 1660170568366.png) ImgOps


>you have send your doxxed eth to a smart contract that can get you jailed in the US
>you have to pay all the gas fees for disputes and the tornado cash
>all to shit post on a p2p image board that could also be built without the blockchain


>the purpose of blockchain, which is to prevent double spending of money
That's the purpose of Bitcoin, but not Turing-complete smart contract chains like Ethereum.

On smart contract chains, instead of only having basic "send this amount of money to this person" functionality, you can deploy general-purpose blocks of code managing their own storage, which anyone can interact with through transactions. The advantages this gives over just hosting the code on a centralized server are:
(1) the code is immutable, so no one can change the rules of how it operates
(2) transactions and their effects are uncensorable and irreversible

In particular, what this means for Kleros is that no one can stop you from using it even if you're using it for some weird imageboard, and no one can secretly handpick a jury to fuck you over.

>you have send your doxxed eth to a smart contract that can get you jailed in the US
the feds aren't going to come after you for sending $20 to tornado.cash. And tornado.cash isn't even a requirement, that's only if you really care about privacy and think the exchange you doxxed yourself to cares about your random shitposts. Also there's probably some fancy solution that uses ZK proofs that automatically makes deposits anonymous for everyone without the need for tornado.cash.
>you have to pay all the gas fees for disputes and the tornado cash
The other solutions proposed ITT, proof of work and proof of space, also cost money. And Kleros is set up so that other people are incentivized to argue your side of the case for you if you have a chance of winning, so you might not have to pay gas fees for the dispute at all. And if you win, you get 20 bucks, which should more than cover the gas fees.


>words words words I love ethereum
the left can't meme. Ethereum is only useful for executing programs managing assets with double spend protection. If no global total ordering of events is needed, then you also don't need a blockchain. All he wanted was a way to moderate posts in a p2p image board that otherwise has no need for a blockchain at all. Kleros is a meme. You're bleeding a massive dependency into the project by making everything depend on a shitty meme smart contract on Ethereum. The servers and the clients have to connect to Ethereum to read the kleros smart contract outcomes. A simple proof of work would not introduce a massive dependency to the project and be easier to replace later, and not involve any money transfers at all.
>The other solutions proposed ITT, proof of work and proof of space, also cost money.
Ok but you don't need to make a deposit to an exchange and then pay overpriced gas fees, so it's way more efficient and cheaper overall. Also you won't need to host a blockchain node on your system. There's a difference between paying for your electricity, which might include a few more cents due to a program you run requiring a lot of computations and having to do actual bank transfers and depositing collaterals etc. just to post on an image board.
Wake the fuck up, retard.


>paying for your electricity, which might include a few more cents due to a program you run
Question, nigger: What's stopping some random chud with a data center full of ASICs from printing a billion identities in ten seconds and using them to completely inundate every thread and every board with absolute feces? And what incentives are there for people to moderate those posts? Under my idea it's simple: what's stopping him is the immense cost, and the incentive to moderate is the $20 he generously hands out per identity. Really curious what your answer is for your PoW system.

You really haven't thought this through at all, have you? My solution may not be perfect, but at least it actually WORKS.


couple of other points, chuddy
>If no global total ordering of events is needed, then you also don't need a blockchain.
uncensorability and immutability don't matter because... THEY JUST DONT OK?!?!?!?!?!
>Kleros is a meme
kleros is shilled by the founder of ethereum
>The servers and the clients have to connect to Ethereum
omg so difficult!!!! (not)
>Also you won't need to host a blockchain node on your system.
all you really need to host is a light node, which is easy af


>>paying for your electricity, which might include a few more cents due to a program you run
>Question, nigger: What's stopping some random chud with a data center full of ASICs from printing a billion identities in ten seconds and using them to completely inundate every thread and every board with absolute feces?
Unrealistic and out of scope. Also, if you're super paranoid, you can use Proof of Space signatures and require, say, 100GiB plots for each identity, and set the plot difficulty so that it takes a week of nonstop computation for a normal computer, and make the plotting algorithm memory-hard. To flood under these circumstances is orders of magnitude harder and more expensive than DDoSing a traditional web service, since single-use identities take up lots of space and computation. You can even make it so that each user can specify a minimum plot size and difficulty for incoming posts, everything below the threshold will be discarded locally, in order to not force everyone to waste resources when the system isn't actually under attack, and to be able to adapt when under attack.
And someone on the class of having a ware house full of ASICs is not a realistic attacker for a niche image board. Such a person would also have lots of money, proably in the hundreds of millions, anyway, and would therefore also be able to mass-create identities in that shitty cleros court. And we don't want spam to be around for hours before the blockchain finally kicks in, and then wait for a day until the kleros court settles the case, and only then remove a post.
>What incentives are there for people to moderate those posts?
You see a post that's horrible, you ban the poster, and you will no longer see his shitty posts. No shitty posts → you will have a great time on the image board. You publish your banlist for others to subscribe to, so they also directly benefit from it, too.
<hurr but you don't get paid for it
yeah, I also hide shitty images someone posts on the 'sharty and I don't get paid for it, and nobody else even benefits from it besides me. I'm not a greedy fuck who can't do good without getting paid first.


>Also, if you're super paranoid, you can use Proof of Space signatures and require, say, 100GiB plots for each identity, and set the plot difficulty so that it takes a week of nonstop computation for a normal computer, and make the plotting algorithm memory-hard. To flood under these circumstances is orders of magnitude harder and more expensive than DDoSing a traditional web service, since single-use identities take up lots of space and computation. You can even make it so that each user can specify a minimum plot size and difficulty for incoming posts, everything below the threshold will be discarded locally, in order to not force everyone to waste resources when the system isn't actually under attack, and to be able to adapt when under attack.
Wow, so much more user-friendly and simple than just clicking a few buttons on my metamask. Oh and since the $20 deposit is withdrawable and eth scaling is just on the horizon, my approach will be virtually free for people, meanwhile you would rather wreck their hard drives with this nonsense

>And someone on the class of having a ware house full of ASICs is not a realistic attacker for a niche image board

I was exaggerating for comedic effect, it wouldn't take a huge investment to obtain significantly more hashpower than some random chuddy imageboard user

><hurr but you don't get paid for it

enjoy doing it for free faggot, meanwhile the average users of kleroschan will be getting PAID just for browsing


>uncensorability and immutability don't matter because... THEY JUST DONT OK?!?!?!?!?!
yeah they don't. All posts will be signed by your public key, so any tampering is impossible by anyone besides the author, and you can't just "take back" or modify something that's been replicated already. Censorability is even a good thing here, since we want to get rid of retarded posts like yours.
>kleros is shilled by the founder of ethereum
Appeal to authority fallacy. Vitalik is a fucking faggot and a retarded MIT-nigger atheist. He's literally on board with the WEF 2030 agenda for total surveillance etc. (see his cringe paper on soul bound tokens "Decentralized Society: Finding Web3's Soul" at https://papers.ssrn.com/sol3/papers.cfm?abstract_id=4105763). Therefore, anything he says has no inherent weight.
>>The servers and the clients have to connect to Ethereum
>omg so difficult!!!! (not)
Yeah, you're a no-coder so you don't know how annoying it is to bloat your tech stack with mammoth dependencies like blockchain nodes. I work in the cryptocurrency industry, so I know.
>all you really need to host is a light node, which is easy af
So instead of doing something simple and efficient like some client-side pre-computation stage to allow you participate, you'd rather have to deal with soft forks, hard forks, roll-backs, etc.? And the proper integration of blockchain events into the project's code is not trivial.


>yeah they don't. All posts will be blah blah blah
I meant in the context of Kleros as it functions as a moderation mechanism, not all the posts everyone makes

>He's literally on board with the WEF 2030 agenda

WEE WOO WEE WOO CHUD ALARM. I guess I shouldn't mention that Kleros also got a million dollar grant from the EU then.

>Yeah, you're a no-coder so you don't know how annoying it is to bloat your tech stack with mammoth dependencies like blockchain nodes. I work in the cryptocurrency industry, so I know.

>So instead of doing something simple and efficient like some client-side pre-computation stage to allow you participate, you'd rather have to deal with soft forks, hard forks, roll-backs, etc.? And the proper integration of blockchain events into the project's code is not trivial.
All I'm hearing is "I can't code for shit so I want to offload the burden onto the users and create a terrible UX"


>And we don't want spam to be around for hours before the blockchain finally kicks in, and then wait for a day until the kleros court settles the case, and only then remove a post.
just automatically hide someone's posts and freeze their ability to post when they get challenged, simple


>Wow, so much more user-friendly and simple than just clicking a few buttons on my metamask. Oh and since the $20 deposit is withdrawable and eth scaling is just on the horizon, my approach will be virtually free for people, meanwhile you would rather wreck their hard drives with this nonsense
Hard drives aren't wrecked from being written to and read from. You might be thinking of SSDs, and it would be a one-time setup, and the concrete example I gave was with arbitrary parameters that would be sufficient to protect against an adversary with massive resources (compared to a normal user), which, as I also said, isn't even realistic. You'd have some tranny discords raiding it, and maybe some government shills, but they'd rather shill on 4tranny anyway.
>I was exaggerating for comedic effect, it wouldn't take a huge investment to obtain significantly more hashpower than some random chuddy imageboard user
So what? If you also need to have a lot of disk space for an identity, then you're also very limited in the amount of identities you can produce and store at once. You're limited by your RAM, your disk capacity, and your disk bandwidth.
>meanwhile the average users of kleroschan will be getting PAID just for browsing
yeah you're probably also using brave to collect that sweet BAT huh? how many hot pockets were you able to buy in return for your sanity and concentration? 10?

>All I'm hearing is "I can't code for shit so I want to offload the burden onto the users and create a terrible UX"
>I can't code for shit
Show me your compiler or fuck off.
>anything blockchain
>not terrible UX
pick one.

I'm not going to respond to you anymore, retard. You're delusional and clearly can't see reason, especially since you insist on shilling your shitty blockchain eventhough the guy who is working on the project already said he doesn't want to use blockchains in his project.


File: 1661961635219.png (135.32 KB, 356x576, ezgif-2-dbb246ebd2.png) ImgOps

sorry if I made you cry, anon
so sorry...


die frognigger


was this board advertised on 4tranny or something? These obnoxious newteens are a menace.


File: 1661962452405.jpg (45.32 KB, 550x503, 1611728330951.jpg) ImgOps

Anon, I've got some bad news...

[spoiler]I'm going to keep posting frogs anyway[/spoiler]


File: 1661962882271.gif (57.36 KB, 498x337, peepo-laugh-point.gif) ImgOps

newchads can't stop winning KEKW


holy fail
frogniggers migrated after fedchan went down for a week due to a simple DoS attack and their technologically illiterate admin wouldn't accept kuznetsov's offer of hosting in exchange for russian rubles


File: 1661963667145.jpg (1.11 MB, 3264x1684, pm me cocks.jpg) ImgOps


albeit that's not kuz shitcord account his official account isn't public afaik




lol. Maybe they should have used blog chains lmao. I actually enjoy frog memes, but fedchan users have sucked the soul out of it. In the old days, frogs weren't so bad. You can also see how they don't fit in with sharty culture because they don't know how to soy post. I hope that p2p image board will get built soon, I can't wait to be able to ban retards who want to derail every instance of good conversation without having to rely on stupid jannies.


>not public


File: 1662075568670.png (1.06 MB, 2062x2000, calm-sleepjak.png) ImgOps

>compiling 75 files.
>107 files recursively scoped
>[Finished in 1.0s]
Finally finished my second compiler stage (scope population and merging of namespaces etc.). The next stage will be about resolving the meanings of names, replacing them with pointers to their target in the AST. After that, I'll do template instantiation, and then code generation, I think. Depending on whether I generate C or C++ code, I might have to do more extensive type system stuff first, as well.


Very nice chud.


I decided on a new developmental push for the p2p board. The first main thing will be to implement a 'distributed thread viewer', essentially an html page with js that runs an ipfs node, where you can download all of the posts and files through IPFS without going through the central server (what I'm considering calling a 'mediator' - i might use a nuclear reactor analogy and call it a 'moderator' but that has semantic baggage in an imageboard context). For that the posts database should be fragmented up on a per-thread basis. Intesting thing I'm learning about distributed databases is that having them not be monolithic, but instead be an assembly of mini-databases that reference each other via hashes, is useful.
After that, maybe then a distibuted catalog viewer.


>download all of the posts and files
<of a given thread*


Definitely a good design choice. You might also want to consider building a WebExtension for secure and permanent client-side identity management.
As for the catalog, you could also make it emergent, so peers advertise threads they know (or rather, their IDs) to others, and nobody has to care about a centrally maintained catalog. Or everyone can maintain his own catalog, and you can merge multiple peer nodes' catalogs or something like that. And then every single thread could be hosted by its respective OP at first or something.


Nice ideas anon.


I made a 4cuck scraper that lets me predict my posting number


Something I'm debating right now is whether or not to include the thread OP in the individual "posts" database or make it its own separate thing. An interesting implication of separating them is that you could then attach a comment stream to anything. You could have different reply lists to a given thread, or another mediator could take over, appending new replies to the thread (in a seperate database) even after the original mediator stops servicing the thread. The route to the stuff you mentioned, and the "subscribing" concept is becoming a bit more clear.


I made a 4chad scraper that lets me predict my posting number


It makes sense to have the function to reply to arbitrary posts in a thread. Then multiple conversations can happen in the same top-level thread without getting in the way of each other too much. You could then either view the whole thread or just a discussion within a thread without all the noise around it (e.g. without bumps or whatever)



I stole some 4chaim scrapper that let's me predict my post number from some tranny on GitHub and then published under my name


Due to a limitation in the current implementation of OrbitDB (only being accessible by a single process at a time), I had to go down a rabbithole trying to find a way to funnel all database queries from different node processes to single one via a websocket server. I finally found something that works and now should be able to start making everything work with fragmented per-thread databases.
The key was this library:


>third party project
>stupid limitations
>pain to use for what you want
pick three


File: 1662389005107.jpeg (2.32 KB, 93x125, 1659322173517.jpeg) ImgOps

For orbitchan, the RPC socket thing is mainly functional. So now multiple server processes can indirectly query a single OrbitDB instance on the other side of the socket.
One limitation is the fact that there isn't currently a way to query via some sort of JSON syntax like mongodb {$set... and everything. So for now I'm just getting the whole (sub-)database and filtering it back on the client side. Fragmented databases helps make this less of an issue, but for socket-bandwidth and ease of use concerns, that could be something to address down the road THOUGH.

One issue I'm still trying address I'm not so clear on is that I managed to break CSS delivery somehow and all pages are pure html. I encountered it before so hopefully it's something unrelated. Nginx/development mode/http issues probably.


Fixed the css issue somehow again finally lol.


File: 1662402765925.png (68.82 KB, 585x1122, post replies.png) ImgOps

Got replies and posts/index building working properly. Now, theoretically, if I had my IPFS and everything configured properly, a user could access the database containing all OP posts on the site (which contains links to, so therefore also the individual thread replies databases).
I don't have access control set up yet so anyone could add or remove posts containing whatever information they want directly, lol.


File: 1662407001672.png (52.56 KB, 1085x388, explanation.png) ImgOps

Basic access control is actually pretty simple in this case. You just have to pass the public key of the generating client, as a parameter during database initialization. OrbitDB handles this essentially all under the hood so you just need to pass one object in.

And it can be updated, so for example multiple "trusted nodes" could be given write access to the database in question. This could be useful for situations where the op-seeder of a thread also wants to have their thread listed on a given catalogue service, or something. As part of the mutual trust agreement between both parties, they could agree to subject their thread to the mediator's moderation, in exchange for getting its presence broadcasted as part of a canonical catalogue. Though alternatively, the OP could remain the only one with access control and the mediator could just remove it from their catalogue as they saw fit, spam considerations aside.


Looks fun! Have you been working on this long?


I (and other anons) have had the idea for a p2p imageboard for a while but I started this particular project a week or two ago. I'm not very experienced with web development so it has been really educative so far.


P2P soyMMO when?







On the orbitchan front, I've been looking a bit closer into how peer-discovery works in IPFS.
It seems that entirely web-browser hosted js-ipfs nodes currently require a "WebRTC-Star" server to coordinate initial contact with peers. People running their own nodes, however, don't have this issue. I've been debating about what to do in light of this. I was thinking that perhaps I should implement a WebRTC star server into orbitchan so that it helps coordinate peers... but in a way that is going backwards, because it's a non-distributed element. I very much wanted to avoid people having to run their own nodes to access the posts and images, but it seems like this is somewhat of an as-yet-unsolved problem with browser-based.
In the spirit of p2p and also to make things simpler, for the time being I'm going to proceed assuming each user is hosting their own node. I think it would be nice to have a per-board setting that allows for its content to be served traditionally through the central mediator server, just like the party for example, while other boards would be only accessible via IPFS. For example /meta/ and /help/ could be viewable traditionally, but all other boards would be swarm-only. Of course, nothing stops a third party (or perhaps me down the line) from providing a gateway service or webrtc-star/rendezvous server to help browser-only users access the data, and that's a nice thing to consider as well.


Also here's a similar project to OrbitDB that I came across, though it faces the same fundamental issue with peer discovery from a browser, it seems.


godspeed chuddie


File: 1662586927343.gif (28.96 KB, 296x444, 1661997427118.gif) ImgOps


not using your website now kys


File: 1662587020915.png (357.34 KB, 1469x731, 1659240780266.png) ImgOps


allow people to host their own servers that allow establishing direct p2p connections for browsercels. So light clients can connect to any custom rendezvous server they want. They'll then list their relay/handshake server's endpoint instead of their real IP:port in the discovery list.
colourful gem


Not every user can afford having an open port or even a semi-permanent IP address (phone fags). You can also make it so that you post to some other anon's node and the node is responsible for replication, not the poster. Basically a 2-type network of viewers and full nodes. Of course, everyone is encouraged to run a full node, but that definitely should be optional.


File: 1662760896900-0.png (104.94 KB, 632x900, 1657510151454.png) ImgOps

File: 1662760896900-1.png (7.06 KB, 411x147, ClipboardImage.png) ImgOps

>TFW libraries are larger than your code


>Programming le bad even though it's the most soy activity known to womankind


kek, imagine not building a 64-bit computer by hand in hardcore mode.


That's why is bad however


>it's the most chad activity known to MANkind


File: 1662922269400.png (126.72 KB, 1100x541, ClipboardImage.png) ImgOps

Just implemented proper errors being displayed when you have a duplicate declaration for things that cannot exist multiple times (functions, classes, etc.) as opposed to namespaces, which are just merged upon redeclaration.


I finally figured out bundling node modules for browser use, and added a prototype "p2p catalog" page that allows you to open an orbitdb database from your locally running daemon.
The next step would be to get the JSON for all the threads out of that database, and then render the catalog using that data.
However I'm having a bit of trouble actually loading the oplog of database entries, so I have to figure that out.
Also testing locally is one thing but at one point we'll have to test how it works for people on different machines (with different IPFS daemons).


I might be able to help, I can set up a domain for my home server.


Lookin' nice.


Oh thank you for offering anon. When I get it functional on the single-machine end, I may take you up on that.
I suspect the current issue I'm facing is that, running in the browser, it's looking in the wrong disk location when it tries to load the oplog entries.


I don't know anything about that stuff. But once you're at the point where multiple nodes can communicate, I'll be happy to help hosting the 'chan. Just hoping I won't get swatted for the 'p.


Hehe.. well thanks. Maybe we limit access or something for testing until there's enough people to cover the timezones for moderation.


idk, you can also start off with a textboard instead at first.


Good point.


I have a feature request: let the OP mark/highlight posts in his thread for other users. That way, if there are a lot of shills, you could highlight the few quality posts in a thread, so it gets harder to drown out the OP when he has a message to tell.


File: 1662993376339.png (11.55 KB, 323x570, 1622150353522.png) ImgOps



hey chuds, give a koding idea cause i'm bored as hell


File: 1663013697134.png (27.26 KB, 749x947, 14140 - closed_mouth craze….png) ImgOps

>picked up Stroustrup's Programming, Principles and Practices Using C++ (2nd)
>finished the Ch.4 drill in two days
how'd i do, /g/?



You can already do this with tripcodes no?


no, tripcodes are for identifying yourself to others, but I meant that the OP can highlight others' posts he liked. Especially in a heavily counter-shilled thread, that'd be very helpful. Even if it somewhat resembles reddits upboats, but it's OP-only and it's not about hiding posts.


Make a virtual CPU and assembly language with coroutine/singlethreaded multiprocessing support.


Another thing that would be interesting is a kind of object file that can handle compiled, uninstantiated template code. I'm planning to build that once I'm done with my compiler's initial stage. Basically, I want an object format where you have a "variables" block that contains placeholders for types, functions, or numbers, a constants block which can calculate stuff based on the variables, and a code block, which contains assembly instructions that can make use of the constants.
That way, you can compile templated types and during linking, only the "variables" section has to be filled with the supplied template arguments. You can use that to instantiate templates without requiring the source code of the templated type or function.


File: 1663057644086.png (9.63 KB, 287x179, ClipboardImage.png) ImgOps

you write code like a CIA MIT nigger


also you can drop the goto mark;. The order was already correct anyway.


now THAT is niggerlicious


Another cool project would be a WebExtension that works similar to NoScript, but for WASM modules. It can run WASM code that's embedded in a site, and you can manage the permissions of the code by injecting only functionality that the user allows. That way, you can set to allow arbitrary WASM as long as it doesn't use network connections etc., for example. I'll also build that one day for my programming language, Yahweh willing. A WebExtension that provides an OS-like sandboxed environment to WASM-compiled code of my language.



What's the functional purpose of not breaking automatically?




Okay... after much pondering and looking-up and trial-by-error, I have finally realized the source of the bug that was preventing me from receiving pubsub messages in the browser. It actually wasn't related to the browser at all, but was based on the fact that I was using the same IPFS daemon for both the "server" and the "client". Apparently, IPFS nodes do not receive their own messages; it takes two to tango. Perhaps there's a life lesson in that.
Anyway, it's functional now so I can just work on getting the browser to http request the local server, which should bypass any CORS issues as well. For now the user will have to run their own 'peer node' which consists of the IPFS daemon and the orbitchan functional wrapper server on top of that, but maybe that can be simplified down to a 'one-button' jsipfs node or something down the line later. Having it run outside of the browser also (I imagine) helps avoid potential issues with browser storage and such.




Thanks. It's a bit of a relief to be past that wall. Now the next steps are fairly straightforward.
Currently working on getting the catalog page to neatly put all the catalog data in the right spot after it's retrived from the local peer node server.


Conceptually it's a bit interesting because the implication is that, instead of generating and serving static catalog, index, and thread html pages, there is going to be essentially 3 prototypical "pages" for browsing: thread, catalog, and index. Then the pages will dynamically fill-in and retrieve the data for these depending on what thread, etc. the user wants to view.


check out https://github.com/RmbRT/renderable.js/ if you want lightweight dynamic rendering react-style but without all the bloat. I can also assist you if you have any problems with it.


Very nice, thanks anon.


actually, I should update the README, since I added a lot of stuff that's not covered in the tutorial, like interactive elements with event handlers etc.


File: 1663363280716.png (95.65 KB, 865x873, ClipboardImage.png) ImgOps

Updated the readme, added interactive example (list with buttons that remove entries).


lol had a mistake, the onClick function should be an arrow function to correctly capture myList as "this", fixed that in the readme.


Awesome, thanks for doing all that.


You're welcome. I'm really looking forward to the day where the 'chan can be used and we can finally take back anonymous online communications.


File: 1663369005787.png (101.73 KB, 825x1091, minimal.png) ImgOps

If you want to mess around with it, I just uploaded a very minimalistic version of the 'peer client' server:

And I'm also welcome to any PRs you (or anyone) might want to open. For example the frontend is something I could use help with.
Though it's in a very barebones and quasi-functional state at the moment, at last the minimal functional loop (retrieving post data from a local IPFS node) has been implemented.
The main server repo:

If you do mess with it and want some clarification on something, feel free to let me know. Maybe I'll make a chatroom somewhere.


hm… I'll think about it. For now, I am quite busy with my job and outside of it I have little energy left even for my own projects, despite "only" having a 75% job.
But yeah, I think I can help out with the frontend, maybe I'll set aside one day every weekend or something, if I feel fit enough.


Of course anon. Something I'm still learning in life is the importance of pacing onesself to avoid getting burned out.


the fact that this is in JavaScript made me lose all interest


OrbitDB is written in javascript and so are the primary two maintained modern imageboard backends (jschan and lynxchan). It makes the most sense.

The language is just a tool.


>web application
>not written in javascript
pick one. Or write your own ecosystem that can replace javascript as a necessary web language.


Also he may not realize but jschan is actually compatible with noscript from the user's point of view. The name comes from the fact that its a Node.js backend.


You don't need javascript for the backend, hopefully in the future you won't need it for the frontend either. Just because jschan and other decent pieces of software are written in it doesn't make it a non-shit language.


Okay, explain why it's BAD.


>type juggling
>the "prototype" system
>two different keywords for functions
>two different keywords for assigning variables
>every single number is a float (defined in the spec)
>async for everything even if it's unneeded


not that chud but javascript is bad on several metrics:
- inconsistent fundamental type system (see how all these operations on primitives are extremely counterintuitive)
- GC language, hard to write good code in those languages because you can't control when the GC kicks in
- Syntax is awful, and had it not been designed within literally a few weeks, millions of people wouldn't have to suffer today
- The whole web stack is actually hopelessly bloated and rotten. Modern browsers offer way too much functionality which shouldn't exist and have a huge memory footprint. Javascript can easily be used to track you, as there is no capability management.
There are other points, too, but that's all from the top of my head.


This could probably save web development and replace javascript.




So anon I currently have a few options in terms of rendering the JSON to the page. I started to go into it naively just createElement() and appendChild()-ing but quickly realized I was reinventing the wheel in an inconvenient way. One thing I could do is use your library to make this more convenient, once I figure it out a bit more. Another is to use the 'peer node' backend to generate not just the raw JSON but instead the formatted divs and such and then graft that into the page more simply. The latter does have the benefit of allowing me to reuse a bunch of the .pug files and such built into jschan, but might be bloating the peer node a bit prematurely, though maybe it's for the best since it'll have.a standalone viewer eventually.

Or maybe I should forego this whole page splicing thing and just make the standalone viewer outright and then just link back and forth to it from the main site. This could then be either static or dynamic page rendering. Kind of leaning towards this last option for now but I'm curious what you think.


After a bit of consideration, the .pug files already exist, so I think just hooking up some routes so the user generates their own static pages and serves them to themself js probably the ideal option. Then everything would be noscript compatible, and the task of html page generation is offloaded onto the peer.


I have been working on making my library compatible with both the browser context (DOM) and within nodeJS (non-DOM). Then you can use the same code in my library for server- or clientside rendering. Serving the JSON should be more compact, bandwidth-wise.


that way you can serve the JSON to render for js-enabled clients, with the ability to dynamically re-render when interacting or when new posts appear or to render once on the server side while serving a static page.


That makes sense, so it'd be a bit more lightweight for js-enabled clients. Nice.


Updated it, you can now use the script in Node.js too like in the browser. I added a note on how to import it in Node.js in the readme.


File: 1663517066233.png (261.85 KB, 1886x1883, twocatalogs.png) ImgOps

I manged to cobble together a bunch of the existing pug files and stuff into a catalog page such as it is. No CSS and it's a missing the proper links and metadata but it's progress.
Left shows the classic view from the site page, and right shows the "client side viewer" which reads from its own IPFS node. Data replication is pretty fast on the same machine, but I wonder how it'll work on the wider internet.


File: 1663518321007.png (368.92 KB, 779x790, 20362 - closed_mouth glass….png) ImgOps

looking great.


File: 1663518901965.png (57.71 KB, 1160x1125, 1660789609840388.png) ImgOps


Also something I found out the other day; apparently it's possible to use IPFS over TOR. If that's the case then it alleviates potential concerns over sharing one's IP with the swarm.


And it would still be possible for the mediator server to block TOR nodes and such on the input side, when a user submits a post (since that doesn't go though IPFS). But in terms of actually retrieving and seeding post and file data, that could all be done through IPFS over TOR.


it would be a bit slow but definitely a vital feature considering just about anyone can directly see your IP address and upload incriminating stuff.


Yeah, though I think there would be some plausible deniability in that case, like with the browser cache on traditional sites.


Fragmented the threads database into a per-board system. Now when you view the p2p catalog page it automatically obtains and places the hash-address of that board's thread database for you and there's a button that links to the actual p2p view. Eventually this might just be a straight hyperlink but for debugging and development it's useful to have it "splayed out" to see.


This also broke a bunch of stuff like the overboard for now.


File: 1663545158162.png (3.28 KB, 202x95, fragments.png) ImgOps

Chainposting here but this is a list of fragmented mini databases as the current structure stands.


File: 1663603413156.png (171.92 KB, 904x941, twocatalogscss2.png) ImgOps

Got css working and found out that MDNS (helps peer discovery on the local network) messes with pubsub for some reason, so I turned that off by default.


what is MDNS and pubsub


same question here, I'm 200% ignorant of popular tech stacks outside of what I was forced to work with on my job.


what do you use at your tech job


Go (which is a horrible language on all fronts), typescript + React for frontend, also sucks. And of course le epic blog chain maymay.


NOTHING to do with networking therefore turbo coal


I am new to this myself but as I understand, pubsub is a protocol that allows different nodes in a network, in this case IPFS nodes, to publish and subscribe to messages being broadcast on different topics.
In this case, when someone adds a database entry to a given OrbitDB database, they broadcast it as a pubsub message over the IPFS network, and users subscribed to that database receive that update and modify their local database state accordingly.
MDNS I'm not too clear on the details of, but it seems that it's a way for devices on the same local network, like different computers in the same house sharing a router, to find each other. It's not necessary in this case but I had it enabled when I was trying to fix a bug so it was causing issues. It stands for multicast DNS apparently.


yeah it's just a job, nothing more. My personal gem is my programming language. But recently I didn't make too much progress, God is humbling me and took away my strength to work hard.
Strange that these would interfere with each other. But then again, anything that does anything with routing or DNS usually fucks up everything else. The current state of networking is a total clusterfuck.


maybe because pubsub is just based on the type of content the publisher posts and the subscriber likes, whille MDNS tries to create a connection? both things seem like retarded concepts.


God wants to create, not destroy. all creations of God are great, and their creations are great too.


God will return soon to destroy all the evil nations. And we are cursed for not obeying His laws and believing in fake gods such as democracy. All our western mercantile laws are taken straight out of the talmud.
>and their creations are great too
Cain was a corruption of creation, he was half human and half demon (serpent). And now Cain's offspring is all around us and ruling over us.


that is not destruction. it's re-construction.


File: 1663611839026.jpg (126.3 KB, 769x530, 1627588770313.jpg) ImgOps

True. Still, I have no strength left, I was too haughty and proud of my skill I guess. Back during my younger days, I could program for 12 hours straight without a problem, and now I can barely get 2 hours out of a day. I am lucky on a day when I manage to take care of grooming, grocery shopping, and cooking. I hope this all ends soon and I can get back to doing real work. Not this fake economy and blog chain hype train bullshit.
>NFTs are real
>soulbound NFTs are good
>self sovereign identity
>gotta bank the unbanked
>democracy and voting (mining blocks)
>"customers" and revenue
>social media marketing
>company sneedcord server
It's over.


>Appeal to authority fallacy. Vitalik is a fucking faggot and a retarded MIT-nigger atheist.

>atheism....... le bad!!!! cringe!!!!!!


>>atheism....... le bad!!!! cringe!!!!!!
I say this. I had a dinner with Vitalik once and it was terrible. He's mentally crippled. Not only is he unable to look people in the eye when they are talking to him, he can't even nod or give any signs of acknowledging the other party. When I stopped talking because I was annoyed by his ulta turbo autism, he got so anxious, in the end, he sprinted away at full speed.


>God will return soon to destroy all the evil nations.
How thoughtful of God, well that's a major relief.
What's the plan in the meantime? Cope and seethe?



File: 1663619868602.jpg (24.69 KB, 514x577, GigaChad-physical-stats.jpg) ImgOps

>atheism....... is bad!!!! cringe!!!!!!


>I say this. I had a dinner with Vitalik once and it was terrible. He's mentally crippled. Not only is he unable to look people in the eye when they are talking to him, he can't even nod or give any signs of acknowledging the other party. When I stopped talking because I was annoyed by his ulta turbo autism, he got so anxious, in the end, he sprinted away at full speed.

I actually do this. I'm an autistic programmer (not famous or anything but have some projects with a few thousand GH stars) and once met up with some internet people briefly. Some months later I saw one of them wrote a 4chan post about me which was extremely similar to what you wrote here. I'm incapable of making eye contact with anyone or acknowledging people in conversation or really having a conversation or normal casual human interaction at all. I also have previously sprinted away from situations where I feel anxious, though I've tried to stop doing that.

We can't help it, ok. We're designed to stay behind our computers.


kek. I'm also a computer person, never had a GF, and programming C++ for 12 years now (picked it up when I was 13). I can't talk to women my age properly, but at least I can hold a conversation with other guys, especially when it is about my topic of expertise (back then that conversation was about sharding).
>sharding on your 'erium


File: 1663627294418.mp3 (28.79 KB, fail.mp3)

me and a girl were talking once, and i assumed that she was le heckin based trad girl, so i told her to go back to the kitchen as a joke. she got so mad at me that we stopped talking. this is a girl that agreed with me on the topic of niggers and trannies by the way


Gem-grade chud moment. She was definitely a coaler with her feminism.


File: 1663708092209.png (96.63 KB, 887x1641, thread.png) ImgOps

Got the foundation of the thread page rendering.
The most glaring missing feature is images, but that's going to be its own thing since they aren't added to IPFS yet and it's probably going to work a bit differently than the post data.


this story is so autistic I actually believe it


File: 1663737813104.png (33.27 KB, 781x189, persistence.png) ImgOps

Working on the peer node side a bit. I added a sqlite database that stores database names and addresses so you can load them (and start seeding) as soon as you boot up the peer instead of waiting for an external command. So you can more easily seed and get updates to threads you're interested in without having to actively browse to them.
And I did a cozy optimization where the page templates are compiled once and then held in memory rather than reading them from disk and compiling every time.


what's the roadmap/overall progress?


The current state/roadmap is outlined here in the readmes and some of the issues:
The current push is to get the peer node and viewer software functional so that people can browse threads and download posts and files entirely through IPFS. The meain feature lacking for this currently is the files.
The wider next goal is to have a functional browsing, posting, and moderation experience so that an imageboard can actually be run in a deployment setting. A lot of query-related functions broke when I ported the database from mongodb to orbitdb so I have to go through and fix them.
Then once a site is feasible a site can be hosted and we can see how it works in practice (ie. how well data can be replicated), and add features and possibly make it more distributed from there. In making a site and cultivating a userbase it may attract some collaborators to add stuff as well.


Made it so when a user posts a file, that file also gets uploaded to IPFS. Eventually I'd like to remove the normal file directory as well and just store everything in the IPFS node, but until I figure that out, for for now there is some redundancy. Next I think I'll either handle thumbnails in a similar manner or see how to retrieve and display files correctly on the peer node viewer side.


Yet another bullet dodged by staying away from this project. javascript trannies keep losing.


File: 1663977166705.jpeg (168.47 KB, 526x649, i love science.jpeg) ImgOps

>problem caused by continuous integration
>blame it on unrelated projects and the language used
JS is cringe, but you have made a fallacious argument.


I may be able to just use the inbuit 'ipfs gateway' functionality to serve the files, which allows you to access files via http.




Was mainly working on a hardware mod I was doing on my desktop the past few days. But I found a library that makes porting the database queries way easier and integrated it into orbitchan: https://github.com/crcn/sift.js
For some reason I didn't think to look for this until now but this removes a big obstacle in terms of porting the remaining elements of the database over from mongodb to orbitdb.
Next steps are figuring out nginx/general proxy routing stuff so image and files can be simply served from the IPFS gateway node backend to the html pages, for both the "classic view" and peer node self-served view.


you might have to write your own HTTP(s) server that takes care of that. There are node.js libraries for that that aren't that hard to use.


I'm hoping to somehow fit it into the existing jschan http server/nginx and ipfs gateway to make things simple. The ipfs gateway already serves you images and stuff via simple http request, but it's running on a different port so I'm not sure how to route it.


File: 1664329532919.png (328.24 KB, 689x1876, proxied.png) ImgOps

For the peer node side here's a simple test.
On top we have an image (screenshot the temporary p2p catalog interface). The top image is requested directly from the local IPFS gateway itself. On the bottom we have the image retrieved from the IPFS gateway indirectly through the peer node, with a proper filename attached. This allows us to serve files nicely in the page and have them be saveable with their normal filenames rather than simply an extensionless IPFS hash.
Another benefit is that this concept paves the way for us to serve files from the IPFS node backend itself for people using the "classic view" via html pages served by the main server. This is umportant so we can eventually remove the classic file storage system and just keep everything in an IPFS node and not need to have two copies of everything. But that's a bit later. The next step is messing with the peer node page render templates to get the file URLs working properly using this new proxy system.


File: 1664372742885.png (89.54 KB, 883x986, catalogimages.png) ImgOps

And with that we can nicely load the catalog images over IPFS into the catalog view. It should be pretty simple to get full size images working for here and for the thread view as well.


File: 1664373951929.png (159.82 KB, 1789x845, sidebyside.png) ImgOps

Here's how the two catalogs compare now. The difference in background color is just because I scrolled down to get things to line up.
Right is obtained over IPFS (except for the board name and description which are obtained over HTTP for now) and the left is the traditionally served HTML page from the orbitchan mediator server.


File: 1664376364056.png (244.05 KB, 1500x1500, doomer-feraljak.png) ImgOps

Still can't find the strength to continue on my compiler. Too exhausted, I think it's some illness or something, been going on for months now, and has been getting worse over time.
Congratulations, looking good!


Anon your health is the most valuable thing you have on this earth. Maybe it's time to consider a career change or some time off?


holy mother of soy
just drink more coffee or do adderall
otherwise consider transitioning


You take it for granted while you have it.


fuck off, I knew I guy who was a great programmer until he drugged himself on those goypills




shut up nigger


>I think it's some illness or something, been going on for months now, and has been getting worse over time.
Did you take the clot shots?


>I think it's some illness or something, been going on for months now, and has been getting worse over time.
Did you take the clot shots?


File: 1664474379640.jpg (34.1 KB, 360x350, 1651738702339.jpg) ImgOps

Thanks. I already took a long vacation, but it didn't help at all.
of course not. I think it's just burnout from the general bleak situation we are in. I tried a better diet, working out, taking a vacation, but now I'm running on empty. Everything is pretty much meaningless since shit will hit the fan soon and Babylon will collapse. Once everything goes to shit, who'll care about some pet project I did? There's nothing to do with your life, you can't build up anything of value with your efforts, at least in this decade. In the kingdom, things will be different, but for now, all I can really do is endure life and try to find some small joys while they're still there.
All I can really look forward to in this situation is that after the collapse, the police will hopefully no longer be able to stand between us and the demons who invaded our lands. Then we can finally return to a functioning society.


I mean I feel the same way but I wouldnt say it makes me tired, more like bored and lazy, work gives me no sense of accomplishment.


Shit won't hit the fan and Babylon will not collapse. If you don't change your perspective you'll be in a neverending state of cope. Just stop caring about news and politics. Those are memes evolved to have the exact effect they're having on you right now. Like a virus. Your H. sapiens body is being parasitized by harmful memes; your brain is infested with memetic parasites. Instead try to replace them with memes that help your mental and physical health, find symbiotic memes, not parasitic ones.


>Just stop caring about news and politics
I don't actually care about or follow news and politics. I also don't try to change the world.
>Shit won't hit the fan and Babylon will not collapse
I have the Word of God and He promises these things. It will happen, and there's nothing we can do about it.
Jeremiah 51:6-10 (KJV):
<6 Flee out of the midst of Babylon, and deliver every man his soul: be not cut off in her iniquity; for this is the time of the LORD'S vengeance; he will render unto her a recompence.
<7 Babylon hath been a golden cup in the LORD'S hand, that made all the earth drunken: the nations have drunken of her wine; therefore the nations are mad.
<8 Babylon is suddenly fallen and destroyed: howl for her; take balm for her pain, if so be she may be healed.
<9 We would have healed Babylon, but she is not healed: forsake her, and let us go every one into his own country: for her judgment reacheth unto heaven, and is lifted up even to the skies.
<10 The LORD hath brought forth our righteousness: come, and let us declare in Zion the work of the LORD our God.
>dude just reframe your worldview lmao
>muh evolution
That's not how it works. We're going through the greatest punishment the white race has ever faced or will ever face. I'm used to being detached from everything around me, but the comfort that allowed this has ended, and I am simply unable to ignore it at this point. I'm still doing my best not to think about it too much, and I try to appreciate whatever I still have left, but I know it's going to get worse.
Our situation is the result of every sin committed in the history of our race. All compromises our ancestors and we have made, and of all our transgressions, have accumulated and turned this world so rotten, it is unable to be healed by our hands. Only when Yahweh returns to restore our race and kill all abominations will the world be cleansed of sin and death. There is nowhere to go yet, because Babylon is still in the process of falling.
It's only been the last half of the year that I felt like this, I think. In earlier years, it didn't affect me at all. I guess it wasn't tangible enough before. Pre-2020, we only had hints of what was to come, but now, it's full steam ahead into the abyss.

Now, I'm not condemning building whatever you want to build, it's a fulfilling pastime. Just know that our whole society will disintegrate soon, so you won't be caught unaware.


The left can't meme






Touch grass.
Nothing's going to be made right and for that matter nothing's wrong.
You are just subconsciously addicted to torturing yourself and your worldview and spiritual outlook is merely a reflection of that.
Everything is a figment of a dream; you, me, God, Babylon.


File: 1664526969816.gif (517.44 KB, 760x704, tranny-rope-animated.gif) ImgOps

>God isn't re–ACK!!!


I didn't say that. Your human conception of God is merely a human thought running in a human brain. You torture yourself with your own thoughts.


what a shitty derailed thread. this is why i stay away from trannyscript projects.


>I didn't say that. Your human conception of God is merely a human thought running in a human brain.
I know exactly what you mean, but I also know that this leads nowhere, and is therefore a coal mindset. Christianity is the truth and the only existing mindset that will lead to a fulfilled, virtuous life.
make your own, then.


Finding meaning with God is a quick and easy way to find fulfillment, but finding meaning in life without God, while far harder, is much more fulfilling in the long run


Are you feeling fulfilled?
It seems like based on what you said it's not working out for you. Maybe time for a change.


It's essentially a drug, specifically a painkiller. You give yourself good feelings for a while to numb the pain of life, telling yourself you're walking the righteous path and are going to get the ultimate reward of unlimited dopamine if you wait and suffer in silence unlike everyone else who's chasing "cheap highs". You give yourself hits of dopamine by telling yourself this. But then eventually it stops being as effective and you are left tired and drained and "chasing the dragon" hoping for eternal salvation and God to come destroy the world, but it doesn't come. So you're strung out to dry like a junkie going through withdrawal, trying to feel as good with the drug as when they first got into it.


Not reading your essay nerd


Been sort of chilling out the past few days but fixed a few bugs with building the board index page "classic" view over http. Once I fix one or two more bugs (essentially just getting the omitted replies to omit properly) the next step is to get the board index view working nicely on the peer view as well, then make all the links on the peer side work nicely (so you can click "index" from inside a thread and go to the index page, click, catalog, etc.; make the navigation work.


File: 1664626986165.webm (14.22 MB, 600x900, it's over 2.webm) ImgOps

Sounds good. I hope I can get a look at the code this weekend.
>missing closing parenthese
It's over.
>Are you feeling fulfilled?
Yes. But you probably wouldn't understand or believe that. God gives rest and comfort to a weary heart. It is only a minor matter that I don't have much energy left, because with God, things are put in their proper perspective.
>It seems like based on what you said it's not working out for you. Maybe time for a change.
It's not about whether something is working out for me or not. It's about good and evil, and not having to be ashamed of your life when the judgement day comes. Life is not about "success", but about persevering on the right hand path.


File: 1664636297062.jpg (117.73 KB, 800x450, boot.jpg) ImgOps

You've again chosen to continue suffering. At some point you may realize it's not "Babylon" doing this to you, but yourself. Changing your perspective from:

>my suffering is part of an apocalyptic cosmic battle of light versus dark


>my suffering is self-inflicted

is the first step to liberating yourself, but it also has a pain-barrier to overcome; how foolish you might feel, having invested so much anguish into this narrative, to have it all evaporate like mist. On the other hand, consider how freeing it would be.


Nice. Let me know if you have any issues getting it working. There are some bugs and unfinished things at the moment.
Also if you want to ask via chat rather than here I also made a matrix chatroom for this project:


this is the dustiest thread in soyjak.party history


File: 1664656185918.gif (117.23 KB, 300x380, 1661112572250.gif) ImgOps

>this is the dustiest thread in soyjak.party history


when did all the retards start coming here? this board was relatively quiet and didnt really need any real modeation until now.


File: 1664664370104.gif (90.79 KB, 166x205, feral.gif) ImgOps

>when did all the retards start coming here? this board was relatively quiet and didnt really need any real modeation until now.


File: 1664664874398.gif (1.39 MB, 340x319, 1660435018260.gif) ImgOps

>>this is the dustiest thread in soyjak.party history


File: 1664674602124.png (346.04 KB, 598x799, 1654102523754.png) ImgOps

>when did all the retards start coming here? this board was relatively quiet and didnt really need any real modeation until now.
back to 4tranny


File: 1664682174308.png (844.48 KB, 908x582, 1636468508679.png) ImgOps

>when did all the retards start coming here? this board was relatively quiet and didnt really need any real modeation until now.
stay here, 4chadder


File: 1664685315574.png (93.34 KB, 889x1424, homepage.png) ImgOps

Got the board index view working with all the page 2, 3, 4, 5 etc. as well.
Also added this homepage to the peer node that opens when you boot up the node. It's kind of a placeholder barebones thing but I did it partly just to make it more self-explanatory for anyone who wants to mess with it at this stage of development, and partly as an exercise for myself. Boards that you've opened before have their orbitdb thread list addresses saved to a local sqlite database and then appear here on startup.
Will probably get this to look like a normal jschan board-page with a bunch of other stuff added on eventually.


File: 1664737527496.png (291.33 KB, 1809x1212, homepage1.png) ImgOps

I made the homepage look nicer and added some fallback behavior for getting the boardlist:
It first tries to check the boardlist from the mediator server (left view), then if that fails (eg. the server is offline), it will build the boardlist from its locally stored sqlite databse of orbitdb database addresses (right view). There's some stuff to neaten up and change here.
Eventually boards can be ported to orbitdb as well, but for now I want to neaten everything up and get a mostly functional experience working before moving on to that.
One thing that will probably have to be done is separating out "stats and settings" for a given thread (eg. reply numbers, sticky status, lock status, etc.) into its own per-thread sub-database, so you don't have the primary threadlist catalog being updated every time a reply is added. Things should be hierarchically organized and fragmented so that the operations log of a given board catalog doesn't get excessively long due to updates to "reply count" and such things.
If 1000 threads have been made in the board's history, then the oplog should ideally be about 1000 entries long. This would be a pre-emptive measure to mitigate potential issues that may arise with excessive oplog length; as orbitdb currently lacks an implementation of oplog trimming, though the devs are aware of the idea.
This an article related to this that one of the devs mentioned to me when I was asking questions:


she's right chud





Finally found some time for my compiler again, but I realised I'll have to rework and rethink a few design decisions of the compiler and the language itself: I have types called rawtypes that are basically just a fixed-size byte array (with optional alignment requirements) and act as a primitive value, like an integer, and I'm not sure whether they're supposed to be able to have things like destructors. I think I want them to act as raw data, like integers, and not as objects.
And I'm currently reworking the way I register members for lookup and scoping. Since things like arithmetic operators or type conversion operators don't have a name like functions do, I'll have to track them separately, but that complicates the lookup logic somewhat.


Nice, sometimes taking a break from actively coding allows the mind to figure out changes that need to be made. Good to see you working on it again.

As for me, along a similar line I also took a break for a bit, but finally fixed up a bunch of bugs with post deletion that I was kind of putting off for a bit.


I'm constantly re-thinking my language, I hope I won't end up like Goethe who wrote his Faust over a span of 50 years or so, constantly revising it.
I initially wanted to look at the code, but then gitgud went down. The next few days will be rough at work, and then my parents are visiting over the weekend, so I won't have the time to check up on it this week, either.


File: 1665080656592.png (54.36 KB, 623x681, edits.png) ImgOps

That's natural I think. As I started doing this project as well, the vision and such of it has slowly become more clear, and several things have changed in terms of the design. Ya can't really tell what somethings going to look like 100% in advance it seems. Especially in your case, with something so abstract as a new language. Very cool doe.

Just now I got post editing working. Slowly the functionality is returning and it's becoming more usable.

Also made a checklist of items for being able to release it in a functional state:
It's nice to do it in stages and bite off and chew a little bit at a time. Once I've done enough to call it version 0.1.0, then I can think more concretely about hosting.


>fallbacks, try/catch, error pages rather than crashing the application
kek. Milestone checklist issues are great. Hierarchical checklists would be even cooler. I guess there's no dev management suite with a good UI yet. It'd be cool if you had a tree/graph of issues/milestones, and you can expand or collapse them, see overall completion, etc. Then you could have a quick way of viewing both fine-grained and big picture issues. I think work tools should have video game UIs because those are the most intuitive.


File: 1665086436988.png (109.97 KB, 400x431, furious3jak.png) ImgOps



File: 1665086538817.gif (152.57 KB, 251x338, markiplier-point-yikes-roc….gif) ImgOps

>expanding and collapsing lists written on paper
>zooming in and out on paper


File: 1665088748826.gif (222.36 KB, 389x400, furious4jak.gif) ImgOps

it's called.................... EYES!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!



File: 1665091643413.png (14 KB, 500x590, 1616824625146.png) ImgOps

>zooming to display a more detailed view of a component is the same as simple magnification


File: 1665091941667.gif (361.23 KB, 200x200, 1660616098526.gif) ImgOps

>you CANT use more than one piece of paper... because.... YOU JUST CANT OKAY?


File: 1665091966963.gif (3.6 MB, 256x256, 3dtroonjak.gif) ImgOps

>>>4306 (You)
>>zooming to display a more detailed view of a component is the same as simple magnification


Most 'tistic thread on the sharty (predictable)


Most 'ntelectual thread on the sharty (predictable)


File: 1665130928185.png (532.83 KB, 491x480, 1627429871910.png) ImgOps


File: 1665131039476.png (123.64 KB, 600x802, 1636420793551.png) ImgOps


File: 1665174938084-0.png (52.24 KB, 894x614, reports.png) ImgOps

File: 1665174938084-1.png (181.06 KB, 1348x1067, updateMany.png) ImgOps

Fixed up post reporting. Still a lot of the moderation stuff has to be fixed, but its kinda getting to a nice point where I've ported enough stuff over that each thing can be somewhat quickly fixed (both because a lot of it it mostly done and because I have a better idea what might be going wrong).

And also got it so files links in threads are actually retrieved on the backend from the IPFS gateway, so that gets rid of the "redundant files" issue with files both being in /static/file and the IPFS node (once I remove files being kept in /static/file)
Also in pic related is an example of implementing some MongoDB query stuff in orbitdb, which has a very limited native querying.


File: 1665345122379-0.png (12.77 KB, 461x157, ClipboardImage.png) ImgOps

File: 1665345122379-1.png (34.53 KB, 389x288, ClipboardImage.png) ImgOps

Just added a neat little trick to my dynamic pointer class. It's quite lightweight but allows me to have optionally-allocated members and construct them on their first use. I'll have to think about the naming a bit more, though, I'm not fully satisfiet with the succinctness.


I think maybe "or" is a nice name, although it doesn't imply potential self-assignment to the new value.



started learing assembly (arm) on this emulator:
using youtube video for basics reference, should i read their entire documentation after?


assembly is cool, I once started writing an x86 kernel in NASM relying heavily on macros to get some cool features like named function arguments etc.
>should i read their entire documentation after?
going through the list of all instructions once is quite interesting but it's not that useful to get too deep into ASM, unless you're writing a code generator or assembler. It's useful to get to know concurrency control stuff like fences and atomics etc.


File: 1665691120545.mp4 (17.9 MB, 1280x720, TempleOS_ Terry Davis _Fra….mp4) ImgOps

The eternal Frasier strikes again


Just came up with a new operator for my language: the ? operator is renamed to ??, and a new ? and operator is added.

*ptr? = 5; would be equivalent to IF(ptr) *ptr = 5;

To add an else case, the OR operator can be used:

RETURN *ptr? + 20 OR 0;

The special thing is that the OR does not have to be directly connected to the ? in the expression's AST, and you can match multiple ? with one OR. So, you can write things like this:

(*ptr?->member?)(something?) OR THROW;
If any of 'ptr', 'member', or 'something' are falsy, the OR is executed and the rest of the expression is discarded. In that manner, it is somewhat similar to javascript's ?. operator, but that cannot abort outer expressions from inner arguments (such as something aborting the whole function call if falsy.

Hope I didn't mess up formatting.


>new ? and OR operator is added.
fixed typo


File: 1665698390796.jpg (57.67 KB, 390x380, german its over.jpg) ImgOps

>even forgot a )
it's over.


I think it's a much more natural way of thinking to think of the optimal path without any "ifs", and then afterward consider all the edge cases. And that's what this new operator more or less achieves.


File: 1665714872660.jpg (53.18 KB, 512x589, 1636916043187.jpg) ImgOps

but its just getting started


File: 1665714975292.png (58.92 KB, 663x668, soot sissy.png) ImgOps



File: 1665715025491.png (669.58 KB, 512x589, jesus died so floyd could ….png) ImgOps


File: 1665719188138.jpg (35.64 KB, 600x682, 1632797207557.jpg) ImgOps

>jesus died so floyd could breathe.png


File: 1665719259433.png (123.69 KB, 600x682, yeah im thinking thats a f….png) ImgOps


File: 1665719486359.png (192.97 KB, 600x818, 1642218520088.png) ImgOps

>Chud 3 minutes ago No.4546
>File (hide): 1665719259433.png (123.69 KB, 600x682, yeah im thinking thats a floyd.png) ImgOps
>>>4545 (You)


File: 1665719871964.png (170.85 KB, 600x682, i have a tiny penis if I g….png) ImgOps


File: 1665720860000.gif (820.13 KB, 1540x1222, 1636486446926.gif) ImgOps

>i have a tinty penis if I green text this filena-ACk


Youre a sore loser you know that


File: 1665745491853.webm (3.67 MB, 1024x576, tranny goes to anime worl….webm) ImgOps

>you are a sore loser you know th– WOW! I'm finally a woma–ACK!!!


File: 1665745926551.png (498.12 KB, 705x1200, 1628726938354.png) ImgOps


File: 1665760603966.gif (160.25 KB, 181x191, 1636424931394.gif) ImgOps

most of those shows are for chads, not trannies.
but this is a gem.


File: 1665763123356.jpg (52.75 KB, 338x546, irl tranny.jpg) ImgOps

>women as lead characters
they all look really boring though. I do know some anime that aren't cringe, but none of those characters give off the vibe of an interesting anime.


File: 1665775692721.png (21.72 KB, 368x240, ClipboardImage.png) ImgOps

which way, white man?


File: 1665775888077.jpg (55.82 KB, 884x1200, 5c0c6af318bcf505cccf14564c….jpg) ImgOps

they make penis hard, so they are cool.
also for the record none of those characters are mains.
also nice selfie, tranny


I've been taking a break from this for a little bit but I got back to it finally and made it so that sensitive information like poster IP inside of the posts databases is salted and then encrypted. Since databases are stored p2p and are available to any peer, this is necessary to avoid people doxxing users. And the salting is necessary to avoid people realizing "oh these two posts in separate threads have the same encrypted ip, it must be the same poster. This adds a bit more data to each post THOUGH, around 3 kilobytes or so typically. It might be possible to get away with using a smaller encryption algorithm and bring this down to about 1 or 2 kb, something to investigate. Seeing as images can be 4 mb or so it's not such a huge deal maybe.
Now I just have to implement using the decryption function in the relevant places, like the spam filter, mod page where IPs are visible, etc. This former might actually take a bunch of of resources decrypting every single post in the database in order to check for IP spamming... so I have to see.


why not just remove the IP from the database?


The IP has to be stored somewhere. We could actually remove raw IPs from being used and just use IP hashes (vanilla jschan also supports something like this this as a setting), but they'd still have to be encrypted to avoid the issue of connecting the same anonymous posts to the a given poster's IP (even if the IP itself is unknown).
I'm also trying to keep it as functionally similar to jschan as possible as a design goal for now. The one thing I did decide to skip for the time being is moving posts. Jschan doesn't currently support cross-board post moving. I guess that seems strange but it is an infinity-style system where users can make their own boards, so it would add a little bit of complexity. There is same-board cross-thread post moving, but I feel like moving posts to a different thread on the same board isn't that useful of a feature anyway so I'm probably going to leave it out for now.


Actually I guess if we don't care about rangebanning and stuff or raw IPs, the IPs could just be salted and then hashed to keep the size of each post smaller. Same with password it could just be a hash. I'm going to think about this a bit more.


But.. that would mean that there's no way for moderators to tell that the same user made each post, without everyone else who has access to the database also knowing.


What about my suggestion of having a cryptographic key pair as your identity, and having to attach some PoW to your public key? Then you need some upfront work to create an identity, but once that's done, you can reuse it for as long as you want.


in case of flooding, you can then set the minimum PoW difficulty for posts to be displayed, to filter out low-effort identities. And you can still ban people via the public key of the identity they use to sign their posts.


It's a possibility but I don't necessarily like the idea of a new user having to wait several minutes and use intensive computational resources in order to start posting. As I mentioned before, I want it to be lightweight, fast, and similar to a traditional browsing, on the surface. And even then there's the same issue of having to encrypt or salt+hash the signature to avoid people being able to recognize a given identity across posts or threads.


But down the road this may be something to consider actually, once we move into the later phases of the project. For now though my primary goal is to get it to a functional state while keeping posts and files on IPFS. There's a whole Pandora's Box of stuff like this to consider for the stages after that.
Might even want to switch the project over to something like this eventually, (lol).


Looks like it could be alright, but I didn't really look into it more than reading a bit of the readme. I just hope they have the right ideals, so that their work doesn't end up wasted because they went down a wrong path. That's the burden of those who develop fundamental technology.


I've been lurking in the matrix chat a bit, they seem pretty idealistic.


Ideals are required, but you have to be the proper ideals. Imagine some tranny-loving communist idealist, he wouldn't be able to achieve greatness because his ideals are twisted and not in line with righteousness. Terry called it divine intellect, and it is the ability to perceive the correct ideals and the ways of righteousness. I'm not saying Terry was 100% right on everything, no man is. But if someone loves niggers, he won't be able to build perfection. The more you stray from the correct ideals, the less close you can get to perfection. This is the difference between great and lesser men.
It depends on your standards, though: if you want to be pragmatic and just build it so it works, imperfection will suffice. I personally seek out perfection so I cannot incorporate inferior means into my great design. Of course, in the initial stages, I have to use whatever exists to build proper tools and environments. But long-term, I have to be extremely careful so that I don't end up with niggerlicious results.


Most non-retarded post I've ever seen on /g/


not rly. that chud is overly idealistic. living in a castle in the sky of his own creation. hell awaits us all


I'm getting somewhat closer to this being in a release-able stage. The primary things left to do are mainly related to pruning deleted sub-databases and IPFS and considering what to do about this:
If a site has a small userbase at first and stays under say 100000 posts or so, I'd say this isn't so necessary, but if it gets to millions of posts then it might become more of an issue and one or more of these avenues might need to be implemented.
That's for the main server software anyway. The peer node software also should be fleshed out a bit (the most glaring thing missing on that end is being able to post to the mediator server from the peer node-served pages. But I'm focusing on the mediator server side for now.


Also did a bit of an optimization where each post will now typically only have about 1.2kB of extra data due to IPs and password being encrypted.


thanks, brother. It's an honour.
>overly idealistic
>you're m-muh p-purity spiralling! chud!!! haha!
>all the cool kids have no strict ideals and make compromises with the devil!
grow up, tranny. Hating on ideals is hating God, and promoting corruption. Read Maccabees, they died because they refused to eat unclean meats. That's God's way: unbending ideals, even in the face of being tortured to death.
>hell awaits us all
"hell" is catholic hocus pocus and not scriptural. If you're referring to the lake of fire/second death, that's exclusively reserved for all non-Aryan bastards. If I turn out to be non-Aryan, then yes, I would be going there. But no Aryan will be sent there. If you're referring to hades/the grave, yes, everyone who dies goes there to await judgement day.
Sounds great. I'm willing to host it once it's ready, but my machine doesn't have much RAM. Is there a way to configure the cache capacity?


oops, meant to reference
>>5509 *


lol I'm drunk, meant


hes right however


File: 1666239388506.png (95.06 KB, 888x1620, postform.png) ImgOps

Currently working on being able to post to the central mediator server from within the peer-view. To that end I had to add a new JSON API thing to be able to provide more specific board-related data than jschan provides by default. Like board settings concerning number of files allowed, whether posts can be deleted with a password, and such and stuff, so that everything can render properly on the peer-view page.

After this I have to figure out how to get the captcha to load nicely and also fix redirecting after posting.

Once this posting thing is fixed up, the next step after that is adding a per-board setting to make a given board only browsable via the peer-view, and adding some messages and guides when trying to access such a board through the classic server-served view. Will probably keep the moderation access and such just carte blanche allowed on either view for now, at least until the moderation pages and such are also made functional on the peer-view side.

>Is there a way to configure the cache capacity?
I'm not totally sure, but I believe it may be something that happens automatically.




Programming is for boomers and trannies


>"hell" is catholic hocus pocus and not scriptural. If you're referring to the lake of fire/second death, that's exclusively reserved for all non-Aryan bastards. If I turn out to be non-Aryan, then yes, I would be going there. But no Aryan will be sent there. If you're referring to hades/the grave, yes, everyone who dies goes there to await judgement day.

Rightism is a mental illness. It's no wonder you all worship people like Terry Davis. Psychosis is divine insight in the eye of the chud.




File: 1666437495412.jpg (154.03 KB, 1024x975, 1621875898163.jpg) ImgOps

>Rightism is a mental illness. It's no wonder you all worship people like Terry Davis. Psychosis is divine insight in the eye of the chud.


taking a break from programming for a while, I have to rethink some design decisions and solve some problems that make my language a bit ugly currently: mainly how to do operations such as comparisons on containers that depend on their values and hashing in a beautiful way. Currently, I started injecting comparison functions into containers such as maps and sets via templates, but it quickly gets annoying, and I'd end up injecting comparison functions into everything from vectors to smart pointers via templates, which would lead to extreme levels of bloat. I'll have to find another way.
Until I find that, I'll try writing a novel or something. I feel like it could help me calm down a bit, since I find mulling over how to precisely express my intent very liberating.


File: 1666782647505.png (52.92 KB, 250x309, ClipboardImage.png) ImgOps

I wish to apologise for what I wrote here, I realised I was in error. I had a slightly wrong mindset, and it completely paralysed me. Although shit will hit the fan, and society will collapse, we know we will win, and just because we can't kill all the niggers yet, it's not wrong to prepare for our victory already. I misenterpreted my own endeavours as "trying to heal Babylon", which I never intended to do in the first place.


Guys, be careful trying to make a decision based on prophecy, even getting some nuance wrong may be the difference between defeatism and conviction. I did learn a lot from this, though, so it's fine.


File: 1667037634874.png (72.69 KB, 684x666, ClipboardImage.png) ImgOps

I realised that current programming languages have insufficient abstractions. They usually just give you classes and functions, but they usually don't give a primitive to describe free-standing execution threads (services), and neither do they allow you to define a single service interface that then generates both a sender and receiver end which would allow strong decoupling and easy connecting. Currently, you would need to write an abstract sender and an abstract receiver class to achieve such decoupling, which is needed for simulating parts of your program for tests (e.g. simulating user inputs, or simulating backend behaviour).
I came up with three new features I want to add to my language: protocols, a glue operator, and a MASK(Type) operator. A protocol is a collection of functions/commands, and multiple protocols can be combined into a composite protocol. They aren't instantiable, but if you have a protocol P, then P SERVER is an abstract type that implements the receiving end of the commands, P CLIENT is an abstract type that covers the client-side functionality.
The glue operator can be used to instantiate a concrete type from two or more abstract types, under the condition that all abstract functions in every type also exist as non-abstract functions on one of the other types. For example, if you have a decoupled abstract type pair as in pic related, then gluing them together via ControlPanel | VendingMachine can form a new type that automatically links the calls to handle_input() and display(). This kind of very easy type construction will allow you to write mocked control panels or mocked vending machines and simply gluing them together to a single type, and there is no runtime penalty for the abstractions (no virtual calls required).
Then, using MASK(ControlPanel | VendingMachine), you get an abstract (not instiantiable) type that can hold any type implementing the same functions as ControlPanel | VendingMachine. This allows switching out parts of the code without any effort. Note that this is a compile time substitution, it has to be injected statically. For that, I added a rough concept that allows setting context variables and types for instantiated types or called functions. They work similar to setting environment variables in a shell invocation:

ENV_VAR=VALUE my_program --args...

Now you can do something like this:

[]{MASK(ControlPanel | VendingMachine) = MyVendingMachine | MyControlPanel} shop: Shop;

This injects a type binding specified inside the {...} into the variable shop, replacing any matching instance of the left-hand type with the associated right-hand type at compile time. You now can not only have abstractions and split interfaces that are no hassle to connect, you can also simply reuse your production code and swap out global variables, certain types, or even override any function you want upon instantiation to inject the desired behaviour. You can turn log calls into no-ops statically, you can mock network communications, override syscalls, etc. You can also simply create a wrapped version of a function that measures its execution duration, and then replace the original with the wrapped one for profiling.

All of this will take quite a while to implement though.


currently reworking my standard library, I added a non-NULL unique pointer type, so that nullable and non-NULL variables can be distinguished at the type system level. Found a few bugs already that way. I'm slowly getting a feel for the way my language should be used to model things.


came across a youtube video about new kinds of programming languages that use both text and graphical circuit notation at once. I think that while circuits are stupid for formulas and procedures etc., they're really valuable for networked components where there's significant dataflow.


File: 1668118417838.png (277.78 KB, 1024x819, ClipboardImage.png) ImgOps

The old thing is over and the new thing is just getting started. "Blackpilled" to me doesn't mean giving up and slitting your wrists, it basically means following the serenity prayer. The American Empire is beyond repair but we can build something new from its ashes.


File: 1668163599133.png (515.85 KB, 750x750, 1655881192424.png) ImgOps

based king.


Still working on the compiler rewrite… the work never seems to get less, I feel like I'm on a bicycle trainer at hardest resistance. And the compile errors inside the auto-generated C++ are starting to get on my nerves. I guess slower progress is the cost of a cleanly abstracted type architecture. But I think it's worth it since type-level guarantees help me guard against compiler bugs.


came up with a new concept for representing ASM instructions in my virtual machine and object code, and I think it would lend itself well to precompiling templated code. It also has many other benefits that would make it easy to do other features I have planned, such as injecting/overriding behaviour in functions you call. Basically, it treats all code as templated, but there's a mechanism for injecting opcodes' values during a call.


File: 1668385042831.png (15.06 KB, 414x178, ClipboardImage.png) ImgOps

made some great progress in my compiler — added a new feature: symbolic values can now also be annotated to reference a type. Here it is applied in action and used to implement a custom "new" operator/constructor for my Dyn type. My language actually doesn't have a "new" keyword, so as long as multiple container/smartpointer types support the same constructor syntax, I can freely exchange them without having to touch the code that calls them. In C++, this is not possible, as you have to switch between std::make_unique<T>(...) and std::make_shared<T>(...) whenever you change the pointer's type.


File: 1668385589064.png (1.39 MB, 1014x844, 1628723480114.png) ImgOps

technolo/g/y get


File: 1668554912457.png (26.38 KB, 1375x261, ClipboardImage.png) ImgOps

managed to implement rudimentary error locations in the autogenerated C++. Wasn't even much work, I just didn't know there was a standardised #line macro in C and C++ that allowed me to do that. It doesn't get columns right, but at least the lines match up. Now I no longer have to look through the autogenerated C++ code to find the corresponding error location in my source.


File: 1668557100117.gif (5.67 MB, 600x600, calm seethe.gif) ImgOps

C++'s error chains are still a pain in the ass, though.


File: 1668807209713-0.png (10.92 KB, 312x184, ClipboardImage.png) ImgOps

File: 1668807209713-1.png (19.76 KB, 482x155, ClipboardImage.png) ImgOps

Added a new language feature: >>expression will automatically dynamic_cast expression to whatever type the expression is received as. This removes a lot of redundant casts. See picture 2, the first and second case. Much cleaner.


File: 1670383799934.png (8.12 KB, 331x109, ClipboardImage.png) ImgOps

Finally got my compiler to fully parse itself again, progressed nicely with my more semantically structured AST.


do my homework


File: 1670491140124.png (98.65 KB, 329x318, 1655496227606.png) ImgOps

>do my homework


Reworked my name resolution / scope lookup code, it's now much cleaner and also more powerful, as now, scopes track their entries in semantic groupings, such as constructors, fields, static named entries, etc.
>tfw stayed up until sunrise for this again


File: 1671284452358.png (305.06 KB, 1195x1067, ClipboardImage.png) ImgOps

New feature


Improved the example for the OR expression.


File: 1671285330613.png (313.43 KB, 1195x1067, ClipboardImage.png) ImgOps

>>11751 (forgot pic)


wew lad. I bet the AI can't write a bootloader.


File: 1671415152951.webm (5.34 MB, 640x360, 1671405265154.webm) ImgOps




File: 1671459543217.png (30.3 KB, 693x207, ClipboardImage.png) ImgOps


banned on 4cuck /g/ for racism again… I wish kuz hadn't killed soy/g/.



just make threads on /soy/


File: 1671613228985.png (46.97 KB, 839x270, ClipboardImage.png) ImgOps

Just added some basic linting for misaligned IF/ELSE branches and for missing closing braces.


File: 1671614252532.png (65.65 KB, 759x347, ClipboardImage.png) ImgOps


how are you handling that? looks like vscode so I assume it's something to do with the LSP


redpill me on all these progrooming tools, i'm a newteen i just want to ban evade


>how are you handling that?
From a tech stack standpoint: I use Sublime Text and a custom color scheme (I got tired of the fruit salad & disco flashing colours). I implemented my own sublime text syntax highlighter here: https://github.com/RmbRT-lang/RL.sublime-syntax
I think I should also publish the light and dark minimal colour schemes I came up with.
For the error reporting, I did the line tracking in these two commits (tracking each line's first token's column): https://github.com/RmbRT-lang/rmbrtc/commit/9697ebf8f3bd38639cc72dbdefe9c80515b38da2 and https://github.com/RmbRT-lang/rmbrtc/commit/a50db9211068ed26420b084848136c1e45c04389
In sublime text, it simply tracks all lines in the build output matching (file):(line):(col): (msg) and then displays these in the associated code location.
>looks like vscode so I assume it's something to do with the LSP
I hate VS Code and I will never install a LSP on my computer. All Sublime Text does is follow a push-down automaton-style grammar which annotates parts of the code, and the annotations are then picked up by the color scheme. It doesn't actually do stuff like symbol resolution etc. It's very lightweight and dumb, but robust and efficient. To get errors, I simply call my compiler on all source files in my project folder at once, it takes like 100ms to parse 110 files, merge scopes/includes, and name resolutions. That's roughly 20k lines of code.
Those aren't programming tools. I also don't care about existing things in the computers/hardware and software space. I only program my stuff.


A proper language doesn't need an LSP because the syntax is non-ambiguous and can be parsed using a simple grammar. That takes care of highlighting. The next thing you need is "jump to definition" which is not that hard when your syntax definition format supports annotating definitions. It can't do proper type inference to disambiguate occurrences of names, but I have a strongly typed language anyway so I always know from context which candidate to look for.




thought this thread was dead already, so I stopped posting.


> >>5515
> So I decided to remake this project using Peerbit (https://github.com/dao-xyz/peerbit) for the p2p database instead of OrbitDB. It's more robust and technically advanced and solves a lot of the issues faced by OrbitDB. Plus it's being actively developed while OrbitDB development has mostly been abandoned. The data structures are little different so I've been learning how to use them. Also its written in TypeScript which this is my first time encountering so I have to figure out how to integrate it into jschan. But overall I'm more optimistic than I was before because Peerbit is quite nice and has things like built-in encryption and database sharding.
> >>14121
> same lol


ignore the formatting of me inadvertently soyquoting myself


Nice. I don't want to install VSCode either as it seems very bloated and bulky. SublimeText is just so chill and fun.


Yeah it's quite nice, although I think one day I'll write my own code editor, with stuff like elastic tabstops, TUI support, native support for my language, and whatever else will come to mind by that time. But in the long term, I'll have to write my own OS anyway.


File: 1674569087564.png (186.61 KB, 815x750, ClipboardImage.png) ImgOps

just added more nice semantics to my language specification. There are now ''strict'' classes, which are basically C++-style classes, where the destructor is called at the end of the scope, and in reverse order of declaration. Additionally, I added ''value'' classes, whose destructor is called as soon as possible (directly after their last use), and instances of those types can be completely inlined or optimised away. So if I do a tail call that returns a dynamic array, then the compiler can completely remove the temporary instance and directly construct it at its destination, even if the constructor or destructor of the temporary instance would have had side-effects. The compiler may even entirely remove parts of a ''value'' object that aren't accessed. For example, creating a list with 5 elements, but only reading the element count of the list, and not accessing the elements, can completely optimise away the whole dynamic storage of the list, making the insertions into no-ops. I think that'll be pretty cool although also dangerous if used wrongly as certain side-effects may disappear unintentionally if you don't take proper care.
wow, somehow I completely missed your greentext and didn't read it. Typescript integration is pretty straightforward from a language perspective, but a pain in the ass toolin-wise, IIRC.


do you have an estimate of when the image board is ready for operation?


File: 1674742488054.png (61.57 KB, 525x900, peerbit_posts.png) ImgOps

The fact that I have to figure out the new database system, is somewhat counterbalanced by the fact that I've done a lot of this already with v1 (orbitchan).
I don't have the code up yet but I think I can port most of the database over from mongodb within two months or so, possibly less. There may be a few complications with regards to figuring out the built-in encryption features of Peerbit.

However that's just for porting the database backend so that it's essentially functional identical to jschan. The next step is to implement the peer viewer again to actually make the posts usefully accessible over p2p, (along the same lines as the orbitchan peer prototype) which may take a bit beyond that.

Here's some posts using Peerbit as the database. Right now I'm encountering an error modifying existing posts, so for now bumping doesn't work. I'll probably put something of this online once I get a decent chunk of the post-related functionality working.

Something interesting is that Peerbit doesn't even use IPFS, so until I get to re-porting the file storage to IPFS, IPFS isn't even required, which is nice as IPFS is rather resource heavy.

I think once I get the posts, boards, and possibly admin accounts databases ported over, the rest should be pretty simple.

Here's the new repo: (it's just a vanilla clone of jschan for now until I update it)

So to answer your question, maybe about 2 months I'd say, moderately optimistically.



[Return][Go to top] [Catalog] [Post a Reply]
Delete Post [ ]
[ home ] [ q ] [ soy / qa / g / int / a / incel / pol / r ] [ overboard ] [ rules ] [ KNN ] [ telegram ] [ wiki ] [ dailyjak ] [ booru ] [ archive ]