LOLCats From Your Phone To RSS – The LOL-* Specification From ThumbWhere.com

LOL-* (Pronounced “LOL STAR”)  is a simple and compact markup language for creating image macros on your mobile phone via MMS.

An implementation of this language has been included as part of the http://rss.test.thumbwhere.com MMS to RSS gateway.

When you submit an MMS message from a mobile phone you typically send one media element with a subject. A server capable of rendering LOL-* is able to extract the LOL-* markup and render one or more captions or annotations onto the encapsulated media.

Caption Your MMS Submissions

Any text you put at the start of the subject in square brackets.

[Like This]

will be turned into a caption.

wallpaper 

The remainder of the subject will be left as is, so if you send

[Fear Me Human]Why is my kitty growling?

It will caption the image with “Fear Me Human” and the subject will be “Why is my kitty growling?”

 

Why is my kitty growling?

wallpaper,Why is my kitty growling?

 

A Caption can be positioned in three rows on your photo, [Top/Middle/Bottom]. The / character is used to switch to the next row.

A more complicated example is

[I/love/these things]Tribbles taste like chicken.

which will caption the image on three lines “I” will be at the top, “Love” will be in the middle and “These Things” will be at the bottom. The Subject of the message will be “Tribbles taste like chicken!”

Tribbles taste like chicken.

 

You can of course leave the first two rows blank if you want your caption at the bottom as in this next example,

[//I Is Raptor U Fool!!]Why does my Kitty Have Glowing Eyes?

…which will caption the image at the bottom with “I Is Raptor You Fool!”. The Subject of the message will be “Why does my Kitty Have Glowing Eyes?”

Why does my Kitty Have Glowing Eyes?

Putting a < or > in your caption will align the text to the left or the right so…

[<Oh hai, can I Ha..//>WTF!!]

…will put a caption at the top, left justified and at the bottom right justified.

wallpaper 

All captions are automatically capitalised, they just seem to look better that way.

If characters are already capitalised, they will remain capitalised. Note the WTF!! in the previous example was not converted to Wtf!!

Here is another example.

[//O RLY?]

wallpaper 

You don’t have to end your caption instruction with a ] if you are not going put some text after it, such that …

[nom nom nom

…will still work as a top caption even though the caption command is missing its final ]

wallpaper 

As part of an MMS message standard you are also allowed to send one or more large blocks of text, which ThumbWhere treats as the message body.

If you send a video, the caption will be rendered over the top of the thumbnail and the video will remain unaltered.

If you run out of room in the Subject, keep the Subject blank and use the message body. If the Subject is blank, the Body will be treated as the subject and image commands such as caption and rotation will come from the body.

Image Rotation. Not all phones have sensors to detect if you are taking an image on its side, so you may need to rotate the image from your phone for it to make sense.

Luckily you can do this as part of LOL-*

Rotate Your MMS Submissions

You can add special commands to the start of the subject to rotate your photos. This is useful if your phone’s camera functions don’t automatically rotate an image before sending it via MMS

< Will rotate the photo left (anti-clockwise)

> Will rotate the photo right (clockwise)

So if you sent in the following subject

>I Love My Kitty!

Your picture will be rotated to the right and given the subject of “I Love My Kitty.”

You can rotate your image before applying a caption such that if you sent in the following subject

>[Distinctly Told//Not To Mow During The Day]Australia - Its Hot

Your picture will be rotated to the right and given the subject of “Australia – Its Hot”, a top caption of “Distinctly Told” and a bottom caption of “Not To Mow During The Day”

Australia – Its Hot

LOL-* is being constantly extended. I will post updates.

If you think these instruction can be made better – please send me an email.

Posted in LOL-STAR, Mobile Phones, ThumbWhere.com | 2 Comments

uT.ag Launches At StartupCamp – Automatically Add Contextual Advertising To Outbound Links In Your Blog

David Vandenberg (One of my co-workers at Massive) attended StartupCamp  this weekend and in 24 hours created uT.ag (here is the elevator pitch video) which allows you to create a compressed url like http://tinyurl.com/ and http://is.gd/ but goes one step further and loads the site in a <iframe> with Google ads at the top.

image

uTag allows you to generate these urls one at a time AND you can insert some JavaScript into your website which rewrites all the external urls to go via their <iframe> host page. The end result is that all links out from your site end up showing ads at the top, and uTag send you the money.

And yes, if you have clicked on a link in my blog by now you will see that I have added it to my site.

http://ut.ag is one of those clever, simple ideas that could just work, or it could start a war, maybe both.

I can’t see how it violates the Google Adsense TOS unless they argue that it interferes with Navigation, or they stretch the interpretation of  “No Google ad may be placed on pages published specifically for the purpose of showing ads, whether or not the page content is relevant.”

Its  going to be up to the web community to decide wether or not this form of advertising is viable.

The cure is to add a single line of framebusting JavaScript to your site.

<script type="text/javascript">
   if(top.location != location) {top.location.href = document.location.href;}
</script>

But would they counter with the anti-framebusting hack for Opera And IE? Are we at the dawn of a JavaScript driven adverting arms race? Will Google’s new partial JavaScript execution its webcrawler be used to counter this by affecting the page-rank of the source pages?

I’m also curious to know what will happen to blog trackbacks.

I can see how people running ads in their sites (like me) may feel that this dilutes their own advertising’s attention share on the target page.

I can also see how it shares some of the advertising revenue around and rewards sites that direct people toward relevant information.

Is this an acceptable way for content owners to extract revenue from traffic out of their site?

In the case of blogs, if the revenue could be split between the source and destination sites could this be a basis for some kind of treaty?

If they checked for ads on the target site and left sites with ads untreated, would that make it more acceptable?

Check out the Utag blog http://ut.ag/Blog/ and the StartupCamp live stream from uStream. At the time of writing this they had all gone to bed, but should be up again in 10 hours or so 🙂

Posted in Axonomics, Web2.0 | Leave a comment

Bug In Chrome In Gmail

Times seem to ahead by an hour. Suspect some kind of JavaScript bug.

GMail far RHS column in IE7

image

GMail far RHS column in Chrome.

image

Posted in Browsers, Chrome, Whining | Leave a comment

Chome Market Share – The Economics Of Supporting A New Browser

I’ve been tracking Google Chrome’s market share. This is important because as web developers we get clients wanting to support the top ranked browsers. Normally clients want just IE, FF and Safari supported  Sometimes this includes list Opera.

At its peak Google Chrome was a fraction over 3%

clip_image002

In the last 12 hours its dropped down to just under 2.5%

image

http://getclicky.com/global-marketshare-statistics

So obviously of people who have tried GC, some have stuck with it and others have abandoned it.

I’m expecting his downward trend to cease and see some bounce as the GC as primary browser uptake slowly crawls upward.  I’m using GC as my primary browser and I know a few others who are was well. I’ve always used IE as my primary and FF as my dev browser. GC has managed to move me.

The big question that Web Developers want answered is, “Is this going to mean more effort to support the most popular web browsers?”. If after the bounce back GC was to overtake Opera, that’s kind of interesting because it could mean that Opera is not the 4th browser. As GC is based on WebKit, this means our job may be a little easier as HTML/CSS for Safari should work for GC so the incremental effort required to support that 4th browser gets buffered by its similarity with Safari.

Wether or not GC ends up above or below Safari in the rankings is probably not a great technical concern, assuming that there is not a huge difference between their CSS and JavaScript behaviors. I’m very happy that even such fiendishly devious JavaScript as my JavaScript Macro Recorder works under GC – so I’m hoping the JavaScript quirks are going to be minimal.

I’ll be keeping an eye on these rankings over the next few weeks – its an interesting race.

I’m predicting that Chrome will take a large bite out of Safari after the OSX version is released, assuming that it performs faster and renders better than Safari. The FF users will much harder to move. FF users will stick to FF because of the plug-ins that they can not live without. Eg. Dev tools such as firebug and ad blockers.

Interesting times.

 

Update – 8 hours later…

image

24 Hours later..

image

Posted in Browsers, Massive | Leave a comment

Google Chrome – I Loves It

I Like it. Its fast. The tab page is genius. Its my default browser for everything bar web development. Webkit developers console is outclassed by FireBug on FireFox.

Flash works. Flash player install required a few goes.

Java Works.. but need latest Java 6 Update 10 plugin http://java.sun.com/developer/technicalArticles/javase/java6u10/

My JavaScript library works with no modification required. So happy I could cry.

Silverlight does not work. Hope this is resolved soon.

Sadly my Blog editor does not work so this post will be short. Using LiveWriter mostly now anyway, but its not installed on this machine 🙂

Some interesting points from PPK http://www.quirksmode.org/blog/archives/2008/09/google_chrome.html

Posted in Browsers, Flash, JavaScript, Silverlight | 2 Comments

Windows TimeZone Converter

I’m thinking of making some updates to my Timezone Converter Utility.

I’ve had some great feedback from people using the GPS AJAX/Google Maps/Google Earth/ActiveX integration. I seem to have a lot of users in the merchant navy and people who need to know if its an appropriate time to phone someone overseas

Some new politically induced changes in timezones means I’ve now got a critical mass of adjustments to get published. I’m considering digging up my old distributed memory project to use as a dynamic timezone database in the future.

If you want to suggest a change, feature or fix, now is the time to do it.

image

Posted in TimeConverter | 6 Comments

www.cuil.com – Finally, Decent UX Applied to Search

I’ve not been so impressed by a search engine since Google hit the waves.

image

http://www.cuil.com

image

What is particularly impressive is the usability. And the category explorer that so far seems to be mostly spot on and very useful. I find myself going to it more than the search results, it doubles as a kind of mimetic thesaurus.

image

image

I have seen it get confused.

image

image

It does seem to be suffering from its sudden popularity.

image

I agree with almost all the criticism of it, especially the lack or low ranking of Wikipedia entries.

 

http://blogs.siliconvalley.com/gmsv/2008/07/size-may-matter-but-theres-more-than-that-to-achieving-satisfaction.html

http://www.readwriteweb.com/archives/cuil_good_but_not_good_enough.php

http://www.makeyougohmm.com/20080728/5239/

http://searchengineland.com/080728-000100.php

Despite its nice UI/UX, in the end, the true user experience depends on its usefulness. Does it function as a good search engine?…. and to that my answer is an emphatic ‘almost’.

I’m not going to switch from Google but its the best usurper I’ve seen yet.

*Update*

Ive started using Cuil as a research tool, not for its search results, but for the “Explore By Category” box.  When its correct, its associations are educational. Almost a Wikipedia entry generator.

Mostly its correct or humorous, sometimes both. eg. Mark Pesce is listed under “Psychedelic Advocates And Proponents” and “Psychedelic Researchers” the rest are spot on.

Posted in Search | 1 Comment

JavaScript Finite State Machine/Theorem Prover

I started writing this two years ago and never really got around to blogging about it. In a nutshell this is a module that runs within the MetaWrap JavaScript library that allows you to define a finite state machine in XML. The finite state machine can call out to JavaScript to check values and notify the application of state transitions.

This development is a follow on from my previous research into Parsing Theory and part of an ongoing interest in streamlining web development. I’ve recently started using the state machine for its intended purpose so after 18 months I’ve finally decided to dust it off and blog it 🙂

My thesis is, in a nutshell that as developers we often end up dealing with complex logical situations in a user interface that are best explained by this sketch from Monty Python’s The Meaning Of Life.

MR HUMPHREY: I begin the lesson, will those of you who are playing in the match this afternoon move your clothes down onto the lower peg immediately after lunch, before you write your letter home, if you’re not getting your hair cut, unless you’ve got a younger brother who is going out this weekend as the guest of another boy, in which case, collect his note before lunch, put it in your letter after you’ve had your hair cut, and make sure he moves your clothes down onto the lower peg for you. Now,–
WYMER: Sir?
MR HUMPHREY: Yes, Wymer?
WYMER: My younger brother’s going out with Dibble this weekend, sir, but I’m not having my hair cut today, sir. So, do I move my clothes down, or–
MR HUMPHREY: I do wish you’d listen, Wymer. It’s perfectly simple. If you’re not getting your hair cut, you don’t have to move your brother’s clothes down to the lower peg. You simply collect his note before lunch, after you’ve done your scripture prep, when you’ve written your letter home, before rest, move your own clothes onto the lower peg, greet the visitors, and report to Mr. Viney that you’ve had your chit signed.

Now, like me your probably written an application with a user interface that ends up with complex logic all over the place and a single change results in unpredictably strange consequences. As you make changes to this the code complexity grows. As developers, the best we have been able to come up with is MVC, which puts all that logic is all in the controller, however this is distributed throughout the code of the controller and there is no guarantee that you won’t end up dabbling in the Kafkaesque.

 

 

 

Ideally I want some way of

  1. Describing a set of integrated rules in one location in a domain specific language.
  2. Decoupling this description as much as possible from the the Views.
  3. Allows those rules to be provable and enforced via contracts.
  4. Allow the system to be intelligent enough that it exhibits emergent behavior via its logical roots, this emergent behavior can then be leaned upon and provide complex yet intuitive behaviors to users for free.

My aim was to break the controller up into a state machine based rules system and a layer that could mediate between the state and view.  The states could be mathematically provable with contracts ensuring that no illegal state combination could be entered.  Combining this with a direct mapping layer between states and views, could result in a lot of code being abstracted away into the state machine and result in a more compact code-base.

 

JS_StateMachine_MVC_Comparison_3

A state machine interrogates a model via user defined JavaScript functions.The state view map defines what views and aspects of the view should be visible and triggers their display.

 

JavaScript Finite State-Machine

The state-machine is a formalised description of the possible states of a system. States are either ‘active’ or ‘inactive’.  The state-machine is multi-dimensional (states have sub-states) and multi-state (more than one state can active).

The state-machine description consists of an XML file that describes a list of states.

 

 

Each state has a collection of sub-states which can only be active if their parent is active.

image_51

Each state has…

A list of rules for validating states which allow for a degree of asserting contracts between states.

A state can ‘exclude’ another state. Which is a way of saying that if this state is active then the other state should be inactive. If not, a fault will be indicated by an exception.

A state can ‘include’ another state. Which is a way of saying that if this state is active then the other state should also be active. If not, a fault will be indicated by an exception.

A list of rules that describe how a state is affected by the activation of other states or the return from JavaScript calls.

A state can ‘require’ some conditions to be met that another state is active or that a JavaScript function returns true. Any sub-state automatically requires its parent state. If you find a state requires only one or more states to be active then it should probably be a child of one of those states.

image_50state can only be active if isInviteSent() returns true

image_49state wino2s (win by O on diagonal 2) is only true if states op13 op22 and op31 are active.

The reverse of ‘require’ is ‘unrequire’ such that the state will require a state to be inactive and expect called JavaScript functions to return false.

image_48If we are going to be in a draw state in tic tac toe, then we can't have anone winning

Can anyone think of an alternative to ‘require’ and ‘unrequire’. I’m seriously considering ‘canhas’ and ‘doesnotwant’ as they make as much sense as any other alternatives so far.

A list of rules that describe how a states can control that activation of other states.

A state can ‘negate’ a specified state in which case when the state becomes active it will try and make the specified state inactive.

A state can ‘affirm’ a specified state in which case when the state becomes active it will try and make the specified state active.

image_47

A list of triggers that are fired when the pattern of active states changes. The trigger is the call to a JavaScript function.

A trigger can fire when a states ‘enter’ (become active).

A trigger can fire when a states ‘exit’ (become inactive).

A trigger can fire when two specified states transitions ‘from’ or ‘to’ active/inactive between determining states.

image_46When we transition to 'off' from 'on' then call some javascript.

A state can have a lock which forces it into its current state until the state machine is reset.

image_45When an O is placed at position 1,2 - we ensure that X can't be placed there and that this state can't change by locking it.

The state machine has the following public accessible JavaScript functions

MetaWrap.State.testState(stateName) – Returns true if the named state is active

MetaWrap.State.negateState(stateName) – Tries to set the named state to inactive then determines the new state and fires transitions. Returns true if state is ‘inactive’

MetaWrap.State.affirmState(stateName) – Tries to set the named state to active then determines the new state and fires transitions. Returns true if state is ‘active’

MetaWrap.State.flipState(stateName) – Flips the named the named state from active to inactive or visa versa. Returns true if state is was flipped.

MetaWrap.State.determineState()  – Calculates the current state. Called after changes to the model are made that may require the state machine to re-evaluate.’

 

JavaScript State Machine Examples

  1. Toaster Example

NOTE – This won’t work in Safari or Opera.. yet. Neither of these browsers support client side XSLT. I’m working on a simple solution for this.

http://test.metawrap.com/javascript/tests/state/test_10_state.html

My first serious example was to model a simple toaster in a way that used most of the functionality of the state machine.

I wanted to model two classes of behavior.

The first are based on the explicit physical properties of the toaster (power on/off, bread in/out, lever up/down). I added the typical toaster behavior that you can’t push the lever down if the toaster is not on.

The second are based on the higher level states build up on the physical states, for instance if the power is on, the bread is in and the lever down, then the toast is cooking. I have also added the state where if you put the lever down after the toast has cooked, it will burn the toast.

image

 

image

image

  1. Tic Tac Toe Example

I think it was Lela who suggested that I try and model Tic Tac Toe. So I sat down and defined the finite state machine.

NOTE – This won’t work in Safari or Opera.. yet. Neither of these browsers support client side XSLT. I’m working on a simple solution for this.

http://test.metawrap.com/javascript/tests/state/test_13_state.html

image

One pleasant surprise is that formally describing the states as a whole makes you think about them as a….. whole 🙂 . And the formal description can make some things obvious. For example. In the way I modeled Tic Tac Toe, it could be X’s turn or O’s turn.

image

And I set it up for one to deny the other (note that x_turn defaults to true, so X goes first).  This means in the JavaScript my code is nice and simple.

image

Once the game is over, who’s turn is it? There is a fault in my current model that became obvious after examination. I thought I was being clever by inversely relating x_turn and o_turn because it gave me a way of tracking the turn inside of the state machine which would then flip the current state.

However at the end of the game when I want to make it nobody’s turn, if I negate x_turn, o_turn becomes true and then when I negate o_turn, x_turn becomes true. I solved the issue by locking the turns.

I’m probably going to modify lock so that you can specify a value to lock it on and get it to suspend all further affirmations and negations down the chain, but I need to work out what the implications for that could be.

image

image

State View Map

The state view map is a formalised description of mappings from a state to a view and a set of aspects of that view.

A state view map  description consists of a list of states and the pages and aspects that should be visible.

This will be the topic of my next post.

Posted in JavaScript, Web2.0 | 3 Comments

Silverlight/Office2007 Charity Thing…

Yes its advertising for Microsoft -but its for a good cause.

“Microsoft Australia are running an interesting campaign to demo MS Office 2007 and raise money for charity at the same time. The premise is fairly simple. Users head over to the campaign page (built with Silverlight) and watch a 30-second clip of 9-yr olds explaining MS Office 2007, and Microsoft donates one Aussie dollar to The Smith Family.”

http://www.microsoft.com.au/donatenow is the link

Posted in Downtime, Silverlight | Leave a comment

Twitter Up and Down Again

Looks like Twitter is going into the garage tonight.

image

Its coughing a bit of blood at the moment so that may be a good thing for all of us twitticts.

image

http://www.istwitterdown.com

image

http://www.twitter.com

Posted in Twitter, Web2.0 | 1 Comment