So like a debate in text form? Sounds good, But it suffers from the same problems normal forums do, i.e. after a while there are simply too many posts for the USERS to keep track of, unless you can sort them into generalized 'sides' within a thread, even then it seems like a post might not be noticed.The beauty of this idea is that no given user has to keep track of all the posts, just the ones they're commenting on. Let's say you present an idea, and several people all reply to it. I only need to read the given reply that I'm commenting on. There will of course, be problems with duplicated posts, where one person posts something and then another posts the same thing. I figure that can be solved via moderation of some sort.
This isn't for a 1 to 1 conversation, this is for exploring large, complicated ideas with large numbers of people.
Also, how would an active conversation take place? Unless you mean to use some sort of text-chat in conjunction with these posts intricately interwoven and orginized.
However, despite that, I like the idea, it feels like it could be good, maybe go more in-depth? Or draw a picture describing the layout of a page.
It would take a genius feat of interface design.
You shouldn't really have one post equalling one node. The reason is simple: one post can make a LOT of points.
You shouldn't really have one post equalling one node. The reason is simple: one post can make a LOT of points.I don't see the conflict there; as long as users only make one argument (here meaning an idea trying to be communicated) - which could be based on multiple points (bases of that argument) - per post, the same linking system between posts could be used.
What we've proposed is having each point, or argument, be one of those nodes. If one argument undermines another, you draw an arrow between the two, showing an "attack".
For a forum, I imagine that you'd easily highlight what piece of text you consider to be arguments in your post, and then possibly drag them onto other arguments to specify attacks between arguments.
The forum will need a very robust threading system; posts should be able to be linked between threads, or even whole chains copied over if relevant. A good splitting mechanism will also be important, to keep the threads from getting too bloated like a lot of the GD ones do. Whether this is done by thread starters, moderators, or the participants, will be an important decision to make. I lean towards the participants being able to manipulate threads, based on some sort of concensus system, but that may turn out to be to slow or manipulable.
Wait, what do you mean by 'flat' and 'thread'?
I was imagining the structure to be stored in the server as a list of posts, chronologically, and that the graph program would interpret them into a graph using information in the stored posts like links (attacks, but also supports or references) to others, and maybe a list of threads - each containing any posts put into this thread during the posting process. The graph would draw a thread as all the posts in it, with their references to one another shown, and the references to posts not in this thread shown in a different color or something. The threads would be only an organizational tool used to help follow a given topic. Is something like that what you are talking about?
Up/downvoting is a bad system on the internet, entirely too easy to troll it and abuse it. Especially where a post might only get a few votes.
Especially in this system, just because one person is in the minority puts them at a disadvantage because their post can be downvoted because the majority thinks its stupid, not everyone is loving and open-minded on the internet after all.
I think some usages of the word "flat" here refer to the way the data is stored; putting all the posts into one or many text files would be a flat data structure, while putting them in a database structure (things like MySQL) would not be "flat". I could be wrong though, so perhaps those talking can correct me if I'm wrong.
Think of it this way. The outcome of a debate is the result of two things: 1) popular opinion and 2) debate structure. As a result of 1), a post in Bay12 might be super upvoted, whereas the same post, say, in Reddit, would get downvoted. It's a matter of context. This is taken into account. As a result of 2), even if a post has lots of crowd support (more upvotes, less downvotes), if it is logically attacked by another post with a similar crowd support, it will be logically weaker.I'm not comfortable with an up/down voting system, because it will lead to people pursuing votes rather than effective arguments, and groups who share an opinion downvoting anyone who opposes them. You can see it in places like Youtube or Reddit, although those are extreme examples - the community is a large factor here, but it just opens the possibility for abuse.
In your example of a debate between a minority and the majority, the outcome will necessarily be skewed towards the opinion of the majority. Heck, that's how democracy and elections work, just at a larger scale. Having only registered accounts add votes makes it so bots and so forth can't troll it too hard. Also seems to work nicely on reddit, slashdot, etc.
Also, in keeping with this debate-centred discussion, I think we need actual different posts, i.e. topic posts = you bring up an issue, no arguement yet only pros and cons listed. Then discussion posts, where you might argue for either side of the topic. Finally 'attacking' posts, basically your responding to other posts, you should be able to 'attack' any post whether it be a topic directly, a discussion post of a topic or any othef 'attacking' post.The idea about multiple post types seems promising, but that could just end up like a less structured version of a normal forum, if everyone used only discussion posts - any they would, because it would be easier that argument posts, unless the community was strongly against it. Since the whole point of the model is to facilitate proper arguments, that is undesirable; discussion posts will need to be implemented carefully. Similarly, topic posts are a hazard: unless they can only start threads, people will just post their points in them and wander off, without bothering to really participate in the arguments. I would say that having them would cause more trouble than they would be worth, and it woud be better to just let people use argument posts for that.
...
Furthermore, the OP should be able to control topics, lest things get out of hand or inappropiate, he/she should be able to lock any topic post, as in its still viewable but can long longer be contributed to. I think that the OP should not have too much, if any, control over discussion and 'attacking posts'.
The idea about multiple post types seems promising, but that could just end up like a less structured version of a normal forum, if everyone used only discussion posts - any they would, because it would be easier that argument posts, unless the community was strongly against it. Since the whole point of the model is to facilitate proper arguments, that is undesirable; discussion posts will need to be implemented carefully. Similarly, topic posts are a hazard: unless they can only start threads, people will just post their points in them and wander off, without bothering to really participate in the arguments. I would say that having them would cause more trouble than they would be worth, and it woud be better to just let people use argument posts for that.
How you go from plain text to a formal argumentation context (as a directed graph) is still very much an open question. I don't think we will ever be at a point where you can automatically mine that information, since natural language is so hard to make sense of with computers. This means that ultimately it'll be some form of user that has to say what is an argument and what is an attack.This is actually why I'm very interested in this concept - it pushes the user to formalize the relations between what they're talking about and what it is in response to, and allows a much nicer picture of who is talking to who and why than you can get with a conventional forum, while still allowing as many people to participate as possible. It would highlight redundancy nicely if you did include some machine learning techniques into the mix, if you made the relationships inferred visible to the user.
I don't mind setting up a little web service like this if anyone is interested. If anything it gives me something to do today.
This does however give me an idea. Why not make sort of a discussion graph or web. You can't start a new discussion topic per se, but you can always derive discussions from other discussions. Meaning any topic discussion thread could be traversed back to the origin. The origin would be sort of a hello world, opting to discuss this type of fora or something.
What would be even more valuable would be if any new topic had to actually discuss the parent topics in some way or form. I doubt however that it is really possible to moderate and enforce such rules, even if a dataset with this rule would be extremely valuable.
Farming this graph would make for some very interesting data.
I don't mind setting up a little web service like this if anyone is interested. If anything it gives me something to do today.
Eagleon: yeah, what if we could take research papers from known websites, and each paper would be a node? I doubt it would be possible to effectively mine each individual paper for arguments, but even having a paper represented as a node would be enough to denote that a research paper contradicts some proposed point. That could work out really nicely as a basic system!
Web of Science
I'm Planning on making all my stuff free and open source.Hey, if you can find a way to make money off of it (maybe by looking for some capital to hire a professional designer and web developer, and then licensing the framework you've made to the people that want to use it) I would encourage you to do so. Even as a non-profit, organizing this way can actually act to send an idea to the top if it's really good - example, Wikipedia, which relies entirely on donations, still has a well-paid staff because what they're doing is so appealing to everyone.
You still deserve to make a living off of what you do if you can do it well, the question is only do you want to do this (or anything else) for a living.
I don't see any way to make a living off of just this project without undermining the purposes for which I do it.Wikipedia isn't the only wiki out there now. Once upon a time there was no Wikipedia. They developed their idea as a charity splitting off from a business, seeking donations, grants, sponsorship, merchandising, etc, and they make enough from that to support their admittedly small staff with competitive salaries (or the appeal of maintaining it for less keeps their employees there - also possible) It's sparked hundreds of other similar systems, shaping and boosting interest for the internet as a source of information on a global scale.
I've seen a forum that worked this way... while it didn't help that it was all in one narrow column of posts, putting replies to specific posts next to those posts made it nigh impossible to tell in what order the conversation happened without carefully scrutinizing each and every post date. Furthermore, it made it difficult to discern new posts from old posts without carefully reading each.
Alright, so I need to put together a proposal for a kickstarter. The way I see it, I need
1) Details on exactly what I'm trying to accomplish.
2) Background research. People who have done similar things, and the differences between what they've done and what I'll do.
3) Details on how I'll spend the money. Who I'll hire, what they'll do, etc.This is very important. You need someone with qualifications that he has demonstrated. I would say that something as big as what you're envisioning can hardly be done by someone who is learning to code or has some basic notions. We're talking about something that, if done properly, COULD revolutionise the way people interact over the Internet. We're talking about a system that needs to support most platforms, from webforums, social networks, all the way down to apps on most mobile devices. Ideally, arguments could be shared between most of these systems.
You still deserve to make a living off of what you do if you can do it well, the question is only do you want to do this (or anything else) for a living.
I don't see any way to make a living off of just this project without undermining the purposes for which I do it.
Angle, if you need a mock-up or an testing prototype, tell me.
I am currently looking for a "real" job, but got my diploma last month, and searching the web and writing cover letters all day long is boring ;)
I have a good deal of success consulting on Kickstarters as well as traditional financing.But yeah, you shouldn't try a kickstarter without reading about it, and seeking advice first.
and when someone clicks on a post, they get a view like thisI'll take a look at that. I'm not sure if/how one would switch back to the node overview.
All posts can already refer to all other posts.What you can do is decide on a portion of the graph that is a tree. You do this by marching outwards from a root node (whatever your camera is focused on) along edges until you detect recursion (build up references to nodes in a collection, compare each to the next deeper set of connections) The problem is more that this becomes computationally expensive when you're handling multiple users in a forum with hundreds, if not hundreds of thousands of chains and loops of arguments in memory at once. Meaning we might end up needing a more complicated but optimized client-server interaction so that the user can crunch some of this himself.
You can not make the view more directional if all posts can refer to all other posts.
Its not a tree anymore if all the leaves are directly connected to the root.
You can take a look at some generic layouts here:
I'd like to point out that I pretty much want it to be possible to use the website without reading any long text.These are both reasons why I think we should leave that up to the people responding - let them dissect opening posts any way they like, people instinctually recognize arguments that they perceive in text (or video, audio, whatever), so if we let them split a conversation off in this way with a clear representation of what's being done and drawn from in the individual post (let the forum-like conversation go normally, and allow users to decide when to send out these special branched arguments) I think things will naturally begin to head off into more specific and pointed conversation as it's used.
There could be additional information for every node and for the connections (I played around with that, the code is already able to)
but large texts don't work on this kinda mindmap and the whole thing seems to become senseless if the texts are so long that you can not have an overview about an opinion without reading alot, you could just read wikipedia instead.
I also started with the idea of helping with discussions, but right now I feel like there isn't even a place to even see the connection between propositions. There are a lot of ways to discuss, but there is no collective database on how people believe opinions should be linked.
Kinda totally different maybe, idk.
What you can do is decide on a portion of the graph that is a tree. You do this by marching outwards from a root node (whatever your camera is focused on) along edges until you detect recursion (build up references to nodes in a collection, compare each to the next deeper set of connections)I don't understand that at all.
currency systemBecause of these mechanics a lot of stack overflows legit questions get closed.
root topicSounds complicated and restrictive.
microtransactionsI wouldn't want to be a part of that.
To enable a UI that isn't a mind-map. That sort of visualization isn't exactly ideal to display larger blocks of text, as you've discovered, but it's inevitable that people are going to want to make more complicated initial posts as their ideas are not yet refined (like we're doing now - you're supplying some question about the clarity of my writing) so you do need one. You could probably do it by clustering the conversation together in box form and fitting argument lines around them, but then you have to deal with the nodes that are more distant possibly overlapping.QuoteWhat you can do is decide on a portion of the graph that is a tree. You do this by marching outwards from a root node (whatever your camera is focused on) along edges until you detect recursion (build up references to nodes in a collection, compare each to the next deeper set of connections)I don't understand that at all.
There doesn't even have to exist a portion of the graph that is a tree. The only way to display the graph as a tree is by leaving out connections, but why would I do that?
No doubt, there are potential problems. It's just brainstorming. What I think might be a problem, specifically, with a random argument graph vs a restricted opinionbase like I described, is that users that have no basis or understanding to question an argument will do so whenever they want, vs. whenever it's warranted by their level of contribution. Of course, other users will downvote what they see as destructive to the conversation, but only if they're motivated to spend the time doing so - if you have a great, devoted memberbase this might be common, but the idea of fair moderation on a network of arguments implies that moderators have to read each link to form a less biased opinion, which would become increasingly difficult as it got more complex - which means artificial limitations on the complexity of an argument are sure (in my mind) to arise.Quotecurrency systemBecause of these mechanics a lot of stack overflows legit questions get closed.
trolls/spam get downvoted and maybe flagged as spam, and bots can be kept out by captchas
To be clear I'm not proposing any restrictions on the specific content of arguments, and off-topic ramblings would form their own hierarchial 'root' nodes. Additionally, as long as the information about the structure exists, it's fairly wasteful programmatically to discard it, as additional mathematics can be performed on hierarchial networks that are impossible on random ones. All it requires to keep this information around is a scaling variable for the entire network that increases as it grows new unique levels, and a single integer per node representing what level in the hierarchy they belong to and which levels in the hierarchy are their 'superiors'.Quoteroot topicSounds complicated and restrictive.
Have you looked at the papers Anvilfolk supplied?
The idea described there is simpler and more general.
People could connect everything to everything, just like they do in real life.
And through their voting, the best assertions can be shown to the user.
No annoying long search for the user, no need to read a thread.
You don't have to be :P I'm not really interested either, or if I were, I'd want it to be in the position of a non-profit with ethical oversight determining what it got spent on. But devil's advocate: If this is developed into a codebase to be used in multiple forums, you'd need to patent the ideas here to prevent such a use, and defend it vigorously against imitators.QuotemicrotransactionsI wouldn't want to be a part of that.
Eagleon, there's no worry in creating the Singularity using this, it eventually just becomes a system of equations :) Nodes don't really do any computation!Ah, but people do ;) And if they're using this network properly, they'd be extending their knowledge into a system that is readable and processable, and useable by people. I've always said that neuroprosthetics were a better solution than trying to understand our own motivations and behavior without bias to create a new intelligence, and that the internet could be considered one, albeit quite a bit less efficient than we'd like. If you made this hierarchial (which the internet and the brain are both theorized to be) they might fill that role quite nicely.
I guess the proposal here is, in general, give the ability to formally debate things to communities that are open to it. If the community isn't open to it, because it lets in too many trolls, or because people don't really care about it, it's not going to work. The community is its own moderator, through the means of voting.Absolutely, but in the meantime you have apathy and lack of free time by users threatening the stability when trolling and spam happens, and no one is there to downvote it. I know I don't actively use 'thumbs up' or whatnot often - I'd rather post a response, because it lets me present new points of interest in full visibility to the topic at hand. Giving a motivation of some sort would improve that and get more people voting, vs spewing nonsense *coughEagleoncough*
(Edited for more explanation) -This is the purpose of the hierarchy in the implementation I suggested - stagnant debates are, by the structure of this forum, going to be the ones in the middle. They get trimmed the most, so the ones that survive are going to be very strong, and pretty much universal. As you near the top, you get into novelization land, where people want to figure out what they're talking about before delving into more detailed debate. You -don't- want those to disappear, because they represent the basis for the entire discussion. The upper-most ones are going to have lively new discussion branching outwards if anyone sees something new and important to discuss on that level, and will support and reenforce the most amount of nodes, so they should be the rarest and least likely to disappear. The lower levels will be getting the more refined, pointed arguments, which is a good place to demonstrate your core knowledge of a subject and build a reputation anyway. Altogether you get rewarded most for improving the core understanding of the next higher argument. But maybe not.Spoiler: Overhead (click to show/hide)
I still feel that you don't need to lose the forum structure, or whatever underlying, typically hierarchical structure. It should be just as easy (or easier) to navigate as a forum like this one. That information simply isn't used in computation of debate outcomes... but it's there, as meta-data. Certain posts could be identified as being "first posts" or "debate starting posts" within a subforum of a forum. There's no problem with that. Once you get to within a thread, however, you're in graph country. You can still try to display things with a sense of time, by highlighting new posts since your last visit, or by having older posts in the centre, newer posts in the periphery, or try to maintain similarity with a thread by having newer posts nearer the bottom of the screen, if at all possible.Verbosity serves a purpose in communication. We are not naturally inclined to limit it. I appreciate your work (from my very basic understanding of it) on an informational level, I love things like that which break down a system into clearly understandable parts that fit together nicely, but I think it's unwise to ignore the nature of the beast that's using a system like this and expect people to speak in crystal, mechanical clarity (following messy tangles of networked parts that appear completely unorganized), when they have flowers for brains ;)
But again, that becomes meta-data, maybe secondary to the fact that you can now reason with other people in a more formal way, in a system that tells you who ends up being right or wrong. Heck, it goes deeper than that. Each node/argument is given a strength, so that you can have any number of participants proposing any number of arguments, and each of those arguments, not sides or people, has a degree of acceptability, so to speak, calculated from votes and from attacks (and votes on the attackers, and so on almost recursively).
The fact that we are writing huge amounts of text here is due to the fact that we only have the forum structure. We are forced to, in text, reply to everything that's been said before, and, in text, explain why it attacks or doesn't attack another point somebody else made. It makes everything more verbose. Hopefully people will get used to using smaller, to-the-point sentences. Instead of replying with one post, they'd reply with maybe half a dozen arguments.
Do a breadth first traversal of the graph and collect the edges and nodes you traverse into a new graph. Viola, you have a portion of the graph that is a tree. Of course it does not include all connections between the found nodes, but for displaying purposes you don't need those available all the time. Display all the edges the node your mouse is over are incident to.QuoteWhat you can do is decide on a portion of the graph that is a tree. You do this by marching outwards from a root node (whatever your camera is focused on) along edges until you detect recursion (build up references to nodes in a collection, compare each to the next deeper set of connections)I don't understand that at all.
There doesn't even have to exist a portion of the graph that is a tree. The only way to display the graph as a tree is by leaving out connections, but why would I do that?
Either way, it should be fairly straightforward theory-wise to make sense of having people with heavier weights in their votes.Thought to that: Use a network of trust to determine the weight of votes. Not that I know how to do that, and I guess it needs a lot more space and time.
And it adds overhead.
I still feel that you don't need to lose the forum structure, or whatever underlying, typically hierarchical structure. It should be just as easy (or easier) to navigate as a forum like this one. That information simply isn't used in computation of debate outcomes... but it's there, as meta-data. Certain posts could be identified as being "first posts" or "debate starting posts" within a subforum of a forum. There's no problem with that.Uhm, I am not quite sure what you are proposing, but it seems backwards in relation to what I thought one would do.
On closer examination of centrality algos and what information they require to function I realized that what I'm suggesting would probably only be useful to me. That means I'm the only person that should be putting it in there, haha. This is another reason I'm reluctant to contribute - I tend to go off on half-baked tangents that may or may not pay off. Sorry guys.
[argument attacks="argument1, argument5, argument115"]I think the existence of a debating system at Bay12 would be really cool[/argument]
Regarding the dangers of verbosity in the system we've been talking about: there's always a set of assumptions whenever you start any project. Ours has definitely been that there's an unfulfilled need for more serious, structured debate somewhere on the Internet. People are getting tired of meaningless interactions. I don't care what you ate for breakfast, or what it looks like. I would, however, like to engage in a lively debate about beliefs or whatever technical issues I happen to know. If there's an easy system that allows me to make my points, and at the end tells me whether what I'm saying makes social sense (within the context in which I have spoken/written), then I'd feel that's pretty great. Yes, even if I end up being totally wrong.I tend to agree, especially since it's much simpler than pushing for what I want out of it. Still, I wish I had a formal background in programming this stuff so that I could tangent a little better, haha. If nothing else, I still think I'm right about letting users fragment a composite argument themselves, rather than requiring them to make precise ones to begin with and punishing them if they don't. I'll take a crack at the basic model (no fragmentation, simple directed graph, a separate visualization from BoboJack's) again tonight/tomorrow, I've brushed up on an unrelated project and my programming juices are flowing nicely.
Hell, we could be deciding the system we should be building with the system we should be building! Which I guess is part of why it's important that it exists!
What you don't want to do is make any arrows disappear because then you can't really make sense of why the debate outcome turned out that way. The only reason you'd want to make arrows/attacks disappear is if they were super duper downvoted and they don't really have an impact, or if they are removed by a moderator.Question - if you allow for removal of arguments, what do you do about arguments that have been orphaned into their own little isolated graph? If you make attacks disappear this way through user action, it could happen quite frequently, no matter how high you set the threshold to destroy them. Would those nodes just disappear as well? Any time I hear or talk about disappearing nodes/edges through user moderation I kind of cringe for this reason - if there's a faulty argument/attack I think it should be left alone with the arguments against it left intact, or at least simply hidden, so that people don't keep making it and making more orphan networks.
I don't think we should visualise the entire Bay12 forum as a plain graph. It'd be IMPOSSIBLE to figure anything out. But forums, subforums and threads can become meta-data helping you get to where you want to be, and they can be visual cues for the graph visualisation. Like a nice box around all the arguments proposed in this particular thread. You might get some incoming and outgoing arrows, which is fine. They tell you there's another topic talking about similar issues! You might want to follow that arrow into another box and participate there too!That makes sense!
What you don't want to do is make any arrows disappear because then you can't really make sense of why the debate outcome turned out that way. The only reason you'd want to make arrows/attacks disappear is if they were super duper downvoted and they don't really have an impact, or if they are removed by a moderator.I think that views that do not display all edges in a given induced graph could be very useful - maybe you only wanna see how arguments relate to a certain post or you can't figure out what's going on and you need to get rid of some edges, so you want to find a planar subgraph to display or cut down the number of edges per node to some maximum.
Question - if you allow for removal of arguments, what do you do about arguments that have been orphaned into their own little isolated graph? If you make attacks disappear this way through user action, it could happen quite frequently, no matter how high you set the threshold to destroy them. Would those nodes just disappear as well? Any time I hear or talk about disappearing nodes/edges through user moderation I kind of cringe for this reason - if there's a faulty argument/attack I think it should be left alone with the arguments against it left intact, or at least simply hidden, so that people don't keep making it and making more orphan networks.I forgot the name, but I think there is a way to detect nodes that are necessary in a component of a graph to keep it connected. If such a node is removed, calculate the new components and make them new topics in the given forum, maybe name them "[topic] - Split [n]", alert the administration and give someone the possibility of choosing a better name for the topics.
So It looks like we have two or three different ptrogrammers- Do we want to coordinate our efforts through github or something?I don't know. BoboJack uses Haskell, I use Common Lisp and whoever else is in on this thing is probably using neither and I guess no one is really willing to switch languages.
So It looks like we have two or three different programmers- Do we want to coordinate our efforts through github or something?I don't think that's what is important now... at least for angle's project.
We could use some help figuring out what database/server software to work with,Database:
and what needs to be done to get a basic interface with one on a remote client up and running.I wholeheartedly recommend D3: http://d3js.org/ (http://d3js.org/)
I understand protocol buffers as our best bet for getting readable information to our interface(s) without sending huge XML files or similar back and forth constantlyJust send JSON data. JSON is widely supported (native support in javascript, libraries everywhere) and has an efficient binary counterpart called BSON.
Apache HTTP server and write stuff in php (which sounds very ugly to me)Actually Apache can be configured to accept any language, if I remember that right. At the very least Hunchentoot (Common Lisp) can work with Apache.
Actually Apache can be configured to accept any language, if I remember that right. At the very least Hunchentoot (Common Lisp) can work with Apache.Right. I didn't think about all the cgi stuff.
What are you guys expecting the server side stuff to do?The server could also host the web front-end and manage users and their authentication.
The interfaces grabs information from the DB and shows it to the user.How would the interface authenticate with the DB?
I'm tempted to just start with something simple like SocialDebate or TrueDebate - we can easily change the name at this stage.
Also, Angle, could you update the OP with the google doc and other information? We should sig this and make it obvious that it's open-source and open to participation :)
The server could also host the web front-end and manage users and their authentication.
It would also make changes to the DB through an API accessible from the front-end.
+calculationsQuoteThe interfaces grabs information from the DB and shows it to the user.How would the interface authenticate with the DB?
If the interface can directly change the DB (voting for example) you could use the login/password from the interface to make any changes you want.
I have no experience at all with server-client relations and all of that stuff, but I think computation should not be done by the server but the client. When more and more people start accessing the server you would probably get serious performance problems pretty soon.
Remember that this is intended for more than just debates- I also want this to be useful for things like what we're doing right now - planning projects, discussing ideas, etc. Really, I'd like to call it dscourse, but someone already made off with that name.
That's not exactly what I was thinking of here though. What we should make possible, eventually, is for an argument here on Bay12 to reference or be referenced by something on some other website unrelated to Bay12.So you want something like the pods from Diaspora? Is that even possible?
let's go ahead and create the repositories for each component and start a'hackin'We still need to decide on one language/framework to use.
- Once Eagleon responds, and if he agrees with the architecture, let's go ahead and create the repositories for each component and start a'hackin' :)Erp - I didn't realize it hinged on me. Absolutely, I have no complaints as to the organization, but for one thing - in the doc you mention "Server-side interface is the “site layer”" but everything below Database (starting at Site Layer) was me determining what the database needed to send out to the clients. Rather than send out site-level information within each node, it made more sense to encapsulate all nodes and edges from a site with that information. It's a quibble (I'm not disagreeing to a server interface), but it'll help if we end up having multiple different types of 'sites' (could end up accessing offline databases in specific use scenarios) and reduces redundancy in the other objects.
I love "Agora" :DIt should be possible to send out portions of the graph in little sub-networks, by picking a node, traversing a certain distance, and sending one more set of edges past that number of nodes in the graph. The server could also operate on these sub-networks as they're built and packaged, to do fancy math things, but anyway- So if the client can handle having dangling edges to unknown groups of nodes, it can either ignore them or use them to request more. The problem is this adds more for the server to do - processing at the expense of bandwidth. My mind is going to fractal database formats O.o Not helping, brain.
About the computation thing, remember one thing, guys : you don't want the user to download every argument at once in his client for it to filter out what he want to read.
Pretty much the same idea about having pages in a classic forum thread.
I'm for additional expertise. I tried to get my sysadmin friend in on the project, but he hates his job too much to have any motivation to contribute, haha. I've got skype - it could be really productive just to get people even peripherally interested in the project, with the page bookmarked and ready to pass along.
The last thing I want is for this project to be bogged down, and I'm starting to see it's somewhat of a problem when I'm proposing things to you guys that aren't necessarily even needed or fitting with established CS. Or worse, trying to reinvent the wheel, and succeeding somewhat but with ass-pulled terminology. This list (http://en.wikipedia.org/wiki/Design_pattern_%28computer_science%29#Classification_and_list) is quite humbling, and makes me wish I had gotten into school again for the winter, because at the same time it's exciting to see so many that I've worked out in the past through experimentation on my own.
Consider me your pet code-monkey intern, because I believe this project could be fantastic if finished.
QuoteThat's not exactly what I was thinking of here though. What we should make possible, eventually, is for an argument here on Bay12 to reference or be referenced by something on some other website unrelated to Bay12.So you want something like the pods from Diaspora? Is that even possible?
How would searches work? Every search by a user makes a request to all pods?Quotelet's go ahead and create the repositories for each component and start a'hackin'We still need to decide on one language/framework to use.
Watching with interest. Saw this from the beginning, am impressed with how it's come along. I just personally can't see a point to it, but I never really enter in actual online debates so it's out of my usefulness range. If I ever find time in my day I'd be interested in helping out though.
Would it help to have the BSON stuff encapsulated inside objects that should be converted to BSON? I put up a branch with a rough implementation of what I'm talking about - basically every object in the Graph that isn't a basic datatype (although technically we could overload those too if we wanted to go crazy with it) has a BSONable interface with a single getBSON() method, plus a string for its JSON tag.
getBSON() works like this - it works through each BSONable object, calling its getBSON() method to add to either a BasicBSONObject or BasicBSONList (depending obviously on if it's something like a list of nodes/edges or a single property like information about a post). Then it reads through its own data, adding things like ID numbers, sources, etc - whatever isn't a BSONable object. Finally, it returns the constructed BSONObject. That's it.
Then, to deserialize, you feed any object a BSONObject. In the object's constructor, you retrieve the entries that matter to that object - if it fails, it only fails for that object, and you have the specific BSONObject it used available telling you why. But what's really beautiful (I think) is that it uses BSONObjects to build most of its entries - that is, you call 'new PostInfo(BSON.get(PostInfo.JSONTag))', and PostInfo is built from a BSONObject stored in what the node has received. It's also easy to send partial information back and forth about an object - just leave it out of the BSONObject you're building (using a seperate method than getBSON obviously, maybe getBSONEdges() for instance) and methods in the exact same class that merge them into an existing object. And if you wanted to add something weird down the line like a PostInfo to an edge, all you'd need to do is add it as a field, modify that method, and add it to the BSON-based constructor.
A few extra additions of note - EdgeID/NodeID are gone, replaced by a master ID interface. That can be changed back easily by changing out constants JSON_ID/JSON_SOURCE with unique tags for each BSONable if it causes problems for the database. I suspect that to be the case now, thinking about how this would have to be moved into/from the database - I'm sorry. There's also a nice Property abstract for things like Post information, user data, etc. Might be a useless distinction at this point.
I do think this is a little more extendable on the client/server side than the current system of adding BSON serializers/deserializers to a master list in JAgoraLib. I don't know for sure if the database can handle this kind of nested structure - hence the branch. I didn't want to assume it was useless after doing all of the work to convert it. I can't contribute much more at the moment - got laid off, again, after only five days back on the job. Stressful times! Hopefully this is at least somewhat helpful, and not a diversion from actual work - I should probably have been working on a client but to be fair at the time I was working on it, it didn't look like the server was functional =P
public class ApplicationNode extends JAgoraNode {
...
public void loadContent() {
this.x = rand();
this.y = rand();
// this.content is a member of JAgoraNode, populated from the content column of the DB
this.text = this.content.get("textArgument");
if (this.content.get("imageURL") != null)
this.image = Image.load(this.content.get("imageURL"));
}
...
}
Serialisation, unfortunately, is actually harder than it looks at first :( I think your system is going into infinite serialisation loops when you have a loop in the graph, like A -> B and B -> A (this is going to be super common). Could you check?Well, since we're working with bidirectional edges (and a Graph object that stores them seperately), we can do either based on the situation. From edges we can add nodeIDs to a map, and then call a Node constructor that doesn't create edges, but rather just pulls it from the Edge map. Or from nodes, we add edges and call one from Edge that uses the Node map to construct itself. Does that make sense? This was only a very fast, not even tested implementation - I didn't have a database to test it against, couldn't figure out how to modify JAgoraLib to work with it, etc. It probably has a billion uncaught bugs like that.
If we want to use this method, we'll still need to use something similar to the JAgoraLib serialisation implementation, which is sending the attacks with origin/target NodeIDs rather than Nodes themselves. That should avoid going into an infinite serialisation loop, where A serialises B which serialises A and so forth.
Of course, then you need to deserialise all Nodes, and THEN all Edges, using Node IDs to get to the actual Node.
Could you explain the PostInfo stuff a bit more? I didn't really understand how you use it. The idea of having partial information sent to the client is awesome, but I'm worried that it won't have that much use because the server can't send stuff to the client without the client explicitly asking for it first. Since communication is always started by the client, why doesn't he just always get all graph information, rather than partial graph information?I was thinking for client->server, and internal client/server functionality actually - the client sends a node with only the PostInfo inside, and the server can function without the rest using methods inside Node. Rather than put that functionality in the main Comms library, nodes know how to modify themselves using PostInfo objects, because they're the ones that contain/receive them.
Yeah, this probably screws with the database a bit too much. Why would we want a single ID class though? Node IDs and Attack IDs are pretty different in nature. I mean, we could just have an ID be a String, but it probably just makes it harder to understand the code (e.g. what is this id used for? Is it a Node ID, or a thread ID, or an attack ID)?I'm not sure, beyond busy work, haha. Premature optimization, etc. I don't even know if we need seperate ID classes. I do try to complicate things =P
I've been thinking a bit more about how AgoraLib would actually be used and honestly, I don't think I've reached a good solution.I agree for the most part. I don't have the knowledge in advance to evaluate either proposal, but one of the reasons I made the properties abstract was in anticipation of this kind of extra content. There's a default JSON tag other than null for it for that reason - if there's non-standard content to be sent, it would potentially use that class. What I don't want to have happen is stuff being stored in the database the server doesn't know the identity of - as far as I understand that could cause some potentially nasty exploits happening for non-VM languages, with executable code, etc. Of course, you have the same problem with the server examining the content of a property for what it is potentially exposing it to the same thing, but if nothing else, there needs to be some kind of sanity check for the content being uploaded so that people don't just use it for a file server and clog up the whole network with gigabyte-sized nodes. Stop me if I'm not understanding something that prevents that.
I believe our best bet to maintain Agora as a nice tight-knit project rather than a million different implementations with different features is relying heavily on the content column of the Node table in the database, which is meant to store flexible BSON content. So, JAgoraLib ONLY handles serialisation of the very basic graph structure, like nodes, attacks, the posters of nodes/attacks. It ignores the BSON content of a node - but sends it over the network (which is trivial). It's up to the user to parse the BSON content of nodes.
The extendibility is obtained by using and parsing the BSON content that comes from the database. This is actually exactly what you have, but for the content, not the graph itself! Let me try to make the two proposals more obvious. I've highlighted the differences.
<snip>
So this implementation would be able to handle arguments having some piece of text, as well as one attached image. That all comes from what's inside the content column of the database. We could extend it to have a youtube video, several images, etc etc etc. Anything that you want - but that's application-side. The Agora Project itself could officially support some basic format for Content, but then it's up to the app developers what else they want to use. If some "content" feature starts becoming popular, we could add it to the official "content" description.
Also, do you guys think attacks should also have content?
We should be safe, hopefully :)Dun dun DUNNN yeah, I was being paranoid. I do wonder how people would use this if they -could- store scripts in each node, and allow them hooks into their API for Agora, but that's something for another day.
Awesome :) I'm doing terrible with finding some nice java library for pretty graphics, for the client itself, so I dunno. I think there's some way to fix the OpenGL problems somehow, but I've spent a few hours to no avail.I've never worked with OpenGL directly (oh god the abbrevs and utter lack of documentation), but I do know libGDX has lots of very nice wrapper classes for working with graphics (edit: thinking specifically of the PolygonSprite and other sprite classes, which support transparency and clean modification of scaling, rotation, translation, etc as well as packing into PolygonSpriteBatch, which could be faster). It was actually a library I was eying for the java side of things to begin with, since it does OpenGL ES and deploys to android or even iOS so easily if you've set things up right, and is nicely integrated with box2D and Bullet for fancy physics if we want to go that route. I can start pushing everything into GDX's classes to get something on screen at least maybe if I don't mess things up further :D
I'll need to find some more time for this, but my evenings have suddenly become really busy with other things :(
Are you on a laptop? Take a look at disabling USB power saver settings. I've heard those can be big problems, but I'm honestly not sure how to fix them. I think it varies from laptop to laptop, but might be findable in the BIOS somewhere.I've been trying to get my desktop running as a server of my own to understand that part of things better. At this point I'm expecting less trouble setting that up than I've gotten with ubuntu's seeming disdain of wireless internet :P I understand it, ethernet is faster, there's hundreds of wireless adapters out there, no one makes linux drivers because it's an extra thing to support, but arglblgergkguhgff. fbuhfv.
Anyway - the reason I was trying to get regular openGL to work is that we would be able to do some nice animations, like circles representing arguments opening up into nice rectangles with rounded edges. I assumed, erroneously, that OpenGL would be nice to vector-like graphics. It's not. We probably just want to go with minimal animations at this point, and just get a prototype out the door :\There's probably a way to do it using regular openGL. I should probably learn GL ES or parts of it, because yeah, it's a lot more flexible to be able to do these things yourself without being tied to a library. I definitely wasn't trying to discourage you from that if you have the knowledge already. Just got excited seeing a toolbase that I've used and more or less understand :)
ImmediateModeRenderer imr = new ImmediateModeRenderer10();
, but when I look at the libgdx api (http://libgdx.badlogicgames.com/nightlies/docs/api/overview-summary.html), I don't see ImmediateModeRenderer10, I see ImmediateModeRenderer20.
Alright, so I'm working on putting together a graphical client using java's AWT and swing frameworks.
I think the system will need fairly heavy moderation in order to function properly. In order to counter balance the possibility of abuse this presents, I think we need a system of moderating the moderators. I think that all moderating activity should be logged and open to criticism. This should prevent moderators from abusing their privileges to promote their ideas at the expense of others.
Next, of course, there are the actual policies to be followed. I think that most any topic should be up for debate, but that the rules for this debate must be very strict, but mostly restricted to logical fallacies. For example, it should be legal to discuss things like "We shouldn't vote for What'sHisFace because he's an x and a y", but things like "don't listen to What'sHerFace, she's an x and a y" should not be acceptable, because that's an ad hominem and detracts from the discussion. In some cases, I think people should be held accountable for their arguments - for example, if you want to argue that "all x people are y, and that's a bad thing", then you'd better either make a good argument, or apologize and rescind your position, or face consequences for it.
[JAgoraLib] Error opening connection to bigornas.bounceme.net:1597 (Connection refused)
[JAgoraLib] Could not connect because socket could not be opened.
Sweet!
If not problems have been reported within a week we can go ahead and remove the JAgoraGraph repository.
One thing we ought to try to do is keep this implementation as multi-platform as possible. That means using libraries that are also multi-platform. Some game-dev libraries will not be, and I'm not sure what the whole OpenGL situation is.I don't know the situation for Java in this regard either, but as OpenGL is the low-level graphics library/interface/standard (I have no idea what the correct term is) it should be an obvious choice if you want multi-platform support.
Funny, I hate Javascript and am OK with Java ;)Weirdo. :D
With Wordpress (or any other CMS) you trade simplicity with flexibility.
Each CMS is designed to do something specific really well and that's really easy to use, but if you want to do something custom, you will have a hard time with it. But it can be done!
I don't know how Agora works, but it seems to me that it could be implemented as a single-page app (GMail, Facebook...). Which means the choice of CMS is irrelevant (or even unnecessary in some cases) as the integration of Agora would be trivial.
/home/<user>/.config/icedtea-web/security/java.policy
but I don't know whether it is actually in effect or not.[Edit]
After finding this thread (http://ubuntuforums.org/showthread.php?t=2256329&p=13185297#post13185297) I went to the "Extended Applet Security" tab and added a new row where the action is "Always trust this" and http://angle.webfactional.com/ is Document-base and Code-base.
That doesn't seem to work.
[/Edit]
I'm hoping this side project of mine will eventually allow me to get the Agora client working a lot faster. I'm learning a ton about lots of things like architecture, event-based systems, etc, all of which are applicable for the Agora client! This way we won't have to refactor it all the time as we learn new things!
Is extremely flexible.(http://xaxor.com/wp-content/uploads/2012/10/Etremely-flexible-people17.jpg)
Well no, I'm talking about modifying the UI for usability. Right now the posts are super small, and if there's a lot of them they tend to cover each other up. You can see what I'm talking about right here (http://angle.webfactional.com/JAgoraHTTPServer/).That certainly seems like it might be a bit obstructive.
Agora currently locks up my Firefox until I kill it with task manager, which is probably a problem.It works here on Win 7 SP1 64-bit with Java 8U31 when using:
Agora currently locks up my Firefox until I kill it with task manager, which is probably a problem.
Agora currently locks up my Firefox until I kill it with task manager, which is probably a problem.
So how many people have the applet working and would be interested in helping me test it if I enable registration?Tester reporting in.
The server side code will still be in java, but the client should soon be entirely in Javascript.That's good news. I'm also a bit leery of JavaWS and Java in general, but I'd be willing to try the Javascript version.
It's funny, cause I like java, but it just doesn't look like it's gonna work out for us. So instead I'm stuck using bloody javascript, which I am developing a significant dislike for.I got that io.js link from this page https://github.com/feross/buffer (https://github.com/feross/buffer) and judging from
For example, this latest attempt to get Agora working: It says use a buffer? What kind of buffer? hell if I know. The thing I'm using is a re-purposed node.js module though, so I figure it must be the node.js buffer. So I jump through a billion hoops to make that class work in my thing, installing the node package manager and several of it's libraries. I finally iron out al the bugs that causes and... It still doesn't work. Same error as before.
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAGHGHGAHGHAGHAGHAGHAGGHGA...
*sigh*. I'll wait a bit, try soe things out, and if none of them work, I'll try rewriting it to use the io.js buffer and see if THAT works.
The goal is to provide an API that is 100% identical to node's Buffer API. Read the official docs for the full list of properties, instance methods, and class methods that are supported.the api appears to lift the method names from that class, to the extent that that is considered the official documentation, other than the two or three differences listed on the git page. Sorry if that wasn't clear.
I've got an incredibly simple, bare-bones server running express + node. It does nothing other than provide an example restful API. Its literally only 140 lines of code, and does virtually nothing.
I can hand it over now if you would like. I plan on working on my fork, which would use the same server, but my next steps will diverge from what you've done already.
You should be able to take the server, add a MySQL driver to it, and add whatever routes you need for your client. Since your using your client side as a separate project I assume you aren't worried about having the server "serve" the client side app to the browser. If you are there are ways to do it, but it would take some time to set up.
The only other thing to add is some simple user authentication, but to add it you really need to hook up a database, and there should be an agreement on how it works with the client side. I have some code examples from an old project I could throw your way that demonstrate some authentication. Its been a while since I worked with that, and it worked out of the box so there was little that needed changing. A good example if you can follow it comes from the MEAN.js stack.
Edit: You can find the example server here:
https://github.com/BradyPowers/AgoraServer
I'll continue working on the fork. I'll be adding Cassandra as a NoSQL database, and I'll see about packaging a client side using Durandal. I'll probably put the actual fork in a separate repository, so if you need any help with the server I uploaded (its very minimal) we have a common repository. You have push access. Or you can just fork it and run with it.
I have a guy suggesting that we rewrite the thing in Meteor.js with Polymer and Mongo-db. Does that sound like a god idea, that will make things easier in the long run?Is he offering to rewrite it? ;) Otherwise I would stick with an implementation and follow it through. That's a platitude, I don't really have the first clue about web development or JS - you're probably in the best position at this point to decide if Meteor or Polymer are good fits, or something you can work with.
He's offering to rewrite it for $650. I think it's probably worth it, as it includes the server and client, and should bring us pretty much back up to where we were with the java server.I can't contribute financially, things are nuts with work and they might not keep me on if I can't get the work restriction I have lifted. I can look at his portfolio if he has one if you want a second pair of eyes - tomorrow, I've had four hours of sleep in the past 16 haha. But yeah, keep options open?
It probably would be sensible to replace the link to the forum in the first post.Done. I'm pretty sure that the example forum doesn't work right on chrome. I'm already working on a nwere version, though, so I'd rather focus on pushing that out. Hopefully it won't have the same problem.
but one of the extensions to cytscape I want to use relies on NPM and isn't very friendly with meteor.If the extension is simple enough: have you tried pasting the extension's code into your software somewhere, somehow?
If the extension is simple enough: have you tried pasting the extension's code into your software somewhere, somehow?
Also, there seems to be an official way to install NPM packages into meteor (https://guide.meteor.com/using-npm-packages.html#installing-npm).
In other news: http://en.arguman.org/Yeah, I've seen a few others like that. None of them seem to have really caught on though.
this looks interesting
PTW.
Excellent, I can see your posts! Mind if I delete them to keep the forum tidy?Sorry for not elaborating, I thought you just wanted to know whether it works.
Oh, and what do you think? Is there anything in particular you think need to be done next? Maybe auto-sizing posts? Or making it so you can click the blue button and get a pop-up menu of posts, and load them individually?
Sorry for not elaborating, I thought you just wanted to know whether it works.
Yeah, of course you can delete my ugly posts. I would have done it myself, but I didn't find the button that does that.
I think that at this early phase we can talk more about defects than functionality. If you think UI/UX improvements are not necessary at this phase, I'd suggest implementing more features and fixing bugs.
Personally, I'd like to see a functional prototype.
Currently it's difficult to navigate the posts. The graph is too wobbly. To the point that I couldn't click any buttons because it hasn't stabilized yet. Navigation needs to be really, really smooth before any kind of public release.
The mouse-wheel zoom is a nice feature and helps with readability!
Thread view might be nice. You press the blue button on a post somewhere in the graph and you get the whole conversation in a thread-like interface. That's what I imagined when you mentioned pop-ups anyway. This will get tricky when posts will have multiple parents though. S/he will have to annoyingly select the whole path.
Heh, I had a few more ideas I could have mentioned. I had to deliberately stop myself to write them out since, like you've said, some dreamy features (https://github.com/Agora-Project/AgoraDevDocs/wiki/Outcome-Computation) are a little ways off :)
I'd go for no wobbling myself. Make it as static as possible.
I had a student show me his work: some interactive JS graph-like visualization thingy. Whenever I clicked/changed something the whole graph spun off the screen completely and then spun back into view wobbling around until it finally stabilized. I really hated that. I think other users will too.
Once you'll have the reply types figured out the conversation follower feature should fall into place nicely. The "meat" of the conversation will probably have a recognizable pattern (OP post -> attack -> attack -> attack, with various supporting replies mixed in). Such conversations can probably be easily visualized. Or at least easier than graph visualization!
I didn't mind the floatiness once the posts froze when you interacted with them, I think this form will break more once you get into lots of cycles with attacks, but that's less important than getting this polished so that we can have fun with it while it's developed :) It's usable in its current state either way IMO.
More feedback! Sorry that I still can't contribute more time to this, I've got my first real commercial music project going =3 pretty exciting
Everything should, visually, have its own layer not necessarily using the same cue, just different. Most of this is about that.
Dragging posts is still awkward because there's no visual cue that a post is being dragged. A small icon is all you'd need if there's no way to get a transparency of the post itself. Also nice would be to draw the connections as you drag them, because where it ends up isn't always too predictable, so you have to search for a second or two after it's dropped.
- The post title should be above or next to the red dot, maybe right-justified into it, or worst-case limited in length. As it is, some of the text is hidden if the title is too long. The dot also doesn't need to be nearly so large if you keep it at the same scale while zooming. Might look a little strange at first, but it'd be worth it for being able to focus on the posts themselves more.
- While zoomed out, we probably don't want to read the post text itself so much as the titles. Scaling them differently might work?
- It should be easier to visually transition from title to post, while still making the title most prominent - maybe a line/divider in bracket shape below the title?
- The background should, IMO, be darker than the posts to make them pop out more, or else the border of the posts should be a bit stronger. If you relied on the border, you could potentially get rid of the right side and make it look like it's being peeled up from the page.
Having a seperate page for composing a post feels a little jarring. Many times I'll reference what's been written in previous posts in a conventional BBS, and this would make that impossible without opening another window. But maybe a pop-up is what you need, since you still want to be able to move stuff around to read through the network. I dunno.
I switched the forum to use a static layout. It should eliminate the problems people have been having clicking on posts and such. What do you think, people? Is it an improvement?Yeah, I like it!
My insane paranoia is that it'll all be "but the music sucks! D+ try again"It's hard putting yourself out there to be potentially criticized but what's the alternative? Being creative and not showing your work to anyone?
The number in parens behind the "Show connecting posts" is confusing. I thought it would be the number of subnodes, but as it is it seems to be the height of the tree the button belongs to. I'm not sure what purpose that measure has – I think number of subnodes is more relevant for the function of that button, since it predicts what strain the user will put on his system by clicking on that node, abstractly speaking.
Intresting. i would like to help ^_^ what languages are used? (i know js and html, but what else?)
Once I've opened the whole tree, two posts in the tree were shaking their right border while I was moving the mouse.
Their right border moved like 1px in then out, etc.
Add spam detection and user registration (with OpenID support) somewhere in there.We already have user registration, and adding OpenID support should be pretty easy - there are packages for logging in with facebook, google, etc. I can probably just drag and drop them right in.
I'd wager that SAA is a core feature to Agora.
Add BBCode and proper user profiles last.
It's just my opinion/interests.
Since I thought Twitter and mobile games were merely fads, you can assume that my opinion doesn't count for much :)
For the interface, what about having a panel which shows the posts as a series of nodes linked to others, and they can be selected to bring up a windown showing the content of that post? something (vaguely) like this:
(http://img.ie/wmum1.gif)
Just dropping by to say this is a great project.
So, I've just looked at this and I love the idea behind it. However, I've got to be brutally honest and say that I think through your quest for the whole 'node based discussion' you've gone too far into making it more difficult to use than normal forums. I've done a lot of systems documentation in the past, and this suffers from the classic problem of a lack of basic, quickly readable 'surface' information. You're forced immediately to do a deep dive into stuff, and rather than it being better than a normal forum, it becomes way more time consuming to use and just plain confusing.
Basically, I think it just needs some big changes to how you show the basic stuff. My suggestions would be as follows:
- Highlight the current node you're looking at. Make it a green dot or similar. (this is an absolute MUST)
- Show the alternate nodes you could have jumped to from the last node (I'd suggest that they be fainter/slightly transparent). It's needlessly time consuming to have to jump back to see alternate answers to the same post.
- Label the nodes with their subject. You need to know roughly what you're looking at straight away - do the first three words or something for subjects. This might spread stuff out a bit and make it looks slightly messier, but the whole point of this is that I can see more naturally how conversations are structured - I lose that if I have to hover over everything.
Whilst it's a big change, I'd also suggest having text on the left and the node-tree on the right. Currently you've got small posts, but if you end up with lengthy ones (like this!) you'll lose the one thing that makes Agora stand out (the fact you can see where your entry fits in the tree of stuff) by pushing it all the way down to the bottom underneath the text. Having the text in a scrollable box to the left hand side will help a lot.
Honestly, I love love LOVE the idea, but it's got to be more (or at least equally) efficient than a normal forum for it to be useful. Sorry this has been such a critical first post - I think it's a great and I definitely want to see it come to fruition. I honestly believe it could become the new forum standard if it was made easy enough to use - I'd certainly deploy it across my sites if it did!
So, I've just looked at this and I love the idea behind it. However, I've got to be brutally honest and say that I think through your quest for the whole 'node based discussion' you've gone too far into making it more difficult to use than normal forums. I've done a lot of systems documentation in the past, and this suffers from the classic problem of a lack of basic, quickly readable 'surface' information. You're forced immediately to do a deep dive into stuff, and rather than it being better than a normal forum, it becomes way more time consuming to use and just plain confusing.
Basically, I think it just needs some big changes to how you show the basic stuff. My suggestions would be as follows:
- Highlight the current node you're looking at. Make it a green dot or similar. (this is an absolute MUST)
- Show the alternate nodes you could have jumped to from the last node (I'd suggest that they be fainter/slightly transparent). It's needlessly time consuming to have to jump back to see alternate answers to the same post.
- Label the nodes with their subject. You need to know roughly what you're looking at straight away - do the first three words or something for subjects. This might spread stuff out a bit and make it looks slightly messier, but the whole point of this is that I can see more naturally how conversations are structured - I lose that if I have to hover over everything.
Whilst it's a big change, I'd also suggest having text on the left and the node-tree on the right. Currently you've got small posts, but if you end up with lengthy ones (like this!) you'll lose the one thing that makes Agora stand out (the fact you can see where your entry fits in the tree of stuff) by pushing it all the way down to the bottom underneath the text. Having the text in a scrollable box to the left hand side will help a lot.
Honestly, I love love LOVE the idea, but it's got to be more (or at least equally) efficient than a normal forum for it to be useful. Sorry this has been such a critical first post - I think it's a great and I definitely want to see it come to fruition. I honestly believe it could become the new forum standard if it was made easy enough to use - I'd certainly deploy it across my sites if it did!
These changes are for the expanded view posts, yes? The ones showing the full text of a post, with the graph down at the bottom showing nodes above and below? What about the main forum view? I just changed things so it should show up as the default front page now.
As for your suggestions, I've been thinking of doing the first one. I'll go ahead and bump it up and do it today. The second is interesting, and I'll definitely think about it. The third one I'm skeptical about, but I've heard it before, so I'll definitely consider it. As for moving the text and the node tree to be side by side, I could definitely do that. I'm worried how well it'll work out on smaller displays, though.
This is about as much as I can offer in terms of feedback right now but...
Why not go with something like Markdown instead of BBCode?
I know BBCode is the 'traditional' markup used for forums, but it feels really needlessly verbose for typing manually - this might be just me but I generally dislike using rich text editors, or at least having to fall back onto buttons a lot when I 'm doing a lot of formatting.
Not to mention that BBCode is absolutely heinous on any device that does not have an access to a proper keyboard - writing B12 posts on my phone is the worst thing sometimes.
I will admit that I don't know how difficult it is to implement either Markdown or BBCode and whether or not you are willing to throw one out in favor of the other, but I really do think that despite being, well, a fair bit more powerful than Markdown, most people do not need that much power and they are especially not fond of the added syntactic verbosity.
Especially with how the rest of the interface seems to be designed in the 'new-age' flat/material/responsive-design sorta way, pairing that with BBCode just strikes me as strange.
Just my 2 cents though. I've been extremely extremely casually watching this thread for a while and I like how much it's progressed so far, but I really feel that BBCode is...not outdated, but not really fit for The Modern Age™.
Glad you can take the criticism on board, and I'm thrilled you're taking on board some of my suggestions! I honestly think it's a fantastic idea.
I am referring to the expanded posts in my suggestions. In terms of the main view, I honestly don't know if it works well; mostly due to a lack of labelling.
I really do understand that you're trying to sort of make it more 'natural', but without seeing labels I just can't tell where to even start. It's like coming onto Bay12 for the first time, and instead of seeing the different sub-board headers (Other Games, Lets Plays etc) you just saw blank spaces and had to hover over them to see what they were - would that be more user efficient or less?
If you're really convinced that some people may prefer it blank, then put it as a toggle option, but I really can't imagine how people could try to navigate through a forum without labels. Again, sorry my criticism is so strong on that, but it's something I feel is a pretty strong blocker to mainstream enjoyment.
On top of the labelling issue (and something that would help it not look so cluttered), I'd really suggest that you fold up the main view when you enter the page, and allow users to click through it to open it up. As in, it'd just show the first and second row - If you clicked on one of the second row nodes, it'd open everything attached to that node (and so on and so on) - a double click could then open the post itself. A button/whatever to show everything would be good though. Most of this is because on the vast majority of forums, there's tons of boards people aren't interested in. More than that though, if this shows every post on a 30,000+ post site, it's just going to be a complete mess.
In terms of the side by side view - I'd suggest keeping it vertical for mobile devices, but would definitely think it's a big improvement as side by side for non-mobile devices.
I think you're talking about the overview, not the main forum view. The main forum view is the one with all the individual posts displayed as cards, where you click through to open them up. You can find it here (http://forum-demo-88817.onmodulus.net/).
As for your suggestions on the overview, The labeling thing is something I've heard before, and as it seems to be a frequent suggestion I'll probably start seeing about implementing it. Not sure on the specifics, though. As for opening nodes individually on the overview, that's supposed to be what the main forum view is for. I do have plans to change what all is displayed, though, and allow people to close and remove nodes from the view. Still figuring out the details.
Well, it took longer than expected, but I fixed up a couple of the bugs with chrome. It should be much more cooperative now. Anyone give it a try and see if it works better for other peoples chromes, and not just mine?
It works now, thanks!! Great work all over.
I've got a bit of feedback though(again, sorry to sound critical, it's awesome work!):
- Firstly, clicking on connected posts/load all resets my view to somewhere in the middle of all the posts - it makes me lose track of where I am unfortunately.
- Secondly, but most importantly, this really, really needs a zoom in/out function!
- I'd recommend that when you close one post, it closes all the posts beneath it in the chain. You could have two close buttons, one that closes everything, and one that keeps the posts under it.
- There's a lot of empty space on each card - real estate is at an absolute premium in this kinda design, so each card should be as tight as possible design wise. I wouldn't both with
- I'd change the 'connecting posts (load all and show list)' and 'more' buttons to just being three buttons you can click on from the card - even if you want to add more options (and hence need a fold out more button) then at least allow the user to open up connecting posts and show a list in one click.
All this being said, I think there's a bit of a bigger problem here; you've pretty much got two completely different forum systems running at the same time. The card based view is good, and the node based view is good, but they seem like two separate thing and I don't think they mesh together well.
I'd honestly suggest sticking with cards or nodes and developing that fully. I much prefer the node based design (with some more headings) as the card based design gets really, really quickly unmanageable - imagine loading up even the amount of posts we have on this thread as cards - let alone a thread with 400+ pages.
You can always go back and implement the other system later as an alternative view (or completely different forum software), but currently it's sorta pulling things in two directions at the same time.
Again, thank you! Feedback is what I really need right now, criticism or otherwise. Even better if it's nice and polite criticism.
- Yeah, I'm gonna go ahead and break off that functionality and make it so it doesn't constantly do that.
- I'm definitely considering this. I actually had an idea (http://forum-demo-88817.onmodulus.net/forum/post/Jb8gQdXC2PXg49qKn) to merge the functionality of the overview and forum view graphs with zooming, though I'm not sure it's a good idea. I could also just implement normal zooming - we had that at one point but removed it cause it didn't work super well. Shouldn't be too hard to re-implement and get working properly. Should it trigger off of mousewheel or have a zoom bar, do you think?
- I don't think it should always do this, but adding a button for it would be easy enough.
- Yeah we're planning to rework the cards at some point. Not sure on the specifics yet though. We may want to add more information? Like word count, date last edited, etc. And of course change up the buttons while we're at it.
Yeah, we've been thinking about that. I was considering adding a gmail style form for writing new replies, and having that work with the node system? I'm not too sure yet though. Regardless, we are going to have some kind of system for skipping though links more quickly no matter what we do - loading each layer a bit at a time is silly. Probably wait until after we have voting and maybe SAA, though, so we have a metric by which to choose what posts to display.
EDIT: I just added a button to close all nodes descending from a node, recursively. It doesn't close the node itself, but that only takes one extra click anyway. Though I did make it so that the buttons only available if all of the nodes children are open, in retrospect I should change that to only require one open. I'll do that later though. Oh, and it'll take a few minutes for the server to catch up.
I'm happy to help - even if I do feel a bit awful coming on and criticising every time I post! I'm truly a big fan though, I've always felt that forums need a bit of a shakeup.
Re Zooming: I'd suggest both mouse wheel and zoom bar - some computers don't have mouse wheels, and laptop trackpads can be awkward to work with.
Re Extra card data: I'd definitely keep it as minimal as possible - any extra information at that stage is just going to be info overload - if they want to get that info then they can look at the post itself.
In terms of a redesign - I'd really try to have everything on one page if possible. Having the node/card diagram on the right with the full text of the clicked post on the left for instance, could work well. Mobile screens would obviously have to have a separate layout, but I believe that forum usage is still largely skewed towards desktops/laptops.
I'm looking at this on a 1920x1080 monitor and for that long thread it seems like at the zoom levels where the, uhm, headers are still missing, there's a lot of unused space to the sides. Maybe stretch the visible levels out so that they stretch over the whole screen horizontally? I think that would make it look less cramped.
I'm not sure how exactly that could work, though. If the currently visible nodes are spread evenly across screen width, how do you handle the user scrolling sideways?
Also when zoomed in very far the levels stay aligned, which means that a discussion with short posts takes up the same vertical space as a discussion with very long posts. This does seem a little more important to me than the issue above.
Maybe arrange the topics in columns at a certain zoom level and instead of a continuous scroll, let users do whole-column-scrolling. The question is what columns to consider when scrolling, because not all columns are "filled" equally far.
When zooming out so far that only dots are visible the dots that were expanded before seem to be loading something. That seems like a bug to me – you're displaying the same dot as everywhere else, what are you loading?
Overall this does look a lot better than when I last looked at it, though.
I figured the answer to that would just be to let people zoom in more or less as they pleased? So in a discussion with larger nodes, people will naturally zoom in farther to see them? How does that work out for you in practice?The problem is not the discussions with larger nodes but the ones with smaller nodes. Those just are spaced out very much vertically. Actually, they are spaced with constant height and I guess that's my problem. When zooming in so far that I can comfortably read the text in the smaller nodes, I can see three at once on my monitor with 1080 pixels of height. I'd like to see more. Aligning vertically related nodes top-to-bottom would seem more sensible to me.
I'm not sure I know what you mean. Like, have solid columns show up that users can scroll normally? How does that work with splitting conversations?Conversations don't rejoin in the current view, as far as I can see. Arrange nodes only in columns instead of a grid. Columns can contain a splitting conversation by containing n columns where the conversation splits into n parallel conversations.
Did they disappear after a second? The loading spinners often hang around for a second or so for me, but they disappear pretty quick after that. :/Yes, they disappear. I'm just confused that they show up at all when zooming out to a level where the graphic to put into their place is a constant.
The problem is not the discussions with larger nodes but the ones with smaller nodes. Those just are spaced out very much vertically. Actually, they are spaced with constant height and I guess that's my problem. When zooming in so far that I can comfortably read the text in the smaller nodes, I can see three at once on my monitor with 1080 pixels of height. I'd like to see more. Aligning vertically related nodes top-to-bottom would seem more sensible to me.
Conversations don't rejoin in the current view, as far as I can see.
Arrange nodes only in columns instead of a grid. Columns can contain a splitting conversation by containing n columns where the conversation splits into n parallel conversations.
"Scrolling by column" would then mean that there are buttons at the left on and the right. Clicking on one of those would move the view by one column into the appropriate direction. So you'd basically scroll between parallel conversations.
Vertical scrolling would work as it does currently.
Yes, they disappear. I'm just confused that they show up at all when zooming out to a level where the graphic to put into their place is a constant.
Hmm, yeah we can see about dynamically spacing nodes. At a guess though, this is gonna be a real pain to implement. How important do you think it is? :/It does slow down reading a bit since this means more scrolling and scrolling means loading nodes. Testing it out it's pretty minor, though.
Well, not yet. They probably will [rejoin] though, once we reimplement that feature.Hm, okay, that does change things a bit.
So you mean columns within columns? That sounds awfully complicated. How does it work when you have constant splitting? Do posts that would currently be above each other but not directly connected appear in the same column? Or do you mean more like reddit? :/Yeah, that was the idea, definitely not like reddit. Those two questions to show some serious problems with my imagined approach, though, and so do rejoining conversations.
It does slow down reading a bit since this means more scrolling and scrolling means loading nodes. Testing it out it's pretty minor, though.
Hm, okay, that does change things a bit.
Yeah, that was the idea, definitely not like reddit. Those two questions to show some serious problems with my imagined approach, though, and so do rejoining conversations.
Noticed this and just want to throw out some suggestions:
- Different types of connections, denoting different relations between nodes. For example, reply, subordination, approval, contradiction, etc... Also ability to add connections post-node-creation, so someone can go "oh, these are related!" *bamf*
- Different types of nodes denoting different functions. Some should be headers, for example, that other stuff goes under. Or +1 posts can get a different color.
A non-linear forum is an interesting concept. It'd fix the problem of unrelated conversations in the same thread - if you don't have anything to add to the person above you you're just replying to OP you can just reply to OP.
Nice to see this is still being worked on.
The preview feature is functional and cool-looking.
The zoom feature and moving around the graph is sluggish for me on almost-latest version of Chrome on Windows.