91tv国产成人福利_韩国精品美女www爽爽爽视频_五月婷婷中文字幕_99热这里只有精品免费_国产视频自拍一区_日本久久一级片_成年人小视频网站_另类专区欧美制服同性_国产精品一区二区男女羞羞无遮挡_日本一区二区三区免费看_少妇一级淫片免费看_91po在线观看91精品国产性色

Blog

Learn More

Interested in saving time and having a secure website? 

Try Concrete CMS now!

Apr 27, 2008, 12:05?AM

As a youth, you tend to think price is in some way related to cost.

It is not.

It's easy to be taught this in your MBA course, it's easy to think this is evil from your Marxism course, but I have found it really is the way of things. The answer to "how much is that doggy in the window?" is at best "what's he worth to ya?" and at worse, "how much you got?" How much time, care and energy went into raising the bitch and birthing the puppy have nothing to do with it. (yes I choose that metaphor to create a credible excuse to curse. son-of-bitch-shit!)


Apr 25, 2008, 5:22?PM

I've never been a huge fan of the corporate training week. In my experience going to them as a employee, it's kinda a paid vacation, yet a boring. It's great to learn all at once and whatnot, but having someone read a manual to you in front of a computer seems like a horrible way to spend your day when you're visiting a fun big city.


Apr 25, 2008, 5:16?PM

It's not all strategic crap and programming around the office.. in fact an awful lot of time gets wasted with stuff like this fantastically amusing video:

http://www.cracked.com/video_16019_video-game-pitch-meeting-1979.html


Apr 24, 2008, 5:13?PM

Tasty dim sum today, fresh shrimp yum.

Figured the revenue model out for Concrete 5 today at lunch. We knew we were gonna give the source away, but hadn't quite figured out how to offer a hosted one for a price. We wanted to make it easy for tired old developers like me to setup a site quickly, as you would a blog and take the opportunity to make some money on the hosting side. We also think the elegant ‘demo turns into your install' approach of so many web2.0 apps is nice.

Well the challenge with that for us is unlike Wordpress or Basecamp, we need to give people a fair amount of personalization and space. A website isn't much good without a email, our CMS shines most when one starts to mess with the presentation layer, you just have to deliver a non-centralized traditional hosting environment for it to be useful and stable in the big picture.

That becoming clear helped settle the details around our how to price hosting. The demo simply isn't gonna happen without a credit card. You're welcome to download the source, see examples, etc.. but if you want to "1-2-3 it's just that easy" on our servers, we're gonna need a credit card and real info. Keep yer l33t warez off my boxes. ;)


Apr 23, 2008, 12:45?PM

Nothing shocking here, just reality. There are a lot of unique problems in the world and we don't have time to solve them all perfectly. I'll be the first to aknowlege that a Content Management company using something like WordPress to blog about their adventures is somewhat ironic. We do have a blog component in Concrete today, and it works well if you need to incorporate a blog into a larger more design centric site. For this problem, I did not. I just needed something I could setup quickly and use well from anywhere without having to take my developers away from building a CMS that serves our client's needs So in addition to WordPress, here are some other 3rd party tools we enjoy around the office

UPDATE: We moved all this content into our own concrete5.org site with a nice blog UI on the top end. So while aspects of this post remain true (blogs are about writing, concrete5 is about managing) the bulk of it is way out of date.


Apr 21, 2008, 5:08?PM

Hello world.

I've been making websites since there was a web to make ‘em on.
I've run my own show for almost the whole time, with a two year dabble in corporate IT at the height of the bubble.
I'm an entrepreneur who has big ideas, works hard, and wants to provide for his family. My shop wins awards, our clients generally love us, I do everything that a good mid-sized webshop should do, yet I find myself unsatisfied.

I grew up with computers in the family. My Dad worked on punch cards and tape, so I can say with as much credibility as anyone that it "runs in the blood." I was programming my Apple ][e at 6, I was building Heathkits in the electronics lab in our basement. I ran BBS's, I got busted for bringing a Virus to school as a kid, you name it. Think War Games, that was me. I still have an acoustic coupler in the basement somewhere. My friends all played D&D and I know what a blue box is from using one, not reading about em.

I got excited about the web for bigger reasons than a paycheck though. Yes, growing up a programmer with a passion for visual arts pretty much forces you into web design these days, but in 95 when I dropped out of college to make websites that wasn't quite so that clear to everyone. What got me excited was the idea of the web as universal expression for everyone. I believed in the power of "myPetCat.com" when you could actually buy that domain and build the site yourself. I remember telling entrepreneurs that "you can look as good as IBM on a shoestring budget using the web!".. which as we all know, turned out to be more of an ideal than a reality.

I worked my way through the bubble, I've built working solutions for some of the most bizarre ideas and clients known to man, with a smile and a voice in the back of my head saying "well this might not be the printing press for the masses that the idealistic 21-year-old Franz wanted, but I am doing a great job being a voice of reason in this sea of madness."

Well now I'm 32. I've got a 2 year old daughter and another on the way. I'm responsible for a dozen bright people who love to make great websites, and I'm asking myself hard questions about if this is where I wanted to be in life. Frankly, I planned on being dead by 27 or a millionaire by 30. Neither happened. The last 5 years have been a blur of extra-credit confusion. As I grow up and realize I might very well be coming up with interesting ideas for a long time, I look at the business I've built by being flexible and bright and I wonder if, why, and how I truly love it.

I am a plumber. (shit, sorry Plumbers Association of America) but I get paid by the hour. Like any IT services company, we want recurring income, and we've historically thought the best way to do that was license a product. It is tiresome to get paid by the hour. There's no dependability in it unless you're willing to get tied to a vertical. We certainly have dabbled with the idea, why not be the company that just bangs out lawyer websites. The reality is this strategy seems to both miss the point of making the world a better place through free communication on an uncontrollable medium, and also the fun adventure of random consulting. Given the choice of Han Solo or Luke's Uncle tending the farm Well call me Franzolo.

So we make Our products...small products in Flash and JavaScript for niches we stumble upon, and we've got our own proprietary CMS that we've developed through years of working together and licensed as we saw fit.

We do a lot of work for bright entrepreneurs who are starting an online business, but we're constantly building ourselves out of a job. Just this spring we ended up losing a huge client from last year lemonade.com because they decided they needed to build out their own IT department as part of their rev 2 launch. I can't say I blame them, sure we built everything they've got from the ground up last year, and obviously I wish I was getting that check instead of ADP in some ways, but if I were in their shoes I'd do the same thing. They need an IT department and my shop's not it, nor do we want to be in the big picture.

We're in Portland, Oregon.. where the beer flows and the creative folk grow like the moss on roofs. I learned many years ago that competing for local web development work is a tough, gossipy, battle. There's not a lot of business outside of lumber and microchips, and while everyone in this town seems to get a hard-on for doing something for HP, Intel, or Nike I can't say I do.

So how do I support my growing family & crew in a way that I have some clue as to where money is coming from more than 6 weeks out and I'm not competing with the client's neighbor kid? How do I do something with my life that I can point to and say "that was worth while, the world is now a better place?"

Well, I could quit it all and go start some new dot com that makes virtualized widgets for gizmogingers in the social media space. Frankly, I've built enough of those ideas over the years that it's hard for me to commit my success or failure to just one idea. These days that comes down to a competitive "who do you know" battle that holds little interest for an idea guy like myself. Frankly, I want to do a lot of stuff. I want to be more involved in music and fashion than I am. I want to have the shop I have, but have a dash of downtime so we can pursue fun internal projects that we used to when it was just me and Andy in the basement. I'm sure I'm absolutely the first person you've ever heard express this dream.

Okay, so there's my self-serving blog dribble is there a point?

Yes.

It is time for us to make a new strategic play. We've had a CMS we've been selling since 2003 quite effectively. We built it before "blogs" were the big deal they are today and we made it because we were tired of our bosses spending 6 figures on some license fee for what amounted to a publishing system. It's called Concrete CMS and it works. It's flexible to work with, easy for office workers to use, and robust enough to handle real sites. We made it because we had an AdCouncil project with an insane deadline and too many stakeholders. We knew they would never agree to a fixed scope, so we needed a modular way to deal with content and functionality where we could re-arrange things in real-time and look like heroes. We did.

It grew. For the last 5 years we've done major and minor edits to it and basically sold it as the market allowed. As a production guy turned bizdev guy, I gotta say its really interesting to see the market change. I remember when people thought we were cheap because we wanted 15k instead of 30k for a perpetual license of our app. Shit I remember when TeamSite cost 300k. The price has come down year after year. As the guy in me who cuts paychecks cries, the Anarchist industrial punk kid who dropped out of college to help the underdog take on the man is getting excited though.

So here it is.

We've been working on the next HUUUGE version update of Concrete for over a year now. It's mad web2.0. It's hella AJAXy. It's dead fucking sexy and you're going to love it. It's my job to figure out who we're going to sell it to, and how we're going to price it. There's been a lot of debate. We could tweak it around to serve a particular vertical. We could add some more eCommerce loving to it and take on Magenta and the array of OsCommerce killers that are about to come out. We could come up with all sorts of money grubbing bullshit plans that we'd implement to some degree and keep making cash off of.. but frankly.. I grow weary of the battle & bullshit.

I want two things.
1) I want financial security for my family and creative crew. I want to be able to spend time with my daughters and know that I'll be able to send them through school.
2) I want to do fun, creative, world improving things. Five figure license fees to corporate America, for software that only kinda meets the core promise behind the stated need, isn't gonna put a smile on my face.

So, oh faithful new reader Take it.

Take it for free.

Yes, I'm drinking beer, and I'm gonna buy you free beer too.

I saw Dirty Jobs the other day where a born and bread fisherman in Oregon looked at his trade, and decided to sell everything and buy into the Cranberry business for his family and personal sanity stake. Sadly the Cranberry market tanked for 3 years immediately after he got started, but he lasted through and amazingly built a successful business at something he barely knew.

I feel like I'm making the same type of decision here. My Father certainly would not give away intellectual property, his manufacturing software shop had the same core license plus time and materials model that my current webshop, and so many others had. I've certainly loved and benefited from many open source solutions over the years, but personally have always most identified with the older Shareware movement: "have a taste, but the meal ain't free." The fact that we're giving away Concrete CMS under the MIT license, more open than ‘public domain', is a true step out of the water for me, and I'm excited about what I'm gonna learn.

Of course, I hope it will be wildly successful, we'll live comfortable and creative lives while making the world a better place from our little wet corner of the world. I can promise you, oh dedicated reader, one thing.. We will embrace this full force. We will blog on our blog as openly and blatantly as our minds take us. We may end up being seen as asses or heroes, maybe both but we'll certainly do everything we can to go big. Welcome to the internal dialog at Concrete the Studio, you're going to hear it all.


Apr 20, 2008, 10:24?PM

http://www.thebigwordproject.com/

I can not lie, this is a good idea that we simply didn't have first. ;)

If someone could please explain to me how concepts like this go from 2 users to 2,000 I've got some work for ya.
-frz


Jan 13, 2008, 7:19?PM

To anyone in Portland who's interested: I'll be doing a demo of concrete5 and a Q&A targeted at developers at pdxphp tonight. It's at 6:30, at cubespace.

For more information:

http://pdxphp.org/meetings/2009/january


Jan 1, 2008, 6:37?PM

Andrew Embler CTO Concrete CMS

On November 2nd, Google announced its OpenSocial initiative. Amidst the breathless hyperbole there came a prevailing sense of confusion from the world's web developers (including those around our office). What exactly was this "OpenSocial?" Was it an API? A framework for building web applications? A social network? Was Google invading the Facebook space? All of the above? And perhaps most importantly just what the heck are we supposed to learn, exactly?

It turns out that OpenSocial is all of those, and a bit more. It's also a bit loosely defined, and complete documentation is still a bit scarce. So I'm going to try and fill this understanding gap.

While some good write-ups of OpenSocial have been circulating the web since the announcement (Marc Andreesen's is particularly fine) none of them really offer a full picture of the OpenSocial initiative, including how it extends current concepts of widgets and the social web. Moreover, none of them really speak to engaged, active web developers about how to "get on track" with it. If you happen to be one of those developers smart, passionate, and perhaps a little bit late to the party this should get you going, and quick.

A First Look at OpenSocial: Background

OpenSocial extends out of the rise in popularity of widgets on the web. How am I defining widgets? In the context of the web, widgets are typically HTML, JavaScript and/or Flash, bundled together, into a self-contained mini-applications. Stock tickers, clocks, mini news readers and weather displays are some example of popular types of widgets.

Widgets are not a new concept. The original Macintosh operating system embraced the concept of "desk accessories" tiny, omnipresent applications, uniquely styled to be recognized at a glance. This continues today in Mac OS X, in the form of the Dashboard. Software programs like Yahoo Desktop Engine (formerly Konfabulator), Google Gadgets (when paired with an environment like Google Desktop) and the Windows Vista sidebar are other examples of widgets at work in the personal computing space.

While these types of widgets are used as productivity enhancers, other types began to gain popularity with the rise of social networking sites like MySpace. Typically built in flash for easy portability, widgets like slideshows, mini games, movie players and scoreboards were meant to be installed in social websites, and to be viewed not by the person installing them, but by others. They are meant to impart information or a sense of style. They are social.

While definitely popular, these widgets are still self-contained. This aspect of widgets makes them portable and easy to install it's not difficult for a person to cut and paste a two-line flash embed code it does limit their utility. Widgets for the web either completely lack customization, or they require a large amount of overhead on the part of the widget creator, to support things like data persistence. Furthermore, widgets don't know anything about where they're placed. Finally, not all social websites support the various ways a widget can be delivered (straight HTML, JavaScript, Flash, etc)

2007: Facebook Applications Up the Ante

In May of 2007, Facebook changed all that, when it officially launched its Facebook Platform: with this, there was one spot in which all Facebook widgets could be listed, and easily added to profiles. Furthermore, the Facebook platform introduced the concept of a "Canvas" page, which gives applications an entire, user-unique view to offer additional functionality, simply when they're installed by a user. Finally, Facebook applications (in both the widget and canvas view) can access user profile information, interact with the user's friends, and provide mechanisms for application promotion.

Problems Still Remain

Boy do they ever. While Facebook's development platform exposes a lot of power, it's fairly complex, with its own markup language, API and even an abstracted query language to search the Facebook database. Needless to say, these options are completely specific to Facebook, as is 90% of pretty much any application you write for the platform. At this point, developers who want to embrace MySpace, Facebook and traditional websites are stuck writing, at the very least, three completely separate applications. They also must market those applications separately.

Enter OpenSocial 

It is against this landscape that OpenSocial arrives. Consumers, web developers and clients all recognize the market for widgets and customizable mini-applications and their spaces. But with a multitude of social networks, how is it feasible for the average developer or development shop to support more than the biggest networks? The best case scenario? Facebook users get the most full-featured application; their app has a fully realized widget, a canvas space with extra full-page functionality, and the ability to tie in to users who also use Facebook. Other websites get a simple widget with little to make it specifically compelling to members of said website. Big win for Facebook. Mixed results for everybody else.

In theory, OpenSocial should change that. According to the OpenSocial initiative: "OpenSocial provides a common set of APIs for social applications across multiple websites. With standard JavaScript and HTML, developers can create apps that access a social network's friends and update feeds."

Clearly, Google is positioning OpenSocial as the answer to the Facebook platform, but one in which any widget or application developer can write once, deploy everywhere. That's the hype. Does OpenSocial deliver? Let's answer the questions.

Questions about OpenSocialAnswered

What are the components of an OpenSocial application? What are they made out of?

When comparing OpenSocial applications to widgets for MySpace or other social networks, the answer to this is simple: OpenSocial widgets are essentially Google Gadgets. Google Gadgets are Google's own implementation of widgets, built in HTML and JavaScript, and served in an iframe. A public API for Google Gadgets already exists, separate from OpenSocial. Up until now, however, these widgets have faced the same problems as widgets on MySpace.com: they're self-contained, and know little about the environment in which they've been embedded.

OpenSocial adds a new API and JavaScript namespace for use inside Google Gadgets. Since Google Gadgets already use JavaScript, using OpenSocial's JavaScript API is really a simple way to allow your widget to access friends list and some simple information about those viewing it. For example, the following JavaScript, when added to a Google Gadget, gets information about the friends of the person viewing the Gadget:


      function getData() {

        // Creates an Open Social request object. 
        var req = opensocial.newDataRequest();

        // Adds a new request to this object - let's get information about the person viewing 
        // this widget, and store it mapped to the "viewer" attribute in the response object 
        req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');

        // Let's request some more information. Let's get information about the viewer's friends, and store it 
        // mapped to the "viewerFriends" attribute in the response object. 
        req.add( req.newFetchPeopleRequest('VIEWER_FRIENDS'), 'viewerFriends');

        // Let's send the request to the container website, which will load the "onLoadFriends" function when 
        // data is available 
        req.send(onLoadFriends);

      }

      // this function loads with information from any Open Social requests. 
      function onLoadFriends(response) {
        // viewer and viewerFriends are available in the get() method below because that's 
        // what I named them in the req.add() call above 
        var viewer = response.get('viewer');
        var viewerFriends = response.get('viewerFriends');
        var data = viewerFriends.getData();

      }
    

While the API documentation explains additional data types available to OpenSocial widgets, at their core they're just that simple. More adventurous developers can perhaps dispense with the JavaScript API entirely, and use OpenSocial's REST-based API for getting data about people, activities and data persistence, but for most the simpler JavaScript API will be sufficient.

Where do the assets for these applications live?

OpenSocial widgets can use assets hosted anywhere on the web, and linked to through simple HTML. Additionally, Google will host your assets on its domain gmodules.com; just upload your images and external stylesheets through a menu option in the Google Gadget Editor, and Google will store them and provide you a URL to link to them.

How do customers find these applications is there a directory?

Google currently hosts a Google Gadgets directory. Since OpenSocial is simply an API that can be included in Google Gadgets, they will likely appear in this directory without much fuss. Unfortunately, there is currently no list in the directory of which sites support OpenSocial, and to be truly effective and compete with Facebook OpenSocial will need to allow these applications to be added directly from within their container websites. There currently isn't any documentation on this, although to check out what is known, jump to our section on how a social network might include OpenSocial widgets.

Can I store data in them? How much and at what cost?

Yes, you can store data in social gadgets. The Google Gadgets API has support for saving preferences, meaning that when you add that ESPN Scoreboard widget to your profile, you'll be able to specify it as having a red background with white text; this instance of the ESPN Scoreboard widget the one tied to your profile page will continue to exist with these settings until you change them or remove the widget. Everyone who views the widget will also see it with a red background and white text.

Instances of widgets (like the example above) can also have additional data stored against them for those who might view them. For example, the ESPN Scoreboard widget might not only provide the ability for the person embedding it to set its background and foreground text, but might also offer viewers of the widget the ability to override those settings. These are "viewer"-specific settings, just like cookies on a web page. The settings saved for each instance of a widget are bound to the viewer's profile, by using the OpenSocial Persistent Data API.

How would we implement this in OpenSocial? Let's say a widget developer wanted to make it so that a person viewing the widget could save their city and state, so that the next time they viewed the widget they wouldn't have to re-enter them. This information obviously differs from viewer to viewer, so it couldn't be saved in the widget's global preferences. The developer would need to bind this data to the profile of the person viewing the widget. Here's how he or she would do it:

function saveCityAndState(city, state) {
    var req = opensocial.newDataRequest();
    // we use newUpdatePersonAppDataRequest to specify that we're updating data the data saved is 
    // bound to the person viewing the widget 
    req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppCity", city));
    req.add(req.newUpdatePersonAppDataRequest("VIEWER", "AppState", state));
    // we pass the function that's run automatically when the request completes 
    req.send(function() { alert('Data Saved!') });
}

Reading that data back programmatically is similarly simple:

function getViewerInformation() {
    var req = opensocial.newDataRequest();
    // define the fields that we're retrieving for the viewer of the widget 
    var fields = ["AppCity", "AppState"];
    // define the request for the fields above, which uses the fetch person data request 
    req.add(req.newFetchPersonAppDataRequest("VIEWER", fields), "viewerData");
    // send the request to OpenSocial API 
    req.send(function(data) {
        // on completion, this function is run automatically passing the data object to it 
        // "viewerData" is populated because that's what we bound these fields to above 
        var viewerData = data.get("viewerData");
    });
}

While this example stores strings, I imagine it isn't too difficult to store complex objects, if you serialize them to JSON first. For more information on how the data returned is structured, check out the Social Google Gadget API documentation.

Do these applications have access to user data?

Short answer, yes. The OpenSocial API gives developers access to a small amount of fixed data (a "display name," a thumbnail image, a user ID and a profile URL) and a varying amount of data which can be filtered by type, including "BASIC," "CONTACT," "FULL," "MATCHING" and "PERSONAL." The actual mechanics of using the JavaScript API to retrieve this information are somewhat up in the air, with few examples of applications actually using extended profile data, and no examples of programmatically determining what data is actually available on a container by container basis. Check back soon or voice your displeasure at incomplete documentation in the Google Group for Open Social.

How does OpenSocial deal with different networks' design limitations?

This is still a bit of an unknown; while many networks have pledged to support OpenSocial, only a few like Google's Orkut, Hi5 and Ning actually have environments in which it can be tested, and even in these OpenSocial is only available in the developer sandbox. At a glance it appears that OpenSocial has attempted to gather up some of the most prevalent functionality in the social networking space an activity stream, basic user information, friends and people in general and provide access to them. It is up to the container website to determine how much of the OpenSocial API it wants to implement, meaning that the onus is still on the application developer to provide error checking and graceful failure if certain aspects of the OpenSocial API aren't available. This is too bad, although probably unavoidable.

How does view/edit work?

OpenSocial at its core is really about widgets. In this way, it's not really concerned about the difference between viewing and editing, beyond giving application developers the ability to save state, and giving the developer a way to specify preferences, which can be exposed and edited easily (this is part of the Google Gadgets framework.)

For these widgets, only one view is ever defined; it is up to the developer to include all necessary view logic within this one context. A widget could present two distinct interfaces view and edit to only the owner of the widget, with all other viewers only getting the "View" interface, but this capability must be explicitly included by the developer, including any permissions checks to determine whether certain controls ought to be displayed to someone viewing the widget.

How does Yet Another Social Network (YASN™) take advantage of these widgets?

First, one must become a Google Gadget container, a process which is reasonably well documented, and has been used by many of websites. This, however, is nothing new. To actually make your widgets aware of their container website, and implement the OpenSocial API, a site must implement the OpenSocial Service Provider Interface. As of this writing an official development kit to add these capabilities and expose them via the necessary JavaScript framework is still forthcoming from Google, but they have just released an OpenSocial Container sample.

Do I need to get my applications "blessed" by Google in order to run OpenSocial?

Nope. Although you need to submit your applications for review in order to get them to be included in the official Google Gadgets directory, you may host your gadgets from anywhere and need only a provide a URL to end users who wish to install it.

Why is Google doing this?

There are probably a few reasons.

  1. Their motto, "Do No Evil." I suppose this would qualify.
  2. In the minds of some, this is a warning shot fired at Facebook. If Google is indeed in talks with acquiring Facebook, this might be a bargaining tactic.
  3. Since OpenSocial gadgets are, by their very definition, Google Gadgets, this increases the profile and number of Google Gadgets available to consumers. This will also increase the number of websites looking to become Google Gadget containers, which promotes their widget platform further.

With millions of mini-applications installed across a multitude of social networks, Google gets increasing access to more data definitely a win for a company whose business is data mining.

Have any "gotchas" been discovered? Anything that us developers might like to know?

There always are. One of the most useful tips I've discovered has been this one:

While developing the Hello World widget described below, I found that Orkut would frequently cache my Gadget output, making active development of widgets a painful, painful process. However, if you append "&bpc=1″ to your Orkut application URL, the site will stop doing this. For example, if you're viewing your in-development widget at

https://sandbox.orkut.com/Application.aspx?uid=x&appId=x

You can keep from ever seeing a cached version of the gadget by making the URL

https://sandbox.orkut.com/Application.aspx?uid=x&appId=x&bpc=1

Another tip? Double-check the data you get back. While checking the Google Group for OpenSocial, I found that certain details of the API haven't exactly been normalized across service providers. Attempting to retrieve a profile URL for a user record on Orkut returned the following:

/Profile.aspx?uid=xxxxxx

Grabbing the same data on Hi5 returned a fully qualified URL:

https://sandbox.hi5.com/friend/profile/displayProfile.do?userid=xxxxx

Clearly, this is a problem on Orkut's part, but keep this in mind this platform is far from stable.

 

Building Your First OpenSocial Widget

As mentioned before, OpenSocial widgets are really just Google Gadgets that add an extra API, which allows them to get some information from their container websites. So, to build an OpenSocial widget, we really need to start by building a Google Gadget. And Google Gadgets, at their simplest, are self-contained XML files. To give you the simplest example, here's a "Hello World" Google Gadget I created, using the Google Gadget

Editor, an inline, JavaScript-powered editor:

The code for this widget is very, very simple:

 

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Module>
  3. <ModulePrefs title="Hello World" />
  4. <Content type="html"><![CDATA[
  5. <div>
  6. <div style="text-align: center">
  7. <img src="/url/to/logo.gif" /></div>
  8. <div>Hello World!</div>
  9. </div>
  10. ]]></Content>
  11. </Module>

(Note: I omitted some miscellaneous style information to make this example easier to read.)

While the Google Gadgets API offers many features for widget creators (including dynamic, styled tab creation, drag and drop, localization, and more) as well as the ability to store information about widgets like their title, author and a link to a thumbnail image, at their core Google Gadgets are really as simple and self-contained as the example above.

Let's take a look at my widget; sure, it's fantastic, but it's a bit static. What if we were to socialize the widget by making it say hello directly to the person viewing it. Wouldn't that be something? Well, that's the kind of stuff that OpenSocial can provide.

First, we'll need to make the Google Gadget include the OpenSocial API. We do this with a simple XML declaration inside the ModulePrefs tag:

 

  1. <ModulePrefs title="Hello World">
  2. <Require feature="opensocial-0.5"/>
  3. </ModulePrefs>

Next we replace "Hello World!" in our application with "Hello ," using the DIV as a placeholder that will eventually be populated by our call to the OpenSocial API. Finally, we add in the necessary JavaScript:

 

The code should be pretty easy to read. First, we initiate a callback function through the use of Google's _IG_RegisterOnloadHandler function; this function automatically runs and causes its function argument to run when the gadget is finished loading. The getData() function then instantiates a new request object to the OpenSocial API, adds a request for information about the viewer, and then sets up the loadViewer() callback, which is run automatically when information returns from the API. This information is then parsed for the viewer attribute (which was set in the req.add() method), and the viewer's display name is inserted into the contents of the viewer-name placeholder DIV.

Limitations of OpenSocial

While the "Hello World" example above should give you an idea of how to build a social gadget, it wasn't my first choice for a widget. Around our office, while brainstorming ideas for this article, and still somewhat confused about OpenSocial's exact capabilities, we conceived of a different type of widget. We wanted one that, when placed on someone's profile page, was able to learn and store that it was placed on a

particular social network. That's not that compelling obviously an instance of a social gadget on a profile page is able to tell what container website it's on, whether through the API itself or even inspecting variables like the profile URLs available. However, in addition to this, we wanted every instance of this widget for a particular user, spread across multiple social networks, to be able to share this data. This would create a "My Social Networks" widget, which would list all of a user's profiles around the web, without the user ever having to modify the widget or tell the widget that they had an account on Flickr, MySpace, Hi5, etc

On each website, the user would add the "My Social Network" widget, which would then communicate with every other instance of the widget spread across multiple social networks. We had hoped that OpenSocial, in addition to specifying common hooks for widgets to interact socially within a container website, would focus on people with multiple profiles, across multiple websites.

Unfortunately, OpenSocial doesn't do this. Each instance of a widget on a container website knows only about the profile to which its linked, and that profile's friends. My profile on LinkedIn and my profile on MySpace are too completely separate profiles, and OpenSocial provides no ability for widgets to actually understand that these profiles belong to the same person. We had hoped that it would. Yes, OpenSocial allows the developers of the ESPN Scoreboard widget to build them once for Orkut.com and once for MySpace.com, and still hook into each site's social functionality, but that is the extent of its benefits.

Conclusions

When Google first announced its OpenSocial initiative, about the only thing anyone really knew about it was the type of reactions it would provoke. Yes, we would see the initial outpouring of support; the hyperbole over Google's massive foray into the social space; its shot against the Facebook ship. Almost as predictable as the praise was the

condemnation: OpenSocial was not that impressive, not that interesting, and really not even worth talking about.

But as always, the truth is much less polarized, and quite a bit more mundane. Actually, OpenSocial is pretty interesting, and does showcase a new, standardized

approach toward building social-website-aware widgets. In a world where every social network joins the OpenSocial initiative, web developers will have to do less work, and be able to support more customers than before. Furthermore, OpenSocial helps Google reassert its presence in the widget space which, honestly I must admit, I'd completely forgotten about. Checking out the OpenSocial API has reminded me of their mature, pretty full-featured Google Gadget offering.

Of course, it's not perfect. These widgets are really only "social" within their container website; this isn't an inter-site communication API. Also, while Orkut appears to support different views for its various applications (like Facebook does), this is a decision each social network must make for itself; there's nothing built into the OpenSocial API to really support or encourage innovations like the Facebook canvas view, which is too bad: our Lemonade Facebook application is fun and informative in widget view, but it really shines when you bring in Facebook platform-specific code, like the ability to invite other users to the application, or the ability to show large-format information in a separate canvas view. Yes, some websites will support these types of

views, but unless they're built into the API, and the API itself is built in such a way that all of its functionality must be enabled on each container website, developers are still stuck writing website-specific code.

I think these are valid criticisms, but I don't want to let them overshadow the entire initiative; it's easy to get hung up on what OpenSocial doesn't do, and miss out on what it it does. No, you won't be able to stop writing Facebook-specific widgets yet, but the next widget you make will at least be able to say hello to you by name, on multiple

websites. While application underpinnings won't become completely website-agnostic any time soon, developers will be able to write less code. So take the time to explore OpenSocial, and voice concerns about its shortcomings; the more we do this, the more likely OpenSocial 2.0 will really be something to write home about.

Andrew Embler has written multiple Facebook applications. These days, he finds concrete5 web development more exciting. He can be found on twitter.



	// sets getData() as the function that automatically gets called when the gadget is loaded
	_IG_RegisterOnloadHandler(getData);

	function getData() {
		// Creates an OpenSocial request object.
		var req = opensocial.newDataRequest();
		// Adds a new request to this object - let's get information about the person viewing
		// and store it mapped to the "viewer" attribute in the response object
		req.add(req.newFetchPersonRequest('VIEWER'), 'viewer');

		// Let's send the request to the container website, which will load the "onLoadFriends"
		// function when data is available
		req.send(loadViewer);
	}

	function loadViewer(response) {
		var viewer = response.get('viewer').getData();




Dec 2, 2007, 5:48?PM

Lemonade.com lets people create a widget that contains different products for sale from companies like Appleand EBGames and easily place this "lemonade stand" on social networking sites and blogs. People then earn referral fees when people buy products via their stand.


中文字幕自拍vr一区二区三区| 国产欧美一区二区在线播放| 狠狠操狠狠色综合网| xf在线a精品一区二区视频网站| 亚洲 欧美 激情 另类| 亚洲自拍偷拍图| 久久久久这里只有精品| 日韩欧美高清在线| 欧美高清www午色夜在线视频| 91麻豆成人久久精品二区三区| 性欧美丰满熟妇xxxx性久久久| 日本不卡一区| 欧美二区乱c黑人| 久久婷婷久久一区二区三区| 麻豆精品久久久久久久99蜜桃| 欧美最近摘花xxxx摘花| 美女精品一区| 欧美性视频精品| 国产精品久久久久一区| 国产一区二区三区四区五区六区 | 欧美国产精品v| 国产精品123| av2014天堂网| 日韩av在线看| 久久综合色婷婷| 亚洲av无码久久精品色欲| 成人免费观看a| 国产精品自拍视频| 91青青草免费在线看| 黄色99视频| 国内精品久久国产| 久久av一区二区三区漫画| 亚洲欧美资源在线| 国产亚洲欧美日韩在线一区| 黄色一级片免费在线观看| 日本一区二区三区在线免费观看| 999日本视频| 欧美影片第一页| 国产一级视频在线观看| 国产精品视频yy9099| 欧美日韩另类字幕中文| 国产精品视频一二三| 国产精品久久久久aaaa| 日韩va亚洲va欧美va久久| 中文字幕一区二区三区精品| 污片在线免费看| 伊人久久综合97精品| 欧美视频完全免费看| 中文字幕成人网| 麻豆精品国产传媒mv男同| 国产黄色免费大片| 亚洲男人在线天堂| 国产一区二区高清不卡| 久久99久久亚洲国产| 91精品国产91久久久久久最新毛片| 日韩精品久久理论片| 国产美女视频免费看| 国产成年人在线观看| 欧美精品视频www在线观看| 99久久精品99国产精品| 偷拍亚洲欧洲综合| 亚洲自拍偷拍麻豆| 99精品视频中文字幕| 天天干,天天操,天天射| 久久精品无码中文字幕| 欧美成ee人免费视频| 国产日韩精品在线| 热久久99这里有精品| 成人小视频免费看| 国产日韩欧美在线播放| 欧美成人a在线| 亚洲人妖av一区二区| 日韩精品一区二区三区视频播放| 性生活在线视频| 免费在线成人av| 国产欧美一区二区| 久久天天躁狠狠躁老女人| 成人福利视频在线看| 日韩专区一卡二卡| 99精品在线免费| www精品美女久久久tv| 精品一区二区三区免费播放| 国产亚洲精品久久777777| 亚洲综合av在线播放| 亚洲天堂2018av| 最新中文字幕av| 国产视频一区二区三| 中文字幕第一区第二区| 日韩午夜中文字幕| 日av在线播放中文不卡| 国产伦精品一区二区三区精品视频| 欧美黑人狂野猛交老妇| 久久色在线播放| 日韩亚洲综合在线| 久久精品2019中文字幕| 欧美中文在线观看| 国产精品高潮呻吟久久av黑人| 色香蕉成人二区免费| 国产欧美日韩精品在线| 中文字幕线观看| 日韩精品久久久久久久| 影音先锋制服丝袜| 日本二区三区视频| 91中文字幕在线播放| 一区二区三区欧美成人| 欧美自拍小视频| 亚洲第一黄色网址| 亚洲成人久久精品| 黄色精品在线看| 国产成人高潮免费观看精品| 狠狠爱免费视频| 中国美女乱淫免费看视频| 日韩欧美三级在线观看| chinese国产精品| 中文字幕网址在线| 午夜影院在线视频| ㊣最新国产の精品bt伙计久久| wwwav在线播放| 东方伊人免费在线观看| 日韩欧美在线播放视频| 亚洲精品一区二区毛豆| 亚洲精品日韩成人| 久久久久久久人妻无码中文字幕爆| 人妻av一区二区| 日韩欧美三级在线观看| 在线视频免费观看一区| 一区二区三区产品免费精品久久75| 国产精选久久久久久| 天堂网中文在线观看| 国产精品中文欧美| 欧美黑人狂野猛交老妇| 欧美性xxxx69| 成人av在线不卡| 免费成年人高清视频| 永久av免费网站| av网站在线免费看| 国产盗摄女厕一区二区三区 | 成人在线观看你懂的| 成人免费视频国产免费| 日韩有码第一页| 一区二区三区国产| 欧美精品性视频| 欧美亚洲国产一区二区三区va | 日韩av在线免费| 久久精品国产精品亚洲红杏| 爱爱视频免费在线观看| 国产成人在线免费看| 成人黄色在线播放| 亚洲日韩欧美视频| 午夜成人免费视频| 久久精品国产久精国产| 成年人视频在线免费看| 两性午夜免费视频| 亚洲精品中文字幕在线| 57pao国产成人免费| 欧美一级黄色大片| 中文字幕国产精品一区二区| 婷婷在线观看视频| 久久一二三四区| 日韩高清在线一区二区| 一区二区三区国| 国产精品久久久久91| 日韩成人中文字幕| 福利精品视频在线| 91农村精品一区二区在线| 亚洲国产精品无码久久| 希岛爱理中文字幕| 久久婷婷中文字幕| 91视频成人免费| 91久久久久久久一区二区| 中文字幕精品在线| 欧美日韩电影一区| 亚洲视频在线观看三级| 国产一区二区免费在线| 97视频免费在线| 久久国产高清视频| 国模大尺度视频| 国产一线二线三线女| 国产私拍一区| 欧洲成人午夜免费大片| 亚洲深夜福利视频| 色先锋久久av资源部| 国产午夜精品一区二区三区嫩草 | 色婷婷在线观看视频| av天堂一区二区| 国产极品尤物在线| 热re99久久精品国99热蜜月| 国产成人综合精品| 精品国产一区二区三区久久久| 欧美日本一道本在线视频| 自拍偷拍亚洲欧美日韩| 国产激情精品久久久第一区二区| 国产亲伦免费视频播放| 国产一级片网址| 一区二区黄色片| 亚洲这里只有精品| 人人妻人人澡人人爽欧美一区双| 久久精品午夜一区二区福利| 国产精品jizz在线观看麻豆| 亚洲午夜未删减在线观看| 欧美日韩免费视频| 五月综合激情网| 国产精品热久久久久夜色精品三区 | 欧美在线视频一区| 日韩有码在线电影| 亚洲欧美国产va在线影院| 91精品麻豆日日躁夜夜躁| 亚洲成人1区2区| 日本一区二区久久| 91视频免费看| 国产精品77777| 蜜桃传媒麻豆第一区在线观看| 99国产精品久久久久99打野战| 一级片中文字幕| 国产在线观看免费视频今夜| 久久精品国产亚洲av久| 无码人妻精品一区二区三区99不卡| 在线观看国产中文字幕| 精品www久久久久奶水| 日韩精品在线观看av| 正在播放国产精品| 日本欧洲国产一区二区| 久久99精品久久久久久久久久| 亚洲字幕在线观看| 成人有码视频在线播放| 国产精品十八以下禁看| 国产97色在线| 国产成人精品免高潮费视频| 97欧美精品一区二区三区| 欧美疯狂做受xxxx高潮| 久久久国产精品一区| 色伦专区97中文字幕| 亚洲午夜小视频| 国产亚洲福利一区| 国产亚洲美女久久| 国产亚洲美女精品久久久| 国产午夜精品视频免费不卡69堂| 亚洲另类图片色| 亚洲视频欧洲视频| 亚洲国产女人aaa毛片在线| 亚洲第一页在线| 日韩高清有码在线| 精品夜色国产国偷在线| 亚洲欧洲国产一区| 在线免费看av不卡| 久久天天躁日日躁| 欧美激情在线狂野欧美精品| 午夜剧场成人观在线视频免费观看| 91精品成人久久| 欧美综合在线观看| 国产欧美在线播放| 99久久精品免费看国产一区二区三区 | 国产成人精品电影久久久| 国产精品美女www| 国产欧美日韩高清| 91久久大香伊蕉在人线| 精品伦理一区二区三区| 麻豆久久久av免费| 一区在线电影| 欧美国产日韩激情| 国产一区二区三区精彩视频| 欧美日韩亚洲自拍| 国产精品偷伦视频免费观看了| yjizz视频| 在线看片中文字幕| 亚洲av无码一区二区三区在线| 国产精品第一页在线观看| 午夜精品久久久久久久蜜桃| 国内老熟妇对白hdxxxx| 久久久久久穴| 福利电影一区二区三区| 26uuu国产在线精品一区二区| 国产精品免费人成网站| 红桃视频成人在线观看| 91精品国产色综合久久| 日韩毛片在线看| 欧美日本亚洲视频| 国产精品久久一区主播| 国产精品视频入口| 亚洲国产精品女人| 嫩草影院国产精品| 青青草视频成人| 久久免费黄色网址| 一区二区三区精| 免费观看在线色综合| 91首页免费视频| 亚洲国产精品人人做人人爽| 欧美日韩卡一卡二| 亚洲视频在线观看网站| 欧美精品一区二区高清在线观看 | 国产精品美女久久久久av爽李琼| 欧美不卡视频在线观看| 国产精品久久久久久在线| 日韩制服丝袜av| 国产午夜精品一区二区三区四区| 精品久久久久久久中文字幕| 亚洲福利视频久久| 欧美高清性猛交| 国产精品久久国产三级国电话系列| 中文字幕制服丝袜在线| 亚洲一级免费在线观看| 手机免费观看av| 亚洲香蕉在线视频| 国产黄人亚洲片| 亚洲国产美女搞黄色| 亚洲国产欧美一区二区三区久久| 欧美激情视频在线观看| 国产传媒一区二区| 久久综合九色综合88i| av在线网站观看| 中文在线a天堂| 精品一区二区三区免费观看| 一区二区三区高清不卡| 国产视频精品一区二区三区| 国产精品扒开腿做爽爽爽男男| 亚洲免费不卡| 精品人妻一区二区免费| 婷婷激情五月网| 国产一区二区三区免费| 一二三级黄色片| 久久这里只有精品18| 18禁一区二区三区| 97免费在线观看视频| 日本中文字幕一区二区有限公司| 欧美国产精品一区二区| 日韩一级片在线观看| 6080yy精品一区二区三区| 先锋影音亚洲资源| 色欲无码人妻久久精品| 欧美一级特黄视频| 国产在线一区二区| 欧美日韩一区免费| 欧美精品免费在线观看| 欧美亚洲另类在线一区二区三区 | 欧美一区三区三区高中清蜜桃| 欧美成人在线免费观看| 91精产国品一二三产区别沈先生| 日本一区二区三区四区五区| 麻豆成人综合网| 精品国产成人在线| 久久亚洲国产精品| 欧美日韩在线精品| 三上悠亚 电影| 国产在线一级片| 99国产精品久| 日韩欧美在线影院| 国产精品精品久久久久久| 国产96在线 | 亚洲| 日韩激情综合网| 久热成人在线视频| 日韩欧美中文免费| 国语对白做受69| 影音先锋成人资源网站| 女人又爽又黄免费女仆| 熟妇高潮一区二区三区| 亚洲国产日韩综合久久精品| 国产亚洲精品日韩| 欧美人与性禽动交精品| 中国极品少妇videossexhd| av观看在线免费| 一区二区三区高清| 欧美日本黄视频| 国产肉体ⅹxxx137大胆| 97成人资源站| 成人午夜精品在线| 亚洲成色777777女色窝| 成人动漫在线视频| 少妇献身老头系列| 亚洲爆乳无码一区二区三区| 亚洲国产精品一区二区久久 | 天天操夜夜操很很操| 97成人免费视频| 亚洲色欲色欲www在线观看| 最近中文字幕日韩精品| 亚洲黄色成人久久久| 中文字幕求饶的少妇| 国产精品自拍在线| 精品捆绑美女sm三区 | 国产丝袜视频在线观看| 亚洲精品欧美综合四区| 欧美国产日韩一区二区三区| 天堂8在线天堂资源bt| 妺妺窝人体色www在线下载| www.欧美亚洲| 亚洲性猛交xxxxwww| 中文字幕av久久| 久视频在线观看| 久久老女人爱爱| 在线精品91av| 91精品一区二区三区四区| 日产欧产va高清| 久久久一区二区三区| 在线播放亚洲激情| 污污污污污污www网站免费| 中文字幕激情小说| 18欧美乱大交hd1984| 96精品视频在线| 孩娇小videos精品| 天天综合网天天综合| 在线不卡的av| 免费一区二区三区| 久久国产露脸精品国产| 欧美韩国日本综合| 久久免费成人精品视频| 国产精品无码一本二本三本色| 一区二区三区午夜| 欧美天天综合色影久久精品| 91沈先生在线观看| 黄色av免费播放| 久久久91精品国产一区二区精品|