/make/ - Creative

World made of things

Want your event posted here? Requests accepted in this /meta/ thread.

Max message length: 5120

Drag files to upload or
click here to select them

Maximum 5 files / Maximum size: 20.00 MB


(used to delete files and postings)

(688.97 KB 703x688 77098266_p0a.png)
About/rules/meta Anonymous 01/28/2020 (Tue) 16:40:11 No. 1 [Reply]
/make/ is a catch-all board for all creative hobbies, including but not limited to; art, writing, programming, game development, handicrafts...

You are free to make new threads for projects that you're working on. You can also do so for a concept or an idea, as long as you take it seriously and/or have some kind of plan to create it at some point. For other disconnected ideas, use the ideas thread.

This board is not strictly SFW, but straight up porn must be spoilered.

Open file (713.51 KB 993x919 upperview.PNG)
Open file (785.82 KB 2048x2048 body_v04.jpg)
Open file (728.63 KB 2048x2048 body_v06.jpg)
Open file (360.70 KB 2048x2048 body_v07.jpg)
Digital art thread Anonymous 05/01/2020 (Fri) 04:02:30 No.71 [Reply] [Last]
Post your digital art here, be it 2D or 3D. I'm currently working on this character for a future piece. In the end, she will be an android in a cyberpunk setting waiting for the bus.
>>71 I don't know anything about 3D but that looks pretty good.
Open file (1.86 MB 2048x2048 brainiac_hair_v04.jpg)
>>74 Thanks, haven't got the time to work on it too much as I was in the process of building a new PC. Just started the hair.
Open file (1.21 MB 2048x2048 brainiac_hair_v011.jpg)
Couple iterations later...
>>104 Wow, that's really come along. Looking real good.

Programming/dev thread Anonymous 01/28/2020 (Tue) 16:45:57 No.3 [Reply] [Last]
if (bodyCannotBeEmpty) {
return getShittyOP();
else {
return "";
15 posts and 6 images omitted.
Open file (96.25 KB 840x700 1579071602773.jpg)
I think it's time to give up on this fucking IOCP. I just discovered that it's posting several events into the same socket at the same time (on different threads). I mean I'm sure this is all fine and intended since the only IOCP example I've ever seen before in my life is an echo server that just shits the received data back as soon as it's received regardless of what's received. But meanwhile in real world that's a completely useless behavior for the program. This is the biggest difference between my code and the example code, because I can't just echo the data back as soon as it comes in, I need to actually put together the data that I'm receiving, wait until I have all of it, process it, and then send a response to the same person afterwards. But despite working on this for like a week now I can't figure out how to do that and I haven't been able to find any examples that do anything like it. While reading about this, I also found out you're supposed to close the completion ports manually when they're finished. The provided example code opens a new one for every socket but never closes them, the whole design makes it impossible to close them. I also don't know how to approach doing that because I have no idea what the completion port is tied to, how do I know when it's ok to close it? My only remaining hope is to make a server using the old slow socket functions and hope it gives me some kind of insight that I've been missing about sockets, or something that makes me understand this system better. I said I wouldn't blogpost much but this shit drives me up the fucking wall, because if I can't read Microsoft's mind about how this is meant to be used then the alternative is to start using fucking nodejs and javascript again, which is basically like putting a giant slimy nigger box that randomly plays fart sounds between me and the computer. Of course I could just ditch Windows and only make a Linux version of the server but a) I don't want to, and b) I'll have to do this anyway when I want to make a multiplayer videogame because nobody plays games on Linux.
It finally (almost) justwerks. So I did end up checking through an old school socket guide and immediately found out something very fundamental(?) that I didn't know about. It seems like there might actually be no way to know when the client is done sending data. I'm not sure if that's true, but the guide showed an example of multiple separate messages strung back to back, and then started talking about protocols as the solution. So I assume you're supposed to parse out the expected amount of data from the HTTP header (or whatever protocol you're expecting) as it comes in rather than relying on some piece of information that the system gives you. Basically the connection just stays open and sends/receives shit whenever it feels like and it's up to you to figure it out. The IOCP guide has several places that look like the client is done sending data, there's even comments that say so, so I just assumed there's a way to know. But more importantly, this ties together to the big realization about what I've most likely been doing wrong. It's such a disjointed combination of a lot of things going wrong and the IOCP guide being fucking retarded in 2 different ways that it's hard to describe. So the IOCP guide defines this IO info structure that you use manually to tell yourself whether the current event is sending or receiving data. It's always sent to the system along with the same socket info, I couldn't figure out why it's separate so I just merged them (it basically changes it from READ to WRITE and then echoes the data, and then changes it to READ again). Another confusing thing about it was that inside of the IO info struct, there's a WSAOVERLAPPED struct, this is what the system actually expects, but it returns the pointer to your IO struct anyway (WSAOVERLAPPED is first member of the struct so Windows still understands it even though the pointer is technically the IO info struct). The WSAOVERLAPPED itself is never used in any way in the example. In order to send a reply to the client, I used WSARecv to check if there's any more data to load, and then immediately did WSASend if there wasn't. Although this isn't necessarily a mistake entirely, it becomes a mistake because of the way the IOCP guide had set up the IO struct. Both of those function want the WSAOVERLAPPED struct (IO info). In IOCP example the IO info struct is just reused, and it's probably fine because of what it does. However if you call 2 things back to back, it creates 2 different events that are using the same IO info data. So here you're actually supposed to create a new WSAOVERLAPPED struct (or IO info) and send that (the old socket guide clued me into this since the old system just tells you what the event is as opposed to making you tell yourself). And to find out when to reply, you're supposed to read the received data as it comes in, parse the HTTP header, and then use WSASend to send a reply when you've reached the expected end (HTTP header ends in 2 new lines, and if there's body content the header will tell you how long it is). Since I tried to use WSARecv to check for end of incoming data, it just created a new event for no reason, and since the IO info was shared between different types of events that were running simultaneously on multiple threads, everything got fucked.
Open file (2.25 MB 1622x822 almostworks.webm)
>>60 So after all this, I may finally understand how the IOCP system works. I rewrote it according to my new understanding and it now works with almost 100% consistency, except for one crash that occurs randomly, I haven't been able to track that down. It seems to be related to sockets closing or something, since it often happens if I cancel the page refresh. After I get a little more experience with this and fix all the bugs, I'm probably going to write some kind of guide for this because the only example that I could find doesn't explain it properly. Of course I could still be doing everything wrong and it only works by chance somehow. As for the crash itself, the reason I'm having so much difficulty is that I can't find anything that should be able to crash (unless it's some Windows function shitting itself). The IO info and socket info are never reused or removed, so there can't in theory be a conflict between them (the array of them will run out eventually and the system stops working, but I just did that to find the problem). In webm related I notice it does a bunch of sends in a row right before crashing, but all of them are on a different socket and different IO info so they can't be conflicting. It might also be stuck somewhere else which is why nothing happens inbetween the last sends. There's always a possibility that the problem is in my own string functions or something. At this point I should just bite the bullet and use a debugger. I rarely do that because I hate having to create projects in some shitty IDE, and more importantly I use a batch file to set up my compile and I don't know how to configure that in the IDE, so I basically have to move all my files and create some separate hard coded compile setup or something, I don't even remember, I don't want to remember. I was going to start using debuggers more and learn to use them proper after I get myself RemedyBG, but I haven't had a pressing need for it yet since I can usually find any bug in a minute. This time is a lot harder because it's multithreaded and the problem is most likely the IOCP system doing something unexpected that nobody bothered to explain. I don't even know how to debug multithreaded code though, since I can't imagine you can step around in the code normally, and break points will be scattered across threads. I just wish there was a way to tell where the crash happened, all you need most of the time is to know where the problem is, it's relatively straightforward to find the cause afterwards.
Open file (3.74 MB 1586x890 werks.webm)
FUCK YEAH I managed to track down the last remaining crashes, and the primary one WAS in fact in one of my own functions. I'm using a new string system that I haven't tested much that I call "defstr" (double ended flat string), it's basically a continuous chunk of memory where you can add/remove data from either start or the end without causing re-allocations or big data moves, and it re-allocates if it needs more space (or shifts around if there's a lot of extra space in the opposite end). It's perfect for this since I can add new data to the end of the buffer, and remove data from the start when I read it. Anyway one of it's functions had a missing piece that eventually caused the reallocation to fail. The weird thing is how uncommon this problem was, I should have definitely run into it before, I even tested the functions when I made them but didn't encounter it. The second crash was much rarer and I hadn't seen it in a long time, this one actually gave a windows crash prompt which tells me it's an access violation. I found the cause of it when I started thinking of how I can start re-using old IO and Socket data again so it won't just create new ones infinitely. And as soon as I removed the line that closes sockets, the crash no longer occurs. I had to change the design of things a bit such that the socket info keeps track of how many IO operations are active on it, and is only closed when the last active IO operation is removed. So now it works very consistently, it never hangs or crashes or gets stuck or fails to send resources no matter what I try on the browser's side, it never exceeds 6 active sockets and 13 active IO operations on a single browser loading a page with 30 images, and it reverts to around 17 MB memory usage after each page refresh. I actually load images directly into memory when I send them, but I think it's possible to pipe files straight into the IOCP. That'll be required eventually since I want to minimize memory usage headaches (though I'll probably use Nginx for static files anyway). There might also be some possible exploits, for example I'm not sure if sockets ever time out on their own, so a malicious user could fill the server with passive connections. There's an option to time out the IO event, but I'll just have to see. But anyway I want to get to the actually interesting part now, which is making the application server. I can already parse the most important parts of the HTTP header to figure out whether it's a POST or GET request, and what page/file the user wants to access. I don't think there's actually anything very complicated about this, reading the headers is simple, sending files is simple, the hardest part might be to parse form data, especially file uploads (I'll also need a way to pipe the file data straight into a file rather than loading the whole thing into memory). I experimented with normal forms and multiplart forms, and the data seems pretty straightforward, though I didn't try file uploads yet. Webm related, I can already serve pages and files. Besides minor tweaks here and there (and the linux equivalent of the server), there's only 1 big obstacle before I can start working on Nchan, and that's the database. I actually have no clue how to connect to a database from a C program like this. I know how to do text commands since I've used FFMPEG from one of my programs before, but you need to actually log in to the database and stuff so I don't think it's the same at all. Anyway now I can finally stop blogposting about this.
Open file (27.47 KB 530x195 texty.png)
Finally un-died enough to get around to setting up stb font properly, and I'm surprised at how clean it looks. I thought all the letter spacings would look completely fucked, but it looks mostly consistent even at very small sizes. The letters themselves don't look too great though, but it's readable at least.

Open file (34.60 KB 1030x683 demopaint.png)
An image editor project Anonymous 05/09/2020 (Sat) 23:37:41 No.76 [Reply] [Last]
I often try to design something like the UI for a program or a game, or maybe typeset a manga, but struggle to do it because a program that is "decent", "free", and "image editor" at the same time doesn't exist. Gimp as a whole is a clumsy piece of shit, Krita devs seems to have no intention of ever fixing their broken ass text tool, MS Paint simply crashes if I try to draw a text box, many others have either no text tool at all or are severely lacking in other ways. I could write a book about all the ways that every single image editor is a pile of shit, but I can't pray and wait forever for one of them to get fixed so I think I just need to bite the bullet and prioritize making it myself. There's 2 I have already thought about in the past, one of which is just a simplified and stripped down version of the other, meant to replace MS Paint, pic related. I doubt I'll be properly making either one for a while, but I want to at least start on an image editor of some kind so I can design things. Making an image editor isn't actually hard at all, it's only hard to add certain features like magnetic selections and weird filters and support for all the file types, and making the rendering fast when you use large brushes on a large canvas and such. But for now I just need a simple editor that can draw basic shapes and text, paste images, and cut/paste selections.
11 posts and 2 images omitted.
>>91 >just spend millions of dollars developing complete, proprietary systems before you make your first babby-tier steps <WE BELIEVE IN YOU ANONYMOOSE!11 you glow like a thousand suns tbh.
>>92 yeah, put ui building blocks for a graphical editor aside. every time. most freetard application software ends up with perpetual downs syndrome look and usability no matter how cool tech may be underneath because ui is scary/unimportant/another excuse.
Open file (154.56 KB 1437x1042 g.png)
>>90 I don't need the code for a UI system, I just need a design/graphics program where I can design the way the UI looks before I actually start building it. >>91 >>93 I don't plan on using a premade GUI library like GTK since I want full control over the way everything looks and works and I want it to work simply and logically. I've worked on a UI system in the past, though it's not finished so I can only use it for very simplistic things for now. I'm not sure about making a "replacement" for those things though, I think generally speaking making a "do it all" system like that just ends up in a mess that's more complicated and slow than it needs to be because it has to account for every possible scenario. Who knows though, maybe it'll end up being something like that. >DPI-scalable I plan to show settings that lets you scale the UI (and do other tweaks and changes) when you first run it. In terms of design my #1 priority by far is clarity and ease of use, I'd rather make it ugly than make it hard to read and inconsistent and hide settings just for the sake of cleanness. Pic related is the latest UI mockup for the bigger program I mentioned, though there's a lot it doesn't show.
Not exactly on-topic, but I thought these might be fun to look at: https://github.com/yaronn/blessed-contrib https://jesseross.com/clients/gnustep/ui/concepts/
>>97 not the OP, but that's some pretty neat stuff anon thanks.

Open file (86.48 KB 1438x846 nibs.png)
NIBS imageboard client/server Anonymous 04/28/2020 (Tue) 19:30:44 No.63 [Reply] [Last]
There is a concept that's been hovering around for a while, but seemingly nobody has made a serious attempt at it. That is, a desktop client that can read imageboards. There's a lot of advantages to this, but you can take it a step further and reach a whole another level by also making a server that's designed to co-operate with the client. This thread is for me ideaguying and probably posting actual progress on such a system (from here out named NIBS for "N-ImageBoard System"). NIBS is 2 different things, a desktop client for browsing imageboards, and an imageboard server that's designed for the client. The basic idea behind it's operation is that whenever you get information from the server, you cache it locally on your computer, and when you view a page it's loaded from the cache, and you only ask the server if anything has happened after that. This results in colossal speed gains for the user and bandwidth savings for the server, the experience is better for the user and the server costs are much lower for the owner. The auto-update system will also be able to tell you everything about every thread/board you have open/watched across the entire webring, instantly as soon as something happens anywhere. By default, NIBS imageboards will be impossible to access directly from a web browser, and the NIBS client can't directly access traditional website imageboards. Instead both the NIBS client and server will be split into 2 parts; one for the NIBS core system, and another optional "plugin" that can translate to/from web protocols. The plugins will allow the NIBS client to read traditional imageboards, and the NIBS server to be accessible from a web browser like any other imageboard (some features will be disabled however because web browsers can't do certain things that NIBS client can, and traditional servers don't support certain NIBS server features). On the server side, this also allows you to detach the imageboard from the web by removing the plugin, thus only people with the NIBS client can access it. NIBS will have a "webring" by design, in fact the whole system revolves around a webring-like operation. It works similarly to the current webring except servers only store links to other imageboards, they don't share board lists. Instead the user's client will retrieve all the board data from all the different servers, and stores them locally. It will also be able to include the current webring boards. Pic related is a shitty graph that attempts to roughly describe how NIBS server and client communicate and how the "web plugins" play in. (just replace "NC" with "NIBS") Nchan ( >>4 ) will likely be "cancelled" and replaced with NIBS (that's where the N comes from). The web translator plugin should eventually be able to provide a website that basically looks like Nchan anyway though. However finishing NIBS will take a much longer time than it would to finish Nchan. NIBS is the true true thing I've really want to make, more so than a normal imageboard, and more so than just a handmade server. I just didn't have enough understanding of networking to think about this seriously. TL;DR A desktop program for browsing imageboards. A new imageboard engine.

Message too long. Click here to view full text.

10 posts and 1 image omitted.
>>79 Suit yourself ofc, but a) the standard console in is a tried-and-true part of a tried-and-true language. Use scanf() if you'd prefer, same story. Tying your system to Windows is a far more risky decision in so many ways.
>>86 I don't really understand why you think the program is going to be tied to Windows somehow. There's a couple ways to design cross-platform code, and the one which I use is to have an abstraction layer where I define my own versions of all the OS-specific functionalities. I just need to make a Linux version of that file which is less than 3000 lines of code at this point including networking, and I'll never need to care about the OS anywhere else in the codebase again.
>>95 >I don't really understand why you think the program is going to be tied to Windows somehow. oh, just b/c raisins somehow. https://docs.microsoft.com/en-us/windows/win32/inputdev/wm-char
Some links that may or may not be of interest: https://github.com/DogMan8/CatChan https://github.com/catamphetamine/captchan https://github.com/siavash119/qtchan If I think of any others, I will post them.

Open file (563.11 KB 1227x1804 nindex.png)
Open file (433.01 KB 1194x1440 npost.png)
Open file (283.86 KB 1352x1322 ntagsearch.png)
Open file (89.55 KB 1335x1083 nboards.png)
Nchan Anonymous 01/28/2020 (Tue) 17:52:06 No.4 [Reply] [Last]
Nchan (temporary name) is my imageboard engine project. The goal is to do basic shit that we should've been doing ages ago, like browsing threads by tag, supporting all file types, using .webp thumbnails for compressed animation and transparency (including apng), making nojs posting super comfy, not having a clunky inconsistent pile of garbage UI, and having more/better post formatting options.

It currently runs on node.js, though I'm planning to eventually rewrite as much of it as possible as C++ modules (basically everything except the initial request redirecting).

It may not be finished for a while because I'm not good at designing/using databases. Technically most of it already works though.
33 posts and 12 images omitted.
Open file (28.94 KB 429x166 yfw accounts.png)
>>49 >I was talking more about color coding PPH on the board list Oh yeah, I can easily slap color coding for all the stats including user count. We'll have to see what it looks like and how exactly to do it when there's a website with active boards. >I would say blocks of color is better than a continuous spectrum >have it configurable It would still cause problems since the PPH changes over time, so a board sitting right at the edge of a 'block' will keep changing color and/or switching between the "fast boards" and "slow boards" groups. I'm generally not a fan of things that are kind of tweaky and unreliable like that. I feel like the best solution is going to be to give users the ability to organize boards manually. >Would that matter anyway? Wouldn't one just take priority over the other? I won't get into the details of it, but currently it would just create a bunch of duplicate filters instead of updating the old ones. However, if I add the ability to load settings/filters from an account, it will require some kind of "setting packs" that can be updated/removed. That kind of system would allow you to update filters from JSON too, since you can update one of the 'setting packs' instead of merging the settings directly into yours. >As for accounts, I hope they would be limited to things that require permanence like this or the job system? That's an interesting discussion that I probably don't want to have, because people will object to anything account related no matter what. The software itself will make it possible for BOs to require accounts for various things (including posting) just because of the nature of the permission system, but whether it's enabled will depend on the admin of the imageboard. It'll be disabled by default, and I haven't yet decided on whether I want to enable it in my own imageboard. I'll probably only allow BOs to configure it for paint chats and poll creation.

Message too long. Click here to view full text.

>>50 >I don't like account requirements either, but the way I see it is; if someone wants to run an imageboard (or, to an extent, their own board) where accounts are required for something, I don't think anyone should be able to tell them they're not allowed to do it. There's some undeniable benefits to account requirements, and rather than preventing that entirely through software design, I'd rather focus on improving people's ability to find/use/make an alternative to that board/website. The accounts thing makes sense. It does worry me but not because of what you are doing specifically, more just a general fear that imageboards will become shit like the rest of the internet. The fact that a "4chan Pass" is a real thing that exists already means we've gone too far. But I can see some potential applications for it, mostly for boards that are 90% tripfags and for "muh sekrit club" types. >It's kind of like /a/, they have a very heavy handed word filtering system that people like to complain about, but it works for them and I don't think there's anything wrong with that. Many people there like it, and the ones who don't went to /animu/ I've always liked splinter boards in theory but in practice it's usually disastrous. Boards like /animu/, /b2/ and /vg/ were outliers because they were so big in the first place, they could afford to shed users, and even then there was issues and drama. In most cases they just died in a matter of weeks because it just isn't possible to split apart a small board without crippling PPH. So many problems on imageboards could be solved by having a larger, more discerning userbase
Oh and I had an idea, I'll just append it here otherwise I'll forget - wordfilters for individuals. So I could set "rabbit" to wordfilter to "fuzzball" and it would only show up on my end, not for anyone else. Also an option to turn off wordfilters on the user end, I think it's ridiculous that people have to play along with whatever shitty meme wordfilters some mod put in place if they don't want to
Completely forgot about logging in. Also I should mention it in this thread as well; I'm most likely cancelling Nchan in favor of NIBS ( see: >>63 ) Unless for some reason I feel a need for making an imageboard soon and absolutely can't stand any of the current ones (lynx/jschan/etc), I might throw together some half assed version of Nchan just to get the critical missing features in. But if not then I won't be working on this again. NIBS should eventually be capable of putting out something like Nchan and more anyway.

Open file (49.96 KB 550x850 the new infinity cup.png)
Anonymous 05/11/2020 (Mon) 21:32:15 No.85 [Reply] [Last]
Hey /make/ friend, I noticed you're pretty good at your 3D stuff, how about coming and joining us over at https://anon.cafe/icup/ to get your board advertised with a team?

(420.40 KB 640x480 idea man.webm)
Ideas/random thread Anonymous 01/28/2020 (Tue) 16:41:24 No. 2 [Reply]
Ideas and thoughts about other things not worth their own thread.

Report/Delete/Moderation Forms

Captcha (required for reports and bans by board staff)

no cookies?