Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Messages - Arantor
5326
Features / Re: Post moderation
« on November 25th, 2011, 06:45 PM »
The problem of going down any kind of structured language for that kind of thing is support, in that it would add a support burden, when a good UI can do everything that a simple structured language do, and that way I also don't have to cope with trying to deal with the same problem that bbcode vs WYSIWYG or SQL vs QBE is, namely trying to represent code in a non-code way.
5327
Features / Re: Extending the postbit/poster info
« on November 25th, 2011, 04:47 PM »
Bump. Quite a few plugins will depend on this.
5328
Features / Post moderation
« on November 25th, 2011, 04:29 PM »
Been thinking a lot about this over the last few days and discarded more UI designs than I can think of for it (eek), but I want to share how I envisage post moderation working from a configuration point of view, and on a related note, why it needs to be changed.

I'm not looking at the mechanics of how approval itself is managed, simply at how one configures what the rules for placing posts on moderation are.

So, what's wrong with SMF's post moderation configuration? Firstly, Core Features. Regular readers will know that I loathe and detest that page. It's nice enough but it's illogical for a regular user to deal with. The number of people who, in the last couple of years, have asked how to turn it on should be proof enough of that.

Then, assuming you turn it on, post moderation shares one dubious award with the calendar, in being the only areas of SMF whose access permissions are configured in three different interfaces (that all do the same job). Yes, that's right, there are three different ways you can set permissions for post moderation - the simple and the classic permissions interfaces, and its own custom page.[1]

And notwithstanding the fact that you have to actually then configure it. It would take a genius of Vizzini's stature[2] to configure post moderation right first time unless you know how it's implemented, since it's *really* not clear from the permissions page.

Here's the problem: nowhere in the permissions does it ever tell you that if the user, for any reason, has 'post... without requiring approval', that overrides 'post... but hide until approved'. Unless you farted around, you'd never come to that conclusion on your own. It's almost broken enough that I'd call it a bug but it was as designed, seemingly. (It's designed by programmers, rather than *for* users.)

Let me explain the problem of doing this on a fresh SMF install, and you're welcome to join in at home. Today's challenge: configure it so that regular users don't have moderation but new users with up to and including 5 posts are moderated.

There are, in fact, two ways to do this, both of which are convoluted.

1. Turn on post moderation in Core Features.
2. Making sure that the 0-post count group is left alone, create a new post count group that requires 5 posts, so that once a user has successfully posted 5 posts (and until they're approved, it won't affect their post count), they can have different permissions attached.
3. Admin > Members > Permissions > Settings > Enable permissions for post count based groups (tick) > save

Here's where the paths diverge. Here's path A:
A4: On the same page as above (Admin > Members > Permissions > Settings) also enable Enable the option to deny permissions
A5: Go to Admin > Members > Permissions > Board Permissions and for each profile (that allows posting) set the permissions up as follows: Regular members should have "Post new topics, without requiring approval" and "Post replies to topics, without requiring approval" enabled, while the 0-post count group should have those permissions *denied* and "Post new topics, but hide until approved" and "Post replies to topics, but hide until approved" in their place. Once the user leaves the 0-post count group for the 5-post count group, the other permissions are no longer denied.[3]

Or, path B. It doesn't require deny permissions but it does things another way.
B4: Go to Admin > Members > Permissions > Board Permissions. For Regular Members, set all the posting permissions to disallow. Then in the 0-post count group, give them "Post new topics, but hide until approved" and "Post replies to topics, but hide until approved" and for every other post count group, give them "Post new topics, without requiring approval" and "Post replies to topics, without requiring approval".[4]

Either way, banal and frustrating (and in fact, you still have to do the same thing using the other interface but it's actually slightly *more* confusing, not less there).


So, here's what I think instead. I haven't quite found a UI I'm happy with which is why there haven't been any screenshots or commits on it yet.

Post moderation is one of those things that you're going to be setting rules for. Think about it; every time you actually want to set post moderation, it's going to be because you want it for specific situations. Some of those will be rather broad but specifically defined (all users with under 5 posts), some will be very specific (all new topics in a certain board)

Doing that last one in SMF is a brainfuck, in fact.[5] So instead, why not some kind of interface that lets you set those rules?

In fact, you can boil down almost every single kind of post moderation situation to rules. Some of them are simple rules, some of them are rules with conditions, and some are rules with exceptions, some with both conditions and exceptions.

But really, that's what's needed. Something to construct rules like:

* moderate all posts "where the user has less than 5 approved posts"
* moderate all new topics in "board x"

Then you can get more fancy:
* moderate all new topics in "board x" where "user has less than 100 posts"
* moderate all new topics in "boards x, y and z" where "user has been registered less than a week"

Or even:
* moderate all posts in "all boards" where "user has less than 10 posts" except "board x" (maybe it's a chit chat board where spamming is allowed, I dunno)

That's the core ruleset, creating rules about the user, but there's no reason why it couldn't be extended to other things like creating conditions or exceptions based on groups, or other user characteristics.

Then, just for fun, I want to introduce non-member-based rules. For example, I want to have it able to moderate posts that automatically contain certain words. I also want it able to moderate posts if they contain a certain number of links. (And have exclusions for all those things based on members etc. If a member has 200 posts, I don't think they should be limited from posting three or four links in a page for example)


I don't think any of this is over the top, I just think this is complicated to get right in a UI context and I'm more conscious of doing that than I ever used to be.

It's interesting to note that there are circumstances which could 'theoretically' be simpler to construct in SMF's environment but the reality is that they're pretty few and far between.


Thoughts?
Posted: November 25th, 2011, 04:18 PM

Also as a footnote, let me add that I would be ditching the core features setup, and simply base it on whether there are any rules defined - no rules = post moderation is off.
 1. It actually gets its own page, template and images, while the calendar has to make do with using internal routines. But still, three places, and it's unique in how far the third page goes, elevating it in a class all of its own.
 2. Vizzini: Let me put it this way. Have you ever heard of Plato, Aristotle, Socrates? Morons. (If you don't recognise the line, do yourself a favour and look the film up. You won't regret it.)
 3. But now we have an extra membergroup that does absolutely nothing other than allow another group's permissions to expire.
 4. This means you still have the extra group, but at least the extra group is now doing something. This is also very fractionally faster, but harder to maintain as you have to set the new permission up on any new post count group you create.
 5. New board profile and everything. Notice I skipped over that small detail in the above, but it's true.
5329
Features / Re: Template skeleton!
« on November 25th, 2011, 01:08 PM »
:/ I don't have much to say on anything other than the following. I think it doesn't help that both of us (my partner and me) are both under the weather today, feeling rubbish and ill.
Quote
And on my current matters: what are we demonstrating by doing what we're doing? We're not doing it for money, we're not doing it for glory... We're doing it because we feel it has to be done. Because we want to innovate in our field. How would we react if we ended up making Wedge a huge success, and someone demanded of us that we be 'fair' to the competition or something? I don't know, because I think I'm being fair right now -- I'm certainly not trying to make money off anyone, or take market shares, or anything like that.
We are demonstrating that the way things are is not ideal and that there is an alternative. Only recently I saw someone asking on sm.org for 'a way of working out what order mods needed to be installed in so they work properly'. Apart from the vast number of permutations that are generated out of this, it's also entirely the wrong way to go. Instead of playing triage on file edit related matters, people should be looking at ways to change the problem entirely.
Quote
I think that's it... I think that innovation is not systematically something that should be monetized for the sake of being monetized. What one wants is to keep living doing something that makes them happy. This requires money, so often the two gets mixed together, but it doesn't have to. I think that's probably one of the big flaws in objectivism as I'm seeing it. Unless, of course, I totally misunderstood the concept...
You haven't misunderstood anything. If you're curious about how others view what is fundamentally the same concept, look up Maslow's Hierarchy of Needs. It describes virtually the same thing, but from an economist's point of view.

Once people have enough money to make sure their basic needs are met, they're generally pretty good but once their higher, not-necessarily-financial needs are met, they're even happier. I know I turned down a promotion at my former career once because while it would have made me more money, it would have meant longer hours and more stress.
Quote
I still have plans to make the sidebar look good horizontally..,
Not quite the same thing. Making the sidebar look good horizontally isn't the same challenge. I'm talking about having the sidebar stuff be moved wholesale out of the sidebar and into the default layer. The main header is likely to be wrong (as it should probably be elevated from a we:title to we:cat, or we:title2 to we:title depending on circumstance), for example.
Quote
I'm not sure about that. You could very well prepare for this particular case by adding some CSS to adapt the styling for your data inside the fallback layer.
But that's the thing - see above. If a plugin wants to use the sidebar but the sidebar's not available, just changing the CSS isn't enough, the markup is likely to be different too. If a plugin wants to create its own layer, fine, but even then it's still probably going to be using its own different markup.

What has to happen is either the fallback needs to allow an author to specify an alternative function to call as well the fallback layer.

Or, and this is why I asked for a return value in the method that adds a block in, the plugin can attempt to add to the sidebar, and if that fails, it can do something else.

That's assuming, of course, that the sidebar is removed by something with highest priority and everything else is done with lower priority but that's not something we can readily do much about... short of plugins having some flag to indicate that they manipulate, require, or disable the sidebar but that's another can of worms I don't want to get into.
Quote
The main point is having all important objects into their own file, for easing editing. Some class files are only called from within one point in the source code (such as Class-CSS or Class-SFTP), so we might argue that they should be stored in the same file...
Class-SFTP and Class-FTP could be called from different points in the code, but Class-CSS can't (it's invoked early on, no?)
5330
Features / Re: Template skeleton!
« on November 25th, 2011, 01:59 AM »
Quote
Yeah, sure...
I'll take some time to look into this. Maybe it's "fixed" in the new code already, I don't know... (I mean, I found and fixed a bug with 'load(before)'.)
I haven't had chance to try it but it's certainly something that needs investigation. You know, you could always try writing a plugin :whistle:
Quote
Yep... I think we discussed it in the early days of wetem, but I forgot to think further about it...
No worries; I fully expected to be the one who would discover such fun things when writing plugins. It's a good way of debugging things, incidentally.
Quote
And besides, it's not going to be as annoying as my own work on the rewrite itself... Believe me, I had to double-check the entire friggin' code at least 10 times today...
*nods* This is also why I'm slack about updating my plugins until things settle down. I still, as it happens, have one plugin that uses loadBlock() from before wetem even existed.
Quote
I was thinking, the only reason we need an array for layer lists is to provide for fallbacks... Why not do an explode(',', $target) in ::load()? That way, we can provide 'sidebar,top,default' or even 'sidebar,top,' (empty last string) for the target...
That's workable. The thing is, whenever doing anything like this, two sets of circumstances need to be borne in mind: firstly, how Wedge itself uses these, and secondly how plugins and themes will use it (but mostly plugins).

Wedge's use is almost entirely just dropping complete lists of templates into layers, but plugins may well want to insert individual things into layers, may want fallbacks, may want to do other things. To be honest, if I'm looking to insert into the sidebar and falling back to the default layer, I really won't want to do it like that, because the styling will be all wrong. I'll want to have separate templates for that job.

Consider any of the sidebar blocks that we have currently. Would they look right, style-wise, if simply dropped into the default layer? A few might get away with it but generally it'll look bad.
Quote
Also, was thinking at this point we may wanna split wetem into its own class file... It's 22KB. Splitting it into another file, however, adds about 5ms of processing time on my local server, even if it's just that -- the process of taking one file and splitting it in two, and including both files from within Subs.php. There aren't a lot of connections between Subs-Template and Class-Template (or whatever we'd call it), just a few here and there, so it might be justified.
Yeah, it's something to bear in mind. However, while there is little connection, it's going to be called together and used together ultimately, so there's little point in splitting it.
5331
Features / Re: Zencart and a forum
« on November 25th, 2011, 01:53 AM »
Quote
ok so portal, forum with built in gallery and did I read that wedge would have a portal aswell? could of read wrong sorry if have
There's a sidebar built in and it's easier to set up a custom front page, but no portal as such built in. There is already a portal plugin, though it's going to need some work since it was first created.
Quote
and a store that gets intergrated that sounds brilliant for what I will need,
I'll probably end up writing the storefront plugin, but I suspect at the same time I'm going to make it a (not expensive) paid plugin.
Quote
im not a coder or programmer, can to a point find my way round a theme and alter it but do try to do  things myself
It is a bit easier to tweak the theme's colours and so on than it would be in SMF, much easier to do pure colour variations and still have them all be consistent.
Quote
Also would there be a way to use the pictures in aeva in wedge to put in a post
Sure. You can even do it in Aeva+SMF, using the smg bbcode (as each item's page tells you!) but I think we renamed it to 'media' as a bbcode in Wedge rather than 'smg'.
Quote
as at the moment with most forums to use photos or graphics its a case of using a photobucket account etc using the img code link
Sure you need to do that if it's stored elsewhere (unless you set up some kind of integration, I know there's one for ImageShack and I thought there was one for Photobucket)

But if you do it through the gallery you can even limit who can see it.
5332
Off-topic / Today's thought of the day (24 Nov)
« on November 25th, 2011, 12:11 AM »
I think I might start this as a little daily column, ooh-err.

Anyway. Elsewhere on the interwebs, I got talking to someone about the relative interfaces in games; me thinking about DeathSpank's interface (both keyboard and gamepad) and my friend telling me about Skyrim.

The thing that I got from the discussion is that PC games don't actually care as much about the user. They figure the user has a lot of buttons in front of them, they can press them to bring things up. My example, actually, is DeathSpank. There's a quest log, inventory, 'hero cards' and equipment. Each of those can be brought up from a single keypress. BUT, if you're using a gamepad, there's only a single button allocated to equipment and you step through the pages from there.

Now, my friend mentioned that there's a 'console accommodation' in Skyrim, pressing a single keyboard button brings up a 4-point menu for levelling/skills, map, items and magic. Similar to the four items in DS, really.

My friend stated that he'd use the one button quick key for doing this - but the thing is, I'm not convinced that's the right thing to do, on the game dev's POV at least.

If you use something frequently, leave it a single (easy) keypress away. But if you don't, don't make it a first-class item parallel to everything else, instead delegate down to a menu. In DS, I don't often have to touch any of those 4 pages, so it makes sense that they're one level removed.

Skyrim seems a bit different, where at least one of those pages is frequently accessed, but even then I can't shake the feeling that there's something wrong.

It's as though you're given a dashboard of 15-20 options, that are all as 'important' as each other, seeing how they all take the same effort to make happen, yet surely you don't need all 15-20 options available all the time? Wouldn't it be better to hive off the less important options into a submenu?

And this is what we're seeing being done on console games; they don't have ~100 buttons at pressing distance. Because of this, I'm thinking they have to intentionally be careful with what does what, and force the design to fit - and I'm thinking this is not a bad thing.

I also think a lot of software developers could learn from this approach, actually. Instead of designing to fit with x facilities, what would happen if only a subset y were available?

The other thought I'm having out of all of this is how far I personally have travelled. I always used to be the person who consistently said that I never made it look good, merely that I made it work well, but the more I journey as it were, the more I find that the two things are practically one and the same. I still don't make it look good, but I make it work well for the user, I think.

Thoughts?
5333
Features / Re: Zencart and a forum
« on November 25th, 2011, 12:09 AM »
Essentially, that site boils down to a content manager (which is basically what a portal does), plus a forum, plus gallery, plus store - seems to me that should fit nicely in line with having a forum as the base with a content manager (portal) around it with everything else integrated in nicely.

Aeva is a core feature, yes. Right now it's integrated about as well as it is into SMF but the plan is to integrate it more deeply and have it serve attachments as well as regular media items.
5334
Features / Re: Zencart and a forum
« on November 24th, 2011, 11:14 PM »
Anything would be possible, in theory. Bridging ZenCart and Wedge would be little or no different to bridging to SMF, the big difference is that most people talk about bridging systems as being insecure when it's only that way if done *badly*.

That's the general case at least. Speaking specifically of ZenCart, a couple of years ago I had to modify a ZenCart installation to integrate Sphinx for searching. I didn't have to touch *too* much of the codebase but it was enough that suggested to me that I wouldn't want to do it again.

I have already thought about some kind of storefront plugin for Wedge but it's not been high on my todo list. I wouldn't generally go the other way anyway, because I can't imagine any site that has both a forum and a store component to put the store first (as opposed to using the forum as a CMS type base, and in any case, a properly consistent interface looks much more professional)
5335
Features / Re: Template skeleton!
« on November 24th, 2011, 02:10 PM »
Quote
Does it work if you don't execute the ::load() before it? Do you remember...?
Didn't try it, because the whole point was to add a layer dynamically after the rest of the stuff had been created. To me, having a caveat that says 'you can only create new layers before resetting the default layer contents' is a bit banal.
Quote
Hmm... 'Oops'?
I could ensure ::load stays public, but I have a feeling that you would want to 'give the right example' and rewrite your code to use :add anyway. It's relatively fast to update, though...
That's partly why I'm enthusiastic about building plugins, so that there are 'best practice' examples to work with. Besides, it does seem more logical to have add as a separate method because it does define what it's doing.

(I don't really mind updating my plugins. It's the curse of writing plugins this early, really.)
Quote
Well, it's easy to understand when one of the params is an array, but if it's not, it could lead to misunderstandings... Was it wetem::add('side', 'sidebar') or wetem::add('sidebar', 'side') already?
Yeah...
Quote
My documentation for wetemItem has this:

wetem::get('sidebar_dummy')->parent()->rename('sidebar2')->inner('inside_sidebar');
That's the sort of case that chaining really allows for - which is an improvement over the equivalent unchained methodology.  Just that for most uses in the core, and most plugin uses, chaining doesn't bring anything huge.
5336
Features / Re: Template skeleton!
« on November 23rd, 2011, 10:59 PM »
Quote
- The post above: is it still valid? I suspect so, but I never quite understood what was wrong with the code... Maybe you could dig into it again? Thank you.
That was the point. The code should have worked but it didn't work as expected, in that the layer that (as far as I was concerned) should have been created, just wasn't being created.
Quote
- I decided that considering there are NOT a lot of places in Wedge where we could use method chaining anyway, weitemItem will only be there 'for the show', but not actually used if we can do otherwise.
This was something that bugged me. I saw it was cool but I couldn't quite envisage where it would be beneficial over anything else we were really doing at the time.
Quote
- I renamed wetem::load() to wetem::op() (operations), made it private, and added a ::load() that does the 'replace' thing. Also added ::add() and other public static stations. Given that 95% of the use of wetem is to load a full block into the default layer, I think there's no need to bother in the first place.
95% of *Wedge's* use might be that. But that means, yay, I get to fix every plugin I've written thus far that adds a block, because they all use load to add to the layers, though it would logically be better to use an add method.
Quote
- I'm considering inverting the order of parameters.

wetem::add('sidebar', 'block1') would add this block to the sidebar.
wetem::load(array('block1', 'block2')) would load (not add) these blocks to the default layer.
Makes sense.
Quote
However, this MAY sound complicated or illogical to many people.
As long as it's documented and there are examples, it seems to make sense...
Quote
Of course, people could 'simply' do wetem::get('sidebar')->add('block1') for similar results, and with the added benefit of specifying the target layer first. I'm just... Not sure which is best right now.
I don't think the chaining really adds anything here.
5337
Off-topic / Re: Doctor Who
« on November 23rd, 2011, 09:11 PM »
First I need a new PSU and DVD drive... Meanwhile Imma go look for a tool for my Mac, whose DVD drive does actually work properly...
5338
Off-topic / Re: Doctor Who
« on November 23rd, 2011, 05:41 PM »
Technically even ripping CDs to computer is illegal here, btw. Backup copies argument aside, format shifting is technically against the Copyright and Designs Act. Just that for personal use it's quietly ignored.

It's only really Skyward Sword and the Mario games (that I don't own yet) that I can't play during the evening, I can play those during the day if I choose... and Skyward Sword is a bit buggy at the moment going by the forum...

Still, I'm certainly intrigued by the idea.
5339
Off-topic / Re: Doctor Who
« on November 23rd, 2011, 04:53 PM »
I could but I actually feel wrong about doing that (and under UK copyright law, it's still illegal to do that in any case)

Eh, I need a new DVD drive anyway as the one I have is now about 8 years old and misbehaves anyway.
5340
Off-topic / Re: Doctor Who
« on November 23rd, 2011, 04:13 PM »
In other news, I'm now trying out Dolphin...or I will be in a while once the first disc has finished being ripped...

:edit: Or I would if it didn't think I had a faulty drive :/