Sunday, November 29, 2009

Google Voice OMS Code on Github

I pushed the 子猫ちゃん Google Voice OMS service’s code to github, so you can now
download it – albeit, to make it work it’ll take a lot of hacking and a lot more editing.

Either
way, I’ve gotten no donations and no offers for free SSL hosting, so it looks like this project just will
not be seeing the light of day.  It’s a shame, I worked a long time to make it work, and it’s
obviously something a lot of business professionals would be able to find a use for.

Oh
well, you can find the project on github.


Remember to abide by the Usage License!

Thursday, November 26, 2009

Why I now Prefer JSON to RSS/XML

This might mainly be a “call-out” to Dave Winer, since he is continually
attempting to push RSS for all sorts of data that should be inherited around the web – although, he has
stated before that he likes JSON – I think – My memory is not so good, even my girlfriend has been
complaining about it.

Either way, I’m just going to take a small amount of time here to
list why I no longer like XML and RSS for portable data.

It’s too low-level.


XML and RSS are a markup language, of course.  It’s very low-level code, and is generally
a pain to parse in any language.  Which is why I prefer JSON.


It’s high-level code.

JSON is a very simple object – It’s basically an array of
data.  Here is some XML vs. JSON:

XML


style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt;
border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;
font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none;
color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">
<data            style="color: #0000ff">>




 <user id="876232">




 <name>User Name            style="color: #0000ff"></name            style="color: #0000ff">>




 <screenName>User            style="color: #0000ff"></screenName            style="color: #0000ff">>




 </user>




</data>




JSON



style="border-bottom: silver 1px solid; text-align: left; border-left: silver 1px solid; padding-bottom:
4px; line-height: 12pt; background-color: #f4f4f4; margin: 20px 0px 10px; padding-left: 4px; width: 97.5%;
padding-right: 4px; font-family: 'Courier New', courier, monospace; direction: ltr;
max-height: 200px; font-size: 8pt; overflow: auto; border-top: silver 1px solid; cursor: text; border-right:
silver 1px solid; padding-top: 4px" id="codeSnippetWrapper">
style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt;
border-right-style: none; background-color: #f4f4f4; padding-left: 0px; width: 100%; padding-right: 0px;
font-family: 'Courier New', courier, monospace; direction: ltr; border-top-style: none;
color: black; font-size: 8pt; border-left-style: none; overflow: visible; padding-top: 0px" id="codeSnippet">

"user":[            style="color: #006080">"id":876232,"name":            style="color: #006080">"User Name","screenName":            style="color: #006080">"User"]






Even
though you can get similar results by making id its own tag in the XML, its still difficult to parse. 
Where as with JSON, the data is already formatted and easily accessible.  Especially in my favorite
language, PHP.



id="codeSnippetWrapper">

// For Json




 $json = json_decode($data,TRUE); // Decodes JSON
and makes it a true array



style="border-bottom-style: none; text-align: left; padding-bottom: 0px; line-height: 12pt;
border-right-style: none; background-color: white; margin: 0em; padding-left: 0px; width: 100%;
padding-right: 0px; font-family: 'Courier New', courier, monospace; direction: ltr;
border-top-style: none; color: black; font-size: 8pt; border-left-style: none; overflow: visible;
padding-top: 0px"> $id = $json["user"][ style="color: #006080">"id"];



 $name = $json["user"][            style="color: #006080">"name"];




// For XML




 $xml = new SimpleXML($data);




 $id = $xml->user["id"];




 $name = $xml->user->name;






The
two are very close, but in the end JSON is more simplistic – because its such a high-level language.

Wednesday, November 25, 2009

Google Voice in Outlook

EDIT: I managed to bring this into being thanks to other
people generously letting it run on their servers (though unfortunately I can't vouch for the security).
 You can check it out at http://www.gvoms.com.
Additionally,
I've also made the source code available over at https://github.com/navarr/Google-Voice-OMS

If
you’re a regular reader to my blog, I’m sure you read yesterday’s post about how href="http://tech.gtaero.net/2009/11/how-google-voice-could-gain-a-head-in-the-business-world.html">Google
Voice could gain a head in the business world.  At that time, my dream of connecting Google Voice
and Outlook via OMS was far from completion, with the only work I’d managed to accomplish being a simple
reading over of the related technologies.

Well, late last night a certain gear clicked
in my brain, and I spent the entire night awake and coding PHP on a local XAMPP server.  But my end result
was fruitful – I finished successfully coding an Outlook Mobile Service that allows the delivery of SMS
through the Google Voice system.

Here is a video showing it off:
id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:cf70ab77-6981-4b19-baee-c2c8a1936a1e"
class="wlWriterEditableSmartContent" style="width: 480px; display: block; float: none; margin-left: auto;
margin-right: auto; padding: 0px;">
classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"> name="allowFullScreen" value="true" /> name="src" value="http://www.youtube-nocookie.com/v/Oa_U-KZyhHI&hl=en_US&fs=1&rel=0&hd=1"
/> type="application/x-shockwave-flash" src="http://www.youtube-nocookie.com/v/Oa_U-KZyhHI&hl=en_US&fs=1&rel=0&hd=1"
allowFullScreen="true" allowscriptaccess="always" allowfullscreen="true" />


I’m
not yet prepared to release the source code for this, though.  (Messy, Messy, Mess! as Double D would say). 
There’s a lot in my mind about it, it took a lot of work and I’m not ready to see forks and duplicate
services pop up.  (Sorry guys =S).  Be on the look out for follow up posts that describe some of the
technologies I had to learn to make this possible.

Oh, also – If you’d like; Help
sponsor this project (I can’t afford to make it public ATM) with either Free (VERIFIED) SSL Hosting for a
subdomain of a domain I own [contact me], or the
money to make it public using my current host ($62.40/yr) [ href="http://www.dreamhost.com/donate.cgi?id=12437">donate through my host].  I would be most
appreciative if you could offer either of these to get this thing up and running!

Tuesday, November 24, 2009

How Google Voice Could Gain a Head in the Business World

Google Voice, albeit still in Beta, is a very popular Google application for creating a
single phone number to manage all your phones, with texting, and times to ring and not ring them.  It’s very
powerful.

One of the nicest additions is the ability to read and reply to SMS on your
computer.  I, personally, find this one of Google Voice’s best features.  Even if you don’t have a Cell
Phone – you can sign up for Google Voice and now you have free texting.  What could be better?

Well,
I can think of one thing – Connecting it with Outlook

href="http://tech.gtaero.net/wp-content/uploads/2009/11/UntitledTextMessage.png"> style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width:
0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Text Messaging in Outlook 2010"
src="http://tech.gtaero.net/wp-content/uploads/2009/11/UntitledTextMessage_thumb.png" border="0" alt="Text
Messaging in Outlook 2010" width="640" height="332" />

Outlook has, in the
last few versions, supported adding a SMS Bridge using whatever protocol it is they use in addition to a
MAPI store.  It wouldn’t be very hard for Google Voice to tap into this, and provide free text messages for
all Outlook Users – It would even gain a competitive edge over other service providers, in that your text
messages from outlook would come from your actual phone number, and replies to them would be sent to your
computer and your phones.

href="http://tech.gtaero.net/wp-content/uploads/2009/11/OutlookMobileServiceAccount.png"> style="border-right-width: 0px; display: block; float: none; border-top-width: 0px; border-bottom-width:
0px; margin-left: auto; border-left-width: 0px; margin-right: auto" title="Outlook Mobile Service Account"
src="http://tech.gtaero.net/wp-content/uploads/2009/11/OutlookMobileServiceAccount_thumb.png" border="0"
alt="Outlook Mobile Service Account" width="640" height="464" />

Now, I
was going to be mean and keep this idea all to myself – but not only do I NOT
have hosting with SSL (I can’t afford it~) but I don’t know anything about the various protocols I would
need to know in order to make this work.

So Google, don’t you think it’s time to take
the Business World by storm with your revolutionary phone service?

(PS: I would also
like MMS.  Even the iPhone got it before you did, and that’s sad.)

Sunday, November 22, 2009

simpleTAPI v0.2.1 – Build 16 (Twitter API Library)

I’ve renamed the Twitter API Library to “simpleTAPI.”  Yes, I’m not
very good at names when it comes to this sort of thing.  We’ve jumped forward two builds since my
last post here.

Build 15

  • The
    addition of a quick variable, bool Twitter::geo_enabled.
    Returns TRUE if
    the user has turned on geo functionality, FALSE if not.

Version
0.2.1

  • Re-Organized classes.  Separated TwitterOAuth
    and OAuth into separate files, and moved them along with Twitter into a “twitter” folder.  All
    classes can be loaded simply by including Twitter.lib.php.

Build 16

  • Fixed a minor inconsistency in
    TWML where different functions returned different links to a twitter user’s profile.
  • Fixed
    a bug where specifying screennameonly=TRUE for TWML::name resulted in an empty hyperlink.

Examples

  • Started work on Example files
    to teach how to use simpleTAPI.  Currently, the only one included is a basic Update script. 
    This file includes logging in, updating a status, and returning the same status as well as some basic TWML
    examples.

So, enjoy!  I will continue to improve this library. 
Please remember to post all issues and feature requests either on this blog or the href="http://github.com/navarr/simpleTAPI">github page.

Thursday, November 19, 2009

Twitter API Library Build 13 (Breaking Change)

I pushed href="http://github.com/navarr/PHP-Twitter-API-Library/commit/f27608a709ac04676df68a3689845c72eb4755cf">Build
13 today.  This build adds the recent addition of descriptions to a user’s list.


This change breaks:

  • TwitterAPI::lists_create
    and
  • TwitterAPI::lists_update

The new profiles for these commands are as follows:

TwitterAPI::lists_create(
str $name [, str $description = NULL [, bool
$privacy = TWITTER_PRIVACY_PUBLIC ] ] )

TwitterAPI::lists_update(
str $name [, str $new_name = NULL [, str
$description = NULL [, bool $privacy = NULL ] ] ]
)

Tuesday, November 17, 2009

Twitter API Library Build 12

If you’ve been watching this blog, you’ll notice I skipped Build 11 – It was
small, and was trumped by its quick replacement – Build 12.  Builds 11 and 12 fixed five previous
known issues, while build 12 fixed a non-issue with build 11.  Fixes listed below:


  • The following now work with all users:
    • Twitter::get_sn_from_id()

    • Twitter::get_name_from_id()
    • Twitter::get_id_from_sn()
    • TWML::name()
    • TWML::profile_pic()
  • Addition of User
    Cache commands for use by TWML and the get_x_from_y() commands.

As always,
the most recent build is available at github.

Twitter API Library Version 0.2 Build 10

I pushed Version 2 Build 10 of the Twitter API Library to href="http://github.com/navarr/PHP-Twitter-API-Library">github.  This new version
still does not fix any of the previous errors, so the changelog is quite minor.

  • Updated
    to TwitterOAuth v0.2-beta
    • "fixes
      several bugs"
    • Support for OAuth 1.0a
  • Added
    a boolean return to require_login().

Monday, November 16, 2009

Twitter API Library Build 9

I’ve pushed Build 9 of the Twitter API Library to href="http://github.com/navarr/PHP-Twitter-API-Library">github today.  Interesting
thing, it adds a few missing API features but does not yet fix any of the previous problems.

New
features are all Authenticated API Calls:

  • search
  • trends

  • trends_current
  • trends_daily
  • trends_weekly

  • users_search
  • trends_available
  • trends_location

Yes, that means that we’ve added support for the following portions of the twitter api:


  • Search
  • Trends
  • User Search
  • Local
    Trends

Enjoy, and as always please report any and all errors you get.

Help Make Facebook Better For Him

I saw this pop up on my Facebook homepage and couldn’t help but laugh. 
This is definitely one of the funniest things I’ve ever seen.

href="http://tech.gtaero.net/wp-content/uploads/2009/11/image2.png">Help make Facebook better for Tom Anderson src="http://tech.gtaero.net/wp-content/uploads/2009/11/image_thumb2.png" width="269" height="424" />

Friday, November 13, 2009

Twitter API Library 0.2 in Near Future

Some of the current issues with the Twitter API Library seem to be with the
Twitter OAuth library we’re using courtesy of Abraham Williams
I looked into simply updating the code to the newer version of TwitterOAuth, but it seems that are multiple
incompatibilities that prevent us from doing so, requiring a rewrite of some of the automated authentication
code.  As much of a bad thing that this is, it is a good thing as well, and hopefully the newer
version of our library will add some much desired features.

Until then, v0.1 will still
work for most things.

Monday, November 9, 2009

Twitter API Library – Build 8

I’d like to introduce Build 8 to the masses.  Sorry for the long
delay in posting, but I was working on a new Twitter Client, href="http://twcli.koneko-chan.net/" rel="me">TwCLI (which uses the Twitter API Library and is
Open Source).

Build 8 contains unsupported support for
Twitter Lists.  Basically, we have built Twitter lists into the library, but a large number of
functions are not working for what seems to be an incompatibility between our OAuth Libraries and Twitter.


Change Log:

  • Added array
    api->lists_update( string $old_name, string
    $new_name = null, string $privacy = null) [Working]

  • Added array api->lists_get( string
    $screen_name = null, int $cursor = null)
    $screen_name defaults to the
    logged in user if set as null. [Working]
  • Added array
    api->lists_display( string $screen_name, string
    $list_slug) [Unverified]
  • Added array
    api->lists_statuses( string $screen_name, string
    $list_slug, int $since_id = null, int $max_id = null, int
    $count = null, int $page = null) [Working]
  • Added
    array api->lists_memberships( string
    $screen_name, string $list_slug, int $cursor = null) [Unverified]

  • Added array api->lists_subscriptions(
    string $screen_name = null )
    $screen_name defaults to the logged in user if
    set as null. [Unverified]
  • Added array
    api->lists_destroy( string $list_slug ) [Not
    Working
    ]
  • Added array api->list_members(
    string $screen_name, string $list_slug, int
    $cursor = null ) [Unverified]
  • Added array
    api->list_membersAdd( string $list_slug, int
    $user_id ) [Working]
  • Added array api->list_membersDelete(
    string $list_slug, int $user_id ) [Unverified]

  • Added array api->list_isMember( string
    $screen_name, string $list_slug, string $screen_name_to_check ) [Unverified]

  • Added array api->list_subscribers( string
    $screen_name, string $list_slug, int $cursor = null) [Unverified]

  • Added array api->list_subscribe( string
    $screen_name, string $list_slug ) [Unverified]

  • Added array api->list_unsubscribe( string
    $screen_name, string $list_slug ) [Unverified]

  • Added array api->isSubscriber( string
    $screen_name, string $list_slug, string $screen_name_to_check ) [Unverified]

Known Issues:

  • No Support
    for Unauthenticated Requests.
  • $tw->name() does not support users other than the
    currently logged in user.
  • $tw->profile_pic() does not support users other than
    the currently logged in user.
  • $twitter->get_sn_from_id() does not support users
    other than the currently logged in user.
  • $twitter->get_name_from_id() does not
    support users other than the currently logged in user.
  • Two instances of Twitter API
    Library can not co-exist on the same sub-domain.
  • $twitter->api->lists_destroy()
    is returning “Incorrect Signature.”

Friday, November 6, 2009

Twitter API Library – Build 7

Well, this is going to break some things if you’re using an older build. 
Primarily any method that required the ID/Screen Name/User ID of a user.  I thought I had pushed
out this change before the Build 4 release, but apparently it was still on my computer.

Now,
any API methods that were function( mixed $id = NULL, string
$screen_name = NULL, int $user_id = NULL ) are now: function(
mixed $id, int $id_type = TWITTER_ID ). $id_type can be one of
“TWITTER_ID” (lets twitter decide if you’re using a screen name or user id), “TWITTER_SN” (tells twitter
you’re using a screen name) or “TWITTER_UID” (tells twitter you’re using a user ID).  This
parameter may be omitted and will default to TWITTER_ID.

URI: href="http://sandbox.gtaero.net/twitter_api/code.php?b=7">http://sandbox.gtaero.net/twitter_api/code.php?b=7


Change Log:

  • Changed Tri-optional User
    Identification procedure in the API methods to Two Parameters $id and $id_type.
  • Added
    array api->lists_create( string $name
    [, int $privacy = TWITTER_PRIVACY_PUBLIC ] )
  • $privacy
    may be one of TWITTER_PRIVACY_PUBLIC or TWITTER_PRIVACY_PRIVATE

Known
Issues:

  • No Support for Unauthenticated Requests.

  • $tw->name() does not support users other than the currently logged in user.

  • $tw->profile_pic() does not support users other than the currently logged in user.

  • $twitter->get_sn_from_id() does not support users other than the currently logged in user.
  • $twitter->get_name_from_id() does not support users other than the currently
    logged in user.
  • Two instances of Twitter API Library can not co-exist on the same
    sub-domain. (All Versions)

Thursday, November 5, 2009

Twitter API Library – Build 6

Decided to push out one last, though much smaller, build tonight – Build 6. 
Build 6 moves from Authorize to Authenticate and adds a TWML function.  There are some other small
changes in Build 6 from the other builds, but these are not documented yet, and will probably require the
help of someone who knows more about OAuth than I to become supported (yes, I’m talking about setup_login()
and set_cache_dir()).

URI: href="http://sandbox.gtaero.net/twitter_api/code.php?b=6">http://sandbox.gtaero.net/twitter_api/code.php?b=6


Change Log:

  • Moved from using OAuth
    Authorize to OAuth Authenticate.  Users will no longer have to continually click “Allow this
    application.”  Now they just do it once and Twitter API Library will auto-magically log them in
    next time.
  • Added bool $tw->if_is_user(
    int $user_id ) which returns true if the current user is the same as the inserted ID,
    and false if they aren’t.

Known Issues:


  • No Support for Unauthenticated Requests.
  • $tw->name() does
    not support users other than the currently logged in user.
  • $tw->profile_pic()
    does not support users other than the currently logged in user.
  • $twitter->get_sn_from_id()
    does not support users other than the currently logged in user.
  • $twitter->get_name_from_id()
    does not support users other than the currently logged in user.

Twitter API Library – Build 5

URI: http://sandbox.gtaero.net/twitter_api/code.php?b=5
(Preview Level Code)

Change Log:

  • Added
    string $twitter->get_sn_from_id(int
    $uid)
  • Added string $twitter->get_name_from_id(int
    $uid)
  • Added string $tw->profile_pic(
    [ int $uid = NULL [, array $options = NULL ] ] )
    Options:
    • bool linked = true – Link to the
      User’s Profile
    • string size = thumb
      (of small, thumb, large, or full) – Base Size of the Image
    • int
      height = Size’s Default – Height in Pixels
    • int
      width = Size’s Default – Width in Pixels

Known Issues:

  • No Support
    for Unauthenticated Requests.
  • $tw->name() does not support users other than the
    currently logged in user.
  • $tw->profile_pic() does not support users other than
    the currently logged in user.
  • $twitter->get_sn_from_id() does not support users
    other than the currently logged in user.
  • $twitter->get_name_from_id() does not
    support users other than the currently logged in user.

Twitter API Library – Build 4

I’m going to post status updates on the Twitter API Library, despite the fact
that I don’t think anyone is using it yet.  I’ll post Change Logs to the blog.

URI:
http://sandbox.gtaero.net/twitter_api/code.php?b=4
(Preview level Code)

  • Addition of Read-Only “Quick Variables” for easy access.
    • $twitter->uid – Logged In User’s ID.
    • $twitter->name
      – Logged In User’s Full Name.
    • $twitter->screen_name – Logged In User’s Screen
      Name.
    • $twitter->first_name – Logged In User’s First Name (generated).

    • $twitter->last_name – Logged In User’s Last Name (generated).

  • Changes to $twitter->require_login() process (happens once per
    session):
    1. $twitter->require_login() is called.
    2. OAuth Data
      is Gathered from Twitter’s Server.
    3. User is Redirected to Twitter OAuth Authorization
      Page.
    4. OAuth Redirects User to Call Back Page (which should include or BE Twitter.php)
    5. Twitter API Library automatically redirects to page that called require_login() with
      OAuth Token
    6. $twitter->require_login() is called.
    7. OAuth
      Authorized Tokens are Stored and page is refreshed automatically without the OAuth Token in the URI.

      • Authorization Tokens can then be called for storage using
        list($token_key,$token_secret)
        = $twitter->get_login().
      • If Authorization Tokens have been stored, entire
        process can be skipped using $twitter->use_login($token_key,$token_secret);

    8. $twitter->api->account_verifyCredentials() is called and the result is
      cached.
    9. Quick Variables are created.
  • First
    Preview of “TWML” or
    Twitter Markup Language.
    • TWML should be called with $tw = new
      TWML($twitter);
    • Created
      Tag: $tw->name([ int $uid = NULL [, array $options ] ] )
      Supported Options:

      • linked = true (link to profile)
      • useyou = true (display “you” instead of
        name if logged in user)
      • firstnameonly
        = false (only display first name)
      • lastnameonly = false (only display last name (if available, else first))

      • screennameonly = false (only display screen name)
      • possessive = false (use possessive case,
        e.g. “your”)
      • reflexive =
        false (use reflexive case, e.g. “yourself”)
      • style="background-color: #ffffff">capitalize = false (capitalize if not a name, e.g. “Your”)
      • subjectid = NULL

  • Added
    $twitter->api->call_amount() which returns the amount of requests made to twitter (this
    instance).

Known Issues:


  • No Support for Unauthenticated Requests
  • $tw->name() does
    not support users other than the currently logged in user.

Tuesday, November 3, 2009

[Wave Preview Update] Groups Showing up in Waves

style="border-bottom: 0px; border-left: 0px; display: block; float: none; margin-left: auto; border-top:
0px; margin-right: auto; border-right: 0px" title="image" border="0" alt="image"
src="http://tech.gtaero.net/wp-content/uploads/2009/11/image_thumb1.png" width="244" height="154" />

As you can see in the above screen shot, groups on Google Wave are now getting their own
icon and full contact card (as opposed to being slightly supported).

This is also going
to be the first in a series of posts updating on the status of the Google Wave Preview
This post and all subsequent posts will be hash-tagged.

#wavePreviewUpdate

Twitter PHP Library

Well, being a PHP developer I quickly got excessively tired of looking for the
proper Twitter Library with all the features that returned good results, and I got tired of looking for
proper libraries and classes that could interface with OAuth.

Then, I found a relatively
new (albeit “Beta”) Twitter OAuth Library, but it still required more steps than I really wanted to do just
to get user authentication in a program.  So I decided to finally piece everything together and
write Twitter API Library.


This library basically does everything you would expect it to do, except for Unauthenticated
Requests and the Search API… I haven’t gotten around to coding that in yet, as it was not the primary focus
of this library.

The library is not thoroughly tested, but theoretically shouldn’t
encounter any errors.  I would be very grateful to anyone who’ll test it for me.  (I can’t
work out the bugs without testers, so please, test!).

Another Quick YouTube Audio Player Update

The generator now also supports a Progress Bar and Time Code in three
different sizes.

Read
More
.

YouTube Audio Player Updates

The YouTube Audio Player
has gotten three much-needed updates.

  • Autoplay
  • Loop
  • Playlist Support

The first two, Autoplay and loop –
which is self-explanatory, are checkboxes that allow you to enable them.  (You’ll need to click
Make to update the embeddable code).

The third, Playlist Support is fairly
self-explanatory.  This allows you to embed not just a single video, but an entire playlist using
the audio player.  There are two ways to use this feature.  Either enter the URL of a
playlist URL, or the URL of a video in a playlist and check the “Entire Playlist” option.

align="center"> value="http://www.youtube-nocookie.com/p/923B38B82283F854"> value="true"> src="http://www.youtube-nocookie.com/p/923B38B82283F854" type="application/x-shockwave-flash"
allowscriptaccess="always" allowfullscreen="true" width="62" height="25"> href="http://www.youtube.com/view_play_list?p=923B38B82283F854"> src="http://www.gtaero.net/ytmusic/play.png" alt="Play" style="border:0px;" />


Of course, with these updates comes an update (hopefully the last) to the
bookmarklet, which can be added to your browser bar by dragging this link: href="javascript:document.location='http://gtaero.net/ytmusic/?q=' + encodeURIComponent(document.location);">Generate
Audio Player.

Enjoy!

Sunday, November 1, 2009

The Licensing Revenue Model

Full Disclosure: I do not personally know if any
companies do what I’ve written about in this post.  These are merely some thoughts I had on how to
make money by creating a License for others to use.

It has been often discussed and is
basically a known fact that the future of the world is Open Source.  As technology increases, more
and more people want to contribute, and everyone wants to see their idea expand before them without having
to do any of the hard work themselves.  This is where Open Source comes in.  Open Source
is having the code available to all, so that others can patch it, can contribute, and can make your idea
come to life whether or not you still want to work on it.  But that isn’t the topic of today’s
post.

With a boost of popularity in the Open Source direction, there is a new
seldom-thought of business that has opened up the doors of possibility – Licensing.  Open Source
users want their ideas expanded, but not stolen, and this is where Licensing comes in.

You
see all over the internet different licenses, GNU, MIT, Apache, Creative Commons – and personally, I don’t
know a thing about any of them.  But if the companies that control them wanted to make money off of
their licenses, it would be simple – without even charging the creators of content a penny.

The
revenue stream lies in protecting the license.  Lets say you’re
creative commons, and a absolutely MAGICAL deviantArt artist uses your license for their work, lets say BY-NC-ND,
meaning that use of the picture has to be attributed to the artist, and it can’t be used commercially nor
can derivative works be made from it without the Artist’s expressed consent.  One day, the artist
sits down to watch a movie, and sees her wonderful work in the background – Her License has been violated.


If you, Creative Commons don’t do anything to help her, then people
don’t believe in your license.  Less people use it, and suddenly it isn’t so popular.  But
if you take on the case, pursue legal action, and sue over it for her, giving
her a decent percentage of the profit and keeping the rest, then the artist got her retribution, and you as
an organization just made money.  Since you were so eager to defend the artist’s rights, more and
more people use your license to protect their work.

Is this unethical?  No,
of course not.
  The law is on your side.  The author said that their work
could only be used in this way, and it was violated.  You’re protecting the rights of the people,
and making money while you’re at it.

It’s Facebook’s Turn to Scratch OUR Back

style="border-bottom: 0px; border-left: 0px; margin: 5px 0px 5px 10px; display: inline; border-top: 0px;
border-right: 0px" title="image" src="http://tech.gtaero.net/wp-content/uploads/2009/11/image_thumb.png"
border="0" alt="image" width="63" height="244" align="right" />
Quite possibly one of the
largest and most influential things pulling users to Facebook has always been the application platform. 
It’s simple, it’s intuitive, and developers are doing everything they can to make money off the platform,
including advertisements and href="http://www.techcrunch.com/2009/10/31/scamville-the-social-gaming-ecosystem-of-hell/">resorting to
sleazy scams
like Offerpal and SuperRewards, all the while paying Facebook more and more money for
advertising that, most of the time appears on other application’s sidebar.

Why
has it taken us Developers this long to realize it?  Facebook is making a profit off of our applications and
giving us absolutely nothing in return.  Not only are developers paying
Facebook to get more users, but we’re giving them free advertising space and revenue.  It’s obviously time
that Facebook started scratching the developer’s back by giving them some of the revenue off the
advertisements that appear on their own application pages!  This would offer application developers a clean,
non-scammy, non-shoddy revenue stream with advertisements that would always fit with the Facebook platform
policy, without even disrupting the feel of the application.

Facebook is constantly
complaining about the scammy and shoddy methods developers implement to try to make their application more
viral to manage some form of income, but if Facebook just paid developers a percentage for the
advertisements being placed on those same developer’s applications, than the entire Facebook experience
would be cleaner and much more appealing to the end user.

Why hasn’t anyone thought of
this before?