Friday, 27 January 2012

Twitter selective tweet blocking. What exactly does that mean?

There's a bit of a twitstorm brewing over an announcment made yesterday on Twitter's blog outlining a new capability the company has built into its platform. This capability will allow Twitter to selectively block content to particular countries in order to comply with local laws. Here's the bit that has some commenters worried:

Starting today, we give ourselves the ability to reactively withhold content from users in a specific country —   while keeping it available in the rest of the world. We have also built in a way to communicate transparently to users when content is withheld, and why.

Mark Gibbs has written this piece on forbes.com which suggests that Twitter will implement this blocking scheme through the use of realtime filtering, saying "given that over the course of 2011 the number of tweets per second (tps) ranged from a high of almost 9,000 tps down to just under 4,000 tps, any filtering has got to be computer-driven." However, if you read the full Twitter blog post you will see that this is not at all what the company has in mind. In particular:

We haven't yet used this ability, but if and when we are required to withhold a Tweet in a specific country, we will attempt to let the user know, and we will clearly mark when the content has been withheld.

One wonders whether Mr Gibbs bothered to read beyond the first three paragraphs, because if a system of filtering was being employed "starting today", then it would in fact be in constant use. What Twitter has done is to build some flexibility into their platform which would probably not have sparked such controversy had it simply been there from the very beginning. If it is sensible to do so, they may now selectively block tweets to certain countries on demand. Previously they would have had to block a tweet globally due to technical limitations, so if anything this is a positive step. Twitter might not ever use this new capability, but now they can and we will expect them to weigh the pros and cons and to exercise their best judgement. Some have suggested that the announcement of this new capability will place the company under greater pressure from governments to block tweets. I find that hard to believe. I have no doubt that Twitter is already under enormous pressure from some oppressive regimes. In the past they would have simply ignored the pressure at the risk of a nationwide block of the service. Whereas previously Twitter would have shrugged and cited technical limitations, now they can shrug and state moral objections. I think the company has made a minor communication error. They should have said "retroactively" instead of "reactively". The latter suggests that it is the platform which is reactive. There are however plenty of other clues in that blog post that point towards retroactive human intervention. That is, if you choose to read that far.

UPDATE: The Twitter blog post links to some other materials, including this very helpful (um) help page: https://support.twitter.com/articles/20169222. Here we clearly see that it is only upon receipt of a valid request for a takedown that any content will be withheld. As you were.

Tuesday, 13 September 2011

SharePoint 2010 UI: custom action to launch "Move To" for a list item

Mood = :proud:

I've worked out how to create a custom menu action in a SharePoint 2010 list view that allows a user to move a single file (with meta-data intact) to another location similar to the functionality available in Site Content and Structure. In fact, I have made use of the Site Content and Structure page directly within a modal dialog. You can use SharePoint Designer to create a custom list item menu action. I won't go into detail here on how to do that as there is plenty of information available on the web. In the "Create Custom Action" dialog, tick the radio button next to "Navigate to URL:" and paste in the following javascript URL all on a single line (you will need to change the webId value to your own):

javascript:var listId='{ListId}'.toLowerCase().replace(/[{}]/g, ""); var webId='4836a39d-e154-4822-8826-8bcd5029cad2'; var dlg=SP.UI.ModalDialog.showModalDialog({ url: "{SiteUrl}/_Layouts/sitemanager.aspx?FilterOnly=1&SmtContext=SPList:" + listId + "?SPWeb:" + webId + ":&SmtContextExpanded=True&Filter=1&pgsz=100&vrmode=False", dialogReturnValueCallback: function(res, val) {location.reload(true);}}); var idString="SPListItem:{ItemId}?SPList:" + listId + "?SPWeb:" + webId; var item; var func; var doc; var win; setTimeout(func = function() {for (var i=0; i < window.top.frames.length; i++) {if (window.top.frames[i].location.href.indexOf("sitemanager.aspx") != -1) {win = window.top.frames[i]; doc = win.document;}}; if (doc == null || doc.forms.length == 0) {return setTimeout(func, 5000);}; for (var i=0; i < doc.forms[0].elements.length; i++) {var elem=doc.forms[0].elements[i]; if (elem.type == 'checkbox' && elem.id == idString) {item = elem; break;}}; if (item == null) {return setTimeout(func, 500);}; win.SmtSingleObjectMove(idString+":", false); item.checked=true; win.SmtGridSelectItem(item);}, 100); return false;


I had to use some setTimeout calls in order to ensure that the objects I was referring to were present. There is a particularly long timeout of 5 seconds that allows the dialog to hopefully complete rendering before it attempts to launch the popup with the tree view that actually selects the destination. All efforts to encapsulate this in the dialog's onload function met with failure. Perhaps one day I'll work that one out. Closing the dialog will refresh the view. This should work for any list or library in your SharePoint web application. Unfortunately there is no URL token corresponsing to the guid of the web application, so this will need to be provided as a hard-code value as I have done. I hope this is helpful to someone, as it took quite a lot of trial and error.

Wednesday, 7 September 2011

SharePoint 2010 - weirdness with custom list item edit form

I don't like SharePoint very much, but I'm forced to work with it in my software development role. A lot of what you might think of as simple functionality that could be expected out-of-the-box in a commercial content management system actually requires custom coded solution. Okay, I can do that. The trouble is though that the IT department at my company are quite strict about the provisioning of custom software. Given how buggy SharePoint Services is, I can't say I'm terribly surprised. The upshot is that any custom coded solution is discouraged in favour of some third party alternative if available. And either way, it needs to be justified. I tend not to bother with custom solutions. I often encounter weird problems with the out-of-the-box functionality though. Here's one.

I have a requirement to allow designated people to move a document from a staging document library to a permanent location once the document has been approved. After lots of mucking around I've found that the simplest way to do this is to create a custom edit form that allows input of only one item property. I've decided to use the Source URL property, since this is not actually useful in the context of the library. The plan is that there will be a workflow that kicks off whenever the document properties are changed and if there is a value for Source URL, the workflow will move the document to within that path (if legal) and then terminate. As an aside, I really wish the standard list views gave access to the file move functionality. You can't move a file from with a library, you can only send it to another location as a copy. But that's only one from an ever growing list of gripes, and not a very important one.

So anyway, I've found that this can work. However, when I (or the user) submits the custom edit form (which by the way cannot open as a dialog like the built in forms do), the result is that the document is output by the browser as an attachment. This causes a download dialog to open. I really don't want that to happen. It is confusing, to say the least. If I put the IsDialog=1 query string variable on the URL, this does not happen; however, I can't control that from actions and it shouldn't open as a dialog anyway. Also, the form does not close itself and redirect to the list as I'd expect it to. This seems to be a problem only with the custom edit forms. The default EditForm.aspx does not exhibit this strange behaviour, whether or not it is in dialog mode. I can't find anything about it on teh interwebs, so I thought I'd be the first to report it. If anything comes back, I'll be very surprised though.

Thursday, 1 September 2011

Twitter Joke Trial articles and related matters to move to new blog Arsehole Justice

I have decided to move all the Twitter Joke Trial and related blog posts over to my new collaborative blog, Arsehole Justice. It makes sense to have them there. I haven't yet begun to do this, but will begin soon. I will then reserve this blog for personal use. I'll try to keep the same links in place and use simple redirects. You might want to go and become a follower of that blog if you follow this one.

Tuesday, 30 August 2011

Arsehole Justice: Head of Humberside Police wonders why justice isn'...

Arsehole Justice: Head of Humberside Police wonders why justice isn'...: I read an article in The Independent today that quoted Tim Hollis , Chief Constable of Humberside Police. In the wake of the worst riots the...

Arsehole Justice: Shy 19 year old woman of good character could go t...

Arsehole Justice: Shy 19 year old woman of good character could go t...: If you've read some of our recent posts then you may be familiar with the case of 19 year old Hollie Bentley from Wakefield, West Yorkshire....

Arsehole Justice: Social media turns everybody into wankers.

Arsehole Justice: Social media turns everybody into wankers.: Social media turns everybody into wankers.

It's as simple as that. As soon as anybody gets involved in social media, they immediately tu...

Flayman on LiveJournal (old)