<?xml version="1.0" encoding="UTF-8"?>
<posts type="array">
  <post>
    <body>Thanks for the suggestions. We're usually so flat out writing out new functionality on the site that we tend to forget small stuff like this :)

1) This is pretty import and we'll look at it as soon as we can, especially considering the change in seasons so I imagine that a few others are also feeling your pain. 

2) We've found that mass update function has a big impact on our server resources so you have to plan for these quite carefully. That said, it's on the to-do list as there has been some demand for it.

3) We've just built functionality where you can start customising preferences (hiding widgets, default ordering, etc) on the site. It's still in its early stage and is far from complete but you can expect this to rolled out of the next few months across the site.</body>
    <created-at type="datetime">2009-10-07T09:52:35Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">12968</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-07T09:52:35Z</updated-at>
    <user-id type="integer">2</user-id>
  </post>
  <post>
    <body>I have also thought of this, but I thought that I was just being picky.  But you are right Magick.  I would like to see the ability to remove several at once, just as I do with my gmail.  Also, being able to return to the page that I am working on would be wonderful!!</body>
    <created-at type="datetime">2009-10-07T12:35:18Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">12973</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-07T12:35:18Z</updated-at>
    <user-id type="integer">5779</user-id>
  </post>
  <post>
    <body>I would also really, really love #2.  But until you are able to release it confidently, one thing that would really be helpful would be to somehow indicate if an item is available for swap on the gardening stash page.  I'm forever clicking on things to check on whether I've remembered to list it for swap or remove it from swap.  It would be great to just see that on the stash page without clicking.</body>
    <created-at type="datetime">2009-10-07T18:38:35Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">12980</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-07T18:38:35Z</updated-at>
    <user-id type="integer">1713</user-id>
  </post>
  <post>
    <body>Yes, yes, yes to all of the above. Thanks for the update, Nath. Some of these I have written about before. When you have a big stash, it presents a big issue. I am now, at change of season as you suggest, trying to get my stash under control for trading purposes and for planning for next year. [I really appreciate the backup/download function that was added previously - it does help immensely with taking physical inventory!]</body>
    <created-at type="datetime">2009-10-07T19:22:05Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">12981</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-07T19:22:05Z</updated-at>
    <user-id type="integer">4903</user-id>
  </post>
  <post>
    <body>@Nath: many thanks for the replies, all sounds good. 

I wanted to respond, though, to your point about server resources. Please forgive me and disregard this if the following is teaching my grandmother to suck eggs (you're obviously an adept web designer), but I want to state the obvious, just in case it isn't obvious... (non-techies, please switch off here...)

What I'm suggesting, if it's implemented right, ought to massively reduce the load on the server, not increase it in any way - provided you put the database call at the right point. Let's assume, for the sake of argument, that I'm going delete 100 items, and a call to the existing &quot;delete_item&quot; subroutine takes 100ms to complete. Use a while/foreach loop to run that routine on 100 items and I'll hold the server up for 10 seconds - causing the impact on resources you describe. Obviously, that's not good.

But, if you can write the routine such that it stores the SQL query to a variable, iterates over the form submission concatenating new AND/OR statements onto the end of the SQL query variable, and then runs a single, long SQL query that says &quot;DELETE FROM whatever WHERE id=1 OR id=2 OR id=3 OR id=4 OR id=5&quot; (etc.), it should massively reduce server load (at least, it's worked well whenever I've implemented such designs). It should take a trivial amount of time for PHP to concatenate my selections into an SQL query, and while the query itself will take longer, it won't take a hundred times longer, or anything like.

In terms of how it impacts on server load, if I have to make 3 or 4 page loads in order to delete an item and I do so for 100 items, then while I may only be using the server in small doses rather than tying it up for extended periods, the total CPU time I'm using is quite high; I need to make 300 or 400 requests to the server over an hour or so, as it stands now. Get a thousand users doing that and you have a busy server.

If all of the above were working the way I envisage it, then the procedure would be:

1) I request a list of my entire stash rather than browsing through several pages. This would take slightly longer to display 300 results than 20 results - but it would be one query rather than 15 to see all 300 items (the numbers are hypothetical). Far less resource usage in order to allow me to start ticking boxes.

2) For as long as I'm reviewing that data and ticking boxes, I represent no load on the server at all.

3) After 5 minutes, I submit a form with 300 lines to be considered and 100 of them to delete. The web site processes the form and spits out a single SQL statement to perform the deletion. Then it returns me to my stash, requiring the retrieval and display of 200 items.

So, my total impact, to delete 100 items, is three SQL queries as opposed to 300-400 under the present system. This is an extreme example, confected to illustrate the point, but the principle is just as valid for the more typical task of deleting 10 items from a stash of 100. I can't see any way this would increase load unless it involves the recursive iteration of CPU-heavy code - which it shouldn't.

If this isn't news to you, forget I spoke; I'm not in any way trying to insult your intelligence - but it took me a couple of years of inefficient coding to realise this so I thought it may be worth mentioning. If I have failed to understand the problem, please fill me in... this is an area of interest to me, so if it doesn't make sense then I'd like to understand why not.</body>
    <created-at type="datetime">2009-10-08T00:39:05Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">12989</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-08T00:39:05Z</updated-at>
    <user-id type="integer">4543</user-id>
  </post>
  <post>
    <body>Wow Magick.  That was some cool sounding gibberish!! :)  I sense some background in programming. :)</body>
    <created-at type="datetime">2009-10-08T13:50:08Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">12997</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-08T13:50:08Z</updated-at>
    <user-id type="integer">5779</user-id>
  </post>
  <post>
    <body>@magick You hit the nail on the head when you said &quot;if it&#8217;s implemented right&quot;.

We've found in the past that dropping things without properly thinking them through usually bites you in the arse and with us juggling this site and full time jobs we don't take anything lightly. And the last thing we want to do in drop something in without thinking it through and building it properly.

I made a a pretty general comment, what I meant to say was it's something we need to fully think through before building but it's definitely on our to do list :) And judging on the latest feedback we'll be pushing it up our todo list.</body>
    <created-at type="datetime">2009-10-08T19:31:12Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">13000</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-08T19:31:12Z</updated-at>
    <user-id type="integer">2</user-id>
  </post>
  <post>
    <body>@magick good suggestions
@nath Just to add my 2c , the sort of functionality in these suggestions would really help people like me who get the 'bug' to do a lot of updates at once and then get 'tired out' by the repetition repetition of doing the same tasks twice thrice fourice etc,  and leave it for another day. Being able to multi-select would be a fantastic benefit to many of us I think. :)</body>
    <created-at type="datetime">2009-10-08T21:56:40Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">13001</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-08T21:57:14Z</updated-at>
    <user-id type="integer">7750</user-id>
  </post>
  <post>
    <body>N &amp; N... OMG, you guys are fantastic! I haven't seen any announcement yet, so I'll let you have at it.
BUT, I had spent the better part of the weekend working on my seed stash, hundreds to be updated, archived, marked as for swap, etc. After several hours work, I got through about 2/3. Took a break on Sunday afternoon since the site was moving slowly and when I came back... Seed Stash Nirvana!
Thank you, thank you, thank you!</body>
    <created-at type="datetime">2009-10-19T12:48:53Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">13144</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-19T12:48:53Z</updated-at>
    <user-id type="integer">4903</user-id>
  </post>
  <post>
    <body>OOoooo!!!!!  AAaaahhhh!!  Neat!!I just want to say thanks guys!!  You're the best!!</body>
    <created-at type="datetime">2009-10-19T14:56:47Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">13145</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-19T14:56:47Z</updated-at>
    <user-id type="integer">5779</user-id>
  </post>
  <post>
    <body>That's what I had in mind :-) Thanks guys, works a treat.</body>
    <created-at type="datetime">2009-10-25T19:29:06Z</created-at>
    <delta type="boolean">false</delta>
    <id type="integer">13287</id>
    <photo-id type="integer" nil="true"></photo-id>
    <topic-id type="integer">2748</topic-id>
    <updated-at type="datetime">2009-10-25T19:29:06Z</updated-at>
    <user-id type="integer">4543</user-id>
  </post>
</posts>
