Friday Dec 03, 2010

re: RDF and OpenSocial

This is the closest thing to a blog post that I've written lately, a post to the OpenSocial specification group on aligning OpenSocial with RDF and Linked Data:

This is a topic of interest to me, so I'll try to elaborate.

First, I want to point out that RDF is not a representation, it's a way to model data and it's multiple ways to represent that data (in XML, JSON, etc.). I think the real question is: how do we enable OpenSocial to hook into the RDF-based web of "Linked Data" that is rapidly growing up around scientific data, government open data and the academic world. I'm not going to go into the benefits of Linked Data in this post, but I will disclose that I work for a company that uses RDF as a common data model to enable loosely coupled integration across our web application products (see also Jazz Integration Architecture [1] and OSLC [2]). We'd like to be able to integrate with OpenSocial services in the same ways.

I'll explain the basics of RDF. RDF is way to model web data and ways to represent that data in XML, JSON, Turtle, etc. The RDF data model is simple, we have resources identified by URIs and property values associated with those resources. Resources can have types, each type is identified by a URI. Property types have URIs too. Once you have defined your data model in terms of RDF types and properties, you can represent resources and their properties using RDF representations. There's RDF/XML for XML, there's RDFa for embedding properties in HTML. There's are JSON representations too, but not a standard for JSON yet.

So, to bring OpenSocial in-line with the world of Linked Data, we would define each class of OpenSocial objects as an RDF type, with a URI. We would define each OpenSocial property as an RDF property, with a URI. In some cases, we'll want to use existing properties, like the Dublin Core title, name, etc., and in some cases we'll want to define entirely new types and properties.

As a starting point, I think we would do the following:

* In OpenSocial v2, we would define all OpenSocial objects and properties as RDF types in the OpenSocial Specs. This means simply assigning a URI to every class and every property we define, using standard properties where appropriate and defining new ones as needed. Object and property names would rename the same and we'd have what is essentially an RDF mapping built into the spec. Existing OpenSocial representation formats would stay the same, but we'd add some new RDF representations.

* We'd introduce an optional new OpenSocial spec that services MAY implement: the OpenSocial RDF Specification. The specification would simply require that a service provide RDF representations of it's resources via content-negotiation. The service could offer RDF/XML or HTML with RDFa, JSON/RDF or all of the above.

That's a starting point and I think we could come up with some other ideas if we thought more about use cases. Anybody else interested in aligning the worlds of OpenSocial and Linked Data?

Link: RDF and OpenSocial

Monday May 24, 2010

OpenSocial State of the Union 2010

Here's summary of last week's OpenSocial State of the Union, including news of two new board members: Cody Simms from Yahoo and Jason Gary from IBM:

Mark Weitzel (on behalf of the OpenSocial Foundation): The event started off with introductions of the Foundation Board members and officers. Cody Simms is Yahoo!’s corporate designate. IBM is a new corporate member and has designated Jason Gary as their representatives. Welcome Cody and Jason. The complete list of your Foundation Officers and Board Members is in the FAQs.

In addition to new corporate members of the OpenSocial Foundation Board, there are two community seats available. Anyone is able to serve on the board. The only requirement to nominate or hold the position is that you must be a member of the OpenSocial Foundation. There are no membership fees to join OpenSocial. All you need to do is fill out a simple on-line membership application.

It’s been an exciting year and a half for OpenSocial! We’ve seen continued adoption of the specification as new containers come on line. Perhaps what is more interesting is that we are starting to see OpenSocial adoption outside of “traditional” social networks. This includes adoption by enterprise vendors such as Jive, Atlassian, and IBM.

Wednesday May 12, 2010

IBM talking OpenSocial Google I/O

opensocial logo

IBM is going to be at Google I/O again this year, talking about OpenSocial and giving demos of new OpenSocial features in IBM products. Randy Hudson of IBM/Rational will be there to show how OpenSocial Gadgets can be used in Jazz-based product dashboards (introduced in Jazz Foundation 3.0 Milestone 5).

And IBM's Mark Weitzel, who happens to be an officer of the OpenSocial Foundation, will participate in panel discussion on Best practices for implementing OpenSocial in the Enterprise.

Best practices for implementing OpenSocial in the Enterprise

Social Web, Enterprise - Mark Weitzel, Matt Tucker, Mark Halvorson, Helen Chen, Chris Schalk

Enterprise deployments of OpenSocial technologies brings an additional set of considerations that may not be apparent in a traditional social network implementation. In this session, several enterprise vendors will demonstrate how they've been working together to address these issues in a collection of "Best Practices". This session will also provide a review of existing challenges for enterprise implementations of OpenSocial.

Session type: 201
Attendee requirements: General understanding of OpenSocial technologies. Some Enterprise experience is also recommended.
Tags: OpenSocial, Enterprise
Hashtag: #socialweb7

Date: Thursday May 20
Time: 1:00pm-2:00pm
Room: 9

Tuesday Jan 05, 2010

The Enterprise OpenSocial white paper

opensocial logo

Here's another thing I've been involved with at IBM: the Enterprise OpenSocial white paper which was published just before Christmas 2009.

The paper is a group effort, written by folks from Alfresco, Atlassian, Cisco, Cubetree, Google, IBM, SAP and SocialText. It explains why OpenSocial is relevant and "ready for both Internet scale web communities and enterprise applications." It also lays out some specific areas for improvement in OpenSocial that will make the technology an even better fit in the enterprise. Here's the opening paragraph to get you started:

Enterprises are collections of people, and thus inherently social. Employees of any organization benefit from social connections, group affiliations and relationships both within their own business and between other businesses. As a result, social networking capabilities have become increasingly popular in business-to-consumer, business-to-business, and internal enterprise collaboration applications. New technologies and standards such as Web 2.0 and OpenSocial [1] are helping software providers better model relationships between people, allowing end-users to benefit from such relationships in day-to-day business processes within their own enterprise, and across business networks.

Read the rest of the Enterprise OpenSocial white paper at OpenSocial.org.

Monday Dec 14, 2009

IBM at last month's Enterprise 2.0 OpenSocial panel

It's been over a month since the Enterprise 2.0 OpenSocial panel and since we were never able to get a group blog post together, I've decided to publish a short summary of what I said about IBM on the panel. I'm paraphrasing myself from memory so this is not exactly what I said but it should be pretty close:

IBM has been successfully innovating in the area of browser-based components, also known as widgets or gadgets, and social APIs for years now. If you haven't seen the IBM Mashup Center you should visit the IBM booth and take a look at the demo. It allows you to create Web 2.0 style mashup applications by dragging-and-dropping widgets into place and wiring them together. You've probably heard of Lotus Connections. Connections is IBM's social software suite and it includes blogs, wikis, forums, social bookmarking and more. Each one of those components features a comprehensive AtomPub-based REST API.

We're working with the OpenSocial community to ensure that the specification meets the needs of our customers and is able to interoperate with our existing iWidget technology (and I think I mentioned the OpenAjax Hub here too). You can see most of the improvements that we're interested in the slides, so I won't go into detail now, but I will mention a couple of things for example: we would like to see better inter-gadget communication, specification modularity (coming in OpenSocial 1.0) and a stable and predictable specification change process.

I work for Rational, the part of IBM that creates tools for software development and delivery, something that is also social and collaborative in nature. We're enthusiastic about OpenSocial and we hope to enable use of OpenSocial Gadgets in Jazz-based product dashboards sometime in 2010. We may also support some of the OpenSocial Social APIs, but we are still learning and experimenting. Jazz products are developed in an open and transparent way so you can track our progress via our wiki and work-items at Jazz.net.

I won't try to paraphrase what the other panelists said, I'll let them do that, and I'll leave out my SocialSite pitch for now as most of my readers have already heard it. I'll put together an update on SocialSite during the next month and I think I'll have some good news to report.

Sunday Nov 15, 2009

Trip report: ApacheCon US 2009

(Last week, I returned after a week of vacation and a week of conferences in the SF bay area. Instead of posting my trip reports to the limited audience that reads my internal IBM blog, I'm going to post them here so that everybody can benefit from them.)

Here's my report from ~ApacheCon US, focusing on the projects I'm involved with: Roller, Shindig and ~SocialSite.

Roller session#

In my session, I covered the new features in 5.0, Roller history and sort of a Roller state of the union. I explained that nobody is working full-time on Roller these days, it's an all volunteer effort with about three people active and if folks want us to keep on making official Apache releases then those very same folks had better step-up and get involved so we can knight some new PMC members. I also did a demo of the new features in Roller 5.0 including ~OpenID and the file upload and management improvements.

  • What's new in Apache Roller 5.0, Dave Johnson
    http://www.us.apachecon.com/c/acus2009/sessions/280
  • Announcement: Roller 5.0 beta 1 available
    http://markmail.org/message/rwk6pj4voxbyuaj3

Shindig session#

After my Roller talk and in the same room, I attended Paul Lindner's talk on Apache Shindig. Paul has worked on ~OpenSocial implementations at Hi5 and ~LinkedIn and he's also a committer on the Apache Shindig project.

  • Empowering the Social Web with Apache Shindig, Paul Linder
    http://www.us.apachecon.com/c/acus2009/sessions/281

I'm familiar with Shindig so this was mostly review for me. I liked Paul's assessment of Shindig quality, saying that they have good processes in place, use code reviews and have good test coverage. Paul acknowledged problems with Shindig's developer friendly-ness and said that the community is working to fix them. I've heard similar complaints from multiple source and seen myself that it's not as easy as it should be to understand the codebase, figure out how to plug-into it and understand which parts are really required for ~OpenSocial and which are just sample code.

Paul also talked about the Open Stack concept, a set of open standards that enable social networking interoperation including ~OpenSocial, ~OAuth, ~OpenID and portable contacts. He said that Shindig is the best way to implement the stack and keep up with the evolving standards. He had a nice quote about "Shindig is to ~OpenSocial as Apache HTTPD is to HTTP"

Social Widgets / Gadgets meetup#

On Thursday night, I attended Social Widgets / Gadgets meetup which brought together members of the Apache Shindig, Apache ~SocialSite and Apache Wookie Communities.

  • Apache Shinding: ~OpenSocial Reference Implementation
    http://incubator.apache.org/shindig
  • Apache ~SocialSite: Headless Social Networking server plus Gadgets
    https://socialsite.dev.java.net/
  • Apache Wookie: W3C Widgets, ~OpenSocial and Wave Gadgets server
    http://incubator.apache.org/wookie

There were about 25 people there including folks from Google, Atlassian, Yahoo, Ning, ~LinkedIn, Hippo (CMS/portals ISV) and, I'm guessing, a bunch of SF bay area startups. The meetup started around 8PM and lasted over two hours.

I presented a lightning talk on Apache ~SocialSite using a couple of slides from the ~JavaOne talk and including a quick status report. Status is this: still waiting on Sun to come through on code grant, Globant is having some success with ~SocialSite in production and work is almost complete in converting the build over to Maven. I also did a quick talk about the Enterprise 2.0 ~OpenSocial panel, which occurred the day before.

  • ~SocialSite Mavenized
    http://code.google.com/p/socialsite-mavenized

Next, Jas Nagra did a very entertaining and informative mini-presentation on Caja, complete with XMen 2 references. Caja is a way to run Javascript code (e.g. gadgets) loaded from different locations, each in its own secure sandbox where it can't interfere with others and can't do evil -- but without relying on iframes. Shindig uses Caja, but it's optional and off by default.

  • Google Caja - A source-to-source translator for securing Javascript-based web content
    http://code.google.com/p/google-caja/

After that Paul Linder did a quick talk on the Open Stack idea and revised his Shindig quote to "Shindig is to the Open Stack as Apache HTTPD is to HTTP." Then we broke up and folks stuck around to talk about APIs, projects, possibilities and everything else for quite some time.

That's all I've got for now. I hope to document some of my experiences on the "Enterprise ~OpenSocial" panel at Enterprise 2.0 later, possibly in a blog post on the ~OpenSocial blog.

Monday Nov 09, 2009

Trip report: Social Web Camp, Santa Clara, CA

(I just returned to work after vacation and a week of conferences in the SF bay area. Instead of posting my trip reports to the limited audience that reads my internal IBM blog, I'm going to post them here so that everybody can benefit from them.)

On Monday Nov. 2, I attended Social Web Camp at Sun's Santa Clara campus. There were about 40 people in attendance. The event was organized by Sun's Henry Story, an expert in semantic web technologies and inventor of the FOAF+SSL approach to implementing Social Networking features (relationship based privacy). Unfortunately, Henry was not able to attend the conference because he was detained by US immigration.

  • Social Web Camp, Santa Clara, CA
    http://barcamp.org/SocialWebCamp-Santa-Clara
  • Sun's Santa Clara Campus - AKA the Agnews Insane Asylum
    http://www.nps.gov/nr/travel/santaclara/agn.htm
  • FOAF+SSL distributed/open social networking
    http://esw.w3.org/topic/foaf+ssl
  • Henry detained for 6 days, case dismissed in 30 seconds
    http://twitter.com/bblfish/status/5509198135

During the camp, I lead a session on ~OpenSocial using my "What's up with ~OpenSocial" slides from ~BarCampRDU. Surprisingly, very few people were familiar with ~OpenSocial, so this was an introductory level discussion.

  • What's up with ~OpenSocial preso from ~BarCampRDU
    http://docs.google.com/present/edit?id=0AWuMBlP1tnN6ZGcyY2ZuendfOThmcXMydjdmcQ&hl=en

I participated in a session on enterprise social networking and shared a little about we do with micro-blogging inside IBM, mentioning ~BlueTwit and the new features in Lotus Connections. A couple of folks from Boeing were present and described the home-grown social networking and micro-blogging system.

  • ~BlueTwit mentioned in Business Week
    http://www.businessweek.com/magazine/content/08_22/b4086056643442.htm

John Panzer of Google pitched his new Salmon protocol, a distributed commenting system that allows comments made on items in downstream systems (e.g. aggregators, social networks, ~FriendFeed, etc.) to find their way back upstream to the source item. The protocol is based, in part, on ~AtomPub. Comments are signed and posted back upstream. Seems like this could be useful in both Lotus Connections river of news feature, Jazz-based products and Roller; so I'll going to track this one closely. It might be fun to try to implement Salmon for Roller.

  • Salmon: comments and annotations to swim upstream, spawn more commentary
    http://www.salmon-protocol.org/

I missed a little of the conference because I had lunch with some of my former co-worker from Sun and I left a little early to return my vacation rental car and make my way to Oakland for ~ApacheCon US 2009. More about that later...

Tuesday Aug 11, 2009

Latest Links: August 11, 2009

ApacheConUS 2009 registration open, sign up now!

Apache 10th anniversary logo

The early-bird special ends on August 14, so you'd better get moving.

Sign up for ApacheCon US by 14 August and save up to $500!

This year's ApacheCon US promises to deliver our most extensive program to date, and largest anticipated gathering of the global Apache community to celebrate the ASF's milestone 10th Anniversary. The San Francisco Bay Area is where the very first ASF official user conference was held, and we hope that you will join us in celebrating the ASF's success!

Apache members, code contributors, users, developers, system administrators, business managers, service providers, and vendors will convene 2-6 November in Oakland, California, for a week of training, presentations, sharing and hacking. ApacheCon US 2009 features new content tracks, MeetUps, and GetTogethers, as well as a number of events open to the public free of charge, such as the Hackathon and 2-day BarCampApache, in appreciation of their support over the past decade.

Be sure to register by 14 August to save up to $500! To sign up, visit http://www.us.apachecon.com

I'll be there and speaking on the topic of What's New in Roller 5.0. I also plan to attend the Social and Widgets Meetup with folks from Shindig, SocialSite and Wookie. I hope to see you there.

Tuesday Jun 09, 2009

Latest Links: OpenSocial and OSLC

Thursday Apr 23, 2009

SocialSite@Apache

I took a break from blogging during my first couple of weeks at IBM. My blog broke and it took me a while to find the time and motivation to fix it, but now it's time to return. I think. I have been doing some internal blogging at IBM, but so far it's been mostly boring stuff: status reports and the like.

What I want to talk about today is Project SocialSite. Since my last post, where I mentioned that Sun is willing to contribute SocialSite to Apache, I did some work to move things along. I wrote an Apache Incubator proposal, started a discussion and this week calling for a vote on the proposal. Here are the relevant links:

Proposal: Apache SocialSite

Discussion and vote thread on the Incubator General mailing list

Subscripton info for the Incubator mailing lists

If you want to support the project, and especially if you're on the Incubator's Project Management Committee, now's the time to do so.

Friday Mar 27, 2009

The future of Project SocialSite: Apache?

Since January, the future of <a href="https://socialsite.dev.java.net">Project SocialSite</a> has been in the hands of the ~SocialSite community. During that time, I continued working on the project almost because I think it's got great potential and I would really like to see it live on in some form. That's also why I continued to talk to Sun about the project.

Today, I'm very happy to announce that Sun Microsystems is willing to contribute Project ~SocialSite to the Apache Software Foundation. It's not clear whether ~SocialSite should be contributed into Shindig or as a new incubator project, but either way I think this is the best thing for the project and will give it the best possible chances for building a thriving community. I've started some discussions about this on Apache-private mailing lists and I'll let you know what happens next.

This post brings to an end my series of posts about Shindig for blogs and wikis. Here are links to the earlier posts:

By the way, I delivered my Shindig talk just a couple of minutes ago. It was well-attended and I think it went pretty well. You can find the slides online at the ApacheCon EU 2009 site here: <a href="http://www.eu.apachecon.com/c/aceu2009/sessions/184">Shindig for Blogs and Wikis</a>. Now back to your regularly scheduled programming...

Thursday Mar 26, 2009

OAuth everywhere (continued)

In my earlier OAuth everywhere post I explained at a high level "how I got a Roller Gadget working, one that uses OAuth to call Roller and enables Roller to use OAuth to call back to the social network." I ended with some unanswered questions. In those post I'll answer those questions with source code, screenshots and more. [Read More]

Wednesday Mar 25, 2009

Socialsite on rollerweblogger.org

The value of Project SocialSite is that it allows you to add social networking features, including the ability to run OpenSocial gadgets, to existing web sites and have those sites all using the same "social graph" of data about people and relationships. To demonstrate this, I've deployed ~SocialSite to my site, http://rollerweblogger.org, and finally implemented those things I described in my August 2008 Social Roller post.

My site includes a blog and a wiki, Roller and JSPWiki, so it's a pretty good candidate for demonstrating how ~SocialSite. It's not perfect because it's got only a very small number of users, less than a dozen and because it's private; you have to login to see the social features. It'll have to do. In this post, I'll explain the steps you have to take to add ~SocialSite to a multi-application web site and I'll illustrate the steps with examples and screenshots from my work on this site.

[Read More]

Monday Mar 23, 2009

Sidebar: What is OAuth and why should you care?

OAuth logo

I'm going to be following up my OAuth everywhere! post, with several more OAuth related posts this week. So, just in case you are wondering "why is Dave going off on this cockamamie OAuth tangent?", I'll take some time now to explain a little about OAuth to help you understand.

OAuth is a emerging protocol that one web site can use to access your data on another website without asking you to reveal your username and password. For example, when the sinister BuddyNet9000(TM) Social Network site wants to access your GMail account so it can spam your "friends" on your behalf, you can use OAuth to give it access without telling it your username and password. Why risk your GMail security when all you want to do is spam some people? There are less snarky examples, but that one makes the point well, I think.

There's a good end-user oriented introduction on OAuth.net titled Beginner's Guide to OAuth: Protocol Workflow. OAuth is not that widely deployed yet, and is not perfect, but it is emerging and going the IETF standards route.

I'm interested in OAuth because it's part of the OpenSocial spec, used to authorize access to the OpenSocial REST API and to enable OpenSocial Gadgets to call out to OAuth protected resources. Also, because it's used to protect AtomPub-based services, including the Google Data APIs. I needed to learn about it for my Roller and SocialSite work and if you're going to be doing much OpenSocial work, you'll need to learn about it too.

Sunday Mar 22, 2009

ApacheCon EU 2009!

<a href="http://www.flickr.com/photos/snoopdave/481130847/" title="View of art center (foreground) and Movenpick Hotel by snoopdave, on Flickr"><img src="http://farm1.static.flickr.com/202/481130847_87a45d2910_m.jpg" width="240" height="180" vpsace="10" hspace="10" alt="View of art center (foreground) and Movenpick Hotel" align="right" /></a>

I'm off to ApacheCon EU 2009 tomorrow in Amsterdam to speak on the topic of Shindig for Blogs and Wikis. I'm really looking forward to catching up with my Apache friends and colleagues. That's the conference venue in the photo on the right, the Mövenpick hotel (in the background behind the music hall).

I'm staying a couple of extra days, so I hope to have time for bicycling around the city as I've done in the past (see also: Flickr photo sets for <a href="http://www.flickr.com/photos/snoopdave/sets/72157604420939847/">2007</a> and <a href="http://www.flickr.com/photos/snoopdave/sets/72157604616476673">2008</a>). Unfortunately, the weather forecast stinks. There's a 60% chance of rain every day that I'm in town. Oh well; guess I'll have plenty of time for blogging.

Speaking of blogging.This week, I'll be posting some blog entries to highlight the work that I've done in preparation for my talk. Here's what I plan to cover:

  • Monday: OAuth for AtomPub in Roller
  • Tuesday: OAuth for ROME Propono
  • Wednesday: SocialSite on rollerweblogger.org
  • Thursday: OAuth everywhere (continued)
  • Friday: the future of Project SocialSite

If you plan to attend my talk, at 4:30PM on Friday March 27, then you should follow along. Pay special attention to the ~SocialSite on rollerweblogger.org and OAuth everywhere (continued) posts, which will include detailed background info. I'm looking forward to seeing you there.

Friday Mar 06, 2009

OAuth everywhere!

For my ApacheCon EU talk, which is now just a couple of weeks away, I'm going to talk about Shindig for Blogs and Wikis. I promised to show social features and ~OpenSocial Gadgets running inside Apache Roller and Apache JSPWiki (incubating). This post explains, at a very high level, how I got a Roller Gadget working, one that uses OAuth to call Roller and enables Roller to use OAuth to call back to the social network. It assumes you have a basic understanding of OpenSocial and OAuth.[Read More]

Tuesday Feb 17, 2009

G Friend Connect

Friend Connect Logo

I started a new blog on this site to explore what's possible with Google Friend Connect (GFC). It's called the G Friend Connect blog. I've added the GFC Members Gadget and I replaced Roller's built-in comment macro with the GFC Wall Gadget. In theory, if you have a Google, Yahoo or Open ID account, you should be able to login via a gadget, make friends with other site members and leave comments. If you have a minute or two, try it out. Join the site and leave a comment. That will give me (and you) a better idea of how things work.

So far I'm not particularly impressed with the Wall Gadget as a comments replacement. Here is an example. It doesn't support rich-text editing, no HTML is allowed, the comment area is too small and there's no preview button. Maybe that's why it's called a Wall Gadget rather than a Comments Gadget. Or maybe I'm just not doing it right.

Friday Feb 06, 2009

Preparing for my Shindig talk next month

ApacheCon speaker badge

The day before the layoff axe fell at Sun, I blogged about my upcoming Shindig for Blogs and Wikis talk at ApacheCon EU in March. Since then, I've been working almost non-stop on finding a new gig and have had little time to work on my presentation. That's not good, because I have fairly ambitious plans for this talk. I'll explain.

I want to be able to show how to add social features including OpenSocial support to a blog server and a wiki server by using plain old Shindig and then Project SocialSite. I'm targeting Roller and JSPWiki because they're the blog and wiki source code bases that I know best right now and they're both Apache efforts, but the same techniques should work with other systems like Wordpress or Drupal. If I have time I might be able to demo those too (but I wouldn't count on it).

I'm not sure how far I can go with plain old Shindig because, like most blog and wiki servers, neither Roller nor JSPWiki has detailed profile data, social relationships or activities. I should be able to get Google Gadgets working via Shindig, but OpenSocial Gadgets will take a lot more thought and effort.

I'm much more confident in the Project SocialSite approach. SocialSite provides for storage of detailed profile information, groups, activities and app data as well as the necessary UI. I'm confident enough that I'm going to deploy it on this site. So, stay tuned. I hope to have something to show by the end of next week.

Oh, and by the way. Today is the last day to register for ApacheCon EU with the early-bird discount. So sign-up already!

ApacheCon Europe 2009 (link)

23-27 March 2009 | Mövenpick Hotel, Amsterdam
Pricing (register before Feb 6 for discount)

Tuesday Jan 20, 2009

Google's Rajdeep Dua on Project SocialSite

I'm always happy to see Google talking about Project SocialSite in their OpenSocial presentations and pitches. We need all the help we can get with getting the word out.

Now, Rajdeep Dua of Google Developer Relations has put together a 25 page presentation on Project SocialSite Architecture with data model diagrams, UML and lots of detail. Good stuff. I posted some comments and corrections to the Shindig-dev mailing list

Main | Next page »