• warning: Creating default object from empty value in /home/ordinal/ordinalmalaprop.com/engine/modules/taxonomy/taxonomy.pages.inc on line 34.
  • strict warning: Non-static method view::load() should not be called statically in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/views.module on line 906.
  • strict warning: Declaration of views_handler_field_comment::init() should be compatible with views_handler_field::init(&$view, $options) in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/modules/comment/views_handler_field_comment.inc on line 49.
  • strict warning: Declaration of views_handler_filter::options_validate() should be compatible with views_handler::options_validate($form, &$form_state) in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/handlers/views_handler_filter.inc on line 607.
  • strict warning: Declaration of views_handler_filter::options_submit() should be compatible with views_handler::options_submit($form, &$form_state) in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/handlers/views_handler_filter.inc on line 607.
  • strict warning: Declaration of views_handler_filter_node_status::operator_form() should be compatible with views_handler_filter::operator_form(&$form, &$form_state) in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/modules/node/views_handler_filter_node_status.inc on line 13.
  • strict warning: Declaration of views_plugin_row::options_validate() should be compatible with views_plugin::options_validate(&$form, &$form_state) in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/plugins/views_plugin_row.inc on line 134.
  • strict warning: Declaration of views_plugin_row::options_submit() should be compatible with views_plugin::options_submit(&$form, &$form_state) in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/plugins/views_plugin_row.inc on line 134.
  • strict warning: Non-static method view::load() should not be called statically in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/views.module on line 906.
  • strict warning: Declaration of views_handler_argument::init() should be compatible with views_handler::init(&$view, $options) in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/handlers/views_handler_argument.inc on line 744.
  • strict warning: Declaration of views_handler_filter_boolean_operator::value_validate() should be compatible with views_handler_filter::value_validate($form, &$form_state) in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/handlers/views_handler_filter_boolean_operator.inc on line 159.
  • strict warning: Non-static method view::load() should not be called statically in /home/ordinal/ordinalmalaprop.com/engine/sites/all/modules/views/views.module on line 906.


A Request for Suggestions Regarding Adult Content

It is my Rezday today, and given that, I decided to make myself a Present of 512 Square Metres of land. (Tier for which I will not be paying due to my Premium Status - a term which always makes me feel like some sort of ham. Premium Ordinal Meat, L$100 per pound!)

In any case: I have bought a small plot at Raindown (137,57). My intention there is to make an actual Adult Library; things which actual adults might be interested in, as opposed to the ridiculous fantasies of adolescents pretending to be older than they are, or older folk pretending to be younger than they are.

I would welcome suggestions as to the sort of Adult Content which might be included here. Mortgages? The obtaining of a Pension? How to deal with a particularly persistent Paramour whom one half-desires and is likely to be weak towards, yet whose actions are clearly harmful? (Cease all communication no matter of what sort!) And so on.

A script in haiku

which, itself, says a haiku.

For no easily identifiable reason.

[geshifilter-code]// LSL Haiku, first attempt // Ordinal Malaprop // Sat Aug 22 15:20:04 BST 2009 // RULES: // Each function must be a haiku including the declaration, // though only identifiable words and numbers need be included, not // punctuation. // Events must contain a haiku i.e. be three lines, 5/7/5. // "0" can be pronounced zero or "oh" to make things slightly easier. string say(string toSay) { llSay(0, toSay); return toSay + " said."; } string theFirstLinePlease() { string firstLine = "This is the first"; return firstLine + " line."; } string theSecondLine() { string lineTwo = "the second line."; return "This, " + lineTwo; } string andTheThirdLine() { string thirdLine = "it really the"; return thirdLine + " last?"; } default { state_entry() { say(theFirstLinePlease()); say(theSecondLine() + " Or is,"); say(andTheThirdLine()); } }[/geshifilter-code]

Slight Return; thoughts on a Lightweight Interface to Drupal

I wrote previously that I had done some reasonably considerable work integrating Drupal with Second Life, which of course means integrating the Drupal System with the Linden Scripting Language.

LSL has the llHTTPRequest function, of course, by which one can send information to Drupal (or indeed any other system on the Wider Aethernet). The main issues that I have encountered, though, are:

  • The sum of data to be sent and received. A typical Drupal page is really quite enormous and unsuitable for the standard LSL limit of 4096 characters. Furthermore, many existing interfaces to web services, involving the XML or JSON formats, are unsuitable for use with LSL, which really takes an age to do any sort of String Processing. Both request and response need to be of very short formats.

  • The problem of authenticating who, indeed, the person sending the request is. Sending the registered Drupal username and password hash is quite a simple thing to do, but in most cases, this is unsuitable for use with LSL. People do not wish to have to enter usernames and passwords into scripts or notecards unless they absolutely cannot help it.

    In the past, with Rezzable's "Avatar Linking" system, I solved this by giving the resident concerned the ability to create a Drupal user account for themselves if they did not already have one, automatically from the grid, with the entry of a few details such as their Email Address; the name and key of the resident was passed along with this, and stored in Drupal. Other Scripted Gadgets which they might use in future then authenticate themselves with some sort of Master Password, and pass the key of the operating avatar along with other data. The Drupal system looks the appropriate user account up by matching the key to stored and confirmed ones, and carries out operations for that user - for instance, leaving comments on the node for a particular Artwork.

Both of these are common issues across all sorts of Systems for which one would wish to use Drupal, and it occurs to me that a Common Framework would be useful in this instance. I am moved to create such a framework for my personal and professional use, and also the use of anyone else who might be interested.

The most important features of this framework (which I have been calling "Slight" - SecondLife Lightweight) as I seem them are

  1. that it can receive data easily, pass them on to other modules for use, receive responses from those modules, and return the responses to an LSL script in a format that can be quickly processed and understood;

  2. that it has the ability to authenticate users and pass the details of the authenticated user on to sundry other Drupal systems. This authentication could be performed by the main module itself as well as other, optional ones which folk might choose to write.

Those familiar with the Drupal Beast will be aware of the concept of a "hook". Invoking a hook allows other modules which are aware of it to perform actions on data passed along with that hook. I am thinking along the lines of having two hook invocations here - firstly, one for authentication, which passes along the data sent and allows other modules to modify a user object. Then, one for the action to be performed, which allows modules to perform actions on the basis of those data and the authenticated user, and add responses, which will be passed back to the LSL script to be delivered to the resident.

Perhaps an example might be of use here. Say one wishes to have a system which allows the creation of "blog" entries via LSL. The LSL script would take the key of the avatar (this is unforgeable) and combine it with a hardcoded password to produce a hash. It would send this to the Slight interface - which possesses a specific URL, say http://ordinalmalaprop.com/engine/interface/slight/ - along with the avatar's key in plain text, and the actual text of the blog entry. Our Drupal administrator here has three relevant modules installed - the Slight framework module, a Slight Second Life authentication module, and a Slight blog entry module.

Slight would initially believe this entry to be unauthenticated, as there would be no information as to the Drupal username and password. It would, however, invoke a hook for authentication with a missing user object, giving other modules the opportunity to authenticate whoever it was. "Aha!" the Slight Second Life authentication module says, "this person has sent a hash of key and master password which I recognise - I will modify the user object to correspond to the user whose avatar has this key". And it proceeds to do so.

Upon receiving the results of the invocation of the authentication hook, Slight then sends out another, "action" hook, with the user object that has resulted from the authentication process. The Slight blog entry module at this point says "aha! I see that there is an authenticated user here" (this user having been provided by the Slight Second Life authentication module) "and that the command is to add a blog entry. I will do such a thing, and, if it works, send them back a message saying that it has been posted, and giving them the URL of the new entry".

Slight takes the results of what has happened after the action hook invocation, and passes anything appropriate back to the requester. This might be highly technical data for use by a script, or it might (in this case) be a simple message to be sent to the owner via llOwnerSay or some such. Whatever it is, it sends it back. The LSL blogging widget script takes this response and, here, sends the confirmation to the resident, who no doubt proceeds directly to the page concerned to see which words they have misspelled.

This sounds like a rather involved process but in practice, the time required would be tiny fractions of a second for all.

As a note, Slight would not be simply of use for Second Life. Since it would be simply receiving GET parameters and sending a plain text response, it could be used by any system.

One significant use that I believe would be very handy is for use in Opensim, which currently (as far as I am aware) has no particular permission system set up. Upon login, the Opensim server itself could request the current role of an account linked to an avatar from a Drupal system, for use in determining whether that avatar could enter parcels or regions or change settings or whatnot. Changing an avatar's access would then be as simple as ticking a few boxes in a form that was produced by the appropriate module. This is in fact something which I hope to implement in practice, and as soon as such as thing is ready, I shall mention it on the appropriate site. (To be fair, if I have been working on things in Company Time, details of them really should appear on Company Blogs, though Slight as I envisage it will certainly be open source and so on.)

I would be interested to read any Comments or Criticisms that anyone might have regarding this Proposed Framework, so please, if you have any, by all means leave them here. I shall post here once I have the actual Code for the system in any Working State, which should not take very long to do.

Secure Inworld Password Nonsense

One matter upon which I have been thinking recently is the matter of Authentication between Objects within Second Life.

For many systems it is necessary for them to be able to communicate with each other only if they share a common secret - a "password" is an example, and one used here.

A new Forum; an old Complaint

stippled_script2.jpgWhilst somewhat re-enabled in Aethernet terms, I am still unable to enter the Grid itself, and have been attempting to ameliorate the symptoms of my withdrawal with such things as the Scripting Section of the Official Forums.

To tell the truth I have been there infrequently of late. Previously I would spend many hours bickering over semicolons, but I have found it drawing me less and less in recent months until I barely ever participate unless at an extremely loose end. I am not entirely sure what caused this change; perhaps it was the closure of many parts of it and the enforcement of apparently somewhat arbitary conditions, making the place far less welcoming as a whole, or perhaps there was some Social Shift, with either the tenor of new participants changing or the departure of those I previously enjoyed engaging with. Or, perhaps, it is entirely down to a change in my own character.

“Frustration” by Sally Dunham
“Frustration” by Sally Dunham

One thing that most definitely has put me off ever returning, or at least offering actual Script-Code Solutions, is the current impossibility of posting up any sort of Code in any sort of Legible Form. I fear that I became infuriated by this and vowed never to return, or at least never to attempt to put up examples again. This is yet another manifestation of the dread [#WEB-156] BBCode not working on official SL Forums, one the annoyance of which I had not fully appreciated (and believe me, I have been incredibly annoyed by it already). This one thing now makes the huge Scripting Library unreadable and greatly discourages any further contributions, as well as vastly increasing the effort required to actually help anyone with their own problems or post solutions. Short queries and functions and theoretical discussions are bearable, but the prospect of struggling through some poor novice's hundred lines of unformatted code in order to chase down curly brackets is enough to make one simply not bother.


It all infuriates me even more as there are dozens of people eager to help with this, perhaps the most opaque skill within Second Life for a beginner or Non-Technical Sort to deal with, yet they face obstacles which even have the effect of making previous stored advice less valuable. A grid full of professional Old Resident engineers, lonely newer auto-didacts and terrible ancient scripts handed down from generation to generation due to the lack of anything more recent and efficient is not the sort of vision I have ever had, and discussion and mutual education at least goes some way to preventing this dystopia and helping the broadest group and greatest number of people. Even if one has no intention of dirtying one's hands with any sort of Coding, one may still benefit from proper samples to be cut and pasted directly into an In-World Device.

As a small sticking-plaster I have now set up my own Scripting Colloquium, where one might post Code in a manner which can actually be Read (as well as Images and Links and Things In Italics and So On). These things rarely survive for more than a few weeks, and it may die an undignified death, but I would encourage anyone with scripts and questions about scripts who is put off discussion within the Official Forums by this or other matters to visit and participate. At the least it may build up some useable examples.

Wings, Part The First

I have received some very kind compliments regarding the Mechanical Dragonfly Wings that I have been seen to wear in recent days.

Automated Photography

Whilst I am waiting for the latest working version of the econd Life Client Thing to squeeze itself through the Aethernetical Pipes and plop onto my desk, I suppose that I might as well write a little about my experiments with automated photography, mentioned previously.

It has been said by myself (and, to be fair, others) many times that there is no way for a Script to take a Picture, and this is, speaking strictly literally, true. Scripts cannot take Photographs.

Scatterbrained Once Again

A perpetual problem of mine is that I am unable to concentrate on one thing for more than about, oh, an afternoon, leading to the unfortunate situation where possible projects and Matters Upon Which To Write flare brightly and then burn out within moments, like phosphorus sparrows. No sooner do I plan to write a Definitive Article upon some subject, which must be Gotten Right, than some new shiny object appears and drives the original one completely away from my attention.

The result of this is that I am rather poor at actually writing anything, as perfectionism restrains me from making an entry on something incomplete, yet I do not have the urge to complete it, and it is only when I reach a level of self-disgust at this that I throw out whatever peculiar half-finished objects that remain in my mind into this Journal, often in the form of Bullet Points. I believe that it was easier in my earlier days, when I was rarely thinking about more than three things at one time.

Enough of this preambling though; I will do my best to clear the decks. The subject of this entry is something that I call the Twitterbomb, though really it isn't much of a bomb, unless one considers very slow-moving fragments that are in any case phantom to be dangerous. This was actually mentioned previously by Nick Wilson writing in Metaversed as he is a proper journalist who investigates things and writes about them, whereas I am no such thing and do not even have a picture of my own creation at the time of writing.

The Twitterbomb, as Mr Wilson says and as I mention in the comment section there, is a device for the Visualisation of timed and differently-authored data; the Twitter friends timeline is the easiest to work with, as it collects data into a single feed, but I suppose RSS feeds and such could be used. There is a central "bomb", which reads in Twitter data via a proxy (a stripped-down version of the Twitterbox one) throws out differently-coloured "fragments" - the angle of movement and colour of these fragments is individual to each different author, thus each person's output is represented by a line of tweets stretching out from the centre. Each fragment's size is proportional to the number of letters in the tweet.

The fragments move outwards at a constant speed, with their distance from the bomb being a function of their age. There is a configurable maximum age, with fragments disappearing once they reach this. (Once rezzed, the fragments are independent, and with a busy friends timeline this could result in an awful lot of prims being around, thus best to use this in a fairly empty lot.)

I confess to not having a specific target to achieve here, but it is a toy that enables one to play with the possibilities of visualising data in Three Dimensional Form. One can look at the fragments produced and see, say, how active an individual is and their "rhythm" by observing the "clumping" and size of clumps produced; a wordy but regular poster will have fat fragments evenly spaced, someone who posts in bursts of short pieces will have thin lines separated by empty space and so on. A particularly significant event for one's friends will be marked by a "shell" of tweets all appearing at the same time and expanding outwards. Changes could certainly be made to the way the fragments are emitted to test different concepts of visualisation.

I say all this, but actually, in practice I have Given Up on the Twitterbomb for the moment - which is likely to mean forever - since Twitter has taken to caching my requests and not giving me recent updates reliably at all. This is odd, since the Twitterbox seems to be working perfectly well, or at least is when both Twitter and SL are working at the same time (a combination of reliabilities that one is not advised to bet one's life or significant bodily organs upon). With this in mind, once I am able to return to the world I shall be sure to post the relevant Code here.

Well, that is over with in any case. Next, something else, I believe.

Experiments with Sculpted Primmery

This afternoon I decided to experiment with the "Wings3D" program in order to at least make some slight stab towards creating a Sculpted Prim.

Syndicate content